Ludo.ai Jobs API

The Jobs API from Ludo.ai — 2 operation(s) for jobs.

Operations 3

GET /assets/jobs List api jobs #
GET /assets/jobs/{id} Get api job #
DELETE /assets/jobs/{id} Cancel api job #

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-jobs-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-jobs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ludo Ai Jobs 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 Jobs 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: Jobs
paths:
  /assets/jobs:
    get:
      description: List the generation jobs you started through the API or MCP, most recent first. Web-app jobs are not included. This is a free read-only lookup (no credits, no generation). Filter with a comma-separated status list; limit defaults to 50 and is capped at 100. Requires an API key (user scope).
      tags:
      - Jobs
      operationId: listApiJobs
      security:
      - ApiKey: []
      parameters:
      - name: status
        in: query
        description: Comma-separated statuses to include (queued, running, succeeded, failed, canceled). Defaults to all.
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Maximum number of jobs to return. Defaults to 50, capped at 100.
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicJob'
        '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/jobs\" \\\n  -H \"Authorization: ApiKey YOUR_API_KEY\""
      - lang: JavaScript
        label: JavaScript
        source: "const response = await fetch(\"https://api.ludo.ai/api/assets/jobs\", {\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/jobs\",\n    headers={\"Authorization\": \"ApiKey YOUR_API_KEY\"}\n)\n\nprint(response.json())"
      summary: List api jobs
      x-summary-source: derived
    servers:
    - url: /api
  /assets/jobs/{id}:
    get:
      description: 'Fetch one job you started through the API or MCP. Statuses: queued, running (both non-terminal - the response carries poll_after_ms, wait at least that long before asking again), then succeeded (read `result`), failed (read `error`: {code, subcode, message, retriable}; the held credits are refunded) or canceled. Generations typically finish within a few minutes; a job still queued after 15 minutes can be cancelled and resubmitted. Better still, pass wait= (up to 60) to long-poll: the request is held until the job reaches a terminal state, so one call replaces a polling loop. Once status is succeeded, `result` holds exactly what the synchronous form of the operation named by task_type would have returned. This is a free read-only lookup (no credits). Requires an API key (user scope).'
      tags:
      - Jobs
      operationId: getApiJob
      x-mcp-description: 'Poll the status of a generation job started by any tool. Every generation tool returns `{id, status}`; call getApiJob with that id until status is `succeeded` (then read `result`, shaped exactly like the tool''s documented output) or `failed` (read `error`). Poll every few seconds, or pass `wait: 30` to long-poll - the call is held up to 30 seconds (max 60) and returns as soon as the job finishes.'
      security:
      - ApiKey: []
      parameters:
      - name: id
        in: path
        description: The job id returned by a generation call (its `id` in the 202 response).
        required: true
        schema:
          type: string
      - name: wait
        in: query
        description: Seconds to long-poll for a terminal state (0-60). Defaults to 0 (return immediately).
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicJob'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such job for this API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -X GET \"https://api.ludo.ai/api/assets/jobs/{id}\" \\\n  -H \"Authorization: ApiKey YOUR_API_KEY\""
      - lang: JavaScript
        label: JavaScript
        source: "const response = await fetch(\"https://api.ludo.ai/api/assets/jobs/{id}\", {\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/jobs/{id}\",\n    headers={\"Authorization\": \"ApiKey YOUR_API_KEY\"}\n)\n\nprint(response.json())"
      summary: Get api job
      x-summary-source: derived
    delete:
      description: Cancel a queued job you started through the API or MCP; the credits held for it are refunded. Jobs that are already running cannot be canceled (409). Returns the canceled job. This is free (no credits). Requires an API key (user scope).
      tags:
      - Jobs
      operationId: cancelApiJob
      security:
      - ApiKey: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicJob'
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such job for this API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Job is not in a cancelable state (e.g. already running)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -X DELETE \"https://api.ludo.ai/api/assets/jobs/{id}\" \\\n  -H \"Authorization: ApiKey YOUR_API_KEY\""
      - lang: JavaScript
        label: JavaScript
        source: "const response = await fetch(\"https://api.ludo.ai/api/assets/jobs/{id}\", {\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/jobs/{id}\",\n    headers={\"Authorization\": \"ApiKey YOUR_API_KEY\"}\n)\n\nprint(response.json())"
      summary: Cancel api job
      x-summary-source: derived
    servers:
    - url: /api
components:
  schemas:
    PublicJob:
      type: object
      required:
      - id
      - task_type
      - status
      - created_at
      properties:
        id:
          type: string
        task_type:
          type: string
          description: 'The public operationId that created this job (e.g. createImage). Determines the shape of `result`: it is exactly the 200 response body documented for that operation.'
        status:
          type: string
          enum:
          - queued
          - running
          - succeeded
          - failed
          - canceled
          example: queued
        request_id:
          type: string
        created_at:
          type: integer
          format: int64
          description: Unix ms
        finished_at:
          type: integer
          format: int64
        credits_charged:
          type: number
          format: float
          description: Credits this job cost you. Charged at enqueue; reported as 0 once a job fails or is canceled, since the charge is refunded.
        result:
          type: object
          description: Present only when status is succeeded. Same shape as the synchronous response of the operation named by task_type.
        error:
          $ref: '#/components/schemas/PublicJobError'
        poll_after_ms:
          type: integer
          format: int32
          description: 'Present while the job is queued or running: wait at least this many milliseconds before polling again. Prefer GET /assets/jobs/{id}?wait=30 (long-poll) over tight loops.'
    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
    PublicJobError:
      type: object
      properties:
        status:
          type: integer
          format: int32
        message:
          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