Integration
Klnzr Supplier API
Pull your Klnzr orders straight into your own system. REST, JSON, and a single bearer key.
Base URL
| Production | https://klnzr.com |
| API path | https://klnzr.com/api/v1 |
Authentication
Every request must include your API key in the
Authorization
header:
Authorization: Bearer sk_YOUR_KEY
- Keys are issued and rotated by Klnzr (admin console → Suppliers → Generate / Rotate Key).
- Keys always start with
sk_. - Only active and accepted suppliers can use the API.
- Keys are stored as SHA-256 hashes only; the plaintext key is shown once at generation.
Treat keys like passwords. Never put them in mobile apps, public repos, or frontend code.
GET /api/v1/orders
Returns orders assigned to your supplier account, newest first. Unpaid placeholder
orders (awaiting_payment) are never returned.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| status | string | None | Filter by status (see below) |
| limit | integer | 100 | Page size (max 500) |
| offset | integer | 0 | Skip N records |
Valid status values
| Value | Meaning |
|---|---|
| pending | Placed; awaiting supplier action |
| awaiting_approval | Quoted; waiting on customer |
| confirmed | Accepted / scheduled |
| in_progress | Service underway |
| completed | Done |
| cancelled | Cancelled by customer |
| declined | Declined by supplier |
Example request
curl -sS "https://klnzr.com/api/v1/orders?status=confirmed&limit=50" \
-H "Authorization: Bearer sk_YOUR_KEY"
Example response
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"order_number": 1042,
"status": "confirmed",
"status_ar": "مؤكد",
"status_en": "Confirmed",
"status_label": "مؤكد",
"scheduled_at": "2026-05-10T09:00:00Z",
"completed_at": null,
"proposed_scheduled_at": null,
"reschedule_status": null,
"address": "New Cairo, Street 90",
"address_en": "New Cairo, Street 90",
"address_ar": "القاهرة الجديدة، شارع 90",
"customer_name": "Ahmed",
"customer_phone": "01012345678",
"service_type_id": "a1b2c3d4-...",
"service_type_name": "غسيل سيارات",
"service_type_name_en": "Car Wash",
"service_type_name_ar": "غسيل سيارات",
"price": "150.00",
"amount_due": "150.00",
"subtotal": "140.00",
"payment_method": "cod",
"payment_method_ar": "الدفع عند الاستلام",
"payment_method_en": "Cash on Delivery",
"payment_method_label": "الدفع عند الاستلام",
"notes": null,
"customer_notes": "Gate 3",
"driver_id": null,
"driver_name": null,
"driver_phone": null,
"supplier_branch_id": null,
"branch_name": null,
"branch_address": null,
"inserted_at": "2026-05-07T10:30:00Z",
"updated_at": "2026-05-07T11:00:00Z"
}
],
"meta": {
"count": 1,
"limit": 50,
"offset": 0
}
}
status_label, payment_method_label, and
service_type_name
follow the supplier’s locale.
Both language fields are always present for mapping in your system. Money fields are
decimal strings. Customer fields are limited to name + phone for fulfillment.
Pagination
GET /api/v1/orders?limit=100&offset=0
GET /api/v1/orders?limit=100&offset=100
meta.count
is the number of rows in this page, not the full total.
Errors
{ "error": "description of the problem" }
| Status | Cause |
|---|---|
| 400 | Bad query (e.g. unknown status) |
| 401 | Missing/invalid key, or supplier inactive / not accepted |
| 429 |
Rate limit exceeded (Retry-After header set)
|
| 500 | Server error |
Rate limits
Default: 120 requests per minute per API key. Do not poll more often than about once per minute unless agreed.
Security notes
- Store the key in a server-side secret store only.
- Use HTTPS only.
- Scope is your orders only. You will never see another supplier’s data.
- Rotate the key immediately if it may have leaked (admin → Rotate Key).
Need access or help integrating?
Contact [email protected] for API keys and integration support.