Skip to Content
Welcome to Zendera Knowledge Hub
API DocumentationOrder Summary

Order Summary API

v2

Retrieve comprehensive order information including status, locations, travel estimates, and emission data.

Interactive API Explorer

Loading API Documentation...

Authentication

Authorization: apikey YOUR_API_KEY_HERE

Base URLs

  • Production: https://app.zenderatms.com/api/
  • Staging: https://staging.zenderatms.com/api/

Endpoints

Get Order by Internal Number

Retrieve a specific order using your internal order number.

GET /v2/orders/summary/internal/{internalOrderNumber}

Parameters:

  • internalOrderNumber (path): Your internal order identifier

Example Request:

curl -X GET "https://app.zenderatms.com/api/v2/orders/summary/internal/ORDER_123" \ -H "Authorization: apikey YOUR_API_KEY"

Response:

{ "internalOrderNumber": "ORDER_123", "order": { "orderId": 12345, "orderSerial": 67890, "internalOrderNumber": "ORDER_123", "orderDetails": { "organizationId": 1, "orderId": 12345, "statusId": 6, "statusName": "complete", "customerDetails": { "id": 123, "name": "Customer Name" }, "orderTypeId": 2, "orderTypeName": "Delivery", "vehicleTypeId": 5, "vehicleTypeName": "Van", "reference": "Customer Reference" }, "pickup": { "details": { "id": 1001, "name": "Warehouse", "statusName": "complete", "earliest": "2024-01-15T08:00:00Z", "latest": "2024-01-15T10:00:00Z", "arrivedAt": "2024-01-15T08:30:00Z", "completedAt": "2024-01-15T09:00:00Z" }, "address": { "address1": "Main Street 123", "city": "Oslo", "postalCode": "0123", "country": "Norway", "latitude": "59.9139", "longitude": "10.7522" } }, "delivery": { "details": { "id": 1002, "name": "Customer Location", "statusName": "complete", "completedAt": "2024-01-15T15:30:00Z" } }, "driverDetails": { "id": 456, "name": "Driver Name", "internalDriverNumber": "DRV_001" }, "packageDetails": { "quantityColli": 2, "totalWeightKg": 21.0, "totalVolumeLitre": 30.0 } } }

List Orders by Date

Get orders filtered by date and status.

GET /v2/orders/summary/listbydate

Parameters:

  • date (query): Date filter in “YYYY-MM-DD” format (defaults to today)
  • timezone (query): Timezone (e.g., “Europe/Oslo”, defaults to organization timezone)
  • statuses (query): Comma-separated status list

Available Statuses:

  • complete
  • delivered
  • in_transit
  • arrived
  • dispatched
  • planned
  • unassigned
  • cancelled

Example Request:

curl -X GET "https://app.zenderatms.com/api/v2/orders/summary/listbydate?date=2024-01-15&statuses=complete,delivered&timezone=Europe/Oslo" \ -H "Authorization: apikey YOUR_API_KEY"

Order Status Feed

Get a paginated feed of order status changes for real-time monitoring.

GET /v2/orders/summary/orderstatusfeed

Parameters:

  • token (query): Base64 pagination token (empty for first request)
  • pageSize (query): Number of items per page

Example Request:

curl -X GET "https://app.zenderatms.com/api/v2/orders/summary/orderstatusfeed?pageSize=100" \ -H "Authorization: apikey YOUR_API_KEY"

With pagination token:

curl -X GET "https://app.zenderatms.com/api/v2/orders/summary/orderstatusfeed?token=eyJ...&pageSize=100" \ -H "Authorization: apikey YOUR_API_KEY"

Response Fields Explained

Order Details

  • orderId: Zendera internal order ID
  • orderSerial: Sequential order number
  • internalOrderNumber: Your external order identifier
  • statusId/statusName: Current order status
  • reference: Customer reference number

Location Details

  • earliest/latest: Scheduled time windows (ISO 8601 format)
  • arrivedAt: Actual arrival timestamp
  • completedAt: Actual completion timestamp
  • statusName: Location-specific status

Address Information

  • Standard address fields with optional GPS coordinates
  • latitude/longitude: GPS coordinates if available

Package Summary

  • quantityColli: Number of colli/packages
  • totalWeightKg: Total weight in kilograms
  • totalVolumeLitre: Total volume in liters

Driver Information

  • id: Driver ID in Zendera system
  • name: Driver name
  • internalDriverNumber: Your driver identifier

Use Cases

Real-time Order Tracking

Use the Order Status Feed to monitor order changes in real-time:

async function monitorOrderChanges() { let token = ''; while (true) { const response = await fetch( `${API_BASE}/v2/orders/summary/orderstatusfeed?token=${token}&pageSize=50`, { headers: { Authorization: `apikey ${API_KEY}` }, } ); const data = await response.json(); // Process order status changes for (const order of data.orders) { console.log( `Order ${order.internalOrderNumber} status: ${order.statusName}` ); } // Update token for next request token = data.nextToken; // Wait before next poll await new Promise(resolve => setTimeout(resolve, 30000)); } }

Daily Order Reports

Generate daily reports using the list by date endpoint:

async function getDailyOrderReport(date) { const response = await fetch( `${API_BASE}/v2/orders/summary/listbydate?date=${date}&timezone=Europe/Oslo`, { headers: { Authorization: `apikey ${API_KEY}` }, } ); const data = await response.json(); const report = { date, totalOrders: data.orders.length, statusBreakdown: {}, }; // Count orders by status for (const order of data.orders) { const status = order.orderDetails.statusName; report.statusBreakdown[status] = (report.statusBreakdown[status] || 0) + 1; } return report; }

Order Status Processing

Process status changes in your system:

async function processOrderStatusChange(order) { const statusHandlers = { complete: async order => { // Send completion notification await sendNotification(order.customerDetails.id, 'Order completed'); // Update ERP system await updateERPStatus(order.internalOrderNumber, 'DELIVERED'); }, in_transit: async order => { // Send tracking notification with driver info await sendTrackingUpdate(order.customerDetails.id, { driverName: order.driverDetails.name, estimatedArrival: order.delivery.details.earliest, }); }, }; const handler = statusHandlers[order.orderDetails.statusName]; if (handler) { await handler(order); } }
Last updated on