Quickstart
Make your first authenticated call in the quickstart.
The DUST platform API models physical-object workflows as a small set of composable resources. A Thread is the digital record for a physical item; everything else — identifiers, files, folders, assemblies, sharing, shipments — attaches to, organizes, or moves Threads. This page is the map: one short section per concept, with the key endpoints and a link to the deeper guide.
Some API namespaces predate the current product vocabulary. The DICE web app and these docs use the left-hand names; the API paths keep the names on the right.
| DICE / docs name | API namespace | Notes |
|---|---|---|
| Threads | /api/v1/threads |
— |
| Identifiers | /api/v1/tags |
Legacy tags naming in paths |
| Files | /api/v1/files |
Called resources in some schemas |
| Folders & Categories | /api/v1/bundles |
Bundle is the implementation name |
| Assemblies | /api/v1/assemblies |
Assemblies are Threads of kind assembly |
| Teams | /api/v1/teams |
Selected per-request via the Dust-Ctx-Team-Id header (legacy Dust-Ctx-Grp-Id still accepted) |
| Connections | /api/v1/connections |
Wire schemas keep the legacy team link naming |
| Sharing | /api/v1/sharing |
— |
| Shipments | /api/v1/transfers |
Legacy transfers naming in paths |
| Slices | /api/v1/slices |
— |
| Fabric | /api/v1/fabric |
Cross-organization provenance graph |
| Certificates | /api/v1/certificates, /api/v1/certificate-forms |
— |
| Public Pages | /api/v1/public-pages, /api/v1/public-page-designs |
Publishing requires the Team publisher grant |
| Events | /api/v1/events |
— |
Every request carries an AuthD bearer token; org-scoped endpoints — nearly all of them — add the Dust-Ctx-Org-Id header (and optionally Dust-Ctx-Team-Id to select a Team). See Authentication and Conventions. The complete parameter-level reference is the API reference.
A Thread is the record for one physical asset, part, document, or workflow item: a name and description, typed field data, attached files, bound identifiers, and an event history. Threads have a kind — ordinary units or assembly (see below).
POST /api/v1/threads — create one or manyGET /api/v1/threads — search and list (cursor pagination)GET /api/v1/threads/{thread_id} — get one, with field dataPOST /api/v1/threads/{thread_id}/data — upsert or remove field valuesPATCH /api/v1/threads/archive / PATCH /api/v1/threads/restore — archive lifecycleDeep dive: Threads API guide.
Field values are typed (text, number, date, select, resource references, even thread-valued fields) and nested by type. Templates define the expected fields for a repeatable kind of Thread.
POST /api/v1/templates / GET /api/v1/templates — create and list templatesGET /api/v1/templates/{templateId} / PATCH /api/v1/templates/{templateId} — read and updateAn identifier binds a physical marking — a DUST tag, QR code, barcode, Data Matrix symbol, or NFC chip — to a Thread, so a scan in the field resolves to the digital record. The API namespace is /api/v1/tags (legacy naming).
POST /api/v1/tags/extract — parse a DUST capture into a canonical fingerprint without bindingPOST /api/v1/tags/bind — attach an identifier to a ThreadPOST /api/v1/tags/identify — find the Thread matching a scanPOST /api/v1/tags/verify — confirm a scan matches a specific Thread’s identifiersPOST /api/v1/tags/unbind — detach an identifierDeep dive: Identifiers API guide.
Files (called resources in some schemas) are stored in object storage and attached to Threads directly or through resource-typed fields. Large uploads use the resumable tus protocol; small ones use a single multipart POST.
POST /api/v1/files — simple multipart uploadPOST /api/v1/files/finalize — turn completed tus uploads into resource recordsGET /api/v1/files/{resource_id}/download — downloadPOST /api/v1/files/urls — short-lived signed URLsGET /api/v1/files/search — search across filesDeep dive: Files API guide.
Identity lives in AuthD; the platform API scopes each org-scoped request to an Organization and a Team via context headers. Teams own Threads, and sharing, connections, and shipments all operate between Teams.
GET /api/v1/me — current user and available organizationsGET /api/v1/teams — Teams visible to the callerPOST /api/v1/org/teams / PATCH /api/v1/org/teams/{team_id} — Team management (org admins)POST /api/v1/org/teams/members — manage memberships (org admins)Deep dive: Teams, sharing, and connections.
Folders and Categories organize Threads. Both are bundles in the API — kind: "folder" for exclusive containment, kind: "category" for non-exclusive labeling — and bundles nest to form trees.
POST /api/v1/bundles — create (with kind and optional childOfId parent)GET /api/v1/bundles / GET /api/v1/bundles/children — list, or walk the tree lazilyPOST /api/v1/bundles/{bundle_id}/add / PATCH /api/v1/bundles/{bundle_id}/move — place ThreadsPATCH /api/v1/bundles/parent — re-parent a bundleAn assembly is a Thread of kind assembly whose Parts are other Threads — a bill-of-materials structure. Parts can be protected against detachment, and part lists roll up transitively.
GET /api/v1/assemblies — list assembly ThreadsPOST /api/v1/assemblies/{assembly_id}/parts / DELETE /api/v1/assemblies/{assembly_id}/parts — attach and detach PartsGET /api/v1/assemblies/{assembly_id}/rolled-up-parts — transitive part listPATCH /api/v1/assemblies/{assembly_id}/kind — convert a Thread between unit and assemblyPOST /api/v1/imports/plan / POST /api/v1/imports/commit — dry-run and commit a whole assembly import packageThreads can reference each other with typed links. Relation definitions name the relationship kinds; thread links are the instances.
POST /api/v1/relations / GET /api/v1/relations — define and list relation kindsPOST /api/v1/links / GET /api/v1/links — create and list links between ThreadsGET /api/v1/threads/{thread_id}/links — links from one Thread’s perspectiveDELETE /api/v1/links/{link_id} — unlinkSharing grants another Team viewer or editor access to a Thread or bundle. Grants are stored as relationship tuples; the access summary shows the effective result, including inherited access.
POST /api/v1/sharing — share Threads or bundles with TeamsGET /api/v1/sharing — list grants (direction=in|out)GET /api/v1/sharing/access-summary — effective access for one objectGET /api/v1/sharing/partner-inventory — everything shared with one partner TeamDeep dive: Teams, sharing, and connections.
A Connection (API: team link) is the standing agreement between two Teams — often in different Organizations — that permits sharing and shipments, with an allowed data-flow direction. It has an invite/accept/confirm handshake and a pause/resume lifecycle.
POST /api/v1/connections — create (invite)PATCH /api/v1/connections/accept / confirm / reject / cancel — handshakePATCH /api/v1/connections/pause / resume — suspend and restorePOST /api/v1/connections/amend/propose — propose a direction changeA Shipment (API: transfer) moves ownership of Threads from one Team to another: build a draft manifest, send it, and the receiver accepts, rejects, or requests changes.
POST /api/v1/transfers — create a draftPOST /api/v1/transfers/{transfer_id}/items — add manifest itemsPOST /api/v1/transfers/{transfer_id}/send — send to the receiving TeamPOST /api/v1/transfers/{transfer_id}/respond — accept / reject / request changesGET /api/v1/transfers — inbox, outbox, and sent viewsSemantics and lifecycle: Shipments; endpoint summary in Teams, sharing, and connections.
A Slice derives a new Thread from an existing one within the same Team — selected fields, files, and identifiers copied or linked — typically to prepare a shareable subset.
POST /api/v1/slices — slice one ThreadPOST /api/v1/slices/batch — derive many Threads at onceGET /api/v1/slices/{slice_id} — a Slice with its Fabric linksFabric is the cross-organization provenance layer: when Threads move or are disclosed across Team boundaries, Fabric records the graph of linked Threads and controls exactly which data each downstream party can see (disclosure), revision by revision.
GET /api/v1/fabric/threads/{thread_id}/graph — the provenance graph visible from a ThreadGET /api/v1/fabric/links/{link_id}/context — currently disclosed data on a linkPOST /api/v1/fabric/threads/{thread_id}/disclosure/revise / redact — change what is disclosedPOST /api/v1/fabric/threads/{thread_id}/disclosure/push — push a disclosure downstreamGET /api/v1/fabric/notifications — disclosure notifications for downstream ownersConcepts: Fabric.
Certificates render Thread data into issued, verifiable documents. Certificate Forms are the layouts; generation binds a form to a Thread by field name.
A form may contain multiple Vlink QR zones. Certificate generation accepts one Vlink configuration per zone Identifier and returns every issued zone-to-Vlink association.
POST /api/v1/certificate-forms / GET /api/v1/certificate-forms — manage formsPOST /api/v1/certificates/preflight — check a form resolves against a ThreadPOST /api/v1/certificates/generate — issue a CertificateGET /api/v1/certificates — list a Thread’s CertificatesPOST /api/v1/certificates/void — void oneConcepts: Certificates.
A Public Page is the unauthenticated web view of a Thread — the digital product passport a consumer reaches by scanning an Identifier. What it shows is decided entirely by a reusable, Team-owned Public Page Design, so publishing takes no per-Thread content input: publish resolves the design against the Thread. A page’s URL is reserved and bound before anything is published, so labels can be printed first.
Publishing a design freezes an immutable Design Version; each page pins one Design Version plus one Data Snapshot (the values resolved for that Thread). A Publish Wave republishes every page in a scope — Folder, Category, Template, or an explicit selection — through one Design Version, as a background run with its own progress and failure accounting.
Reserving a page URL and binding it to a Thread are member-tier — reserving an address publishes nothing, so labels can be printed before anyone decides to publish. Everything that makes data public — publishing a page, activating or archiving it, authoring a design, publishing a Design Version, rolling out, and Publish Waves — requires the Team publisher grant (Team admin implies it), as do the preflight and preview checks. Each operation’s x-required-role in the API reference is authoritative.
POST /api/v1/public-pages / POST /api/v1/public-pages/{publicPageId}/bind — reserve a permanent page URL, then bind it to a ThreadGET / PUT /api/v1/public-pages/thread/{threadId} — read, or get-or-create, a Thread’s pageGET /api/v1/public-pages/thread/{threadId}/activity — anonymous views and verification scans on the published pagePOST /api/v1/public-pages/{publicPageId}/publish — publish a snapshot through the design’s latest versionPATCH /api/v1/public-pages/{publicPageId} — activate or archive a page without changing its URLGET /api/v1/public-pages/{publicPageId}/publications — publication historyPOST /api/v1/public-pages/preflight / preflight/batch — check a design resolves against one or many ThreadsPOST /api/v1/public-page-designs / GET / PATCH /api/v1/public-page-designs/{designId} — author a design draftPOST /api/v1/public-page-designs/{designId}/versions — publish a Design Version (GET lists them)POST /api/v1/public-pages/designs/{designId}/roll-out — make a design’s latest version live across its pagesPOST /api/v1/public-pages/waves — start a Publish Wave (GET its run record, items, and list)POST /api/v1/public-pages/waves/{waveId}/retry-failed / cancel — retry the failures, or stop the remaining workRollout is forward-only: a Design Version is never restored, and cancelling a wave leaves already-published pages on the version they received.
Concepts: Public Pages.
Every meaningful change — field edits, binds, shares, shipments — is recorded as an event, forming the audit trail shown as Transaction History in DICE.
GET /api/v1/events — list events, filterable by Thread, Team, action, and time, with optional activity grouping (groupBy)GET /api/v1/summary — headline count metricsGET /api/v1/notifications — the caller’s notificationsQuickstart
Make your first authenticated call in the quickstart.
TypeScript client
Use the typed @dustid/apid-client instead of raw HTTP.
Conventions
Headers, pagination, and errors in API conventions.
Full reference
Every path, parameter, and schema in the API reference.