Quickstart

1. Get an API key

  • Dashboard → API keys → Create. The key is shown once.
  • A device login: the agent starts it, the user approves a code at https://sinter.systems/device, the agent receives the key.

Keep the key in the environment

export SINTER_API_KEY=sk_sinter_...
export BASE=https://sinter.systems
export AUTH="Authorization: Bearer $SINTER_API_KEY"

curl -sS "$BASE/v1/me" -H "$AUTH"

2. Upload a model

curl -sS -X POST "$BASE/v1/quotes" -H "$AUTH" \
  -H "Idempotency-Key: bracket-v3-x10" \
  -F [email protected] -F material=PETG -F quantity=10

202: status received, or quoted at once

{
  "object": "quote",
  "id": "ord_...",
  "status": "received",
  "progress": { "stage": "queued", "fraction": 0, "ahead": 0 },
  ...
}
FieldValue
fileSTEP, STL, OBJ or 3MF, up to 50 MB. Required.
materialPLA+, PLA-CF, PETG, PETG-CF, ASA, ASA-CF, PC, PC-CF, TPU, TPU-CF, Nylon, Nylon-CF, PPA-CF, PPS-CF or Custom. Default PLA+.
material_noteCustom only: the material wanted. Required for Custom.
quantity1 to 100. Default 1.
unitsmm, cm or in. STL and OBJ only. Default mm.

3. Wait for the quote

Until status is quoted, needs_review, engineering or failed, poll every 5 to 10 seconds.

curl -sS "$BASE/v1/quotes/ord_..." -H "$AUTH"

200

{
  "object": "quote",
  "id": "ord_...",
  "status": "quoted",
  "flags": [],
  "options": [
    { "speed": "asap", "label": "Default", "days": null,
      "ship_by": 1791701999, "total_cents": 18450, "unit_cents": 1845,
      "currency": "USD", "available": true, "note": null },
    { "speed": "week", "label": "Economy", "days": null, "asap_offset_days": 7,
      "ship_by": 1792306799, "total_cents": 14760, "unit_cents": 1476,
      "currency": "USD", "available": true, "note": null }
  ],
  "review_url": "https://sinter.systems/q/...",
  ...
}

Read flags before proceeding: manufacturability findings can include warnings on a quoted part. Also check statuses and errors.

4. Price delivery

Every order needs a delivery price before it can be paid.

curl -sS -X POST "$BASE/v1/quotes/ord_.../delivery" -H "$AUTH" \
  -H "Content-Type: application/json" \
  -d '{"name": "Jane Doe", "phone": "4155550100", "street": "1 Market St",
       "city": "San Francisco", "state": "CA", "zip": "94105"}'
ResponseMeaning
200The quote, with delivery: method, city, fee_cents.
422carrier_shipping_available: outside the courier area. Ask the user; if they choose carrier shipping, send the address again with "accept_carrier": true. Other codes: Delivery codes.

5. Accept

A purchase. Needs a key with the purchase scope, which the account owner grants by turning on Allow purchases, and the user’s approval of this purchase: price, quantity, material and ship date. See Rules for agents.

curl -sS -X POST "$BASE/v1/quotes/ord_.../accept" -H "$AUTH" \
  -H "Idempotency-Key: accept-ord_...-week" \
  -H "Content-Type: application/json" \
  -d '{"speed": "week"}'
ResponseMeaning
402payment_required. Every order is paid by card first. Give checkout_url to the user. Poll the quote every 30 s or slower until status is accepted.
200Already paid: the order.
403No purchase scope.
409Expired, held for review, the option is no longer available, or delivery not priced. ship_date_changed: show the user the new ship_by; accept again only if they agree.
428No Idempotency-Key.

6. Track

The order id is the quote id.

curl -sS "$BASE/v1/orders/ord_..." -H "$AUTH"

200

{
  "object": "order",
  "id": "ord_...",
  "status": "in_production",
  "ship_by": 1792306799,
  "parts": [ { "unit": 1, "status": "printing", "progress": 0.42 }, ... ],
  "tracking": null,
  ...
}