/photosAPI keyCreate Photo
A photo from file (multipart) or image_url (JSON). Answers 200 with the result
when the photo settles within the wait — completed (one credit on a live key),
needs_retake or failed (free) — else 202 with Location to poll. An expert review
answers 202 in_review until the expert decides.
Request body application/json
backgroundstring | null#RRGGBB; the document's own colour when absent.Limits:
pattern: ^#[0-9A-Fa-f]{6}$callback_urlstring | nullA public https URL told when this photo settles.
Limits:
maxLength: 512expert_reviewbooleanLive keys: have an expert check the photo (one review credit).
Default:
falseimage_urlstring | nullrequiredJSON body only: a public http(s) URL of the photo, fetched by us (≤ 25 MB).
Limits:
maxLength: 2048outputsarray<string>The files wanted: the digital photo and any print sheets.
One of:
digital4x6in10x15cma4Limits:
minItems: 1maxItems: 4retouchbooleanThe automatic light retouch, when it is offered.
Default:
falsespec_idstringrequiredA document from
GET /specs.Limits:
minLength: 4maxLength: 64
Example
{
"background": "string",
"callback_url": "string",
"expert_review": false,
"image_url": "string",
"outputs": [
"digital"
],
"retouch": false,
"spec_id": "string"
}Request body multipart/form-data
backgroundstring | null#RRGGBB; the document's own colour when absent.Limits:
pattern: ^#[0-9A-Fa-f]{6}$callback_urlstring | nullA public https URL told when this photo settles.
Limits:
maxLength: 512expert_reviewbooleanLive keys: have an expert check the photo (one review credit).
Default:
falsefilestring<binary>requiredThe photo: JPEG, PNG, HEIC or WebP, at most 25 MB.
outputsstringThe files wanted, as the JSON text of an array:
["digital","4x6in"].Default:
["digital"]retouchbooleanThe automatic light retouch, when it is offered.
Default:
falsespec_idstringrequiredA document from
GET /specs.Limits:
minLength: 4maxLength: 64
Responses
- 200Successful Response
- 202Still processing after `api.sync_wait_s` (15 s): follow `Location`.
Example
{ "checks": [ { "code": "string", "hint": "string", "result": "string", "value": 0 } ], "created_at": "2026-01-01T12:00:00Z", "credits_charged": 0, "crop": { "rotation_deg": 0, "scale": 0, "x0": 0, "x1": 0, "y0": 0, "y1": 0 }, "expires_at": "2026-01-01T12:00:00Z", "id": "string", "outputs": { "digital": { "bytes": 0, "height": 0, "url": "string", "width": 0 }, "sheets": { "key": { "jpeg": "string", "pdf": "string" } } }, "review": { "reason": "string", "status": "string" }, "spec": { "id": "string", "version": 0 }, "status": "processing" }- 400Invalid request
- 401Authentication required
- 402Quota used up
- 403Not allowed
- 404Not found
- 413Upload too large
- 422Request is not valid
- 429Rate limited
- 503Maintenance
Example
{ "code": "string", "hint": "string", "message": "string" }