Atoms API
v1Manage and visualize hierarchical product relationships. Atoms represent the actual physical items in orders and their parent-child relationships.
Where this fits in your operation
The atom tree is the physical packing structure of an order — what is loaded on what:
- Read the tree to see how an order’s items are organised into pallets/colli before it ships.
- Repacking: goods were consolidated onto fewer pallets at your warehouse — patch the tree so scanning and terminal handling match the physical load.
Interactive API Explorer
Loading API Documentation...
Authentication
Authorization: apikey YOUR_API_KEY_HEREBase URLs
- Production:
https://app.zenderatms.com/api/ - Staging:
https://staging.zenderatms.com/api/
Endpoints Overview
GET /v1/atoms/{orderId}/tree
PATCH /v1/atoms/{orderId}/treeAtoms are the parent/child structure of the products on an order — the way the goods are physically packed (pallet → carton → unit). The atoms tree endpoint changes how products relate to each other (typical use: your WMS reporting how goods were packed onto pallets). To change what products exist on an order, see the Product Upsert API.
The GET response contains a single top-level atoms array. Each atom carries
its own nested children, statuses, skills, groups, and units arrays —
these are nested per-atom, not returned as separate top-level lookup lists.
Endpoints
Get Atom Tree
Retrieve the complete hierarchical structure of products for an order.
GET /v1/atoms/{orderId}/treeParameters:
orderId(path): Zendera order ID
Response:
{
"atoms": [
{
"id": 1001,
"type": "colli",
"name": "Pallet",
"description": "Standard pallet",
"quantity": 1,
"length": 120.0,
"width": 80.0,
"height": 180.0,
"weight": 50.0,
"internalProductNumber": "PALLET_001",
"internalOrderProductNumber": "OP_001",
"barcodeId": "PALLET_BARCODE_001",
"barcodeType": "CODE128",
"parentId": null,
"children": [
{
"id": 1002,
"type": "trade item",
"name": "Product A",
"quantity": 10,
"weight": 20.0,
"internalProductNumber": "PROD_A_001",
"parentId": 1001,
"children": [],
"statuses": [
{
"status": "PENDING_ORDER_PRODUCT_ORDER_LOCATION_STATUS",
"type": "PICKUP",
"isScanned": false
},
{
"status": "PENDING_ORDER_PRODUCT_ORDER_LOCATION_STATUS",
"type": "DELIVERY",
"isScanned": false
}
]
}
],
"statuses": [
{
"status": "PENDING_ORDER_PRODUCT_ORDER_LOCATION_STATUS",
"type": "PICKUP",
"isScanned": false
}
],
"skills": [
{
"id": 123,
"type": "REQUIRED",
"name": "Forklift",
"description": "Requires forklift handling"
}
],
"groups": [
{
"id": 456,
"name": "Fragile Items",
"description": "Handle with care"
}
],
"units": [
{
"id": 789,
"quantity": 1,
"unitId": 1,
"name": "Pallet",
"description": "Standard EUR pallet"
}
]
}
]
}Update Atom Hierarchy
Modify the parent-child relationships between atoms.
PATCH /v1/atoms/{orderId}/treeParameters:
orderId(path): Zendera order ID
Request Body:
{
"id": 1002,
"parentId": 1001
}This moves atom with ID 1002 to become a child of atom 1001.
Request body fields:
id(integer): The atom to re-parent.parentId(integer): The new parent atom’s ID. SetparentIdto0to re-parent the atom to the top level (make it a root atom with no parent).
Re-parent to top level:
{
"id": 1002,
"parentId": 0
}Response:
The full, updated atom tree (same shape as GET):
{
"atoms": [
// Updated atom tree structure
]
}Atom Fields Explained
Core Atom Properties
id: Zendera internal atom IDtype: Atom type ("colli"or"trade item")name: Product namedescription: Product descriptionquantity: Number of itemsparentId: Parent atom ID (null for root items)
Physical Properties
length,width,height: Dimensions in cmweight: Weight in kg
Identification
internalProductNumber: Your product identifierinternalOrderProductNumber: Unique order product identifierbarcodeId: Barcode for scanningbarcodeType: Type of barcode (CODE128, EAN13, etc.)
Warehouse Management
pickupWarehouseLocation: Pickup warehouse identifierdeliveryWarehouseLocation: Delivery warehouse identifier
Status Tracking
statuses: Array of status per location type (PICKUP/DELIVERY)isScanned: Whether the item has been scanned
Skills & Requirements
skills: Array of required/prohibited skills for handlinggroups: Classification groupsunits: Custom measurement units
Atom Hierarchy Patterns
Simple Container
Pallet (colli)
├── Product A (trade item) × 10
└── Product B (trade item) × 5Nested Containers
Pallet (colli)
├── Box 1 (colli)
│ ├── Product A (trade item) × 5
│ └── Product B (trade item) × 3
└── Box 2 (colli)
├── Product C (trade item) × 2
└── Product D (trade item) × 8Mixed Structure
Order
├── Loose Item (trade item) × 1
├── Pallet 1 (colli)
│ └── Products (trade item) × 20
└── Pallet 2 (colli)
├── Box A (colli)
│ └── Small Items (trade item) × 50
└── Large Item (trade item) × 3Status Values
Location Status Options
NOT_READY_ORDER_PRODUCT_LOCATION_STATUS: Product not ready for this locationPENDING_ORDER_PRODUCT_ORDER_LOCATION_STATUS: Awaiting processing at locationCOMPLETE_ORDER_PRODUCT_ORDER_LOCATION_STATUS: Processing complete at locationREMOVED_ORDER_PRODUCT_ORDER_LOCATION_STATUS: Product removed/cancelled
Location Types
PICKUP: Status at pickup locationDELIVERY: Status at delivery location
Best Practices
1. Use for Visualization Only
The Atoms API is primarily for viewing and understanding product hierarchies.
Use the Product Upsert API for modifying products. For
bulk hierarchy changes, it is often easier to use the Product Upsert API with
hierarchicalMode: true and parentExternalId set on each product, which sets
parent/child relationships at upsert time.
2. Cache Atom Trees
Atom trees can be large. Cache the response when possible and only refresh when needed:
3. Handle Large Hierarchies
For orders with many products, consider pagination or filtering:
4. Integration with Other APIs
Combine with Order Summary and Product Upsert APIs for complete workflows:
Error Handling
Common error scenarios:
ORDER_NOT_FOUND: Order ID doesn’t existINVALID_ATOM_ID: Atom ID in PATCH request doesn’t existCIRCULAR_REFERENCE: Attempting to create circular parent-child relationshipsINVALID_HIERARCHY: Invalid parent-child relationship (e.g., trade item as parent of colli)