curl --request POST \
--url https://api.arcuserp.com/v1/returns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"original_order_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"reason": "wrong_item",
"refund_amount": 150,
"items": [
{
"order_item_id": "11111111-2222-3333-4444-555555555555",
"quantity": 1,
"condition": "unused"
}
],
"restocking_fee": {
"type": "percentage",
"value": 10
},
"auto_refund": true,
"refund_payment_id": "22222222-3333-4444-5555-666666666666"
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "return",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"return_number": "<string>",
"status": "authorized",
"original_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_rma_number": "<string>",
"inspection_required": true,
"restocking_fee": 123,
"refund_amount": 123,
"return_to_vendor": true,
"refund_hold": true,
"refund_hold_note_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"refund_hold_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"refund_hold_at": "2023-11-07T05:31:56Z",
"source": "csr",
"notes": "<string>",
"metadata": {},
"received_at": "2023-11-07T05:31:56Z",
"closed_at": "2023-11-07T05:31:56Z",
"cancelled_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Create a return
Creates a return for a customer, optionally adding line items, a restocking fee, and an immediate refund in the same call. Requires returns:write scope, plus payments:write when issuing an immediate refund with auto_refund: true.
curl --request POST \
--url https://api.arcuserp.com/v1/returns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"original_order_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"reason": "wrong_item",
"refund_amount": 150,
"items": [
{
"order_item_id": "11111111-2222-3333-4444-555555555555",
"quantity": 1,
"condition": "unused"
}
],
"restocking_fee": {
"type": "percentage",
"value": 10
},
"auto_refund": true,
"refund_payment_id": "22222222-3333-4444-5555-666666666666"
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "return",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"return_number": "<string>",
"status": "authorized",
"original_order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_rma_number": "<string>",
"inspection_required": true,
"restocking_fee": 123,
"refund_amount": 123,
"return_to_vendor": true,
"refund_hold": true,
"refund_hold_note_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"refund_hold_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"refund_hold_at": "2023-11-07T05:31:56Z",
"source": "csr",
"notes": "<string>",
"metadata": {},
"received_at": "2023-11-07T05:31:56Z",
"closed_at": "2023-11-07T05:31:56Z",
"cancelled_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Authorizations
API key issued per entity via Settings > Developers > API Keys.
Each key carries scopes (e.g. orders:read, products:write).
Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.
Headers
Client-generated unique key for idempotent POST/PATCH/DELETE operations. Alias for the Idempotency parameter. Max 255 chars. On retry with the same key, the original response is returned without re-executing the operation. Keys expire after 24 hours.
255Body
The originating sales order. Required unless this is a standalone RMA.
Customer account. Derived from the original order when original_order_id is provided.
Free-text reason for the return.
Total dollar amount to refund before restocking fee deduction.
Flat number (e.g. 25.00) or object form: { type: 'percentage', value: 10 } or { type: 'flat', value: 30 }.
Inline return line items. Added atomically with the RMA. quantity is accepted as an alias for quantity_authorized.
Show child attributes
Show child attributes
If true, issue the refund immediately after RMA creation. Requires refund_payment_id and payments:write scope. The response includes a 'refund' object.
Required with auto_refund=true. The original payment to refund against.
Refund routing. 'original' refunds to the original payment method.
original, store_credit, check, cash Bypass the entity's return_window_days check. Requires returns:write.
True when return was initiated via the customer portal.
Response
Created RMA (hydrated with items[] and refund if inline operations ran)
RMA (return merchandise authorization). Phase A -- refund_amount is readOnly via PATCH; written only by POST /v1/returns/{id}/refund.
return Use action endpoints to transition status; PATCH cannot write status.
authorized, expected, received, inspecting, restocked, written_off, closed, sent_to_vendor, cancelled SSOT: written only by POST /v1/returns/{id}/refund (refundReturn canonical). PATCH cannot write this field.
The refund hold. null = never held; true = accounting put the refund on hold with a question for the office, and POST /v1/returns/{id}/refund answers 409 refund_on_hold until the office answers; false = the office answered and the hold is released. Set and released in the Arcus app only; nothing is refunded and no amount owed changes while it is held.
The note that holds the hold's question; kept after the hold is released.
Who put the refund on hold; kept after release.
When the refund was put on hold; kept after release.
csr, customer_portal, marketplace Was this page helpful?

