Printy3D

Reference

Rate limits & limits

What the API refuses with 429 and 503, and the fixed limits worth designing around.

Rate and concurrency#

codeStatusWhat is limited
rate_limited429Requests per key, set by your plan.
concurrency_limit429Active jobs (queued, running or verifying) per account, set by your plan.
quota_exceeded429A plan quota, such as your input storage.
service_unavailable503A dependency is briefly down; job and file creation fail closed rather than run unmetered.
capacity_exhausted503No GPU can start a live job now, or no Exact Check worker is running for a live check.

Every one of these answers carries Retry-After (seconds). Wait at least that long, then retry; keep the same Idempotency-Key on a create so the retry cannot duplicate it. POST /v1/jobs checks concurrency first, then capacity for live jobs (a GPU, or for an Exact Check a running Exact Check worker), then credits (402).

Poll jobs every two seconds or so rather than in a tight loop, and list jobs with GET /v1/jobs instead of polling each one when you track many.

Request rate#

Each API key has a bucket of requests. A request takes one, the bucket refills at the plan's rate, and it holds at most the burst. When it is empty the API answers 429 rate_limited, and Retry-After says when a request is free again. The official SDKs wait and retry for you.

PlanRequests per secondBurst
Free (and pending approval)210
Developer1050
Team25100

Responses carry the state of the bucket, so a client can slow down before it is refused:

HeaderMeaning
RateLimit-LimitThe burst: how many requests the bucket holds.
RateLimit-RemainingHow many it holds now.
RateLimit-ResetSeconds until it is full again.

A request without a valid key (missing, malformed or unknown) counts against its address instead, at 5 per second with a burst of 20. Long-lived requests such as GET /v1/jobs/{id}/events count once, when they start.

Fixed limits#

WhatLimit
Simple upload10 MiB per file
Resumable uploadApproved accounts: your plan's per-file limit (200 MB on free, 2 GB on developer and team), never above 1 GiB
Accounts not yet approved10 MiB per file, 100 MiB of inputs in total; no resumable upload
Upload URL lifetime15 minutes (simple), 1 hour per part URL (resumable; replay to renew)
Starting a resumable uploadThree times per file (resuming does not count)
Idempotency-Key retention24 hours
File names5–200 characters, no path separators or control characters
Retention of files and outputs30 days, then 410 expired
Attempt time limitinspect 3600 s, repair 7200 s, tool 1800 s, Exact Check 290 s for the checker (less with max_credits), stopped at 300 s
Exact Check ZIPAt most 2,000 entries and 850 MiB unpacked, ratio at most 200:1
Attempts per jobUp to 3 (a lost worker is retried, never charged)
QueueA queued live job fails free after 10 minutes without GPU capacity (an Exact Check: without an Exact Check worker) or 24 hours in the queue
Pieces in one mesh artifact50
Cut planes per job8
Lattice model sizeLongest side at most 635 mm
Active API keys25 per account
Key rotation grace0 to 7 days (default 24 h)
List page size1–100, default 20
Minimum charge of a live job10 credits

Plan values (rates, concurrent jobs, storage, included credits) are set per plan; ask the Printy3D team about yours. See also Uploads and Credits & billing.