All API v1 endpoints are relative to:
https://app.pictastic.com/api/v1
Example: https://app.pictastic.com/api/v1/credits
Create an API key in the API Dashboard. Pass it on every request either as a Bearer token or an x-api-key header:
Authorization: Bearer pt_live_... # or x-api-key: pt_live_...
Error responses: 401 invalid key · 403 API access not active · 402 not enough credits.
Every successful POST to an image endpoint costs credits — virtual staging and furniture removal 1 credit, upscaling 3 credits. If processing fails, the credit is refunded automatically. Check your balance any time:
{ "totalCredits": 100, "usedCredits": 12, "remainingCredits": 88 }Image inputs must live on Pictastic storage. Request presigned upload URLs (free, no credit charge), PUT your image bytes to presignedUrl, then use the returned publicUrl as imageUrl.
curl -H "Authorization: Bearer pt_live_..." \
"https://app.pictastic.com/api/v1/presigned-urls?count=1"
# → { "bucket": "api-uploads", "uploads": [ { "path": "...", "token": "...",
# "presignedUrl": "https://...", "publicUrl": "https://..." } ] }
curl -X PUT -H "Content-Type: image/jpeg" \
--data-binary @room.jpg "<presignedUrl>"| Field | Type | Description |
|---|---|---|
| imageUrl | string, required | publicUrl from /api/v1/presigned-urls |
| scaleFactor | number, optional | 2 (default) or 4 |
curl -X POST https://app.pictastic.com/api/v1/upscale \
-H "Authorization: Bearer pt_live_..." \
-H "Content-Type: application/json" \
-d '{"imageUrl": "<publicUrl>", "scaleFactor": 2}'
# → { "jobId": "...", "status": "completed",
# "outputImageUrl": "https://...", "downloadUrl": "https://...?download",
# "creditsCharged": 1 }| Field | Type | Description |
|---|---|---|
| imageUrl | string, required | publicUrl from /api/v1/presigned-urls |
| roomType | string | e.g. Living Room, Bedroom |
| designStyle | string | e.g. Modern, Scandinavian |
| designType | string, optional | Interior (default) or Exterior |
| prompt | string, optional | Extra staging instructions |
| aiIntervention | string, optional | Very Low · Low · Mid (default) · Extreme |
At least one of roomType, designStyle or prompt is required.
curl -X POST https://app.pictastic.com/api/v1/virtual-staging \
-H "Authorization: Bearer pt_live_..." \
-H "Content-Type: application/json" \
-d '{"imageUrl": "<publicUrl>", "roomType": "Living Room", "designStyle": "Modern"}'| Field | Type | Description |
|---|---|---|
| imageUrl | string, required | publicUrl from /api/v1/presigned-urls |
| prompt | string, optional | Custom removal instructions (default removes all furniture) |
curl -X POST https://app.pictastic.com/api/v1/furniture-removal \
-H "Authorization: Bearer pt_live_..." \
-H "Content-Type: application/json" \
-d '{"imageUrl": "<publicUrl>"}'Each POST also records a job. List past jobs per endpoint or fetch a single job:
{ "jobs": [ { "id": "...", "job_type": "upscale", "status": "completed",
"output_image_url": "https://...", "credit_cost": 1, ... } ],
"total": 4, "limit": 20, "offset": 0 }