3D Valley Jobs API
The Jobs API from 3D Valley — 4 operation(s) for jobs.
The Jobs API from 3D Valley — 4 operation(s) for jobs.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/3dvalley-com:3dvalley-com-jobs-api"
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.
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: 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.