Hello PhotoRoom API Community,
I am integrating the PhotoRoom Image Editing API into an image-processing workflow for M87 Clothing.
The Sandbox API works correctly, but the production API key returns HTTP 403.
Workspace:
Lucadonadio1’s Space
Dashboard status:
- Free trial: 10 of 10 production images remaining
- Production usage: 0
- Production API key is present in the API dashboard
- No paid API subscription is currently active
Observed production responses:
1. Account endpoint
GET https://image-api.photoroom.com/v2/account
Response:
HTTP 403
{"error":{"message":"Unauthorized"}}
2. Image Editing endpoint
POST https://image-api.photoroom.com/v2/edit
Response:
HTTP 403
{"error":{"message":"You do not have permission to perform this action."}}
The equivalent Image Editing request works successfully in Sandbox mode and returns a watermarked PNG.
I copied the production key again directly from the PhotoRoom API dashboard and verified locally that the key stored in the environment matches the Live key. The API key is passed using the x-api-key header.
No production output image is generated because the request is rejected before image processing begins.
Questions:
- Does the 10-image free trial support direct production API calls?
- Is an additional onboarding or activation step required for Live API access?
- Should GET /v2/account be accessible during the free trial?
- Why does Sandbox work while both production endpoints return 403?
- Could this be caused by a workspace permission or API entitlement issue?
Standalone code to reproduce (GET /v2/account):
import json
import os
import urllib.error
import urllib.request
api_key = os.environ.get("PHOTOROOM_API_KEY")
if not api_key:
raise RuntimeError("PHOTOROOM_API_KEY is not configured")
request = urllib.request.Request(
"https://image-api.photoroom.com/v2/account",
method="GET",
headers={
"x-api-key": api_key,
"Accept": "application/json",
},
)
try:
with urllib.request.urlopen(request, timeout=30) as response:
body = response.read().decode("utf-8", errors="replace")
print("HTTP status:", response.status)
print(json.dumps(json.loads(body), indent=2))
except urllib.error.HTTPError as error:
body = error.read().decode("utf-8", errors="replace")
print("HTTP status:", error.code)
print("Response:", body)
No production output image is available because the API returns HTTP 403 before processing the input.
No API keys or secret values are included in this post.
Thank you,
Luca Donadio
M87 Clothing