Orders
Methods for reading and changing the orders of the current shop: a filtered list, a single order, updates, status changes and cancellation. Every method is synchronous: the result comes back straight away.
Order list
GET /api/merchant-service/orders/list
Returns the shop's orders page by page. Every filter is optional. The default sorting is by creation date, newest first.
curl "https://admin.mobiusapp.io/api/merchant-service/orders/list?status_code=in_progress&payed=true&limit=50" \
-H "Authorization: Bearer <token>"
Query parameters
| Parameter | Type | Description |
|---|---|---|
limit |
integer | Page size, 1 to 100 (25 by default). |
page |
integer | Page number (1 by default). |
id |
integer | Exact match on the order id. |
customer |
string | Substring search over the customer's contact details. |
status_code |
string | Exact match on the status code. |
payment_id |
integer | Filter by payment method. |
delivery_id |
integer | Filter by delivery method. |
person_type |
string |
individual or legal. |
payed |
boolean | Paid or unpaid. |
canceled |
boolean | Cancelled or not. |
created_at_from |
string |
Date from, in d.m.Y form (for example 01.06.2026). |
created_at_to |
string | Date to, in the same form. |
sort_by |
string |
id, created_at or price. |
sort_dir |
string |
asc or desc. |
The response
A list wrapper with data, links and meta (see
Pagination). Every data element is a brief order card:
{
"data": [
{
"id": 1024,
"created_at": "2026-06-20T12:30:00Z",
"price": 3980,
"delivery_price": 300,
"bonus_spent": 0,
"person_type": "individual",
"status_code": "in_progress",
"status_label": "In progress",
"status_updated_at": "2026-06-20T13:00:00Z",
"payed": true,
"payed_updated_at": "2026-06-20T12:35:00Z",
"canceled": false,
"canceled_updated_at": null,
"customer": { "name": "John", "phone": "+70000000000", "email": "john@example.com" },
"payment": { "id": 3, "title": "Online payment" },
"delivery": {
"id": 5,
"title": "Courier",
"pickup_point": null,
"location": { "id": 77, "name": "London" }
}
}
],
"links": { "first": "...", "last": "...", "prev": null, "next": "..." },
"meta": { "current_page": 1, "per_page": 25, "total": 118, "last_page": 5 }
}
Single order
GET /api/merchant-service/orders/item/{id}
Returns the full information about an order: the customer, the order fields, the payment, the delivery and the basket contents.
curl https://admin.mobiusapp.io/api/merchant-service/orders/item/1024 \
-H "Authorization: Bearer <token>"
Key data fields:
| Field | Description |
|---|---|
id, created_at |
The identifier and date of the order. |
person_type |
individual or legal. |
customer_comment |
The customer's comment. |
status |
An object { code, label, updated_at }. |
payed, payed_updated_at |
The paid flag and when it last changed. |
canceled, canceled_updated_at |
The cancelled flag and when it last changed. |
price |
The order total. |
items_price |
The sum of the items, without delivery. |
delivery_price |
The delivery price. |
bonus_spent |
Bonuses redeemed. |
user |
The customer: { id, name, phonenumber, email }, or null. |
customer_fields |
The filled order fields: a list of { code, title, type, value }. |
payment |
Payment: { id, title, handler, payload }. |
delivery |
Delivery: { id, title, type, price, pickup_point, location }. |
basket |
The basket contents: a list of lines. |
delivery.type is courier or pickup. For pickup, delivery.pickup_point is
filled ({ id, title, address, phonenumber, worktime }); for a courier,
delivery.location ({ id, name }).
The full schema is in the OpenAPI documentation.
If the order is not found in the current shop context, 404 is returned.
Updating an order
POST /api/merchant-service/orders/update/{id}
Every field is optional: send only what needs changing. Fields not present in the body stay as they were. At least one field must be sent. The response carries the full order card, as in Single order.
curl -X POST https://admin.mobiusapp.io/api/merchant-service/orders/update/1024 \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"payed": true,
"delivery_price": 300,
"basket": [
{ "product_external_id": "SKU-100", "quantity": 2, "price": 1990, "currency": "RUB" }
]
}'
Request fields
| Field | Type | Description |
|---|---|---|
person_type |
string |
individual or legal. |
customer_comment |
string | null | The customer's comment. |
customer_payload |
object | A full replacement of the order field data. |
payment_id |
integer | null | The payment method. |
delivery_id |
integer | null | The delivery method. |
delivery_price |
number | null | The delivery price (not less than 0). |
pickup_point_id |
integer | null | The pickup point by internal id. |
pickup_point_external_id |
string | null | The pickup point by external id. |
location_id |
integer | null | The delivery location. |
payed |
boolean | The paid flag. |
basket |
array | A full replacement of the basket. |
Replacing the basket
If basket is sent, the basket is rewritten in full and the order total is
recalculated automatically:
price = sum(quantity × price) + delivery_price. Sending an empty array []
clears the basket.
For a product, give at least one of product_id and product_external_id: the
lookup goes by internal id first and then by external id within the current shop.
A pickup point works the same way: pickup_point_id and
pickup_point_external_id.
Timestamps
If payed is sent and differs from the current value, payed_updated_at is
updated to the current moment.
Errors
422 for a validation error (format) or a business error (a product or pickup
point was not found by the given id). 404 if the order does not exist.
Changing the status
POST /api/merchant-service/orders/status/{id}
Changes the order status. The status is given in the status field as a status
code. The lookup goes by internal status code first and then by external status
code within the current shop.
curl -X POST https://admin.mobiusapp.io/api/merchant-service/orders/status/1024 \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "status": "in_progress" }'
The response:
{
"success": true,
"data": {
"id": 1024,
"status_code": "in_progress",
"status_label": "In progress",
"status_updated_at": "2026-06-21T10:20:00Z"
}
}
If the given status matches the current one, the record is not updated and
status_updated_at stays as it was. If no status with that code is found, a
business error (422) is returned. If the order does not exist, 404.
Cancelling an order
POST /api/merchant-service/orders/cancel/{id}
Marks the order as cancelled (canceled = true) and updates the cancellation
timestamp. The method is idempotent: calling it again for an already
cancelled order changes nothing. The order status is not affected: use the
status method for that.
curl -X POST https://admin.mobiusapp.io/api/merchant-service/orders/cancel/1024 \
-H "Authorization: Bearer <token>"
{
"success": true,
"data": {
"id": 1024,
"canceled": true,
"canceled_updated_at": "2026-06-21T10:25:00Z"
}
}
If the order does not exist, 404.
Related pages
- Importing prices and stock
- Errors, limits and pagination
- Webhooks: receive order events (created, paid, cancelled) in real time.
- OpenAPI documentation: the order schemas.