Asynchronous operations
Every write to the Management API is accepted first and applied a moment later. Build for that and your integration stays correct under retries, timeouts, and race conditions.
What 202 Accepted meansβ
Capture, refund, cancel, and reauthorize answer with 202 Accepted, an empty body, and a
Location header pointing at the order. Reauthorizing to a higher amount is the one exception,
and it is covered further down.
HTTP/1.1 202 Accepted
Location: /manage/orders/1b1f5ef6-92n1-4b46-b1dc-ae2e00c4c315
202 means Walley has taken the request and will apply it. It does not mean the change is live.
For a few seconds afterward, Merchant Hub, settlement data, and this API can all still show the
order as it was before your call.
So do not treat a 202 as "the order now looks like X". Treat it as "the change is on its way".
Fetching the order right after a 202 usually returns the old version. Use one of the two
patterns below instead.
Reading the resultβ
If you have a correlationIdβ
When you have the action's correlationId from a webhook, pass it to
Get order. Walley returns the order only once that action has been
applied, so you never read a stale version.
curl "https://api.uat.walleydev.com/manage/orders/YOUR_ORDER_ID?correlationId=YOUR_CORRELATION_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Until the action lands, the call returns 404 Not Found. Retry after at least 3 seconds.
If you do not have a correlationIdβ
Wait up to a minute before fetching, and keep the read off your customer's critical path. This suits reporting jobs, nightly reconciliation, and anything else that is not time sensitive.
Retrying safelyβ
Retries are expected. Two rules keep them from doing damage.
Send an idempotency key on every write. Generate a UUID v4 per operation and send it as
X-Idempotency. If the response never arrives, repeat the exact same request with the same key
and Walley applies the operation once. See Idempotency.
X-Idempotency: 03304b06-cb33-4f78-bcea-86cb4b202ba0
Know which failures are worth retrying.
| Response | What happened | What to do |
|---|---|---|
403 | Missing permission, or the order has not finished syncing yet. | Retry after at least 3 seconds. If it persists, check your access. |
404 | Order not found, it has not finished syncing, or a correlationId you passed has not been applied yet. | Retry after at least 3 seconds. |
409 | A request with the same idempotency key is already running. | Wait, then read the order back. Do not send a new key. |
422 | The request conflicts with the state of the order. | Do not retry. Fix the request. See Errors. |
A 403 or 404 right after an order was created is usually the sync delay, not a real problem.
The one exception: reauthorizing to a higher amountβ
Raising an order's total needs a fresh credit check, and that can involve the customer. So
Reauthorize order answers 201 Created instead of 202, with
a Location header pointing at a status resource.
HTTP/1.1 201 Created
Location: /manage/orders/b6be7ec0-311b-490d-8856-af8d00c783b5/reauthorize/1b1f5ef6-92n1-4b46-b1dc-ae2e00c4c315
Poll that URL until status is Completed or Failed.
{
"data": {
"id": "ca81364e-895f-4250-bdb2-a9dafa13c4bc",
"orderId": "b2be7nc0-351b-890d-8856-af8d00a783b5",
"status": "Completed",
"createdAt": "2023-01-17T12:09:27.029057+00:00"
},
"links": {},
"metaData": {}
}
Failed means the credit check was declined or Walley needed more household income data. The
order keeps its original amount, so nothing is left half applied.
Lowering the amount or keeping it the same returns 202 like every other write.
A checklist for your integrationβ
- Treat
202as accepted, not applied - Send
X-Idempotencyon every capture, refund, cancel, and reauthorize - Retry
403and404after at least 3 seconds, never422 - Reuse the same idempotency key when you retry
- Poll the status URL when a reauthorize returns
201 - Never block a customer-facing screen on a read-back
Next stepsβ
- Order lifecycle covers which actions a status allows
- Errors lists the responses and what each one calls for