Skip to Content
Welcome to Zendera Knowledge Hub

Customers API

v1–2

List, 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=business for names and addresses) and match them to your ERP by internal_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-order on the Route Scheduling API needs a customerId, fromZone/toZone, and freightLevel — all three answers come from this page’s endpoints.

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/

Reading customers

List customers (v1)

GET /v1/customers?loads=business&filters=customer_id=123

Returns the organization’s active customers. Query parameters:

  • filters — expressions like field=value (also >=, <=, !=, <, >, and field=a|b|c for 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-products 404s on no match — handle it as a domain answer.
  • 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
Last updated on