Authorization: Bearer. It is only available on an enterprise account, and every route lives under https://www.remoteretrieval.com/api/v1 — there is no separate API host.
orders.create books a real, paid shipment. A box is sent to a named employee at a home address and collected from there, and every order is billed at the per-device price prices returns (an order stays in orders.pending until that payment completes). The API documents no test mode and no cancel route, so read this before calling it, and never call it in a loop:
- Check
pricesfirst when the cost matters. It is the live per-device price, and it is the only placeMonitor_27is explained: it is a display of 24 to 27 inches, where plainMonitormeans 17 to 23. - Two cross-field rules are enforced before the request.
return_add_srv: 2means data wipe and delivery to a new employee, so it needsnew_employee_info;ins_active: 1needs anins_amount. The plugin rejects either omission rather than letting the API create an order it cannot fulfil.return_add_srvalso only makes sense on aReturn To Companyorder, not a recycle. - The request and response spellings differ. A create takes
employee_info.address_city,address_stateandaddress_zip; every list answersemployee_info.city,stateandzip. The models follow each side, so a value copied from a read will not fit a write without renaming. - One order ID comes back for a batch.
orders.createaccepts an array, but the response carries a singleorderreference, as a string.
- The four order lists do not share a shape.
orders.pending,orders.new,orders.inprogressandorders.getanswer a bare array (paged bypage, up to 25); onlyorders.listanswers{next, previous, results}and pages by the response’s ownnextlink: pass that link back ascursorand the plugin reads the cursor out of it. orders.gettakes its ID as a query parameter, not a path segment. The route isdevice_returnsand the id is?oid=.- The three list routes are a pipeline, not a filter.
pendingis payment not yet completed (on hold),newis payment done and ready to process, andinprogresshas the return leg started but the device not yet back.orders.listis the one place bothpayment_statusandorder_statusappear together. ---means “not started”.shipments.send_statusandreturn_statuscarry that placeholder before a leg begins, so it is not a failure state to alert on.- A refusal can arrive as a
401withInvalid Key!, which is the live answer for both a missing key and a wrong key — the message cannot tell them apart. A failure also carriesstatus: "Fail"alongside itscode, and the plugin checks for that, so a refusal reported inside a200still throws rather than being read as an order. - No rate limit is documented. Orders are created and billed at a real logistics company, so
orders.createis never retried, not even after a429or a5xx; the reads retry either twice.
- 9 typed API operations
Setup
1
Install
2
Add the plugin
corsair.ts
multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
4
Connect a tenant
Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.
Example API calls
List orders awaiting paymentWhat’s next
API reference
Every
remoteretrieval.api.* operation with input and output types.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.