SolBox API Integration Reference Guide
Version 1.8
SolBox API Integration Reference Guide is your “single source of truth” for connecting external systems to SolBox and keeping orders, runs, and delivery outcomes perfectly in sync.
This guide focuses on the three core building blocks used in most real-world integrations:
- SaveOrdersWithItems: the ingestion gateway. Create or update orders (and their line items) coming from your ERP, eCommerce, WMS, or custom system, so SolBox can plan, assign, and execute them.
- Auth/Login: Establishes an authenticated SolBox session (typically via cookies) required first for Orderlist and GetOrder
- OrderList: the operational feed. Pull a filtered, paginated list of orders (by date range, status, and “modified after”) to support dashboards, dispatch visibility, and incremental syncing.
- GetOrder: the truth record. Retrieve a single order in full detail, including manifest/run linkage, time windows/tolerances, driver requirements (signature/photos/comments), notifications, and proof-of-delivery artefacts like photos.
Together, these endpoints form a clean lifecycle:
1. Push orders in (SaveOrdersWithItems)
2. Monitor and sync changes (OrderList with modified-after)
3. Fetch complete outcomes for a specific order when needed (GetOrder)
Use this reference to standardise how your integration authenticates, exchanges identifiers, handles updates, and reliably reconciles SolBox’s execution data (status, ETAs, POD) back into your source system.
See the bottom of this document for attached .pdf version and SaveOrderswithItems workflow diagram in html
Create and Update Orders
SaveOrdersWithItems
Base URL:
1. Overview
The Save Orders With Items endpoint allows external systems to:
Create new orders in SolBox
Update existing orders
Submit full Sender and Receiver details
Submit order items with serial numbers
Provide weights, dimensions, and volumes
Optionally allocate or create manifests
Control consolidation and update behaviours
This endpoint supports bulk submission of multiple orders in a single request.
2. Authentication
Authentication is performed using an API Key supplied in the request body.
No OAuth
No bearer token
No custom headers required
The API key must be requested from SolBox
Field | Type | Required | Description |
APIKey | string | Yes | API key issued by SolBox |
| | | |
3. HTTP Specification
Method: POST
Content-Type: application/json
Authentication: APIKey in request body
4. Top-Level Request Structure
{
"APIKey": "YOUR_API_KEY",
"ManifestNumber": "MSMEG0007",
"CreateManifest": false,
"AllocateToManifest": false,
"Orders": [ ... ]
}
4.1 Top-Level Fields
Field | Type | Required | Description |
APIKey | string | Yes | API authentication key |
ManifestNumber | string | No | Manifest identifier |
ManifestId | integer | No | Internal manifest ID |
DriverName | string | No | Driver assignment |
VehicleName | string | No | Vehicle assignment |
CreateManifest | boolean | No | Create new manifest |
AllocateToManifest | boolean | No | Allocate to manifest |
UpdateManifest | boolean | No | Update existing manifest manifest name and sequence if specified |
ConsolidateOrders | boolean | No | Merge similar orders |
IgnoreCustomerReferenceMatch | boolean | No | Ignore reference matching |
AppendNewOrderDetails | boolean | No | Append order details |
UpdateManifestComplete | boolean | No | Update Drivers and Vehicles also |
Orders | array | Yes | List of orders
|
5. Orders Object (Orders[])
Each order represents a delivery, pickup, service, or combined workflow.
Required Minimum Fields for Order Creation
Field | Type | Required |
OrderNumber | string | Yes |
TypeId | integer | Yes |
OrderItems | array | Yes
|
5.1 Order Fields
Field | Type | Description |
Id | integer | System-generated Order ID |
AccountId | integer | Resolved account |
DateCreated | ISO 8601 datetime | UTC created timestamp |
LastModified | ISO 8601 datetime | UTC modified timestamp |
TypeId | integer | 1=Delivery, 2=Pickup, 3=Service, 4=Pickup-Delivery |
StatusId | integer | 0=Pending, 1=Enroute Delivery, 2=Delivered, 3=Enroute Pickup, 4=Picked Up, 5=Cancelled |
OrderNumber | string | Unique order identifier |
CarrierName | string | Assigned carrier |
CustomerReference | string | PO reference |
DeliveryTime | string | dd/MM/yyyy HH:mm:ss |
DeliveryTolerance | integer | Minutes |
PickupTime | string | dd/MM/yyyy HH:mm:ss |
PickupTolerance | integer | Minutes |
Weight | decimal | Total weight |
Volume | decimal | Total volume |
Sender | object | Conditional |
Receiver | object | Conditional |
OrderDetails | string | Order Notes, URL’s are clickable to driver |
OrderItems | array | Item lines |
Units | array | Optional |
Attributes | array | Optional |
6. Sender & Receiver Rules
Required Based on TypeId
TypeId | Description | Sender Required | Receiver Required |
1 | Delivery | No | Yes |
2 | Pickup | Yes | No |
3 | Service | No | Yes |
4 | Pickup-Delivery | Yes | Yes |
6.1 Sender / Receiver Structure
"Sender": {
"Code": "SolBox",
"Name": "SolBox PTY LTD",
"Address1": "2 BAKER STREET",
"Suburb": "BOTANY",
"State": "NSW",
"PostCode": "2019",
"Country": "Australia"
}
Key Fields
Field | Type |
Code | string |
Name | string |
Address1 | string |
Address2 | string |
Suburb | string |
State | string |
PostCode | string |
Country | string |
Latitude | string or number |
Longitude | string or number |
ContactFirstName | string |
ContactLastName | string |
ContactPhoneNumber | string |
ContactEmail | string |
Note: Latitude and Longitude may return as empty string or numeric string.
7. OrderItems Structure
"OrderItems": [
{
"reference": "10718432",
"product": "CARTON",
"quantity": 1,
"itemWeight": 9.34,
"totalWeight": 9.34
}
]
7.1 OrderItems Fields
Field | Type | Required |
reference | string | Yes |
product | string | Yes |
quantity | decimal | Yes |
itemPrice | decimal | No |
itemWeight | decimal | No |
totalWeight | decimal | No |
totalVolume | decimal | No |
itemSerials | array | No |
7.2 Item Serials
"itemSerials": [
{
"serialNumber": "SSMEG18432001",
"returned": 0
}
]
8. Success Response
HTTP 200 OK
The API returns the full order object as stored in SolBox.
Important Date Formatting Note
• DateCreated and LastModified → ISO 8601 (UTC)
• DeliveryTime and PickupTime → dd/MM/yyyy HH:mm:ss
Clients must handle both formats correctly.
9. Example Success Response (Trimmed)
{
"Orders": [
{
"Id": 562499,
"OrderNumber": "S0018432",
"DateCreated": "2022-11-28T10:40:52.813Z",
"LastModified": "2026-03-03T09:30:17.0710581Z",
"StatusId": 0,
"OrderItems": [...]
}
]
}
10. Error Handling
Status Code | Meaning |
200 | Success |
400 | Validation error |
401 | Invalid API Key |
403 | Forbidden |
500 | Server Error |
When submitting multiple orders:
• Each Orders[].Response object should be checked
• Partial success is possible
• Do not assume all orders succeeded
11. Integration Best Practices
1. Use OrderNumber as your external primary key.
2. Do not send empty Sender/Receiver objects.
3. Always validate TypeId before sending.
4. Parse date fields carefully due to mixed formats.
5. Handle nullable booleans defensively.
6. Inspect per-order response metadata.
12. Minimal Working Example
{
"APIKey": "YOUR_API_KEY",
"Orders": [
{
"OrderNumber": "ORD1001",
"TypeId": 1,
"Receiver": {
"Name": "Customer A",
"Address1": "1 Example Street",
"Suburb": "Brisbane",
"State": "QLD",
"PostCode": "4000",
"Country": "Australia"
},
"OrderItems": [
{
"reference": "ITEM001",
"product": "BOX",
"quantity": 1
}
]
}
]
}
Reading Orders (Session Auth + Order Endpoints)
All endpoints below assume you have authenticated first and are sending the session context (cookie/session) or token as required by your environment.
1. Authenticate Session (Required)
Endpoint
POST /API/Auth/Login
Purpose
Authenticates the user and establishes an authenticated session (typically via cookies).
Content-Type
application/x-www-form-urlencoded
Request (x-www-form-urlencoded)
Fields:
- AccountName (string)
- Username (string)
- Password (string)
- APIKey (string)
Example (safe placeholders):
-H "Content-Type: application/x-www-form-urlencoded" \
-d "AccountName={{ACCOUNT_NAME}}" \
-d "Username={{USERNAME}}" \
-d "Password={{PASSWORD}}" \
-d "APIKey={{API_KEY}}"
Successful Response (example)
{
"role": "user",
"isRepairer": false,
"onBoardingCompleted": true,
"inactiveDays": 0,
"inActive": false,
"trialPeriod": false,
"locale": "en-AU"
}
Auth Handling Notes
- This endpoint commonly returns a session cookie (e.g., .ASPXAUTH, or similar) in Set-Cookie.
- For subsequent requests, your client must:
- Persist cookies (Postman: enable cookie jar; curl: -c cookies.txt -b cookies.txt), or
- Use whatever token/header scheme your SolBox environment is configured for (if applicable).
Curl cookie example:
# Login and save cookies
-H "Content-Type: application/x-www-form-urlencoded" \
-c cookies.txt \
-d "AccountName={{ACCOUNT_NAME}}" \
-d "Username={{USERNAME}}" \
-d "Password={{PASSWORD}}" \
-d "APIKey={{API_KEY}}"
# Later calls reuse cookies
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{ ... }'
2. Order List
Endpoint
POST /API/v2/Order/orderList
Purpose
Returns a paged list of order summaries filtered by date range, modified-after timestamp, inclusion/exclusion flags, order types, and statuses.
Headers
Header | Value |
Content-Type | application/json |
Accept | application/json |
Cookie | (set automatically if using session cookies) |
Request Body (example)
{
"onlyShowTodaysOrders": 0,
"loadOrdersBetweenDates": 1,
"loadOrdersEndDate": "2026-03-12",
"loadOrdersStartDate": "2026-02-12",
"loadOrdersModifiedAfter": "2024-05-13T12:50:00Z",
"excludeManifestOrders": 0,
"excludeUnattachedOrders": 1,
"loadPickupOrders": 1,
"loadDeliveryOrders": 1,
"loadServiceOrders": 0,
"loadPendingOrders": 1,
"loadDeliveringOrders": 1,
"loadDeliveredOrders": 1,
"loadCancelledOrders": 0,
"start": 0,
"len": 100
}
Request Fields
Field | Type | Description |
onlyShowTodaysOrders | int (0/1) | If 1, filters to “today’s” orders (server-local day). |
loadOrdersBetweenDates | int (0/1) | If 1, applies loadOrdersStartDate → loadOrdersEndDate. |
loadOrdersStartDate | string (YYYY-MM-DD) | Start of date filter. |
loadOrdersEndDate | string (YYYY-MM-DD) | End of date filter. |
loadOrdersModifiedAfter | string (ISO-8601 datetime) | Incremental filter: only orders modified after timestamp. |
excludeManifestOrders | int (0/1) | If 1, exclude orders attached to a manifest/run. |
excludeUnattachedOrders | int (0/1) | If 1, exclude orders NOT attached to a manifest/run. |
loadPickupOrders | int (0/1) | Include pickup orders. |
loadDeliveryOrders | int (0/1) | Include delivery orders. |
loadServiceOrders | int (0/1) | Include service orders. |
loadPendingOrders | int (0/1) | Include pending orders. |
loadDeliveringOrders | int (0/1) | Include delivering/in-progress orders. |
loadDeliveredOrders | int (0/1) | Include delivered orders. |
loadCancelledOrders | int (0/1) | Include cancelled orders. |
start | int | Pagination offset (0-based). |
len | int | Page size. |
Response (example shape)
{
"list": [
{
"m_id": 812011,
"m_name": "Test1",
"m_p_seq": null,
"m_d_seq": 1,
"m_p_relative_seq": null,
"m_d_relative_seq": 1,
"m_optimised": 1,
"capacity_name": "weight",
"capacity_unit": "kg",
"capacity_units": "kg",
"order_total_capacity": 4.6000,
"order_total_items": 23.0000,
"order_max_dimension": 7.0000,
"atr": null,
"attributes": null,
"volume": null,
"Length": null,
"weight": null,
"id": 8006477,
"pickup_client_id": null,
"delivery_client_id": 624907,
"StatusId": 0,
"units": "0.0000/0.0000/0.0000/0.0000/0.0000/0.0000/0.0000/0.0000/0.0000/0.0000",
"TypeId": 1,
"OrderNumber": null,
"InvoiceNr": null,
"client_name": "Gabrieltest1",
"dest_lat": -33.872740,
"dest_lng": 151.205713,
"pickup_address": null,
"dest_address": "Sydney NSW, Australia",
"pickup_lat": null,
"pickup_lng": null,
"vehicle_name": "GabrielVehicle",
"vehicle_id": 13634,
"driver_id": 11870,
"driver_name": "Gabriel-Driver",
"dt": "2026-03-04T09:00:00",
"dtol": 480,
"ptol": null,
"pdt": null,
"ddt": "2026-03-04T09:00:00",
"apdt": null,
"addt": null,
"deliveryStart": null,
"deliveryFinish": null,
"pickupStart": null,
"pickupFinish": null,
"mc_statuscode": "X3",
"mc_eta": "2026-03-04T09:07:00Z",
"mc_AF": null,
"PickupEnrouteStart": "2026-03-04T09:00:00",
"DeliveryEnrouteStart": "2026-03-04T09:00:00",
"amount_payed": null,
"payment_type": null,
"money_received": 0,
"has_comments": 0,
"has_db_pictures": 0,
"has_pictures": false,
"has_returns": 0,
"cust_ref": SO12345,
"DeliveryComment": Deliver around the back,
"PickupComment": “Broken Package”,
"LoadUnitString": "[{\"stat_id\":15,\"id\":2,\"show_on_tables\":1,\"name\":\"Cartons - delivery\",\"qty\":0.0000}]",
"pictures": [],
"LoadUnits": [
{
"stat_id": 15,
"id": 2,
"name": "Cartons - delivery",
"show_on_tables": true,
"qty": 0.0000
}
],
"orderAttributes": null,
"pickup_eta": "2026-03-04T09:00:00",
"delivery_eta": "2026-03-04T09:00:00"
}
]
}
list[]
Field Reference (common fields)
Manifest / run info
- m_id (int): Manifest ID
- m_name (string): Manifest name
- m_p_seq (int|null): Pickup sequence within manifest
- m_d_seq (int|null): Delivery sequence within manifest
- m_p_relative_seq (int|null): Relative pickup sequence (if used)
- m_d_relative_seq (int|null): Relative delivery sequence (if used)
- m_optimised (int 0/1): Was run optimised
Order identity
- id (int): Order ID
- TypeId (int): Order type ID
- StatusId (int): Order status ID
- OrderNumber (string|null): External/internal order number
- InvoiceNr (string|null): Invoice number
- cust_ref (string|null): Customer reference (commonly mapped to an external system reference)
Locations
- dest_address, dest_lat, dest_lng: Delivery location
- pickup_address, pickup_lat, pickup_lng: Pickup location
Assignment
- vehicle_id, vehicle_name
- driver_id, driver_name
Timing
- dt (ISO datetime): Primary scheduled datetime
- pdt / ddt: Planned pickup/delivery datetime
- apdt / addt: Actual pickup/delivery datetime
- ptol / dtol: Pickup/Delivery tolerance (minutes)
ETA/status feed
- mc_statuscode (string|null): Status code from mobile/courier feed
- mc_eta (ISO datetime|null): ETA from mobile/courier feed
- PickupEnrouteStart / DeliveryEnrouteStart (datetime|null)
Load units
- LoadUnits (array): Preferred structured load units
- LoadUnitString (string): Legacy JSON string version of load units
- units (string/array): Raw units breakdown (format may vary by account)
3. Get Order Details
Endpoint
POST /API/orders/getOrder/{orderId}
Purpose
Returns full details for a specific order including settings, notifications, photos, and operational timestamps.
Headers
Header | Value |
Content-Type | application/json |
Accept | application/json |
Cookie | (set automatically if using session cookies) |
Path Parameter
- orderId (int): SolBox Order ID
Request Body (example)
{
"onlyShowTodaysOrders": 0,
"loadOrdersBetweenDates": 1,
"loadOrdersEndDate": "2026-03-16",
"loadOrdersStartDate": "2026-02-14",
"loadOrdersModifiedAfter": "2025-01-15 19:00:00",
"excludeManifestOrders": 0,
"excludeUnattachedOrders": 0,
"loadPickupOrders": 1,
"loadDeliveryOrders": 1,
"loadServiceOrders": 1,
"loadPendingOrders": 1,
"loadDeliveringOrders": 1,
"loadDeliveredOrders": 1,
"loadCancelledOrders": 1,
"start": 0,
"len": 100
}
Response (example shape)
{
"orderDetails": {
"TypeId": 1,
"id": 7887398,
"manifest_id": 802446,
"manifest_name": "Run Sas1",
"manifest_date": "2026-02-20T00:00:00Z",
"forceUnlinkManifest": false,
"client_name": "To Alex test 13",
"pickup_client_state": null,
"pickup_client_suburb": null,
"delivery_client_state": "NSW 2125",
"delivery_client_suburb": "Taylor Street West Pennant Hills",
"delivery_client_name": "Alex test 13",
"pickup_client_name": null,
"payer_name": null,
"AccountId": 12,
"CreationSource": null,
"DateCreated": null,
"LastModified": "2026-03-05T05:08:32.2565011Z",
"invoiceLink": null,
"PickupStartedAt": null,
"PIckupFinishedAt": null,
"DeliveryStartedAt": null,
"DeliveryFinishedAt": null,
"dest_address": "23 Taylor Street West Pennant Hills NSW 2125 Australia",
"pickup_address": null,
"dest_lat": -33.750560,
"dest_lng": 151.025511,
"pickup_lat": null,
"pickup_lng": null,
"units": [],
"start_address": null,
"start_lat": null,
"time_min": null,
"time_max": null,
"earliest_arrival": null,
"OnTime": 0,
"DeliveryKey": "RJdB_0im5UqVWRLGYvY5lw2",
"PickupKey": null,
"travel_time": null,
"travel_dist": null,
"orderAttributes": [],
"DeliveryComment": null,
"PickupComment": null,
"CancellationComment": "Futile comment",
"DeliveryTime": "2026-02-20T07:30:00Z",
"PickupTime": null,
"dt": null,
"DeliveryTolerance": 750,
"DeliveryServiceTime": 25,
"PickupTolerance": null,
"PickupServiceTime": null,
"DeliveryClientID": 663573,
"PickupClientID": null,
"PayerID": null,
"totalTrolleys": null,
"TrolleysCollected": null,
"TrolleysUnloaded": null,
"StatusId": 5,
"AddInfo": null,
"CustomerReference": "",
"IsPickup": 0,
"DeviceSyncStatus": null,
"DeliveredTime": null,
"PickedUpTime": null,
"DeliverySignedBy": null,
"PickupSignedBy": null,
"delivery_not_emails": "alex @gmail.com",
"delivery_not_sms": "0412345678",
"pickup_not_emails": null,
"pickup_not_sms": null,
"delivery_price": null,
"amount_payed": null,
"payment_type": null,
"orderItems": [],
"orderBarcodes": [],
"orderSettings": [
{
"Id": 0,
"OrderId": 7887398,
"SettingId": 1,
"SettingType": 1,
"SettingTypeName": "Delivery",
"SettingName": "Mandatory Signature",
"IsSet": null
}
],
"photos": [
{
"orderId": 7887398,
"pictureId": 9885816,
"thumbnailPictureId": 10002712,
"latitude": -27.483725,
"longitude": 153.069802,
"accuracy": null,
"pictureUrl": "/api/v3/picture/9885816/90726966E3264B4F8450D9BCD8C73D10",
"thumbnailPictureUrl": "/api/v3/picture/10002712/90726966E3264B4F8450D9BCD8C73D10",
"createDate": "2026-02-27T23:54:58Z",
"uploadDate": "2026-02-27T12:54:58.3562906Z",
"typeId": 1
}
]
}
}
Key Field Notes
- delivery_not_emails (string): Notification emails for delivery updates (comma-separated list supported).
- delivery_not_sms (string): Notification SMS recipients for delivery updates.
- pickup_not_emails / pickup_not_sms: Pickup notification channels (if pickup workflow used).
- photos[].pictureUrl and photos[].thumbnailPictureUrl are relative URLs. Compose full URL like: https://live.solbox.it + pictureUrl
Minimal flow
1. POST /API/Auth/Login with x-www-form-urlencoded credentials
2. Store and resend session cookie(s) automatically
3. POST /API/v2/Order/orderList to retrieve summaries
4. POST /API/orders/getOrder/{orderId} for a specific order’s full detail