Generation is an async job: submit to get a job_id, then poll or use a webhook to fetch the result. Base URL: https://api.platform.wayshot.ai
Developers write code with AI now. Copy this prompt, paste it into Cursor / Claude / Copilot, and it generates the full integration.
Integrate the WayShot digi image API.
Base URL https://api.platform.wayshot.ai
Auth header "Authorization: Bearer $WAYSHOT_API_KEY".
Create job: POST /v1/jobs {"capability":"digi","image":"","params":{"resolution":"1K"}}.
Poll GET /v1/jobs/{job_id} with backoff 2s,5s,10s until succeeded | failed | rejected.
On succeeded read output.url (JPEG). Only succeeded is billed.
Errors: 401 invalid_api_key, 402 insufficient_balance, 422 image_unavailable / content_rejected, 429 rate_limited, 503 model_unavailable.
Create one in Console → API Keys. The secret is shown once (format wsk_live_…). Revoking takes effect immediately.
export WAYSHOT_API_KEY="wsk_live_xxx"Send Authorization: Bearer <WAYSHOT_API_KEY> with every request.
You can pass a public image URL directly, or use the upload channel to get an upload:// reference (jpeg/png/webp, ≤10MB).
curl -X POST https://api.platform.wayshot.ai/v1/uploads \ -H "Authorization: Bearer $WAYSHOT_API_KEY" # → { "upload_id":"...", "put_url":"...", "image_ref":"upload://..." } # then PUT your file to put_url within 15 minutes
curl -X POST https://api.platform.wayshot.ai/v1/jobs \ -H "Authorization: Bearer $WAYSHOT_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -d '{ "capability": "digi", "image": "https://your.cdn/portrait.jpg", "params": { "resolution": "1K" }, "webhook_url": "https://your.app/hook" }' # → { "job_id":"job_8f2a91", "status":"queued" }
curl https://api.platform.wayshot.ai/v1/jobs/job_8f2a91 \ -H "Authorization: Bearer $WAYSHOT_API_KEY" # → { "status":"succeeded", # "output":{ "url":"https://out.../job_8f2a91.jpg" }, # "billed":true }
output.url is signed for 1 hour, outputs kept 30 days; input.url expires after 24 hours.
If you pass webhook_url, we POST an image.completed event when the job finishes. Verify with the Svix standard signature (svix-id / svix-timestamp / svix-signature); failures retry with exponential backoff; dedupe on svix-id.
| Field | Required | Notes |
|---|---|---|
| capability | Yes | Which capability to run — see below |
| image | Yes | Public URL or upload:// reference |
| params | Depends | Capability-specific params (see Capabilities) |
| webhook_url | No | Completion callback; omit to poll |
| Idempotency-Key | No | Header; reuse the same key to dedupe |
Every capability shares the same POST /v1/jobs endpoint. To run a different one you only change the capability value and its capability-specific params — everything else (auth, fetch, webhook, errors, billing) is identical. New capabilities are documented here, one block each.
All capabilities share resolution 1K/2K and $0.10 / $0.15 per successful output. Non-digi identifiers are illustrative.
capability: "digi"LiveStylesDigicam portrait editing. params: resolution = 1K (default) | 2K. input: a photo. output: JPEG. pricing: 1K $0.10 / 2K $0.15.
capability: "digix"LiveStylesresolution 1K/2K · $0.10 / $0.15capability: "redlight"LiveStylesresolution 1K/2K · $0.10 / $0.15capability: "golden_hour"Coming soonStylescapability: "watermark_removal"LiveEditresolution 1K/2K · $0.10 / $0.15capability: "photo_restoration"LiveEditresolution 1K/2K · $0.10 / $0.15capability: "upscale"Coming soonEdit| status | Meaning | Billed |
|---|---|---|
| queued | Queued | No |
| processing | Generating | No |
| succeeded | Done, returns output | Yes |
| failed | Generation failed | No |
| rejected | Rejected by moderation | No |
| HTTP | code | Retryable | Notes |
|---|---|---|---|
| 401 | invalid_api_key | No | Missing / revoked key |
| 402 | insufficient_balance | No | Balance depleted |
| 422 | image_unavailable | Yes | Image URL unreachable |
| 422 | content_rejected | No | Policy violation |
| 429 | rate_limited | Yes | Respect Retry-After |
| 503 | model_unavailable | Yes | Service temporarily down |
2 concurrent jobs per account (shared across keys); up to 25 in-flight; 10 write req/s and 30 read req/s per key.
Billed on success: the cost is held on job creation, charged on succeeded, and fully released on failed / rejected. 1K $0.10 / 2K $0.15. Prepaid via Stripe, no subscription.