Integration guide
WooCommerce Postcode Validation & Shipping Zones | Delivery Zone
The Delivery Zone API integrates with WooCommerce through the woocommerce_package_rates filter. Call the API server-side during shipping rate calculation to validate the destination postcode and return the correct price.
When to call the API
Call the API inside the woocommerce_package_rates or woocommerce_cart_shipping_packages filter — before shipping rates are returned to the customer.
Important: keep API keys server-side: Never expose your API key in frontend JavaScript or HTML. The API key must only be used in PHP server-side code on your WooCommerce server.
Code example
// PHP — server-side, keep API key out of frontend
$response = wp_remote_post('https://api.deliveryzone.fi/api/v1/delivery/check', [
'headers' => [
'X-Api-Key' => get_option('dz_api_key'),
'Content-Type' => 'application/json',
],
'body' => wp_json_encode([
'destinationPostcode' => $postcode,
'basketValueCents' => $basket_cents,
]),
]);
$data = json_decode(wp_remote_retrieve_body($response), true);
Error handling
When canDeliver is false (or null), the response includes a reasonCode field. Display this to the customer:
NOT_DELIVERABLE— postcode is outside your delivery zones, or not recognised (the API intentionally uses one generic code for both, to protect zone boundaries)MINIMUM_ORDER_NOT_MET— basket value is below the zone's minimum orderBASKET_VALUE_REQUIRED— a basket value is needed to evaluate this destination's minimum-order or free-delivery rule
Always handle HTTP errors (5xx, timeout) gracefully. If the API is unreachable, fail safe — either reject the order or allow manual review.
Implementation checklist
- Store API key in WordPress options, not in theme files
- Test against a non-production delivery zone before going live
- Handle wp_remote_post errors and timeouts gracefully
- Log unexpected responses for debugging
- Confirm behaviour with out-of-zone postcodes before launch
Ready to add postcode validation?
Free plan. No credit card. Real setup help.