openapi: 3.2.0 info: title: Ludo Ai Account API version: 0.9.10 x-logo: url: /static/logo-small.png altText: Logo x-refined-note: - x-model-lineup differs across the merged source definitions and was not carried description: 'Operations tagged Account across 2 of this provider''s published API definitions: ludo-ai-rest-api-openapi.yml, ludo-ai-openapi.json. Each path carries the servers of the definition it was published in.' servers: - url: /api tags: - name: Account paths: /assets/account: get: description: Show your account's credit balance, plan and auto top-up settings. `credits.available` is what generations can spend right now (plan_credits + extra - used); `resets_at` is when the plan's monthly credits refill (unix seconds). When `team_pool` is true the balance is your team's shared pool, and `auto_topup` is null because the team owner manages it. Check this before an expensive generation instead of waiting for a 402. Buying credits and changing auto top-up happen in the web app at `billing_url`. This is a free read-only lookup (no credits, no generation). Requires an API key (user scope). tags: - Account operationId: getAccount security: - ApiKey: [] responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AccountInfo' '400': description: Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-codeSamples: - lang: Shell label: cURL source: "curl -X GET \"https://api.ludo.ai/api/assets/account\" \\\n -H \"Authorization: ApiKey YOUR_API_KEY\"" - lang: JavaScript label: JavaScript source: "const response = await fetch(\"https://api.ludo.ai/api/assets/account\", {\n headers: {\n \"Authorization\": \"ApiKey YOUR_API_KEY\"\n }\n});\n\nconst data = await response.json();\nconsole.log(data);" - lang: Python label: Python source: "import requests\n\nresponse = requests.get(\n \"https://api.ludo.ai/api/assets/account\",\n headers={\"Authorization\": \"ApiKey YOUR_API_KEY\"}\n)\n\nprint(response.json())" summary: Get account x-summary-source: derived servers: - url: /api /assets/cli-key: delete: description: Revoke the key making this call, when it was created by a browser login. Other API keys are managed in the web app. Free. Requires an API key (user scope). tags: - Account operationId: revokeCurrentCliKey x-mcp-exclude: true security: - ApiKey: [] responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/OkResponse' '400': description: Not a browser-login key content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-codeSamples: - lang: Shell label: cURL source: "curl -X DELETE \"https://api.ludo.ai/api/assets/cli-key\" \\\n -H \"Authorization: ApiKey YOUR_API_KEY\"" - lang: JavaScript label: JavaScript source: "const response = await fetch(\"https://api.ludo.ai/api/assets/cli-key\", {\n headers: {\n \"Authorization\": \"ApiKey YOUR_API_KEY\"\n }\n});\n\nconst data = await response.json();\nconsole.log(data);" - lang: Python label: Python source: "import requests\n\nresponse = requests.delete(\n \"https://api.ludo.ai/api/assets/cli-key\",\n headers={\"Authorization\": \"ApiKey YOUR_API_KEY\"}\n)\n\nprint(response.json())" summary: Revoke current cli key x-summary-source: derived servers: - url: /api /assets/feedback: post: description: 'Report a problem with the Ludo API itself to the Ludo team. Use it ONLY for API bugs (an error, a failed or stuck job, a crash, a response that does not match this documentation) and API limitations (a parameter, operation or format you needed that the API does not support, and that you could not work around). NEVER use it to report model limitations or the quality of a result: an image, sprite, animation, 3D model, video or sound that looks wrong, ignores part of the prompt, has artifacts or is not what you wanted is not an API bug. Do not report those; retry with a different prompt, model or settings instead. Describe what you were trying to do and what went wrong, and name the operation (and job_id, when there is one) it relates to. Do not include personal data, secrets or file contents. Send one report per issue, and if you are an agent, tell the user what you sent. Free (no credits). Requires an API key (user scope).' tags: - Account operationId: submitApiFeedback security: - ApiKey: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/ApiFeedbackPayload' required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ApiFeedbackReceipt' '400': description: Error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' x-codeSamples: - lang: Shell label: cURL source: "curl -X POST \"https://api.ludo.ai/api/assets/feedback\" \\\n -H \"Authorization: ApiKey YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"category\":\"limitation\",\"message\":\"string\"}'" - lang: JavaScript label: JavaScript source: "const response = await fetch(\"https://api.ludo.ai/api/assets/feedback\", {\n method: \"POST\",\n headers: {\n \"Authorization\": \"ApiKey YOUR_API_KEY\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n \"category\": \"limitation\",\n \"message\": \"string\"\n })\n});\n\nconst data = await response.json();\nconsole.log(data);" - lang: Python label: Python source: "import requests\n\nresponse = requests.post(\n \"https://api.ludo.ai/api/assets/feedback\",\n headers={\n \"Authorization\": \"ApiKey YOUR_API_KEY\",\n \"Content-Type\": \"application/json\"\n },\n json={\n \"category\": \"limitation\",\n \"message\": \"string\"\n }\n)\n\nprint(response.json())" summary: Submit api feedback x-summary-source: derived servers: - url: /api components: schemas: ErrorResponse: type: object properties: message: type: string metadata: type: string error_payload: type: string intent: type: object description: Stripe intent details sent with 3D Secure (406) errors properties: id: type: string type: type: string enum: - payment - setup example: payment client_secret: type: string ApiFeedbackPayload: type: object required: - category - message properties: category: type: string enum: - limitation - bug - feature_request - praise - other description: 'bug - the API errored, a job failed or got stuck, or a response did not match the documentation; limitation - the API does not support a parameter, operation or format you needed; feature_request - a new API capability you would like; praise - something that worked well; other - any other API issue. Generated content that looks wrong or does not match the prompt is a model limitation, not a bug: do not report it.' example: limitation message: type: string minLength: 1 maxLength: 4000 description: What you were trying to do, what happened, and what would have helped. operation: type: string maxLength: 100 description: The operation the feedback is about, e.g. animateSprite. job_id: type: string maxLength: 64 description: The job the feedback is about, when there is one. agent: type: string maxLength: 100 description: The agent or app sending it, e.g. Claude Code. ApiFeedbackReceipt: type: object properties: ok: type: boolean id: type: string OkResponse: type: object properties: ok: type: boolean AccountInfo: type: object properties: credits: type: object properties: available: type: number format: float description: Credits generations can spend right now. plan_credits: type: number format: float description: The plan's credits for the current cycle. used: type: number format: float description: Plan credits used this cycle. extra: type: number format: float description: Credits from top-ups and grants, on top of the plan. resets_at: type: integer format: int64 description: When the plan credits refill (unix seconds). team_pool: type: boolean description: The balance is a team's shared pool. paused: type: boolean grace_until: type: integer format: int64 description: Set when the subscription ended; remaining credits stay spendable until then (unix seconds). plan: type: object properties: name: type: string api_access: type: boolean auto_topup: type: object description: Null for team members; the team owner manages auto top-up. properties: enabled: type: boolean threshold: type: number format: float description: An automatic top-up is bought when available credits drop below this. credits: type: integer description: Credits bought on each automatic top-up. billing_url: type: string description: Web page to buy credits, change plan or change auto top-up. example: securitySchemes: ApiKey: type: apiKey name: Authorization in: header description: 'For accessing the API a valid API Key token must be passed in all the queries in the ''Authorization'' header. The following syntax must be used in the ''Authorization'' header: ApiKey xxxxxx.yyyyyyy.zzzzzz ' x-refined-from: - ludo-ai-rest-api-openapi.yml - ludo-ai-openapi.json