Integrations
REST API
Everything you can do in the SteadyShot UI is also available over HTTPS. All endpoints live under
https://steadyshot.ai/api/* and authenticate with a Bearer API key.Authentication
Get a key at /api-keys. Keys look like ss_live_xxxxxxxxxxxxxxxx. Pass them on every request:
bash
curl https://steadyshot.ai/api/characters \
-H "Authorization: Bearer ss_live_xxxxxxxxxxxxxxxx"Keys are user-scoped — every action attributes to the user who created the key and bills against their credits. Active-key caps are plan-tiered: Free = 3, Creator = 25.
Headers
Authorization: Bearer ss_live_xxx— required on all/api/*routes except/api/library.Content-Type: application/jsonfor JSON bodies.multipart/form-datafor file uploads (character creation with image, brand asset uploads).
Status codes
200/201— success.400— invalid input or state conflict.401— missing or invalid key.402— out of credits. Response body includes remaining balance.404— resource not found OR exists but doesn’t belong to you (we don’t leak existence).409— lock/state mismatch (e.g. trying to generate against a draft character).5xx— server error. Safe to retry with backoff.
Endpoint groups
- Characters —
/api/characters,/api/characters/{id},/api/characters/{id}/lock,/api/characters/{id}/unlock,/api/characters/{id}/references,/api/characters/{id}/auto-fill-descriptor,/api/characters/{id}/publish - Brand kits (beta) —
/api/brand-kits,/api/brand-kits/{id},/api/brand-kits/{id}/assets· request access - Generation —
/api/generate(single character + optional brand),/api/generate-multi(2-4 characters),/api/storybook,/api/scenes/{image_id}/vary - Library + Marketplace —
/api/library(no auth required for browse),/api/library/import,/api/marketplace,/api/marketplace/listings,/api/marketplace/listings/{id}/buy - Account —
/api/credits,/api/api-keys,/api/stripe/checkout,/api/stripe/topup,/api/stripe/portal
Full OpenAPI spec
Machine-readable spec at /openapi.json. Drop it into Postman, Insomnia, or a code generator. The spec is also what ChatGPT custom GPTs consume — see ChatGPT integration.
Rate limiting
We don’t enforce per-key rate limits today — credits are the natural backpressure. If you start seeing 5xx during bursts (e.g. a 20-page storybook fanning out in parallel), space the calls or use the storybook endpoint which handles batching internally.
Webhooks
SteadyShot doesn’t emit webhooks today. If you need notifications for “your generation finished” in long-running batch flows, file a request via the feedback widget.