Ludo.ai Documentation API

The Documentation API from Ludo.ai — 2 operation(s) for documentation.

Operations 2

GET /docs Get docs #
GET /docs/search Search docs #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ludo-ai-documentation-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ludo-ai-documentation-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ludo Ai Documentation 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 Documentation 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: Documentation
paths:
  /docs:
    get:
      description: 'Browse or read Ludo''s own documentation in full - how to choose a sprite animation mode, when to use Generate Before / Generate After, how margins behave, which model suits a job, and each generator''s known limitations. To answer a specific question, call searchDocs first: it returns just the sections that match. Use getDocs to see what documentation exists, or to read a whole document or named sections. This is the same documentation the Ludo web app shows its users, so it occasionally describes buttons rather than parameters; the substance applies to the API and MCP surfaces just the same. To browse, call it with NO parameters to get a table of contents - every document with its id, label and section titles, and no bodies - then call it again with `doc` (and optionally `sections`) to read only what you need. Fetching a whole document can return tens of thousands of characters, so prefer naming the sections, using titles copied from the table of contents. Section titles match ignoring case, spacing and punctuation: when only some requested titles exist you receive those sections plus `unmatched_sections` and `available_sections`, and when none exist (or `doc` is unknown) the call returns 400 listing the valid values so you can retry once. This is a free discovery endpoint: it does not charge credits and does not queue a job. Requires an API key (user scope).'
      tags:
      - Documentation
      operationId: getDocs
      security:
      - ApiKey: []
      parameters:
      - name: doc
        in: query
        description: Which document to read, by id (the table of contents returned by the no-parameter call lists them). Omit to receive the table of contents.
        required: false
        schema:
          type: string
          enum:
          - assistant
          - game-ideator
          - image-generator
          - project
          - account
          - faq
          - 3d-generator
          - video-generator
          - sprite-generator
          - audio-generator
          - api-mcp
          - game-asset-generation
      - name: sections
        in: query
        description: Section titles to return from `doc`, copied from the table of contents (an array of titles; over plain REST, a comma-separated string, where a title that itself contains a comma is still matched whole). Matching ignores case, spacing and punctuation; titles that match nothing are reported back in `unmatched_sections` rather than guessed at. Only valid together with `doc`. Omit to return every section of the document.
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentationResponse'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Documentation temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -X GET \"https://api.ludo.ai/api/docs\" \\\n  -H \"Authorization: ApiKey YOUR_API_KEY\""
      - lang: JavaScript
        label: JavaScript
        source: "const response = await fetch(\"https://api.ludo.ai/api/docs\", {\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/docs\",\n    headers={\"Authorization\": \"ApiKey YOUR_API_KEY\"}\n)\n\nprint(response.json())"
      summary: Get docs
      x-summary-source: derived
    servers:
    - url: /api
  /docs/search:
    get:
      description: 'Search Ludo''s own documentation with a plain-language question and get back only the few sections that answer it - the fastest way to learn how a feature is meant to be used before you generate with it (how to pick a sprite animation mode or model, how margins behave, what something costs, known limitations). Start here rather than reading whole documents. Each result carries `doc` and `section`, which you can pass straight to getDocs to re-read that section, and the section''s full markdown `content`. Results are best first; weak matches are left out, so an empty `results` list means the documentation does not cover the question - rephrase it, or call getDocs with no parameters to browse the table of contents. This is the same documentation the Ludo web app shows its users, so it occasionally describes buttons rather than parameters; the substance applies to the API and MCP surfaces just the same. Returns up to `n` sections (default 3, max 10). If it answers 503 the search backend is briefly unavailable: call getDocs instead rather than retrying in a loop. This is a free discovery endpoint: it does not charge credits and does not queue a job. Requires an API key (user scope).'
      tags:
      - Documentation
      operationId: searchDocs
      security:
      - ApiKey: []
      parameters:
      - name: query
        in: query
        description: What you want to know, in plain language, e.g. "how do I keep a sprite animation's colors consistent" or "what does a 3D model cost".
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 500
      - name: n
        in: query
        description: Maximum number of sections to return. Defaults to 3.
        required: false
        schema:
          type: integer
          format: int32
          minimum: 1
          maximum: 10
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentationSearchResponse'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Documentation search temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -X GET \"https://api.ludo.ai/api/docs/search\" \\\n  -H \"Authorization: ApiKey YOUR_API_KEY\""
      - lang: JavaScript
        label: JavaScript
        source: "const response = await fetch(\"https://api.ludo.ai/api/docs/search\", {\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/docs/search\",\n    headers={\"Authorization\": \"ApiKey YOUR_API_KEY\"}\n)\n\nprint(response.json())"
      summary: Search docs
      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
    ModelLineup:
      type: object
      description: Which models to use. Present on the table of contents only (no `doc` parameter).
      properties:
        current:
          $ref: '#/components/schemas/CurrentModelsByAction'
        legacy:
          type: array
          description: 'Legacy models: still accepted for existing integrations but scheduled for removal. Do not use them for new work.'
          items:
            $ref: '#/components/schemas/LegacyModel'
    DocumentationSearchResult:
      type: object
      properties:
        doc:
          type: string
          description: Document id, e.g. sprite-generator - pass it to getDocs as `doc`
        label:
          type: string
          description: Human-readable document name, e.g. Sprite Generator
        section:
          type: string
          description: Section title - pass it to getDocs in `sections`
        relevance:
          type: number
          format: float
          description: Match score 0-1; only results at or above 0.6 are returned
        content:
          type: string
          description: Full markdown body of the section, as getDocs would return it. Request and response schemas for each tool are in the tool definitions, not in these sections.
    LegacyModel:
      type: object
      properties:
        codename:
          type: string
        name:
          type: string
        legacy_since:
          type: string
          description: Date (YYYY-MM-DD) the model became legacy.
        features:
          type: array
          description: Credit actions the model still accepts; empty once fully retired.
          items:
            type: string
    CurrentModelsByAction:
      type: object
      description: Per credit action, the current model codenames in preference order. Pick from these for new work.
      properties:
        ANIMATE_SPRITE:
          type: array
          items:
            type: string
        TRANSFER_SPRITE_MOTION:
          type: array
          items:
            type: string
        EDIT_SPRITESHEET:
          type: array
          items:
            type: string
        GENERATE_VIDEO:
          type: array
          items:
            type: string
        REFERENCES_TO_VIDEO:
          type: array
          items:
            type: string
        VIDEO_EDIT:
          type: array
          items:
            type: string
    DocumentationResponse:
      type: object
      properties:
        models:
          $ref: '#/components/schemas/ModelLineup'
        docs:
          type: array
          items:
            $ref: '#/components/schemas/DocumentationEntry'
        unmatched_sections:
          type: array
          description: Requested section titles that matched no section of `doc`. Present only when some, but not all, requested titles matched.
          items:
            type: string
        available_sections:
          type: array
          description: Every section title of `doc`, for correcting the titles in `unmatched_sections`. Present only alongside `unmatched_sections`.
          items:
            type: string
    DocumentationSearchResponse:
      type: object
      properties:
        results:
          type: array
          description: Matching documentation sections, best first. Empty when nothing matches closely.
          items:
            $ref: '#/components/schemas/DocumentationSearchResult'
        message:
          type: string
          description: 'Present only when `results` is empty: what to try next.'
    DocumentationEntry:
      type: object
      properties:
        id:
          type: string
          description: Stable document id, e.g. sprite-generator - pass it back as the `doc` parameter
        label:
          type: string
          description: Human-readable document name, e.g. Sprite Generator
        sections:
          type: array
          items:
            $ref: '#/components/schemas/DocumentationSection'
    DocumentationSection:
      type: object
      properties:
        title:
          type: string
        content:
          type: string
    CurrentModelsByAction_2:
      type: object
      description: Per credit action, the current model codenames in preference order. Pick from these for new work.
      properties:
        ANIMATE_SPRITE:
          type: array
          items:
            type: string
        TRANSFER_SPRITE_MOTION:
          type: array
          items:
            type: string
        EDIT_SPRITESHEET:
          type: array
          items:
            type: string
        NEW_VIEW_SPRITESHEET:
          type: array
          items:
            type: string
        GENERATE_VIDEO:
          type: array
          items:
            type: string
        REFERENCES_TO_VIDEO:
          type: array
          items:
            type: string
        VIDEO_EDIT:
          type: array
          items:
            type: string
  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