GET

List Orders

Retrieve a paginated list of orders with filtering, sorting, and search capabilities.

Endpoint

HTTP Request
GET /v1/orders

Authentication

This endpoint requires a valid API key with canViewOrders permission. The API key must be passed in the X-API-Key header.
Required Header
X-API-Key: your_api_key_here

Query Parameters

ParameterTypeRequiredDefaultDescription
pagenumberNo1Page number for pagination
limitnumberNo25Results per page (max: 250)
statusstringNo-Filter by custom status ID
order_idsstringNo-Comma-separated list of order IDs. By default, expects internal UUIDs. When use_shopify_order_id is true, provide the numeric portion of Shopify's order GID (e.g., for 'gid://shopify/Order/450789469', use '450789469')
use_shopify_order_idbooleanNofalseSet to 'true' to use Shopify order IDs instead of internal UUIDs. Extract the number from Shopify's GID format (gid://shopify/Order/450789469 → 450789469) and pass it in order_ids
searchstringNo-Search in order name, customer name, company, or email
sort_bystringNocreated_atField to sort by: 'created_at' or 'name'
sort_orderstringNodescSort direction: 'asc' or 'desc'
order_typestringNoALL (v1.2), REGULAR (v1.0, v1.1)Filter by order type: REGULAR (standard orders), DRAFT (draft orders), or ALL (both types). Available in v1.2+
workflow_idstringNo-Filter orders by workflow UUID. Only returns orders assigned to this workflow. Available in v1.3+

Response

Returns a JSON object with the following structure:
200 OK - Success Response
{
  "orders": [
    {
      "id": "uuid",
      "shopify_order_id": "gid://shopify/Order/123456789",
      "name": "#1001",
      "created_at": "2024-10-30T12:00:00Z",
      "custom_status": {
        "id": "status-uuid",
        "name": "Processing",
        "color": "#2948ff"
      },
      "custom_sub_status": {
        "id": "sub-status-uuid",
        "name": "Awaiting Parts"
      },
      "addon_statuses": [
        {
          "id": "addon-uuid-1",
          "name": "Quality Check",
          "color": "#10b981",
          "sub_status": {
            "id": "addon-sub-uuid",
            "name": "Passed"
          }
        },
        {
          "id": "addon-uuid-2",
          "name": "Packaging",
          "color": "#f59e0b",
          "sub_status": null
        }
      ],
      "customer": {
        "first_name": "John",
        "last_name": "Doe",
        "email": "john@example.com",
        "phone": "+1234567890"
      },
      "shipping_address": {
        "company": "Acme Corp",
        "address1": "123 Main St",
        "address2": "Suite 100",
        "city": "New York",
        "province": "NY",
        "zip": "10001",
        "country": "United States",
        "latitude": "40.7128",
        "longitude": "-74.0060"
      },
      "total_price": "150.00",
      "currency": "USD",
      "line_items": [
        {
          "id": "line-item-uuid",
          "shopify_line_item_id": "gid://shopify/LineItem/123456789",
          "name": "Product Name",
          "quantity": 2
        }
      ],
      "note": "Please ship carefully",
      "cancelled": false,
      "cancelled_at": null,
      "workflow_id": "uuid-workflow-1",
      "workflow_name": "Fulfillment"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 25,
    "total_count": 100,
    "total_pages": 4,
    "has_next_page": true,
    "has_previous_page": false
  }
}

Response Fields

Root Response Object

FieldTypeDescription
ordersarrayArray of order objects
paginationobjectPagination information

Order Object

FieldTypeDescription
idstringUnique identifier for the order (UUID)
shopify_order_idstringShopify's global ID for the order
namestringOrder number (e.g., #1001)
created_atstring | nullISO 8601 timestamp when order was created in Shopify
custom_statusobject | nullCustom status information
custom_sub_statusobject | nullCustom sub-status information
customerobjectCustomer information
shipping_addressobjectShipping address information
total_pricestring | nullTotal order price
currencystring | nullCurrency code (e.g., USD, CAD)
line_itemsarrayArray of line item objects
notestring | nullOrder note/comments
cancelledboolean | nullWhether the order is cancelled
cancelled_atstring | nullISO 8601 timestamp when order was cancelled
workflow_idstring | nullUUID of the workflow this order belongs to (v1.3+ only)
workflow_namestring | nullName of the workflow this order belongs to (v1.3+ only)

Status Object Fields

FieldTypeDescription
idstringUnique identifier for the custom status
namestringDisplay name of the status (uses public name if configured)
colorstringHex color code for the status

Sub-Status Object

FieldTypeDescription
idstringUnique identifier for the sub-status
namestringName of the sub-status

Customer Object Fields

FieldTypeDescription
first_namestring | nullCustomer's first name
last_namestring | nullCustomer's last name
emailstring | nullCustomer's email address
phonestring | nullCustomer's phone number

Shipping Address Object Fields

FieldTypeDescription
companystring | nullCompany name
address1string | nullPrimary address line
address2string | nullSecondary address line
citystring | nullCity name
provincestring | nullState/Province code
zipstring | nullPostal/ZIP code
countrystring | nullCountry name
latitudestring | nullLatitude coordinate
longitudestring | nullLongitude coordinate

Line Item Object Fields

FieldTypeDescription
idstringUnique identifier for the line item
shopify_line_item_idstringShopify's global ID for the line item
namestringProduct name
quantitynumberQuantity ordered

Pagination Object Fields

FieldTypeDescription
pagenumberCurrent page number
limitnumberResults per page
total_countnumberTotal number of orders matching the query
total_pagesnumberTotal number of pages
has_next_pagebooleanWhether there is a next page
has_previous_pagebooleanWhether there is a previous page

Examples

Basic Request

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?page=1&limit=25" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Filter by Status

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?status=abc123&sort_by=created_at&sort_order=desc" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Get Specific Orders by UUID

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?order_ids=uuid1,uuid2,uuid3" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Get Specific Orders by Shopify Order ID

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?order_ids=5460132438316,5460132438317&use_shopify_order_id=true" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Search Orders

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?search=john@example.com&page=1&limit=50" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Get Draft Orders (v1.2+)

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?order_type=DRAFT&page=1&limit=25" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Get Regular Orders (v1.2+)

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?order_type=REGULAR&page=1&limit=25" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Get All Orders (v1.2+)

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?order_type=ALL&page=1&limit=25" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Filter by Workflow (v1.3+)

cURL Request
curl -X GET "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders?workflow_id=uuid-workflow-1&page=1&limit=25" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3"

Rate Limiting

This endpoint is subject to per-minute and per-day rate limits based on your API key. Rate limit information is returned in the response headers:
  • X-RateLimit-Limit-Minute: Maximum requests per minute
  • X-RateLimit-Remaining-Minute: Remaining requests in current minute
  • X-RateLimit-Reset-Minute: Unix timestamp when minute window resets
  • X-RateLimit-Limit-Day: Maximum requests per day
  • X-RateLimit-Remaining-Day: Remaining requests in current day
  • X-RateLimit-Reset-Day: Unix timestamp when day window resets
  • Retry-After: Seconds to wait before retrying (when rate limited)

Error Responses

400 Bad Request

Invalid query parameters

400 Bad Request
{
  "error": "Invalid query parameters",
  "details": {
    "errors": { ... }
  }
}

401 Unauthorized

Missing or invalid API key

401 Unauthorized
{
  "error": "Unauthorized"
}

403 Forbidden

API key lacks required permissions

403 Forbidden
{
  "error": "Insufficient permissions"
}

500 Internal Server Error

Server error occurred

500 Internal Server Error
{
  "error": "Failed to fetch orders",
  "details": {
    "message": "Error details..."
  }
}