3D Valley Jobs API

The Jobs API from 3D Valley — 4 operation(s) for jobs.

Operations 5

POST /jobs Start a job #
GET /jobs Your jobs, newest first #
GET /jobs/{id} A job as it stands; Prefer: wait=N waits for it #
GET /jobs/{id}/events Server-sent events: progress, then done #
POST /jobs/{id}/cancel Cancel a job that has not started #

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/3dvalley-com:3dvalley-com-jobs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

3dvalley-com-jobs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 3D Valley Jobs API
  version: 1.0.0
  summary: A free CC0 library of 3D models, textures and HDRIs, and 3D generation, retexturing and remeshing for credits.
  description: 'Docs: https://3dvalley.com/docs/api. MCP server: https://3dvalley.com/mcp.'
  contact:
    email: hello@3dvalley.com
    url: https://3dvalley.com/docs/api
servers:
- url: https://3dvalley.com/api/v1
security:
- bearer: []
- {}
tags:
- name: Jobs
paths:
  /jobs:
    post:
      operationId: createJob
      summary: Start a job
      security:
      - bearer: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          maxLength: 255
      - name: Prefer
        in: header
        required: false
        schema:
          type: string
          example: wait=50
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobRequest'
      responses:
        '200':
          description: The same job again (same Idempotency-Key and body)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '201':
          description: Created and finished within the wait
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '202':
          description: Created, still running
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '400':
          description: invalid_param
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: insufficient_credits
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: insufficient_scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: idempotency_conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: input_rejected
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: spend_cap_reached, rate_limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: provider_failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Jobs
    get:
      operationId: listJobs
      summary: Your jobs, newest first
      security:
      - bearer: []
      parameters:
      - name: status
        in: query
        schema:
          type: string
      - name: tool
        in: query
        schema:
          type: string
      - name: cursor
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: Jobs
          content:
            application/json:
              schema:
                type: object
                properties:
                  jobs:
                    type: array
                    items:
                      $ref: '#/components/schemas/Job'
                  next_cursor:
                    type:
                    - string
                    - 'null'
      tags:
      - Jobs
  /jobs/{id}:
    get:
      operationId: getJob
      summary: 'A job as it stands; Prefer: wait=N waits for it'
      security:
      - bearer: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: job_...
      - name: Prefer
        in: header
        schema:
          type: string
      responses:
        '200':
          description: The job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '404':
          description: not_found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Jobs
  /jobs/{id}/events:
    get:
      operationId: jobEvents
      summary: 'Server-sent events: progress, then done'
      security:
      - bearer: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: job_...
      responses:
        '200':
          description: text/event-stream
      tags:
      - Jobs
  /jobs/{id}/cancel:
    post:
      operationId: cancelJob
      summary: Cancel a job that has not started
      security:
      - bearer: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: job_...
      responses:
        '200':
          description: The job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
        '409':
          description: conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Jobs
components:
  schemas:
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          - docs
          properties:
            code:
              type: string
              enum:
              - unauthorized
              - insufficient_scope
              - not_found
              - invalid_param
              - insufficient_credits
              - spend_cap_reached
              - rate_limited
              - idempotency_conflict
              - input_rejected
              - provider_failed
              - conflict
              - unavailable
            message:
              type: string
            fix:
              type: string
            docs:
              type: string
    Job:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
          enum:
          - queued
          - running
          - succeeded
          - failed
          - canceled
        tool:
          type: string
        model:
          type:
          - string
          - 'null'
        progress:
          type: number
        credits:
          type: object
          properties:
            price:
              type: integer
            charged:
              type: integer
            balance:
              type: integer
        output:
          type:
          - object
          - 'null'
        asset_id:
          type:
          - string
          - 'null'
        error:
          type:
          - object
          - 'null'
        created_at:
          type: string
        finished_at:
          type:
          - string
          - 'null'
    JobRequest:
      type: object
      required:
      - tool
      - input
      additionalProperties: false
      properties:
        tool:
          type: string
          enum:
          - image-to-3d
          - text-to-3d
          - retexture
          - remesh
          - texture-generator
        model:
          type: string
          description: 'Models per tool: image-to-3d: trellis-2 (5), trellis-2-pro (15), hunyuan-3d-3-1-pro (90), tripo-3-1 (50), tripo-3-1-detailed (100); text-to-3d: trellis-2 (5), trellis-2-pro (15), hunyuan-3d-3-1-pro (90), tripo-3-1 (50), tripo-3-1-detailed (100); retexture: trellis-2-texture (5), trellis-2-texture-pro (10), tripo-texture (20), tripo-texture-detailed (40); remesh: tripo-remesh (50); texture-generator: flux-2-klein-material (2), muse-image-material (5), gpt-image-2-5-material (8)'
        input:
          type: object
          properties:
            image:
              type: string
            mesh:
              type: string
            prompt:
              type: string
        options:
          type: object
        max_credits:
          type: integer
          minimum: 0
        webhook_url:
          type: string
          format: uri
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: An API key (3dv_live_...) or an OAuth access token.