Developers
BuzzSmile API
The same functions the screens call: offers, workflows, cost, generation, tracking. One contract, one door.
Routes
| Verb | Path | Returns | Headers |
|---|---|---|---|
| GET | /api/studio/offersAmounts are in hundredths in amountCents. | plans, packs, add-ons, boosts | storeId |
| GET | /api/studio/workflowsWhat the stack EXPOSES, not what it declares. | workflows, templates, transitions | storeId |
| POST | /api/studio/purchase/preparePrepares only: nothing is credited here. | purchase intent, tokens to credit | storeId · idempotency key |
| POST | /api/studio/costThe announced cost is the one that will be reserved. | estimate before generation | storeId |
| POST | /api/studio/genererReplayed, the same key does not charge twice. | job submission, token reservation | storeId · idempotency key |
| GET | /api/studio/jobs/:idThe output URL is signed and expires. | progress, signed outputs | storeId |
A complete call
curl -X POST "$BUZZSMILE_URL/api/studio/cost" \
-H "authorization: Bearer $BUZZSMILE_API_KEY" \
-H "content-type: application/json" \
-d '{"capability":"image.generate","tier":"standard"}'The `authorization: Bearer …` header replaces the session. The storeId comes from the key, never from a header.SDK
SDKs add no rules: they call the same routes.
Response codes
| Code | When | What it means |
|---|---|---|
| 400 | A sent field is not read by the route | The missing or off-schema field is named in the response. |
| 401 | Key missing or revoked | A key is revoked; it is not disabled client-side. |
| 402 | Insufficient token balance | The reservation failed: no job was submitted. |
| 404 | The path does not exist | A missing route answers 404, not 200 with an empty body. |
| 405 | The path exists, the verb does not | PATCH lives on /:id, never on the collection. |
| 409 | Idempotency key already seen | The response returns the original job, with no new charge. |
| 429 | Key quota exceeded | The quota is per key, not per user. |