Developers
Make 3D objects from code.
An HTTP API and an MCP server, on your credits and at the same prices as the site. One request makes an object; you follow it and download the files.

API quick start
From a key to a GLB in four requests
01Get a key
In Settings, under API keys. The key starts with
slp_and is shown once: keep it in an environment variable and send it as a bearer token. Check it by reading your balance.export SLEIPNER_API_KEY=slp_... curl -H "Authorization: Bearer $SLEIPNER_API_KEY" https://3d.sleipner.ai/api/creditsHTTP/1.1 200 OK { "balance": 600, "prices": [{ "tier": "quick", "label": "Quick", "credits": 200, "list_price": 350, … }, …], "entries": [ … ] }02Make an object
Describe one object.
tierisquick(200 credits) orstandard(600).request_idmakes a retry safe: the same id returns the first object and charges nothing.curl -X POST https://3d.sleipner.ai/api/objects \ -H "Authorization: Bearer $SLEIPNER_API_KEY" \ -H "Content-Type: application/json" \ -d '{"kind":"generate","prompt":"A brass ship lantern with a glass chimney", "tier":"quick","request_id":"lantern-1"}'HTTP/1.1 201 Created { "object_id": "6f1c2d3e-4a5b-4c6d-8e7f-0a1b2c3d4e5f", "status": "queued", "page_url": "https://3d.sleipner.ai/objects/6f1c2d3e-4a5b-4c6d-8e7f-0a1b2c3d4e5f", "api_url": "https://3d.sleipner.ai/api/objects/6f1c2d3e-4a5b-4c6d-8e7f-0a1b2c3d4e5f", "price": 200, "list_price": 350, "balance": 400, "already_submitted": false }03Follow it
Poll
api_urlevery 10 to 15 seconds.statusgoesqueued→running→ready(orfailed, with the credits refunded).job.fractionandjob.stepLabelsay how far it is. A Quick object usually takes under 10 minutes.curl -H "Authorization: Bearer $SLEIPNER_API_KEY" \ https://3d.sleipner.ai/api/objects/6f1c2d3e-4a5b-4c6d-8e7f-0a1b2c3d4e5fHTTP/1.1 200 OK { "id": "6f1c2d3e-4a5b-4c6d-8e7f-0a1b2c3d4e5f", "title": "Brass ship lantern", "status": "running", "job": { "status": "running", "tier": "quick", "fraction": 0.45, "stepLabel": "Building the 3D shape", … }, "files": null, // renders, size and formats once "status" is "ready" … }04Download
Formats:
glb,gltf,fbx,usdz,blend,obj; detailstandardorlow. The answer is a redirect to a link that works for 5 minutes, so let your client follow it (-L). Downloads are free.curl -L -o lantern.glb -H "Authorization: Bearer $SLEIPNER_API_KEY" \ "https://3d.sleipner.ai/api/objects/6f1c2d3e-4a5b-4c6d-8e7f-0a1b2c3d4e5f/download?format=glb&detail=standard"HTTP/1.1 303 See Other Location: <presigned URL, valid 5 minutes>
Next: change an object (one change per request, on yours or a library model; a new colour, material or wear costs 50 credits), or the same flow in JavaScript and Python.
curl -X POST https://3d.sleipner.ai/api/objects \
-H "Authorization: Bearer $SLEIPNER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"edit","object_id":"6f1c2d3e-4a5b-4c6d-8e7f-0a1b2c3d4e5f","instruction":"make it dark green",
"tier":"quick","request_id":"lantern-green"}'Reference
Endpoints
JSON in and out. Errors are {"error": "…"} with an HTTP status, and a refusal to make or change something adds a code. Each endpoint’s parameters, example request and response and errors are in the API reference.
| Request | What it does |
|---|---|
POST /api/objects | Make an object |
POST /api/objects | Change an object |
POST /api/objects | Make or change with reference images |
GET /api/objects | List your objects |
GET /api/objects/{id} | Get an object |
GET /api/objects/{id}/download | Download a file |
POST /api/objects/{id}/cancel | Cancel an object |
GET /api/credits | Balance and prices |
POST /api/credits/redeem | Redeem a credit code |
GET /api/capabilities | Capabilities |
GET /library.json | Library catalog |
GET /api/health | Health |
Rules
Credits, scope and limits
Credits
Quick 200 (about $2), Standard 600 (about $6), a surface change 50 (launch prices until 31 Dec; list 350 and 1,000). A job keeps the price it started at. Charged when the request is accepted, refunded if it fails or is cancelled. Not enough credits: 402 with your balance and what is needed.
What a key can do
A key acts as you: it spends your credits and sees your objects. It can’t buy credits, manage keys or change your account. Up to 10 keys; revoking one works from the next request.
Manage keysRate limits
Per key: 60 requests at once, then 1 a second. New builds: 5 at once, then one every 30 seconds. Up to 2 builds in the works per account. Over a rate limit: 429 with Retry-After; too many builds in the works: 429 with the code too_many_active. During the beta there is no uptime guarantee; if making objects is paused, the API says so and nothing is charged.
Every make and change gets a capabilities check before anything is charged: a held request is a 422 whose scope.status is uncertain (send accept_uncertain: true once the user accepts) or not_yet (with suggestions, a roadmap and a notify_url; make_anyway: true tries it anyway). The full list: GET /api/capabilities. What’s in V1
MCP
For AI agents
The MCP server is https://3d.sleipner.ai/mcp (Streamable HTTP). Apps that connect through a browser sign in with OAuth and need no key; clients that send headers can use your key. The tools search the library, make and change objects, follow them and fetch the files, on the same credits.
{
"mcpServers": {
"sleipner-3d": {
"url": "https://3d.sleipner.ai/mcp",
"headers": { "Authorization": "Bearer slp_..." }
}
}
}Step-by-step for ChatGPT, Claude, Claude Code, Cursor, VS Code, Windsurf and others: Connect your AI. New to Sleipner? Getting started, FAQ and support. For language models reading this site: llms.txt.