FAQ

View as Markdown

Quick answers about keys, limits, files, webhooks, money and AI assistants. Each one links to the guide with the full details. The answers follow the account type you chose at the top of the page.

Getting started

What is the base URL, and which version should I use?

Every request goes to https://public-api.dapi.digital, with paths starting /v2. Use v2 for anything new. v1 keeps working for existing integrations but gets no new features, and it does not accept integrator keys. See the Quickstart.

How do I get an API key?

Create one on the API keys page of your 3DAPI dashboard, then send it in the x-api-key header on every request. Keep it on your server, never in a browser or mobile app. See Authentication.

Is there a sandbox or test mode?

No. Every request works on your real account. Test reads freely, and test orders with a small order. Integrators can cover a first test print with the $15 sample credit they get on approval (see Orders you pay).

Are there SDKs?

There are no official SDKs. The API is described by an OpenAPI 3.1 spec at /docs/openapi.json, which works with any client generator. AI tools can read llms.txt for an index of every page.

Keys and permissions

Can I limit what a key can do?

Yes. Each key carries scopes, such as orders:read or products:write. A request outside the key's scopes is refused with 403 missing_scope. Give each app or assistant its own key with only the scopes it needs. See Scopes.

Why do I get actor_not_allowed?

The endpoint belongs to the other kind of account. Designer and integrator accounts each have their own endpoints, and the reference marks which is which. See Account kinds.

Why can't my key top up the wallet or add a card?

Endpoints that move money into or out of your account (billing details, cards, top-ups, auto top-up and withdrawals) only work from your signed-in dashboard, never with an API key. They answer a key with credential_not_allowed.

Requests, errors and limits

What are the rate limits?

500 requests per minute per key, plus a tighter 60 per minute for creating quotes, uploads and orders, cancelling orders and money operations. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Past a limit you get 429 rate_limited with a Retry-After header. See Rate limits.

How should I handle errors?

Every error has the same body. Branch on its code, never on the message. When the fix is in your dashboard (billing details, compliance, your plan), details.fix_url links to the page. See Errors.

What should I send support when a request fails?

The Request-Id response header, also in details.request_id. Requests are kept in your logs for 30 days.

How does pagination work?

Lists use cursors. Pass limit (1 to 100, default 20), then pass next_cursor back as cursor while has_more is true. Do not edit or build cursors yourself. See Pagination.

Can I safely retry a request that timed out?

Yes, if you send an Idempotency-Key header. A retry with the same key within 24 hours returns the first response instead of creating a second order, quote or upload. Reusing a key with a different body is refused. See Idempotency.

Can I get related objects in one request?

Yes. Add expand[]= with the field path, up to three levels deep. The key needs read access to the expanded object, otherwise you get the plain reference back. See Expanding.

Files and webhooks

How do I send a file?

In three steps: create an upload with POST /v2/uploads, PUT the file to the upload_url it returns, then pass the upload id in your request. Files never go in a JSON body. Upload ids expire after 24 hours if unused. See Uploads.

How large can files be?

Up to 25 MB for images, attachments and compliance documents, 150 MB for design files, 250 MiB for quote files (.stl, .3mf, .obj, .step, .stp) and 1 GiB for order files. See Upload purposes.

How do I know a webhook really came from 3DAPI?

Each delivery is signed with HMAC-SHA256 in the X-Dapi-Webhook-Signature header. Check the signature against the raw body and reject timestamps more than 5 minutes old. See Signatures.

What happens if my endpoint is down?

Answer with a 2xx within 10 seconds. Otherwise the delivery is retried with growing gaps for 24 hours, so the same event can arrive more than once: deduplicate on X-Dapi-Event-Id. Events stay in your log for 30 days and can be sent again. See Delivery.

Designers: what the API does

What can I automate as a designer?

Products, variants and designs, attachments, stock and stock purchases, extras, orders from every channel, quality-control tickets, compliance documents, webhooks and a read-only view of your wallet. See Account kinds.

Can I place orders through the API?

Yes. create_order orders prints of your own variants at cost (production, shipping and VAT where it applies), paid from your wallet, with any shortfall charged to your saved card. You can cancel an order while it is paid, for a full refund.

Can I buy stock through the API?

Yes, if your plan includes prepaid stock. Stock purchases are paid from your wallet balance only.

Why won't my product publish?

Read publishing.blockers on the product. It lists everything still in the way, in the order to fix it: unfinished onboarding, a store not registered as a business or not public, a missing or unapproved design, a missing category, or missing compliance documents. Each public product counts toward your plan's limit.

Can an AI assistant sync orders from my other shops?

Yes. An assistant connected to your account can place orders from other platforms by SKU. See Orders from any platform.

AI assistants

Can I use 3DAPI from Claude, ChatGPT or Grok?

Yes. Add https://mcp.dapi.digital/mcp as a connector in the app and sign in to 3DAPI. No API key or install needed. See Connect Claude, ChatGPT or Grok.

Can an assistant spend my money?

Only if you tick orders and purchases when you connect it. Even then, each order or purchase shows you the cost first and needs your confirmation. ChatGPT never gets orders and purchases. See Orders and purchases.

Can I run the MCP server myself?

Yes. Run npx -y @dapi-digital/mcp with an API key, or install the Claude Desktop extension. Set DAPI_ALLOW_WRITES=false for read only, or DAPI_ALLOW_MONEY=false to block orders and purchases. See Connect an AI assistant.

How do I disconnect an app?

On the API keys page of your dashboard, under Connected apps. Access ends at once. See Disconnect an app.

Support

How do I contact support?

Email contact@dapi.digital. Include the Request-Id of any failing request and, for an order, its number.