For data & BI teams
Sync your packaging register into your data warehouse
The sync API (/api/v1) exposes a workspace's packaging register so an integrator can load it incrementally into a warehouse with standard ELT tooling. We ship no bespoke per-warehouse connector — you wire one together in your own tool from the recipes below. A register:write-scoped key also opens the other direction: upserting item types, items and attributes back in from your ERP or PLM, keyed by your own external reference.
The same /api/v1 also powers an MCP server, so Claude or any other MCP-capable agent can read and write your register directly — see connecting an agent.
What syncs
Eight read-only GET resources, one per register entity, sharing an identical query, pagination and error contract.
| GET /item-types | Packaging item types (e.g. Box, Pallet) with embedded external refs. |
| GET /attributes | Attribute definitions, incl. select options, with external refs. |
| GET /items | Packaging items, with external refs. Accepts ?q= to find one by name or article number. |
| GET /item-attribute-values | One row per (item, attribute) pair; select choices in selectedOptions. |
| GET /item-attribute-scoped-values | Per-selection sub-attribute values (e.g. weight per chosen material). |
| GET /bom-lines | Bill-of-materials lines: component quantity within a parent item. |
| GET /external-references | The flat, authoritative external-reference join table to your ERP/PLM. |
| GET /compliance | Materialized per-(item, profile) compliance status, incl. which requirements are open. |
Every record carries the full audit set (createdAt, updatedAt, deletedAt and their …By counterparts). A register:write-scoped key additionally unlocks a growing set of upsert endpoints — see the OpenAPI document for the complete, authoritative field inventory.
One more read-only endpoint answers a different kind of question: GET /item-types/{id}/attribute-schema returns everything about one item type's attributes — type, unit, valid select options, sub-attribute relations — in a single call, instead of joining /item-types and /attributes yourself to know how to fill one in.
Built for incremental loads
Workspace API key
A workspace admin or owner creates a key under Workspace settings → "API access", scoped to register:read. The key resolves its own workspace — there is no tenant parameter to widen it.
Cursor + watermark
Page with an opaque nextCursor until hasMore is false, then resume future runs from the response watermark — not your own max updatedAt — passed back as updated_since.
Writing back
A register:write-scoped key unlocks upsert-by-external-reference endpoints: idempotent, keyed by your own reference rather than a Packregister id, so a repeated call never creates a duplicate.
| PUT /item-types/external/{system}/{identifierType}/{externalId} | Upsert an item type keyed by your own external reference. Once linked, further calls are a partial update. |
| PUT /items/external/{system}/{identifierType}/{externalId} | Upsert an item; its item type is resolved via that item type’s own external reference, not an internal id. |
| PUT /attributes/external/{system}/{identifierType}/{externalId} | Upsert an attribute definition. |
| PUT /attribute-options/external/{system}/{identifierType}/{externalId} | Upsert a select option on an existing attribute. |
| PUT /items/{id}/attribute-values | Set attribute values on an item by our internal id — no external reference needed. |
For an initial load of 1,000-10,000+ items, use POST /items/bulk instead of one request per item — up to 20,000 entries per call. It answers 202 Accepted immediately with a jobId, then processes each item as its own background job. Poll GET /items/bulk/{jobId} for the aggregate counts and a per-item ok / retrying / failed / pending result — a job is never all-or-nothing, and a permanently failed item stays visible rather than silently dropped.
Pick your tool
Each recipe is copy-pasteable and requires only a register:read key.
Airbyte
A declarative Connector Builder manifest — paste it in as-is, or commit it as a low-code connector. Uses DatetimeBasedCursor with a lookback window to approximate the watermark model.
version: 6.44.0
type: DeclarativeSource
check:
type: CheckStream
stream_names:
- itemsdlt
A rest_api pipeline definition covering all eight resources, cursored on updatedAt with a 30-second safety lag, merging by id into any dlt destination.
RESOURCE_PATHS = [
"item-types",
"attributes",
"items",
"item-attribute-values",
"item-attribute-scoped-values",
"bom-lines",
"external-references",
"compliance",
]Azure Data Factory / Fabric
REST Copy Activity pagination rules, plus a Web-activity pattern to capture the watermark a Copy Activity itself never exposes.
"paginationRules": {
"QueryParameters.cursor": "$.nextCursor",
"EndCondition:$.hasMore": "Const:false"
}Power BI
The recommended route is a report off the warehouse a prior recipe already loaded, not the API directly — incremental state and cursor paging are ELT-tool work, not Power Query work.
Packregister /api/v1 --(Airbyte | dlt | ADF/Fabric)--> Warehouse --> Power BI
register:read key (Fabric, (DirectQuery
Snowflake, or Import)
BigQuery, ...)