Return Requests
6 API calls in this section.
Create Return Request (Customer)
/delivery/returns?tenant_id={{tenant_id}}&language=enCreate a return request for a delivered delivery. Flow - Creates a return_requests record with status = pending - Updates the original delivery return_status = return_requested - If system_settings(scope=tenant).return_requests.auto_approval = true, the system auto-approves and creates a return delivery using default_delivery_service_id and destination_mode. Return Delivery Payment Settings - Return deliveries are ALWAYS created with payment_method = wallet and payer_type = sender (customer pays via wallet), regardless of the original delivery's payment settings. Endpoint alias - Same payload is also accepted at POST /delivery/returns/request. Business Rules - Delivery must have status = delivered - Only one non-cancelled return request per delivery
1curl --request POST "$ONDI_BASE_URL/delivery/returns?tenant_id={{tenant_id}}&language=en" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "X-API-Key: {{api_key}}" \4 --header "Content-Type: application/json" \5 --header "Content-Type: application/json" \6 --data '{7 "delivery_id": "delivery-uuid",8 "return_reason": "Damaged product",9 "notes": "Package arrived with visible damage"10}'1{2 "delivery_id": "delivery-uuid",3 "return_reason": "Damaged product",4 "notes": "Package arrived with visible damage"5}Query parameters
tenant_idOptional{{tenant_id}}
UUID of the tenant (required)
languageOptionalen
Preferred language (optional)
Request body fields
delivery_idExampleExample field from the request body.
return_reasonExampleExample field from the request body.
notesExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
X-API-KeyOptional{{api_key}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "return_request_created",4 "return_request_id": "return-request-uuid",5 "auto_approved": false6}1{2 "success": true,3 "message": "return_request_created",4 "return_request_id": "return-request-uuid",5 "auto_approved": true,6 "return_delivery_id": "return-delivery-uuid"7}1{2 "success": false,3 "message": "delivery_not_eligible_for_return"4}1{2 "success": false,3 "message": "return_already_exists_for_delivery"4}Create Return Request (Customer) - Alias
/delivery/returns/request?tenant_id={{tenant_id}}&language=enAlias of POST /delivery/returns (kept for compatibility). Same behavior and payload.
1curl --request POST "$ONDI_BASE_URL/delivery/returns/request?tenant_id={{tenant_id}}&language=en" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "X-API-Key: {{api_key}}" \4 --header "Content-Type: application/json" \5 --header "Content-Type: application/json" \6 --data '{7 "delivery_id": "delivery-uuid",8 "return_reason": "Damaged product",9 "notes": "Package arrived with visible damage"10}'1{2 "delivery_id": "delivery-uuid",3 "return_reason": "Damaged product",4 "notes": "Package arrived with visible damage"5}Query parameters
tenant_idOptional{{tenant_id}}
UUID of the tenant (required)
languageOptionalen
Preferred language (optional)
Request body fields
delivery_idExampleExample field from the request body.
return_reasonExampleExample field from the request body.
notesExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
X-API-KeyOptional{{api_key}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
List Return Requests (Admin)
/delivery/returns/requests?page=1&limit=10&status=&search=&sort_by=&sort_order=desc&column_filters=&tenant_id=&language=enList return requests for a tenant with pagination, sorting, column filters and stats.
1curl --request GET "$ONDI_BASE_URL/delivery/returns/requests?page=1&limit=10&status=&search=&sort_by=&sort_order=desc&column_filters=&tenant_id=&language=en" \2 --header "Authorization: Bearer {{access_token}}"Query parameters
pageOptional1
Page number (default: 1)
limitOptional10
Items per page (default: 10)
statusOptionalFilter by return request status: pending, approved, cancelled
searchOptionalSearch across original_delivery_code, return_delivery_code, customer_name (ILIKE)
sort_byOptionalSort column: delivery_code | return_delivery_code | customer_name | requested_at (default: requested_at)
sort_orderOptionaldesc
asc or desc (default: desc)
column_filtersOptionalJSON object. Keys: delivery_code (string ILIKE), return_delivery_code (string ILIKE), customer_name (string ILIKE), return_reason (string ILIKE), status (string exact), requested_at ({from?, to?} date range). Example: {"status":"pending","requested_at":{"from":"2025-01-01","to":"2025-01-31"}}
tenant_idOptionalTenant ID (optional if in auth token)
languageOptionalen
Preferred language
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
Get Return Request (Admin)
/delivery/returns/requests/:id?tenant_id={{tenant_id}}&language=enGet return request details including original delivery + (optional) warehouse + (optional) created return delivery.
1curl --request GET "$ONDI_BASE_URL/delivery/returns/requests/:id?tenant_id={{tenant_id}}&language=en" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "X-API-Key: {{api_key}}" \4 --header "Content-Type: application/json"Path parameters
idRequiredreturn-request-uuid
Query parameters
tenant_idOptional{{tenant_id}}
UUID of the tenant (required)
languageOptionalen
Preferred language (optional)
Headers
AuthorizationOptionalBearer {{access_token}}
X-API-KeyOptional{{api_key}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Delete Return Request (Admin)
/delivery/returns/:id?tenant_id=&language=enDelete a return request by ID.
1curl --request DELETE "$ONDI_BASE_URL/delivery/returns/:id?tenant_id=&language=en" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
idRequiredreturn-request-uuid
Query parameters
tenant_idOptionalTenant ID (optional if in auth token)
languageOptionalen
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
Approve Return Request (Admin)
/delivery/returns/:id/approve?tenant_id={{tenant_id}}&language=enApprove a pending return request and create the return delivery using tenant setting return_requests (default service + destination mode). Payment Settings - Return delivery is created with payment_method = wallet and payer_type = sender (customer pays via wallet). Note: this endpoint has no request body; it is fully driven by settings.
1curl --request POST "$ONDI_BASE_URL/delivery/returns/:id/approve?tenant_id={{tenant_id}}&language=en" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "X-API-Key: {{api_key}}" \4 --header "Content-Type: application/json"Path parameters
idRequiredreturn-request-uuid
Query parameters
tenant_idOptional{{tenant_id}}
UUID of the tenant (required)
languageOptionalen
Preferred language (optional)
Headers
AuthorizationOptionalBearer {{access_token}}
X-API-KeyOptional{{api_key}}
Content-TypeOptionalapplication/json
Responses
1{2 "success": true,3 "message": "return_request_approved",4 "return_delivery_id": "return-delivery-uuid"5}