Customers API
v1–2List, look up, and search customers, resolve their delivery zones by postal code, and compute the applicable freight level for a set of packages.
A customer in Zendera is the commercial party orders are created for. Other APIs reference customers by ID (route scheduling’s schedule-order, freights’ consignor/consignee) or by internal_customer_number — these endpoints are how your system resolves them, and how it answers two pricing-related questions per customer: which zone does this postcode belong to and which freight level do these packages fall into.
Where this fits in your operation
- Sync your customer register: list customers (with
loads=businessfor names and addresses) and match them to your ERP byinternal_customer_number. - Quote a delivery in your portal: before importing the order, resolve the destination postcode to a zone and the packages to a freight level for the customer — the same dimensions Zendera’s price lists and schedules are keyed on.
- Resolve IDs for booking:
schedule-orderon the Route Scheduling API needs acustomerId,fromZone/toZone, andfreightLevel— all three answers come from this page’s endpoints.
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/
Reading customers
List customers (v1)
GET /v1/customers?loads=business&filters=customer_id=123
Returns the organization’s active customers. Query parameters:
filters— expressions likefield=value(also>=,<=,!=,<,>, andfield=a|b|cfor any-of). Supported fields:customer_id,organization_id,business_id,primary_contact_id.loads— relations to include, comma-separated:business,business.address,business.billing_address,business.primary_contact,primary_contact,departments,departments.address,departments.billing_address,groups,groups.group_types.page/limit— pagination.
Each customer is snake_case JSON: id, business_id, internal_customer_number, price_list_id, customer_type, priority, invoicing flags, and the loaded relations.
Get one customer (v1)
GET /v1/customers/{customerID}?loads=business,primary_contact
Search by name or number (v2)
GET /v2/customers/search?businessName=Acme or ?internalCustomerNumber=CUST-001
Returns a single best match: { "id": ..., "businessName": ..., "internalCustomerNumber": ..., "priceListId": ... } — camelCase, since this is a v2 endpoint.
Zones for postcodes
POST /v1/customers/{customerID}/zones-for-postcodes
{ "postal_codes": ["0150", "5003", "9990"] }Resolves each postcode to a zone using the zone area that applies to this customer:
{
"zone_by_postal_code": {
"0150": { "id": 1, "name": "Oslo sentrum", "number": 10, "postcode_ranges": ["0100-0199"], "unique_id": "OSLO-10" },
"5003": { "id": 7, "name": "Bergen", "number": 70, "postcode_ranges": ["5000-5099"], "unique_id": "BGO-70" }
}
}Unmatched postcodes are silently omitted from the map — 9990 above got no zone, so check for missing keys.
To resolve against an explicit zone area instead of a customer’s, use the Zones & Pricing API.
Freight level for packages
POST /v1/customers/{customerID}/freight-level-for-products
{
"packages": [
{ "weight": 25.0, "length": 120, "width": 80, "height": 100, "quantity": 2 }
]
}Evaluates the packages (dimensions in cm, plus optional custom_units keyed by unit ID) against the customer’s assigned freight level set:
{ "freight_level": 3 }Returns 404 when no level matches — treat that as “doesn’t fit the customer’s freight scheme”, not as a server error. The set-explicit variant lives on the Zones & Pricing API.
Common gotchas
- v1 is snake_case, v2 search is camelCase. Same as elsewhere in the API surface.
- Only active customers are returned by the v1 list.
- Zone map omissions are silent. Always diff the requested postcodes against the response keys.
freight-level-for-products404s on no match — handle it as a domain answer.
Related documentation
- Zones & Pricing — the customer-independent variants plus price lists
- Route Scheduling — where customer ID, zones, and freight level are used to book
- Freights — customers as consignor/consignee