Appearance
Order Tracking
Wasal provides a public tracking endpoint you can expose directly to your customers — for example, behind a "Track my order" link in a confirmation email or web page. It requires no API key.
Public tracking
GET /integration/merchant/order/track/:orderNumber
Public — no authentication.
Pass the human-readable orderNumber (e.g. MAIN-000123) returned when the order was created.
Response:
json
{
"success": true,
"data": {
"orderNumber": "MAIN-000123",
"status": "in_transit",
"agentLocation": { "lat": 29.3759, "lng": 47.9774, "lastSeen": "2026-06-21T10:42:00.000Z" },
"agentPhone": "+96599998888",
"updatedAt": "2026-06-21T10:42:05.000Z"
}
}| Field | Description |
|---|---|
orderNumber | The order's public number. |
status | Current status (see the lifecycle). |
agentLocation | Live { lat, lng, lastSeen } of the driver — only present while the order is assigned, on_way_to_merchant, picked_up, or in_transit and the driver is online. null otherwise. |
agentPhone | Driver's phone number while assigned and online. null otherwise. |
updatedAt | When the order was last updated. |
Because this endpoint is public, it deliberately exposes only non-sensitive tracking fields — no customer details, pricing, or items.
Polling vs. webhooks
To keep your system in sync with order status:
- Polling — periodically call
GET /integration/merchant/order/:orderId(authenticated) or the public track endpoint above. Simple to implement; suitable for low volumes. - Webhooks — register a webhook in the merchant dashboard to receive a push when an order's status changes. This avoids polling and gives near-real-time updates. Webhook payloads are signed with an HMAC-SHA256 signature in the
X-Wasal-Signatureheader so you can verify authenticity. See the WooCommerce integration for the webhook payload and signature format — the same mechanism is available to any integration.
Sandbox orders never fire webhooks. Use polling and the
advance-statusendpoint to exercise status changes during testing.
