
Product photography API
Product photos from your own stack
A REST API, signed webhooks and an MCP server put the whole Shootika studio inside your software. Add products, start shoots, hear the moment a photo is ready, and approve the keepers.
REST API
One API for the whole shoot
Plain JSON over HTTPS, one bearer key per integration, and errors with a stable code your software can read.
Products
/productsCreate, list, change and delete the products you shoot.
Images
/products/{id}/imagesAdd a product photo by upload or by URL, or remove one.
Scenes
/scenesPick a model and a style from the library and request the scene to shoot in.
Frames
/framesStart a shoot and follow it from queued to ready. A failed frame is refunded.
Approval
/frames/{id}/approvalApprove the frames you keep, or take an approval down again.
- Create keys in the web app under Settings, API Keys.
- Each key may make 120 requests a minute; above that the API answers 429 with Retry-After.
- Unapproved frames expire; approved ones stay.
Example
Start a shoot in one request
The answer is 202 with the frame queued. One frame comes off your allowance, and it is refunded if the shoot fails.
curl -X POST https://api.shootika.com/v1/frames \
-H "Authorization: Bearer $SHOOTIKA_API_KEY" \
-H "Idempotency-Key: sage-crewneck-shoot-1" \
-H "Content-Type: application/json" \
-d '{
"product_id": "8b0e5c1a-2f4d-4c1e-9a7b-3d6f0e2a9c41",
"source_image_id": "c2d7e9f0-6a1b-4e3c-8d5f-7b9a0c1e2f34",
"scene_id": "5e4a3b2c-1d0f-4a9b-8c7d-6e5f4a3b2c1d"
}'
One request in. A finished photo out.
The same models, scenes and quality as the app, on a model or in a lifestyle scene.
Webhooks
Know the moment a photo is ready
Stop polling. Add an endpoint in the web app and Shootika posts each event to it, signed so you can trust it.
- Every delivery carries a Shootika-Signature header: an HMAC-SHA256 of the timestamp and the raw body.
- Answer with any 2xx within 10 seconds. Anything else is retried up to 8 times over about 24 hours.
- frame.ready
- A frame finished and its image is ready.
- frame.failed
- A frame could not be made. The error code comes with it.
- frame.approved
- A frame was approved.
- frame.unapproved
- An approval was taken down.
- webhook.test
- Sent when you ask for a test event, to check your endpoint.
Idempotency and retries
Retry without paying twice
Networks fail. A retried request should never cost you a second frame.
Idempotency-Key on every POST
Send the same key with the same body and you get the first answer back, for 24 hours, instead of a second shoot.
Conflicts are explicit
Reuse a key for a different request and the API answers 409 idempotency_conflict rather than guessing.
Failures are refunded
A frame that fails gives its frame back to your allowance, so a retry starts from even.
MCP server
Or let an AI assistant drive
Point any assistant that takes a remote MCP server at Shootika and it can find products, start shoots and publish frames for you. It works for Shopify stores and web app stores alike.
https://mcp.shootika.com- Connect with one approval on a Shootika page. No key to copy.
- You choose what it may do: read, add products, shoot, publish.
- Disconnect it any time and it stops at once.
Plugin
Claude Code and Codex plugin
The Shootika plugin gives Claude Code and Codex ready-made skills for shooting products, reviewing frames and casting models, on top of the MCP server.
/plugin install shootika --marketplace shootika-ai/plugincodex plugin marketplace add shootika-ai/plugin
codex plugin add shootika@shootika- shoot-products
- review-frames
- cast-models
- connect
Make your first call today
Start free with 20 frames, create a key in the web app, and shoot your first product from code.