Turuq Onboarding

List Orders

Retrieve a paginated list of orders belonging to the authenticated client, across both standard and integration order collections.

Retrieve a cursor-paginated list of orders associated with your account. Results are sorted newest-first and aggregate across both the standard order and integration order collections.

Request

Method: GET
Endpoint: /api/v1/orders
Content-Type: N/A (query parameters only)

Query Parameters

ParameterTypeRequiredDescription
limitnumberNumber of orders to return per page. Min 1, max 100. Defaults to 20.
cursorstringISO 8601 date string used for cursor-based pagination. Pass the nextCursor value from the previous response to retrieve the following page. Omit on the first request.
statusstringComma-separated list of order statuses to filter by. See Valid Status Values below.
typestringComma-separated list of order types / providers to filter by. See Valid Type Values below.

Valid Status Values

ValueDescription
pendingOrder has been created and is awaiting processing
processingOrder is being prepared for dispatch
pickedUpOrder has been picked up by the courier
outForDeliveryOrder is out for delivery
deliveredOrder has been delivered to the customer
collectedPayment for the order has been collected
returnedOrder was returned to the warehouse
cancelledOrder was cancelled
postponedDelivery has been postponed
unreachableCustomer could not be reached
outOfStockOne or more products were out of stock
invalidAddressCustomer address could not be validated
RTWReturn to warehouse in progress
QCOrder is undergoing quality control

Valid Type Values

Standard order types:

ValueDescription
NORMALA standard fulfillment order
PROMOTIONALA promotional / gifting order
EXCHANGEAn exchange order
REFUNDA refund/return order

Integration order providers:

ValueDescription
SHOPIFYOrder originated from a Shopify store
WOOCOMMERCEOrder originated from a WooCommerce store
OPENAPIOrder created via the Open API

Example Request

GET /api/v1/orders?limit=20&status=pending,processing&type=NORMAL HTTP/1.1
X-API-Key: your-api-key

Fetching the next page using a cursor:

GET /api/v1/orders?limit=20&cursor=2025-06-15T10:00:00.000Z HTTP/1.1
X-API-Key: your-api-key

Response

✅ 200 OK

Orders were successfully retrieved.

Response Body

FieldTypeDescription
dataarrayArray of order objects for the current page
paginationobjectPagination metadata
pagination.limitnumberThe effective page size used
pagination.hasNextPagebooleantrue if more results are available after this page
pagination.nextCursorstring | nullISO 8601 date string to pass as cursor on the next request. null when on the last page.

Order Object Fields

FieldTypeDescription
OIDstringUnique 13-digit Turuq order identifier
statusstringCurrent order status
sourcestringUnified type/provider field (e.g. NORMAL, SHOPIFY, OPENAPI)
customerNamestringCustomer's full name
customer.governoratestringCustomer's governorate
subtotalnumberOrder subtotal (EGP)
totalnumberTotal order value including fees (EGP)
shippingFeesnumberShipping fees applied to the order (EGP)
createdAtstringISO 8601 timestamp of when the order was created

Example Response (First Page)

{
  "data": [
    {
      "OID": "0001234567890",
      "status": "pending",
      "source": "NORMAL",
      "customerName": "Ahmed Ali",
      "customer": {
        "governorate": "Cairo"
      },
      "subtotal": 750.00,
      "total": 800.00,
      "shippingFees": 50.00,
      "createdAt": "2025-06-20T14:23:00.000Z"
    },
    {
      "OID": "0009876543210",
      "status": "processing",
      "source": "SHOPIFY",
      "customerName": "Sara Mohamed",
      "customer": {
        "governorate": "Alexandria"
      },
      "subtotal": 1200.00,
      "total": 1265.00,
      "shippingFees": 65.00,
      "createdAt": "2025-06-18T09:10:00.000Z"
    }
  ],
  "pagination": {
    "limit": 20,
    "hasNextPage": true,
    "nextCursor": "2025-06-18T09:10:00.000Z"
  }
}

Example Response (Last Page)

{
  "data": [ /* ... */ ],
  "pagination": {
    "limit": 20,
    "hasNextPage": false,
    "nextCursor": null
  }
}

❌ 400 Bad Request

Returned when query parameter validation fails.

Invalid cursor value:

{
  "error": "Invalid cursor value. Must be a valid ISO 8601 date string."
}

Invalid status value:

{
  "error": "Invalid status value(s): invalidStatus"
}

Invalid type value:

{
  "error": "Invalid type value(s): UNKNOWN_PROVIDER"
}

❌ 500 Internal Server Error

{
  "error": "Internal Server Error"
}

Pagination Guide

This endpoint uses cursor-based pagination for efficient traversal of large result sets. Unlike offset-based pagination, cursors are stable across concurrent writes and do not degrade in performance as you navigate deeper into the dataset.

  1. First request — omit cursor. The response will contain the first limit results.
  2. Subsequent requests — pass the nextCursor value from the previous response as the cursor parameter.
  3. End of results — when hasNextPage is false and nextCursor is null, you have retrieved all matching orders.

The cursor value is an ISO 8601 timestamp. Results with a createdAt strictly before the cursor are returned, ensuring no page overlap.


For an overview of all order-related endpoints, visit the Orders Overview.

On this page