{"openapi":"3.1.0","info":{"title":"Rotor Town API","version":"1.0.0","description":"Typed decisions with calibrated confidence.","summary":"Fast typed decisions.","license":{"name":"Proprietary","identifier":"LicenseRef-Proprietary"},"x-pricing":{"currency":"USD","input_tokens_per_million":"0.041","minimum_input_tokens_per_decision":256,"output_tokens":"free","comparison":"JEV lists $0.042 per million input tokens."}},"externalDocs":{"description":"API guide","url":"https://rotor.town/docs"},"servers":[{"url":"https://rotor.town"}],"security":[{"bearerAuth":[]}],"paths":{"/v1/account":{"get":{"operationId":"getAccount","summary":"Read balance and pricing","responses":{"200":{"description":"Account details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/v1/manifests":{"get":{"operationId":"listManifests","summary":"List manifest versions","responses":{"200":{"description":"Manifest list"},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"operationId":"createManifest","summary":"Create an immutable manifest","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestCreate"}}}},"responses":{"201":{"description":"Manifest created"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/v1/decisions":{"post":{"operationId":"createDecision","summary":"Run one typed decision","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Prevents duplicate charges.","schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionRequest"}}}},"responses":{"200":{"description":"Typed decision","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Decision"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"},"409":{"description":"Idempotency key already used"},"429":{"description":"Rate limit exceeded"},"503":{"description":"Inference temporarily unavailable"}}}},"/v1/decisions/batch":{"post":{"operationId":"createDecisionBatch","summary":"Run several typed decisions","description":"Runs one shared manifest in one model pass.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Prevents duplicate charges.","schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBatchRequest"}}}},"responses":{"200":{"description":"Typed decision batch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionBatch"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Insufficient credit"},"409":{"description":"Idempotency key already used"},"429":{"description":"Rate limit exceeded"},"503":{"description":"Inference temporarily unavailable"}}}},"/v1/manifests/{id}":{"get":{"operationId":"getManifest","summary":"Read one manifest version","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Manifest version"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Manifest not found"}}}},"/v1/usage":{"get":{"operationId":"listUsage","summary":"List metered requests","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Billable and failed usage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageList"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"rt_live_*"}},"responses":{"Unauthorized":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"BadRequest":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"path":{"type":"string"}}}}},"Account":{"type":"object","required":["balance_usd","promotional_credit_usd","pricing"],"properties":{"balance_usd":{"type":"string","example":"5.000000000"},"promotional_credit_usd":{"type":"string","example":"5.000000000"},"pricing":{"type":"object","properties":{"input_tokens_per_million_usd":{"type":"string","example":"0.041"},"minimum_input_tokens_per_decision":{"type":"integer","example":256},"output_tokens":{"const":"free"}}}}},"JsonSchema":{"type":"object","description":"Supported JSON Schema subset.","required":["type","properties"],"properties":{"type":{"const":"object"},"properties":{"type":"object","additionalProperties":{"type":"object"}},"required":{"type":"array","items":{"type":"string"}},"additionalProperties":{"type":"boolean","default":false}}},"Questions":{"type":"object","minProperties":1,"maxProperties":50,"additionalProperties":{"type":"object","required":["type","instructions"],"properties":{"type":{"enum":["choice","score","noul"]},"instructions":{"type":"string","maxLength":2000},"criteria":{"oneOf":[{"type":"array","minItems":2,"maxItems":20,"items":{"type":"string"}},{"type":"object","minProperties":2,"maxProperties":20,"additionalProperties":{"type":"string"}}]}}}},"ManifestCreate":{"type":"object","required":["name","input_schema","questions"],"properties":{"name":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_.-]{0,127}$"},"input_schema":{"$ref":"#/components/schemas/JsonSchema"},"questions":{"$ref":"#/components/schemas/Questions"}}},"DecisionRequest":{"type":"object","required":["manifest","input"],"properties":{"manifest":{"type":"string","pattern":"^mf_[a-f0-9]{32}$"},"input":{"type":"object"}},"example":{"manifest":"mf_0123456789abcdef0123456789abcdef","input":{"message":"Refund my duplicate charge","customer_tier":"pro"}}},"DecisionBatchRequest":{"type":"object","required":["manifest","inputs"],"properties":{"manifest":{"type":"string","pattern":"^mf_[a-f0-9]{32}$"},"inputs":{"type":"array","minItems":1,"maxItems":25,"description":"Maximum 50 questions across every input.","items":{"type":"object"}}},"example":{"manifest":"mf_0123456789abcdef0123456789abcdef","inputs":[{"message":"Refund my duplicate charge","customer_tier":"pro"},{"message":"Checkout fails","customer_tier":"free"}]}},"Decision":{"type":"object","required":["id","object","manifest","answers","usage"],"properties":{"id":{"type":"string"},"object":{"const":"decision"},"manifest":{"type":"object"},"answers":{"type":"object"},"usage":{"type":"object","properties":{"input_tokens":{"type":"integer"},"billed_input_tokens":{"type":"integer"},"output_tokens":{"const":0},"cost_usd":{"type":"string"},"balance_usd":{"type":"string"}}},"latency_ms":{"type":"integer"}}},"DecisionBatch":{"type":"object","required":["id","object","manifest","data","usage"],"properties":{"id":{"type":"string"},"object":{"const":"decision_batch"},"manifest":{"type":"object"},"data":{"type":"array","items":{"type":"object","required":["index","answers","usage"],"properties":{"index":{"type":"integer","minimum":0},"answers":{"type":"object"},"usage":{"type":"object"}}}},"usage":{"type":"object","properties":{"decisions":{"type":"integer"},"input_tokens":{"type":"integer"},"billed_input_tokens":{"type":"integer"},"output_tokens":{"const":0},"cost_usd":{"type":"string"},"balance_usd":{"type":"string"}}},"latency_ms":{"type":"integer"}}},"UsageList":{"type":"object","required":["object","totals","data"],"properties":{"object":{"const":"list"},"totals":{"type":"object","description":"Successful usage only.","required":["requests","decisions","input_tokens","cost_usd","balance_usd"],"properties":{"requests":{"type":"integer","minimum":0},"decisions":{"type":"integer","minimum":0},"input_tokens":{"type":"integer","minimum":0},"cost_usd":{"type":"string"},"balance_usd":{"type":"string"}}},"data":{"type":"array","items":{"type":"object","required":["id","manifest","status","operation","decisions","billable","input_tokens","output_tokens","input_token_rate_usd_per_million","cost_usd","created_at"],"properties":{"id":{"type":"string"},"manifest":{"type":"string"},"status":{"enum":["pending","succeeded","failed"]},"operation":{"enum":["decision","decision_batch"]},"decisions":{"type":"integer","minimum":1,"maximum":25},"billable":{"type":"boolean","description":"True only after success."},"input_tokens":{"type":"integer","minimum":0},"output_tokens":{"type":"integer","minimum":0},"input_token_rate_usd_per_million":{"type":"string"},"cost_usd":{"type":"string"},"latency_ms":{"type":["integer","null"]},"error_code":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"}}}}}}}}}