Skip to content

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

  1. Store the key in a server-side secret store only.
  2. Use HTTPS only.
  3. Scope is your orders only. You will never see another supplier’s data.
  4. 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.