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/json for JSON bodies.
  • multipart/form-data for 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.