{"openapi":"3.1.0","info":{"title":"Meyer Launch customer API","version":"1.0.0","description":"Scoped workspace API. Backend use only. Read the guide for credit approval, NDJSON streaming, retry rules and signed generation callbacks. Examples use placeholder IDs and selected response fields; live quotes determine credit costs. JSON Schema cannot express every ownership/claims check or custom validation refinement."},"servers":[{"url":"https://meyerlaunch.com"}],"externalDocs":{"description":"Customer API guide","url":"https://meyerlaunch.com/help/api"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Workspace owner-issued API key. Store server-side; never expose in client code or URLs."}}},"paths":{"/api/v1/projects":{"get":{"operationId":"projects","summary":"Read projects","description":"List projects in the key’s workspace. Use the project ID for plans, tasks and events; use its slug for agent and generation requests.\n\nRequired permission: projects:read. Credits: No generation credits.\n\nReturns up to 100 projects, newest first. There is no pagination cursor.\n\nFields: id, name, slug, kind and created_at. Project kinds are app, saas and business.","security":[{"bearerAuth":[]}],"x-required-permission":"projects:read","parameters":[],"responses":{"200":{"description":"Read response","content":{"application/json":{"schema":{"type":"object"},"example":{"data":[{"id":"10000000-0000-4000-8000-000000000001","name":"Example product","slug":"your-project","kind":"saas","created_at":"2026-11-04T12:00:00Z"}],"limit":100}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/campaigns":{"get":{"operationId":"campaigns","summary":"Read paid campaigns","description":"Read saved paid-campaign configuration, including status, platform, objective, currency, daily budget in cents, start date and end date.\n\nRequired permission: campaigns:read. Credits: No generation credits.\n\nReturns up to 100 campaigns, newest first. There is no pagination cursor.\n\nThis endpoint does not return a complete performance report or change a campaign’s budget or delivery. An empty data array means no records returned, not verified zero ad activity.","security":[{"bearerAuth":[]}],"x-required-permission":"campaigns:read","parameters":[],"responses":{"200":{"description":"Read response","content":{"application/json":{"schema":{"type":"object"},"example":{"data":[],"limit":100}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/launch-plans":{"post":{"operationId":"plans","summary":"Create a campaign-plan draft","description":"Create a draft plan for an existing project from a name, goal and optional notes. This creates the plan record; it does not generate every asset or launch a campaign.\n\nRequired permission: plans:write. Credits: No AI generation in this call.\n\nname: 1–120 characters. notes: up to 4,000 characters; defaults to an empty string.\n\ngoal: traffic, leads, app_growth or awareness. leads requires a business project. For SaaS, start with traffic or awareness; app_growth is intended for mobile apps.\n\nUse a new UUID requestKey for a new plan. On a retry, keep the same UUID and identical input.","security":[{"bearerAuth":[]}],"x-required-permission":"plans:write","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"goal":{"type":"string","enum":["traffic","leads","app_growth","awareness"]},"notes":{"default":"","type":"string","maxLength":4000},"requestKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["name","goal","requestKey","projectId"]},"example":{"projectId":"10000000-0000-4000-8000-000000000001","name":"Product introduction","goal":"traffic","notes":"Prepare drafts from the confirmed project brief.","requestKey":"20000000-0000-4000-8000-000000000002"}}}},"responses":{"201":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"id":"40000000-0000-4000-8000-000000000004","state":"draft"}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/tasks":{"get":{"operationId":"tasks","summary":"List plan tasks","description":"List tasks and check whether each can be prepared by Meyer Launch. Optional query filters select a project and task status.\n\nRequired permission: tasks:read. Credits: No generation credits.\n\nReturns up to 200 tasks ordered by due date, then priority. No pagination cursor is provided.\n\nstatus filter: active, completed, skipped or stale. preparable indicates whether the preparation endpoint supports this task.\n\nThe list includes preparation status/error. Use task detail for prepared output.","security":[{"bearerAuth":[]}],"x-required-permission":"tasks:read","parameters":[{"name":"projectId","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","schema":{"type":"string","enum":["active","completed","skipped","stale"]}}],"responses":{"200":{"description":"Read response","content":{"application/json":{"schema":{"type":"object"},"example":{"data":[],"limit":200}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/tasks/{id}":{"get":{"operationId":"taskDetail","summary":"Read a task and prepared output","description":"Read one workspace task, its preparation state and any saved output. Response examples below show selected fields.\n\nRequired permission: tasks:read. Credits: No generation credits.\n\nUse the id returned by the task list. preparation contains status, error and output.\n\nThe output varies by preparation kind: a review summary, brief gaps or draft copy. Check status and error before treating output as ready.","security":[{"bearerAuth":[]}],"x-required-permission":"tasks:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Task or generation ID returned by the corresponding API."}],"responses":{"200":{"description":"Read response","content":{"application/json":{"schema":{"type":"object"},"example":{"data":{"id":"30000000-0000-4000-8000-000000000003","projectId":"10000000-0000-4000-8000-000000000001","title":"Prepare a social post","preparable":true,"prepareKind":"copy","preparation":{"status":"none","error":null,"output":null}}}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/tasks/{id}/prepare":{"post":{"operationId":"taskPrepare","summary":"Prepare a supported task","description":"Queue draft preparation for a task whose preparable field is true. The result still needs review in Meyer Launch.\n\nRequired permission: tasks:prepare. Credits: 1 workspace credit per preparation; refunded on failure.\n\nSupply a UUID requestKey. Retrying the same requestKey returns the same attempt without charging again.\n\n202 means queued, not completed. Poll the task detail for preparation output.\n\nUnsupported tasks return 422. Preparation does not approve, publish or schedule the work.","security":[{"bearerAuth":[]}],"x-required-permission":"tasks:prepare","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Task or generation ID returned by the corresponding API."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"requestKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["requestKey"]},"example":{"requestKey":"20000000-0000-4000-8000-000000000002"}}}},"responses":{"202":{"description":"Queued; poll for completion","content":{"application/json":{"schema":{"type":"object"},"example":{"id":"30000000-0000-4000-8000-000000000003","state":"queued","requestKey":"20000000-0000-4000-8000-000000000002"}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/agent/chat":{"post":{"operationId":"agent","summary":"Message the marketing agent","description":"Ask the agent to read project context and propose marketing work. It acts as the workspace owner who issued the key. Responses stream as newline-delimited JSON, not one JSON document.\n\nRequired permission: agent:chat. Credits: Variable workspace credits; workspace balance and agent monthly cap apply.\n\nFor a new project conversation, send projectSlug and text. To continue, send conversationId and text.\n\ntext is limited to 20,000 characters. The key remains restricted to its workspace and the issuing owner’s accessible conversations.\n\nStream events include conversation, text (delta), status, proposal, notice, error and done. Preserve conversation.id for the next request. A stream can report an error after HTTP 200; wait for done and inspect error events.\n\nCosts depend on the run; this endpoint has no separate generation quote step. Configure the workspace’s agent credit cap before automating it. Draft proposals wait for approval in Meyer Launch.","security":[{"bearerAuth":[]}],"x-required-permission":"agent:chat","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":20000},"projectSlug":{"type":"string"},"conversationId":{"type":"string","format":"uuid"},"pasted":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"text":{"type":"string"}}}},"attachmentIds":{"type":"array","items":{"type":"string","format":"uuid"}}},"description":"Supply text and projectSlug for a new conversation, or conversationId to continue. Existing owned attachment IDs and pasted text are optional. Empty messages without attachments are rejected."},"example":{"projectSlug":"your-project","text":"Read the brief and propose three social-post directions. Keep everything as drafts."}}}},"responses":{"200":{"description":"Successful response","content":{"application/x-ndjson":{"schema":{"type":"string"},"example":"{\"type\":\"conversation\",\"id\":\"40000000-0000-4000-8000-000000000004\",\"title\":\"Marketing directions\",\"projectSlug\":\"your-project\"}\n{\"type\":\"text\",\"delta\":\"Here are three draft directions.\"}\n{\"type\":\"done\",\"credits\":1}\n"}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/generations":{"post":{"operationId":"generations","summary":"Request a media quote","description":"Quote an image, narration or composed-video draft for a project. The image example is below; narration/video inputs and callbacks are described after the endpoint reference.\n\nRequired permission: generations:write. Credits: Quote only; no generation credits spent until confirmation.\n\nUse projectSlug, UUID requestKey, kind (image, narration or video) and input. webhookUrl is optional.\n\nSame key + same requestKey + identical input returns the existing job. preparing means retry the same request; a failed quote requires a new requestKey.\n\nThe sample 2-credit value is illustrative. Always use the live credits and expiresAt returned for your quote.\n\nJobs belong to their issuing API key. A different key in the same workspace cannot read or confirm that job. Internal free Lab generation is outside this customer API.","security":[{"bearerAuth":[]}],"x-required-permission":"generations:write","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"projectSlug":{"type":"string","minLength":1,"maxLength":60},"requestKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"webhookUrl":{"type":"string","maxLength":2000,"format":"uri"},"kind":{"type":"string","const":"image"},"input":{"type":"object","properties":{"prompt":{"type":"string","minLength":3,"maxLength":4000},"size":{"default":"1K","type":"string","enum":["1K","2K"]},"aspect":{"default":"1:1","type":"string","enum":["1:1","4:5","9:16","16:9"]}},"required":["prompt"],"additionalProperties":false}},"required":["projectSlug","requestKey","kind","input"],"additionalProperties":false},{"type":"object","properties":{"projectSlug":{"type":"string","minLength":1,"maxLength":60},"requestKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"webhookUrl":{"type":"string","maxLength":2000,"format":"uri"},"kind":{"type":"string","const":"narration"},"input":{"type":"object","properties":{"creativeId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"script":{"type":"string","minLength":3,"maxLength":960},"voice":{"type":"string","enum":["Kore","Puck","Zephyr","Charon","Orus","Schedar","Erinome","Despina","Rasalgethi","Iapetus","Algieba","Sadaltager","Gacrux","Achird","Sulafat"]},"style":{"type":"string","enum":["clear","warm","energetic"]}},"required":["creativeId","version","script","voice","style"],"additionalProperties":false}},"required":["projectSlug","requestKey","kind","input"],"additionalProperties":false},{"type":"object","properties":{"projectSlug":{"type":"string","minLength":1,"maxLength":60},"requestKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"webhookUrl":{"type":"string","maxLength":2000,"format":"uri"},"kind":{"type":"string","const":"video"},"input":{"type":"object","properties":{"source":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"screenshot"},"url":{"type":"string","maxLength":2000,"format":"uri"}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"photo"},"mediaAssetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","mediaAssetId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"recording"},"mediaAssetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["type","mediaAssetId"],"additionalProperties":false}]},"aspect":{"type":"string","enum":["1:1","4:5","9:16","16:9"]},"feed":{"type":"string","enum":["light","dark"]},"headline":{"type":"string","minLength":1,"maxLength":40},"primaryText":{"type":"string","maxLength":125},"cta":{"type":"string","maxLength":40},"showLogo":{"type":"boolean"},"cards":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"title":{"type":"string","maxLength":28},"body":{"type":"string","maxLength":48}},"required":["title","body"],"additionalProperties":false}},"presentation":{"type":"string","enum":["breakout","product_showcase","panel_reveal","screen_expand","floating_cards","hook_cut","recording_demo","walkthrough","photo_slideshow","commercial"]},"controls":{"type":"object","properties":{"durationS":{"default":7,"type":"number"},"intensity":{"default":"standard","type":"string","enum":["gentle","standard","bold"]},"direction":{"default":"up","type":"string","enum":["up","left","right"]},"fit":{"default":"contain","type":"string","enum":["contain","cover"]},"positionX":{"default":50,"type":"integer","minimum":0,"maximum":100},"positionY":{"default":50,"type":"integer","minimum":0,"maximum":100},"startS":{"default":0,"type":"number","minimum":0,"maximum":58},"sourceAudio":{"default":false,"type":"boolean"},"volume":{"default":0.7,"type":"number","minimum":0,"maximum":1}},"additionalProperties":false},"captions":{"maxItems":120,"type":"array","items":{"type":"object","properties":{"startMs":{"type":"integer","minimum":0,"maximum":60000},"endMs":{"type":"integer","minimum":1,"maximum":60000},"text":{"type":"string","minLength":1,"maxLength":120}},"required":["startMs","endMs","text"],"additionalProperties":false}},"photoIds":{"maxItems":8,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"screenshotUrls":{"maxItems":4,"type":"array","items":{"type":"string","maxLength":2000,"format":"uri"}},"parentCreativeId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"parentRenderVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"aiGenerated":{"type":"boolean"},"narration":{"type":"object","properties":{"trackId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"script":{"type":"string","maxLength":960},"timing":{"type":"object","properties":{"speed":{"default":1,"type":"number","minimum":0.5,"maximum":2},"offsetS":{"default":0,"type":"number","minimum":0,"maximum":59},"trimStartS":{"default":0,"type":"number","minimum":0,"maximum":299},"trimEndS":{"default":null,"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":300},{"type":"null"}]},"volume":{"default":1,"type":"number","minimum":0,"maximum":1}},"additionalProperties":false}},"required":["trackId","script"],"additionalProperties":false}},"required":["source","aspect","feed","headline","primaryText","cta","showLogo","cards"],"additionalProperties":false}},"required":["projectSlug","requestKey","kind","input"],"additionalProperties":false}]},"examples":{"image":{"value":{"projectSlug":"your-project","requestKey":"20000000-0000-4000-8000-000000000002","kind":"image","input":{"prompt":"A blue notebook on a wooden desk","size":"1K","aspect":"1:1"}}},"narration":{"value":{"projectSlug":"your-project","requestKey":"20000000-0000-4000-8000-000000000002","kind":"narration","input":{"creativeId":"30000000-0000-4000-8000-000000000003","version":1,"script":"Keep your project notes together.","voice":"Kore","style":"clear"}}},"video":{"value":{"projectSlug":"your-project","requestKey":"20000000-0000-4000-8000-000000000002","kind":"video","input":{"source":{"type":"photo","mediaAssetId":"30000000-0000-4000-8000-000000000003"},"aspect":"9:16","feed":"light","headline":"Your product in use","primaryText":"Show one confirmed product benefit.","cta":"Learn more","showLogo":false,"cards":[]}}}}}}},"responses":{"201":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"id":"40000000-0000-4000-8000-000000000004","kind":"image","status":"quoted","credits":2,"expiresAt":"2026-11-04T12:15:00Z","confirmedAt":null,"sourceId":"30000000-0000-4000-8000-000000000003","creativeId":null,"resultUrl":null,"resultUrlExpiresIn":null,"error":null,"dailyCreditCap":50}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/generations/{id}/confirm":{"post":{"operationId":"generationConfirm","summary":"Confirm a reviewed quote","description":"Approve the selected job’s credit charge with an explicit maxCredits ceiling. Ask the customer to approve the live quoted cost before calling this endpoint.\n\nRequired permission: generations:write. Credits: Spends the quoted workspace credits.\n\nmaxCredits must be an integer from 0 to 50 and at least the quoted cost. Use the exact approved cost rather than an unnecessarily high ceiling.\n\nEach key can confirm up to 50 credits per UTC day, in addition to workspace balance and provider limits. Failed attempts keep their daily-cap reservation; normal generation-failure wallet refunds still apply.\n\nRepeating confirmation uses the same generation/receipt. If an outcome is uncertain, poll or retry this same job; do not create a new paid job blindly.\n\nQuotes expire. Changed project/media facts may require a fresh quote. Confirmation starts generation; it does not approve an ad, publish a post or launch a campaign.","security":[{"bearerAuth":[]}],"x-required-permission":"generations:write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Task or generation ID returned by the corresponding API."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"maxCredits":{"type":"integer","minimum":0,"maximum":50}},"required":["maxCredits"],"additionalProperties":false},"example":{"maxCredits":2}}}},"responses":{"202":{"description":"Queued; poll for completion","content":{"application/json":{"schema":{"type":"object"},"example":{"id":"40000000-0000-4000-8000-000000000004","kind":"image","status":"queued","credits":2,"resultUrl":null,"resultUrlExpiresIn":null,"error":null}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/generations/{id}":{"get":{"operationId":"generationStatus","summary":"Read a generation job","description":"Poll the same job about every 10 seconds. A ready result can include a private download URL valid for 900 seconds (15 minutes).\n\nRequired permission: generations:read. Credits: No additional generation credits.\n\nPossible lifecycle states include preparing, quoted, confirmed, queued, running, ready and failed; the underlying media job can supply its own render state. Treat only ready with a non-null resultUrl as downloadable.\n\nAn expired result URL can be refreshed with another GET. Keep URLs private.\n\nFor failed jobs, check error and the credit receipt in Billing. A callback is optional; polling remains available if callback delivery fails.","security":[{"bearerAuth":[]}],"x-required-permission":"generations:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Task or generation ID returned by the corresponding API."}],"responses":{"200":{"description":"Read response","content":{"application/json":{"schema":{"type":"object"},"example":{"id":"40000000-0000-4000-8000-000000000004","kind":"image","status":"ready","credits":2,"resultUrl":"https://storage.example.invalid/private-signed-result","resultUrlExpiresIn":900,"error":null}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}},"/api/v1/events":{"post":{"operationId":"events","summary":"Submit app or website events","description":"Send real first_open, onboarding_done, paywall_view, trial_start and purchase events from a trusted backend for the selected project.\n\nRequired permission: events:write. Credits: No generation credits.\n\nSend 1–100 events per batch. platform is ios, android or web. appVersion is optional, up to 64 characters.\n\nUse random UUID installId and dedupeKey values. Reuse a dedupeKey only for the identical event; conflicting reuse rejects the whole batch with 409.\n\noccurredAt must be an ISO 8601 timestamp within the past 90 days (up to five minutes of future clock skew is tolerated). Replace the example timestamp with the real occurrence time.\n\nDo not send names, email addresses, hardware/ad identifiers or free-text properties. Never embed this workspace key in a browser or mobile build.\n\nThese are reported events, not independently verified purchases or automatically attributed ad conversions. Do not submit synthetic purchase events to production.","security":[{"bearerAuth":[]}],"x-required-permission":"events:write","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"events":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","enum":["first_open","onboarding_done","paywall_view","trial_start","purchase"]},"platform":{"type":"string","enum":["ios","android","web"]},"installId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"dedupeKey":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"occurredAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"appVersion":{"type":"string","maxLength":64}},"required":["name","platform","installId","dedupeKey","occurredAt"],"additionalProperties":false}}},"required":["projectId","events"],"additionalProperties":false},"example":{"projectId":"10000000-0000-4000-8000-000000000001","events":[{"name":"first_open","platform":"ios","installId":"30000000-0000-4000-8000-000000000003","dedupeKey":"20000000-0000-4000-8000-000000000002","occurredAt":"2026-11-04T12:00:00Z","appVersion":"1.0"}]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"accepted":1,"duplicates":0}}}},"400":{"description":"Invalid JSON or fields","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Missing, expired, revoked or insufficiently scoped key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Insufficient credits or agent cap reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"403":{"description":"Access refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"404":{"description":"Project, task, conversation or job unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"409":{"description":"Conflicting retry, expired quote, cap or unavailable state","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"413":{"description":"Request too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"422":{"description":"Task cannot be prepared","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"429":{"description":"Per-key rate limit reached","headers":{"Retry-After":{"description":"Wait before retrying.","schema":{"type":"integer"},"example":60}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"500":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"503":{"description":"Temporary server or provider/configuration issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}}}}}