Skip to main content

Review, confirm, and cancel

These actions require the return page entitlement (Grow+). Each successful call returns the return object (same shape as Retrieve).

Typical sequence: review → approve → confirm. Decline instead of approve when you reject the request. Cancel only after a return shipment exists.

Review​

Endpoint
POST /v1/returns/:id/review

Moves the return to in_review. No body. Rejected if a return order already exists.

Approve​

Endpoint
POST /v1/returns/:id/approve

Moves the return to approved. No body. Cannot approve a return that is already approved or declined, or that already has an active return order.

Decline​

Endpoint
POST /v1/returns/:id/decline

Moves the return to declined. Cannot decline a return that already has an active return order.

Body
{
"declined_reason": "Item is not eligible for return"
}
FieldTypeRequiredDescription
declined_reasonstringYesWhy the request is declined.

Confirm​

Endpoint
POST /v1/returns/:id/confirm

Books the reverse shipment. The return must be approved (or a previous return order must be in a finished negative status such as cancelled, rejected, courier_not_found, returned, or disposed). Creates an order and sets return_order_id, waybill, and courier fields.

Omitted origin / destination fields fall back to the values stored on the return. Insurance cannot exceed the total value of returned items.

Body
{
"courier_company": "jne",
"courier_type": "reg",
"delivery_type": "now",
"origin_collection_method": "pickup",
"courier_insurance": 165000,
"order_note": "Return pickup"
}
FieldTypeRequiredDescription
courier_companystringYesCourier code, e.g. jne.
courier_typestringYesService code, e.g. reg.
delivery_typestringYesnow or scheduled.
delivery_datestringIf scheduledYYYY-MM-DD.
delivery_timestringIf scheduledHH:mm.
origin_collection_methodstringNopickup or drop_off. Default pickup.
courier_insuranceintegerNoInsured value in IDR. Cannot exceed returned items value.
order_notestringNoNote on the return order.
metadataobjectNoPassed through to the return order.
origin_contact_namestringNoOverride pickup contact.
origin_contact_phonestringNoOverride pickup phone.
origin_addressstringNoOverride pickup address.
origin_notestringNoOverride pickup note.
origin_address_idstringNoSaved location ID.
origin_area_idstringNoMaps area ID.
origin_postal_codeintegerNoPostal code.
origin_coordinateobjectNo{ "latitude", "longitude" }.
destination_contact_namestringNoOverride seller contact.
destination_contact_phonestringNoOverride seller phone.
destination_contact_emailstringNoSeller email.
destination_addressstringNoOverride seller address.
destination_notestringNoOverride destination note.
destination_address_idstringNoSaved location ID.
destination_area_idstringNoMaps area ID.
destination_postal_codeintegerNoPostal code.
destination_coordinateobjectNo{ "latitude", "longitude" }.

Use Rates to choose courier_company and courier_type before confirming.

Cancel​

Endpoint
POST /v1/returns/:id/cancel

Cancels the return order (the reverse shipment). The return must already have a return_order_id. Same cancellation codes as Cancel an Order.

Body
{
"cancellation_reason_code": "change_courier",
"cancellation_reason": "Need a different courier"
}
FieldTypeRequiredDescription
cancellation_reason_codestringYeschange_courier, change_address, change_item, change_recipient, pickup_delay, no_confirmation, price_discrepancy, item_not_ready, or others.
cancellation_reasonstringNoExtra detail.