Zones & Pricing API
v1Resolve postal codes to zones within a zone area, compute the freight level for a set of packages, and read price list headers.
Zendera’s pricing and scheduling are keyed on two classifications: zones (where — postal codes grouped into zones within a zone area) and freight levels (how big — package profiles grouped into a freight level set). A price list binds one zone area and one freight level set together with a currency. These endpoints expose those classifications to your system.
Where this fits in your operation
- Coverage check in your webshop: resolve the customer’s postcode to a zone before promising delivery — no zone, no coverage.
- Pre-classify shipments: compute the freight level for a quote or for
schedule-order, which needsfromZone/toZoneandfreightLevel. - Mirror pricing structure: read a price list’s header to know which zone area and freight level set your customer’s pricing is built on (
price_list_idcomes from the customer record).
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/
Resolve postal codes to zones
POST /v1/zone-area/{zoneAreaId}/search-postal-codes
{ "postal_codes": ["0150", "5003"] }Response: zone_by_postal_code — a map keyed by postcode, each value a zone with id, name, number, postcode_ranges, unique_id. Unmatched postcodes are omitted from the map.
There is a customer-scoped variant (uses the customer’s zone area implicitly) on the Customers API.
Compute the freight level for packages
POST /v1/freight-level/{freightLevelSetId}/level-for-products
{
"packages": [
{ "weight": 25.0, "length": 120, "width": 80, "height": 100, "quantity": 2 }
]
}Dimensions are in cm; custom_units (map of unit ID → quantity) participates when the set has custom-unit conditions. Response: { "freight_level": 3 }. Returns 404 when no level in the set matches — a domain answer, not an error. The customer-scoped variant is on the Customers API.
Read a price list
GET /v1/price-list/{priceListId}
Returns the header: id, name, description, currency, freight_level_set and zone_area (each {id, name}), customers_count, and created/updated metadata. A customer’s price_list_id is on the customer record. 404 when the list doesn’t exist in your organization.
Common gotchas
- snake_case JSON on all three endpoints (v1).
- The zone map is sparse — diff requested postcodes against the response keys to find uncovered areas.
- Freight-level 404 means “no match”, not failure.
- Zone area and freight level set IDs also appear on route schedules — the same classifications drive slot matching.
Related documentation
- Customers — customer-scoped zone and freight-level resolution
- Route Scheduling — how zones and freight levels gate bookable intervals