Search Orders
This endpoint combines free-text search (q) with the same set of structured filters exposed by the order list. In practice, GET /orders also accepts q, so both endpoints offer equivalent search functionality; use /orders/search when the main purpose of the query is a text search.
Use it when you need to:
- Find an order from a partial piece of data (external ID, customer name, SKU) without building exact filters.
- Power customer support with a single search bar.
- Combine free text with date, channel, or status filters.
Endpoint
Searches orders combining free text with structured filters
qstringFree-text search term. In practice, this is the purpose of this endpoint.
pagenumberPage number.
limitnumberNumber of results per page.
orderStatusstringFilters by exact order status. Alias: status.
statusGroupstringFilters by visual status group: pending, preparing, completed, cancelled, problematic, all.
channelIdsstringOne or more sales channel IDs. Alias: channelId.
salesChannelstringFilters by channel type (e.g. shopify, amazon, manual). Alias: origin.
salesChannelsstringVariant that accepts multiple channel types. Alias: origins.
locationstringFilters by the order's location/branch.
startDatestringMinimum date of the range (ISO 8601).
endDatestringMaximum date of the range (ISO 8601).
paymentStatusstringFilters by payment status.
tagsstringFilters by tag(s) assigned to the order.
deliveryStatusstringFilters by delivery status.
hasShipmentbooleanFilters orders that do (or don't) have an associated shipment.
fulfillmentModestringFilters by fulfillment mode.
deliveryCarrierstringFilters by delivery carrier.
customerIdstringFilters the orders of a specific customer.
extendstringControls the inclusion of additional related data in the response.
metafieldsstringFilters by custom metafields. Receives a serialized JSON object.
{
"data": [
{
"_id": "65f3a1b2c4d5e6f7a8b9c0d1",
"externalId": "FEN-10042",
"origin": "manual",
"channelId": "manual",
"orderStatus": "accepted",
"paymentStatus": "paid",
"currency": "MXN",
"totalAmount": 1986.26,
"orderCreated": "2026-04-11T14:23:11.000Z",
"items": [
{
"sku": "CAM-ROJO-M",
"title": "Camisa Roja Talla M",
"quantity": 2,
"totalAmount": 998.00
}
],
"customerInfo": { "name": "María González" },
"_links": {
"prepare": "/orders/65f3a1b2c4d5e6f7a8b9c0d1/prepare",
"cancel": "/orders/65f3a1b2c4d5e6f7a8b9c0d1/cancel"
}
}
],
"meta": {
"pagination": {
"page": 1,
"limit": 20,
"total": 3,
"totalPages": 1,
"hasMore": false
}
}
}
Required permission: orders:read
Tip
/orders/search and GET /orders with q resolve the same search. If your integration already lists orders with filters, it's simpler to add q to that same call than to maintain two separate code paths.
Examples
curl "https://api.fenicia.io/orders/search?q=maria%40example.com&orderStatus=accepted" \
-H "Authorization: Bearer fkapi_your_api_key"Errors
| Code | Status | Description |
|---|---|---|
validation:invalid_pagination | 400 | page or limit has an invalid value. |
validation:invalid_date_range | 400 | startDate/endDate form an invalid range. |
validation:invalid_value | 400 | Some filter received a value with an incorrect format. |
auth:invalid_token | 401 | The API key is invalid or has been revoked. |
auth:permission_denied | 403 | The API key doesn't have the orders:read permission. |
See the full error catalog for the rest of the possible codes.