DocsOrders and refills
Orders and refills
Place orders one at a time or up to 100 at once, follow them through their statuses, cancel them and request refills.
The order object
| Name | Type | Description |
|---|---|---|
id | integer | Order ID. The same ID works on API v2 and in the panel. |
object | string | Always order. |
service | object | The service ordered: id, name and platform. |
link | string | The link you sent. |
quantity | integer | Units ordered. With drip-feed, units per run. |
status | string | See Statuses. |
start_count | integer or null | The count on the link when delivery started, once the supplier reports it. |
delivered | integer | Units delivered so far. |
remains | integer | Units not delivered. For a closed order, the units that were refunded. |
rate | string | Your price per 1,000 when you placed the order. |
charge | string | What was taken from your balance. |
refunded | string | What went back to your balance for undelivered units. |
currency | string | Always USD. |
runs, interval | integer or null | Drip-feed runs and minutes between them, or null. |
rerouted | boolean | Only when you list or get orders: true if the order moved to a backup line. |
cancel_requested | boolean | true once a cancel has been asked for. |
can_cancel | boolean | Whether a cancel would be accepted now. |
refill.available | boolean | Whether you can request a refill now. |
refill.until | string or null | When the refill window closes. null for lifetime refill or when refill isn’t available. |
livemode | boolean | false for sandbox orders. |
created_at, started_at, completed_at, updated_at | string or null | ISO 8601 times in UTC. |
events | array | Only on Get an order and Cancel: the order’s timeline, each with type, message and at. |
Timeline event types: created, sent, queued_same_link, started, cancel_requested, cancel_confirmed, completed, partial, canceled,refill_requested, refill_completed, refill_rejected.
Statuses
| Status | Meaning |
|---|---|
pending | Received and paid, not sent to a supplier yet. |
processing | Sent to a supplier line, waiting for delivery to start. |
in_progress | Delivering. |
completed | Delivered in full. Final. |
partial | Closed with part undelivered; that part is in refunded. Final. |
canceled | Closed before delivery; the charge is in refunded. Final. |
Place an order
POST/v1/ordersScope ordersChecks the order, takes the charge from your balance and sends it to a supplier line. Send an Idempotency-Key header so a retry can never place it twice; see Idempotency.
Body
| Name | Type | Required | Description |
|---|---|---|---|
service | integer | required | Service ID. |
link | string | required | The profile, post, video or channel URL. Up to 1,000 characters. |
quantity | integer | required | Between the service’s min and max. With drip-feed, the quantity per run. |
runs | integer | optional | Drip-feed: 2 to 1,000 runs. Requires interval. You are charged for quantity × runs. |
interval | integer | optional | Drip-feed: 1 to 1,440 minutes between runs. Requires runs. |
Headers
| Name | Type | Description |
|---|---|---|
Idempotency-Key | string | 1 to 64 characters. Recommended. |
Answers: 201 with the new order, or 200 with Idempotent-Replayed: true for a replayed key. Errors: 402 not_enough_funds, 409 idempotency_conflict, 422 withinvalid_request, incorrect_service, incorrect_link, quantity_out_of_range or dripfeed_not_supported.
Request
curl https://orbismm.com/api/v1/orders \
-H "Authorization: Bearer $ORBISMM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3f6c2a9e-8d41-4b7a-9e0c-5d2f1b7a4c88" \
-d '{"service":1001,"link":"https://www.instagram.com/yourbrand","quantity":1000}'
Response · 201 Created
{
"id": 58213,
"object": "order",
"service": {
"id": 1001,
"name": "Instagram Followers",
"platform": "instagram"
},
"link": "https://www.instagram.com/yourbrand",
"quantity": 1000,
"status": "pending",
"start_count": null,
"delivered": 0,
"remains": 1000,
"rate": "2.4000",
"charge": "2.4000",
"refunded": "0.0000",
"currency": "USD",
"runs": null,
"interval": null,
"cancel_requested": false,
"can_cancel": true,
"refill": {
"available": false,
"until": null
},
"livemode": true,
"created_at": "2026-09-26T14:02:11Z",
"started_at": null,
"completed_at": null,
"updated_at": "2026-09-26T14:02:11Z"
}Place orders in a batch
POST/v1/orders/batchScope ordersUp to 100 orders in one call. Each is checked, charged and placed on its own, in the order you sent them: one failing doesn’t stop the rest. The answer lists every item by its index with either the order or anerror in the usual error format.
Body
| Name | Type | Required | Description |
|---|---|---|---|
orders | array | required | 1 to 100 items, each with the fields of Place an order. |
orders[].idempotency_key | string | optional | Up to 64 characters. Works like the Idempotency-Key header, per item. |
The call itself answers 200 whenever the list is valid; check each item. A list that is missing, empty or longer than 100 gets 422 invalid_request.
Request
curl https://orbismm.com/api/v1/orders/batch \
-H "Authorization: Bearer $ORBISMM_KEY" \
-H "Content-Type: application/json" \
-d '{"orders":[{"service":1001,"link":"https://www.instagram.com/yourbrand","quantity":1000,"idempotency_key":"batch-0926-001"},{"service":1001,"link":"https://www.instagram.com/secondbrand","quantity":1,"idempotency_key":"batch-0926-002"}]}'
Response · 200 OK
{
"data": [
{
"index": 0,
"order": {
"id": 58213,
"object": "order",
"service": {
"id": 1001,
"name": "Instagram Followers",
"platform": "instagram"
},
"link": "https://www.instagram.com/yourbrand",
"quantity": 1000,
"status": "pending",
"start_count": null,
"delivered": 0,
"remains": 1000,
"rate": "2.4000",
"charge": "2.4000",
"refunded": "0.0000",
"currency": "USD",
"runs": null,
"interval": null,
"cancel_requested": false,
"can_cancel": true,
"refill": {
"available": false,
"until": null
},
"livemode": true,
"created_at": "2026-09-26T14:02:11Z",
"started_at": null,
"completed_at": null,
"updated_at": "2026-09-26T14:02:11Z"
}
},
{
"index": 1,
"error": {
"code": "quantity_out_of_range",
"message": "Quantity must be between 50 and 100000."
}
}
]
}List orders
GET/v1/ordersScope readNewest first, with a cursor. See Pagination.
Query parameters
| Name | Type | Description |
|---|---|---|
status | string | One or more statuses, comma-separated, for example pending,processing,in_progress. An unknown status gets 422. |
service | integer | Only this service. |
platform | string | Only this platform. |
link | string | Only orders on exactly this link. |
ids | string | Comma-separated order IDs, up to 100. |
q | string | Search by order ID, part of the link or part of the service name. |
created_after | string | Orders created at or after this time (ISO 8601). |
created_before | string | Orders created before this time. |
limit | integer | 1 to 100. Default 50. |
starting_after | integer | The next_cursor from the previous page. |
Request
curl "https://orbismm.com/api/v1/orders?status=in_progress&limit=20" \
-H "Authorization: Bearer $ORBISMM_KEY"
Response · 200 OK
{
"data": [
{
"id": 58213,
"object": "order",
"service": {
"id": 1001,
"name": "Instagram Followers",
"platform": "instagram"
},
"link": "https://www.instagram.com/yourbrand",
"quantity": 1000,
"status": "in_progress",
"start_count": 18420,
"delivered": 312,
"remains": 688,
"rate": "2.4000",
"charge": "2.4000",
"refunded": "0.0000",
"currency": "USD",
"runs": null,
"interval": null,
"rerouted": false,
"cancel_requested": false,
"can_cancel": true,
"refill": {
"available": false,
"until": null
},
"livemode": true,
"created_at": "2026-09-26T14:02:11Z",
"started_at": "2026-09-26T14:09:40Z",
"completed_at": null,
"updated_at": "2026-09-26T14:31:02Z"
}
],
"has_more": false,
"next_cursor": null
}Get an order
GET/v1/orders/{id}Scope readOne order with its timeline.
Request
curl https://orbismm.com/api/v1/orders/58213 \
-H "Authorization: Bearer $ORBISMM_KEY"
Response · 200 OK
{
"id": 58213,
"object": "order",
"service": {
"id": 1001,
"name": "Instagram Followers",
"platform": "instagram"
},
"link": "https://www.instagram.com/yourbrand",
"quantity": 1000,
"status": "in_progress",
"start_count": 18420,
"delivered": 312,
"remains": 688,
"rate": "2.4000",
"charge": "2.4000",
"refunded": "0.0000",
"currency": "USD",
"runs": null,
"interval": null,
"rerouted": false,
"cancel_requested": false,
"can_cancel": true,
"refill": {
"available": false,
"until": null
},
"livemode": true,
"created_at": "2026-09-26T14:02:11Z",
"started_at": "2026-09-26T14:09:40Z",
"completed_at": null,
"updated_at": "2026-09-26T14:31:02Z",
"events": [
{
"type": "created",
"message": "Order received",
"at": "2026-09-26T14:02:11Z"
},
{
"type": "sent",
"message": "Sent to line 1",
"at": "2026-09-26T14:02:12Z"
},
{
"type": "started",
"message": "Started · start count 18420",
"at": "2026-09-26T14:09:40Z"
}
]
}Cancel an order
POST/v1/orders/{id}/cancelScope ordersAsks the supplier to stop. The answer is 202 Accepted with the order and cancel_requested: true. The order closes once the supplier confirms: canceled if nothing was delivered, partial if some was. The undelivered part goes back to your balance and shows in refunded. Asking again while the cancel is under way answers 202 and changes nothing.
Errors: 404 not_found, 409 order_closed, 422 cancel_not_supported.
Request
curl -X POST https://orbismm.com/api/v1/orders/58213/cancel \
-H "Authorization: Bearer $ORBISMM_KEY"
Response · 202 Accepted: the order object with its timeline, where
{
"id": 58213,
"object": "order",
"status": "in_progress",
"cancel_requested": true,
"can_cancel": false
}Request a refill
POST/v1/orders/{id}/refillScope ordersFor a completed or partial order whose service has a refill window, while refill.available is true. One refill runs per order at a time. The answer is 202 Accepted with arefill object.
Errors: 404 not_found, 409 with refill_not_available, refill_window_ended or refill_in_progress, 422 refill_not_supported.
Request
curl -X POST https://orbismm.com/api/v1/orders/58214/refill \
-H "Authorization: Bearer $ORBISMM_KEY"
Response · 202 Accepted
{
"id": 912,
"object": "refill",
"order": 58214,
"status": "in_progress",
"created_at": "2026-10-08T09:15:03Z",
"completed_at": null
}The refill object
| Name | Type | Description |
|---|---|---|
id | integer | Refill ID. Also works with v2 refill_status. |
object | string | Always refill. |
order | integer | The order being refilled. |
status | string | pending, in_progress, completed or rejected, or requested when the supplier doesn’t report refill progress. After a requested refill you can ask for another one 24 hours later. |
created_at, completed_at | string or null | ISO 8601 times in UTC. |
Get a refill
GET/v1/refills/{id}Scope readTo hear about refills as they finish, subscribe to refill.completed and refill.rejected.
Request
curl https://orbismm.com/api/v1/refills/912 \
-H "Authorization: Bearer $ORBISMM_KEY"
Response · 200 OK
{
"id": 912,
"object": "refill",
"order": 58214,
"status": "completed",
"created_at": "2026-10-08T09:15:03Z",
"completed_at": "2026-10-08T15:40:27Z"
}