tomorrowlives-com Jobs API

Queued jobs, their files and cancelling them.

Operations 4

GET /api/agents/jobs This account's newest queued jobs, at most 50, ids and states only, newest first #
POST /api/agents/jobs/{job}/cancel Cancel a queued job. Waiting: cancelled at no charge. #
GET /api/agents/jobs/{job} A job's record and fresh signed URLs for its files, within 24 hours. #
GET /api/agents/outputs/{job}/{file} Download one output file. #

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/tomorrowlives-com:tomorrowlives-com-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

tomorrowlives-com-jobs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Tomorrow Lives Engines Jobs API
  version: 2026-10-12.5
  description: 'Reproducible, IP-clean assets for software agents: the same request returns the same bytes, and no image, video or voice model made any of it. Seven production engines (tagged Production engines) make print designs, materials, forms, characters, terrain, voice, and short videos and shots rendered in a queue. The Lab (tagged Lab, https://tomorrowlives.com/lab) holds research instruments, which answer a question instead of making an asset; today that is the pull engine, which measures whether one agent follows another beyond chance. Both share one account, one key and one endpoint. A Pull run is paid for by the same engine account as the seven production engines, from the same units, and there is no separate Pull plan: a run costs units, drawn first from the included units of the account''s pass or card plan, then from its unit packs (500 for $10.00), or on the free plan from the free allowance. An agent buys a 30-day pass with a shared payment token: $1.00 the first time (a one-time offer for a new owner), then $20.00, with 1,500 units each. A pass never renews. More units: 500 for $10.00 a pack, spent after the included units and kept until used. A person can subscribe by card: $1.00 the first month, then $20.00 a month, with the same units. It renews automatically until cancelled; cancel any time. Available in the United States. Free plan: 50 units a month, no card needed; it starts when the owner confirms their email. Queued renders need a pass or the card plan. We limit free plans and first-pass offers to prevent abuse. Docs: https://tomorrowlives.com/engines. Terms: https://tomorrowlives.com/engines/terms.'
  termsOfService: https://tomorrowlives.com/engines/terms
servers:
- url: https://tomorrowlives.com
tags:
- name: Jobs
  description: Queued jobs, their files and cancelling them.
paths:
  /api/agents/jobs:
    get:
      operationId: jobs
      summary: This account's newest queued jobs, at most 50, ids and states only, newest first
      description: The queued jobs are video_still, video_render, raster_render, and a large pull_analyse, pull_twin or pull_lab. GET /api/agents/jobs/{job} reads one in full.
      security:
      - apiKey: []
      responses:
        '200':
          description: The jobs
          content:
            application/json:
              schema:
                type: object
                properties:
                  jobs:
                    type: array
                    items:
                      type: object
                      properties:
                        job:
                          type: string
                        status:
                          $ref: '#/components/schemas/JobState'
                  limit:
                    type: integer
        '401':
          description: No valid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: unauthorized
                message: send the engine API key as a bearer token
      tags:
      - Jobs
  /api/agents/jobs/{job}/cancel:
    post:
      operationId: cancelJob
      summary: 'Cancel a queued job. Waiting: cancelled at no charge.'
      description: A job still waiting is cancelled at once and costs nothing. A running one is stopped and charged for the CPU it had used, one unit for each 10 CPU-seconds rounded up, never more than its price; the answer waits for it to stop and carries the units charged. 202 if it was told to stop but is not yet written as stopped (poll it); 409 not_cancellable if it had already ended or was never queued.
      security:
      - apiKey: []
      parameters:
      - name: job
        in: path
        required: true
        schema:
          type: string
          pattern: ^job_[0-9a-f]{24}$
      responses:
        '200':
          description: Cancelled; units is what it was charged
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobStatus'
        '202':
          description: Told to stop; poll the job until it reads cancelled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobStatus'
        '401':
          description: No valid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: unauthorized
                message: send the engine API key as a bearer token
        '404':
          description: No such verb or job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: not_found
                message: there is no such job
        '409':
          description: The request conflicts with the account's state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Jobs
  /api/agents/jobs/{job}:
    get:
      operationId: job
      summary: A job's record and fresh signed URLs for its files, within 24 hours.
      description: A queued job (video_still, video_render, raster_render, and a large pull_analyse, pull_twin or pull_lab) reads queued, running, ok, refused, failed, cancelled or expired. A queued pull job's result is its verdict, and its whole report is the file report.json. Once ok, its files come as signed URLs that work for 15 minutes; ask again for fresh ones until the files are deleted, 24 hours after the job finished (then expired). wait holds the answer until the job ends or that many seconds pass, at most 25.
      security:
      - apiKey: []
      parameters:
      - name: job
        in: path
        required: true
        schema:
          type: string
          pattern: ^job_[0-9a-f]{24}$
      - name: wait
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          maximum: 25
        description: Seconds to hold the answer while a queued job runs
      responses:
        '200':
          description: The job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobStatus'
        '401':
          description: No valid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: unauthorized
                message: send the engine API key as a bearer token
        '404':
          description: No such verb or job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: not_found
                message: there is no such job
      tags:
      - Jobs
  /api/agents/outputs/{job}/{file}:
    get:
      operationId: output
      summary: Download one output file.
      security: []
      parameters:
      - name: job
        in: path
        required: true
        schema:
          type: string
      - name: file
        in: path
        required: true
        schema:
          type: string
      - name: expires
        in: query
        required: true
        schema:
          type: integer
      - name: sig
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The file
        '403':
          description: The signature is wrong or has expired
        '410':
          description: The 24-hour hold has passed
      tags:
      - Jobs
      description: The signed URL comes in a job's answer. The file is held for 24 hours after the job finished; ask the job again for a fresh URL while it is held. No API key is needed.
components:
  schemas:
    JobState:
      type: string
      enum:
      - queued
      - running
      - ok
      - refused
      - failed
      - cancelled
      - expired
    File:
      type: object
      properties:
        name:
          type: string
        bytes:
          type: integer
        content_type:
          type: string
        url:
          type: string
        url_expires_at:
          type: string
          format: date-time
    JobStatus:
      type: object
      properties:
        job:
          type: string
        verb:
          type: string
        units:
          type: integer
          description: The price while it waits or runs; once it ends, what it was charged
        status:
          $ref: '#/components/schemas/JobState'
        queued:
          type: boolean
        created_at:
          type: string
          format: date-time
        started_at:
          type:
          - string
          - 'null'
          format: date-time
        finished_at:
          type:
          - string
          - 'null'
          format: date-time
        retry_after_s:
          type: integer
          description: 'While queued or running: when to ask again'
        result:
          description: 'Once ok: what the engine printed, as JSON'
        error:
          type: string
        message:
          type: string
        http_status:
          type: integer
          description: 'For refused or failed: the status an immediate call would have had'
        files_expire_at:
          type: string
          format: date-time
        files:
          type: array
          items:
            $ref: '#/components/schemas/File'
    Error:
      type: object
      required:
      - error
      - message
      properties:
        error:
          type: string
        message:
          type: string
        limit:
          type: string
          enum:
          - monthly_units
          - free_plan_units
          - not_eligible
          - rate
        reset_at:
          type: string
          format: date-time
        retry_after_s:
          type: integer
        policy:
          type: object
          description: 'With error content_policy: the rule the input broke and the acceptable use policy''s address'
          properties:
            rule:
              type: string
              enum:
              - trademark
              - hate
              - minors
              - impersonation
            acceptable_use_policy:
              type: string
              format: uri
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: An engine API key (tleng_...) from POST /api/agents/signup
x-limits:
  units_per_period: 1500
  pass:
    days: 30
    first_cents: 100
    cents: 2000
    renews: false
    buy: /api/agents/subscribe
  unit_pack:
    units: 500
    cents: 1000
    spent_after: units_per_period
    expire: false
    buy: /api/agents/units
  card_plan:
    first_month_cents: 100
    monthly_cents: 2000
    renews: monthly, until cancelled
    subscribe: /engines/subscribe
  free_plan:
    units_per_month: 50
    queued_renders: need a pass or the card plan
    starts_when: the owner confirms their email
  max_input_bytes: 1048576
  max_output_bytes: 52428800
  output_hold_hours: 24
  unit_costs:
    art_schema: none
    art_presets: none
    art_materials: none
    art_starter: none
    art_check: none
    art_render: 1 at 1200 pixels wide or less, 5 above
    art_swatch: 1 at 512 or less, 2 above
    material_bake: 1 at 512 or less, 2 at 1024
    material_check: none
    material_cost: none
    material_apply: '1'
    form_starter: none
    form_check: none
    form_apply: '1'
    form_build: '1'
    character_list: none
    character_generate: 3 for a person at near detail; 1 at mid or far, for the lofted figure and for an animal
    terrain_heightmap: '1'
    city_plan: '1'
    world_schema: none
    world_starter: none
    world_check: none
    world_apply: '1'
    world_heightmap: '1'
    voice_speak: '1'
    sound_list: none
    sound_effect: '1'
    video_schema: none
    video_presets: none
    video_examples: none
    video_check: none
    video_cost: none
    video_still: 1, or with shots in the scene 1 plus 3 plus 1 for each 1.6 megapixels
    video_render: 'from the engine''s cost report: design renders x megapixels / 45, plus frames x megapixels / 200, plus shot frames x megapixels / 1.6, plus 3 a shot clip (video_cost says it first); at most 600'
    raster_schema: none
    raster_check: none
    raster_render: '3 plus 1 for each 1.6 megapixels: 4 at 1280x720, 5 at 1920x1080'
    pull_schema: none
    pull_prereg: none
    pull_analyse: 1 for each 40,000 session-draws over a thousand events, at least 1 (300 default twin sessions cost 9); over 2, queued; at most 300
    pull_twin: 1 for each 40,000 session-draws over a thousand events, at least 1 (300 default twin sessions cost 9); over 2, queued; at most 300
    pull_cost: none
    pull_schedule: '1'
    pull_seal: '1'
    pull_open: '1'
    pull_close: '1'
    pull_replay: '1'
    pull_align: '1'
    pull_lab: 1 for a one-dimensional reference; a theory document (one-dimensional or with a model) and reference skyrme or hopfion are queued and cost 1 for each 5 CPU-seconds of one thread the engine estimates from its lattice and steps (pull_cost says it first); at most 300
    pull_practice: '1'
    pull_call: '1'
  queued:
    verbs:
    - video_still
    - video_render
    - raster_render
    - pull_analyse
    - pull_twin
    - pull_lab
    max_video_seconds: 60
    max_long_side: 1920
    max_short_side: 1080
    max_fps: 30
    max_units_per_job: 600
    job_minutes: 40
    max_output_bytes: 52428800
    poll_wait_max_s: 25
  pull:
    units: ceil(sum over sessions of (draws + 200) x max(1, events / 1000) / 40000), at least 1
    max_surrogates: 9999
    max_twin_sessions: 1000
    max_sessions: 200
    max_events_per_session: 50000
    max_twin_beats: 5000
    immediate_units: 2
    immediate_twin_sessions: 20
    max_units_per_job: 300
    cpu_seconds_per_unit: 15
    quick_seconds: 30