Institution Transfer Manifest V1
43 API calls in this section.
Processing Points - Create
/delivery/transfer-processing-pointsCreates a lightweight processing point. A processing point is not a warehouse; it is a receiving/sorting/data-entry location. code is unique per tenant.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-processing-points" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "name": "G2G Processing Point",7 "code": "G2G-PP-001",8 "address_id": "{{source_address_id}}",9 "metadata": {10 "source": "postman"11 }12}'1{2 "name": "G2G Processing Point",3 "code": "G2G-PP-001",4 "address_id": "{{source_address_id}}",5 "metadata": {6 "source": "postman"7 }8}Request body fields
nameExampleExample field from the request body.
codeExampleExample field from the request body.
address_idExampleExample field from the request body.
metadataExampleExample field from the request body.
metadata.sourceExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
Processing Points - List
/delivery/transfer-processing-points?page=1&limit=20&is_active=true&branch_id={{source_branch_id}}Lists processing points for the authenticated tenant. Optional filters: is_active, search, and branch_id. When branch_id is provided, the branch's default processing point has is_default: true and is prioritized on page 1. Non-default items omit the is_default key.
1curl --request GET "$ONDI_BASE_URL/delivery/transfer-processing-points?page=1&limit=20&is_active=true&branch_id={{source_branch_id}}" \2 --header "Authorization: Bearer {{access_token}}"Query parameters
pageOptional1
limitOptional20
is_activeOptionaltrue
Optional: true | false
branch_idOptional{{source_branch_id}}
Optional branch ID used to identify and prioritize its default processing point
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
Processing Points - Get Detail
/delivery/transfer-processing-points/{{processing_point_id}}Gets a processing point by id.
1curl --request GET "$ONDI_BASE_URL/delivery/transfer-processing-points/{{processing_point_id}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
processing_point_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Processing Points - Update
/delivery/transfer-processing-points/{{processing_point_id}}Updates processing point fields. code must remain unique per tenant if changed.
1curl --request PATCH "$ONDI_BASE_URL/delivery/transfer-processing-points/{{processing_point_id}}" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "name": "G2G Processing Point Updated",7 "address_id": "{{source_address_id}}",8 "metadata": {9 "updated_from": "postman"10 }11}'1{2 "name": "G2G Processing Point Updated",3 "address_id": "{{source_address_id}}",4 "metadata": {5 "updated_from": "postman"6 }7}Path parameters
processing_point_idRequiredVariable used inside the request path.
Request body fields
nameExampleExample field from the request body.
address_idExampleExample field from the request body.
metadataExampleExample field from the request body.
metadata.updated_fromExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Processing Points - Deactivate
/delivery/transfer-processing-points/{{processing_point_id}}/deactivateSoft-deactivates a processing point. Fails if non-terminal manifests reference it.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-processing-points/{{processing_point_id}}/deactivate" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{}'1{}Path parameters
processing_point_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Institutions - List
/delivery/institutions?page=1&limit=20&search=Lists tenant users whose tenant_user_type is institution. Use a returned id as institution_user_id.
1curl --request GET "$ONDI_BASE_URL/delivery/institutions?page=1&limit=20&search=" \2 --header "Authorization: Bearer {{access_token}}"Query parameters
pageOptional1
limitOptional20
searchOptionalOptional search by name, email, or phone
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Institutions - Get Detail
/delivery/institutions/{{institution_user_id}}Gets an institution tenant_user by id.
1curl --request GET "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
institution_user_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Institution Branches - Create
/delivery/institutions/{{institution_user_id}}/branchesCreates a branch under an institution. institution_user_id comes from the path, not the body. Branch code is unique per tenant/institution.
1curl --request POST "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}/branches" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "name": "G2G Branch",7 "code": "G2G-BR-001",8 "address_id": "{{source_address_id}}",9 "default_processing_point_id": "{{processing_point_id}}",10 "contact_info": {11 "phone": "+10000000000"12 },13 "metadata": {14 "source": "postman"15 }16}'1{2 "name": "G2G Branch",3 "code": "G2G-BR-001",4 "address_id": "{{source_address_id}}",5 "default_processing_point_id": "{{processing_point_id}}",6 "contact_info": {7 "phone": "+10000000000"8 },9 "metadata": {10 "source": "postman"11 }12}Path parameters
institution_user_idRequiredVariable used inside the request path.
Request body fields
nameExampleExample field from the request body.
codeExampleExample field from the request body.
address_idExampleExample field from the request body.
default_processing_point_idExampleExample field from the request body.
contact_infoExampleExample field from the request body.
contact_info.phoneExampleExample field from the request body.
metadataExampleExample field from the request body.
metadata.sourceExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
Institution Branches - List
/delivery/institutions/{{institution_user_id}}/branches?page=1&limit=20&is_active=trueLists branches for an institution. Optional filters: is_active, search.
1curl --request GET "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}/branches?page=1&limit=20&is_active=true" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
institution_user_idRequiredVariable used inside the request path.
Query parameters
pageOptional1
limitOptional20
is_activeOptionaltrue
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Institution Branches - Tenant-wide List
/delivery/institution-branches?page=1&limit=20&is_active=trueLists active branch/location records across all institutions in the tenant. Optional filters: institution_user_id, is_active, search, page, limit. Use this for the destination modal's Institution locations combobox. Response includes branch address and institution user basic profile.
1curl --request GET "$ONDI_BASE_URL/delivery/institution-branches?page=1&limit=20&is_active=true" \2 --header "Authorization: Bearer {{access_token}}"Query parameters
pageOptional1
limitOptional20
is_activeOptionaltrue
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Institution Branches - Lookup by Code
/delivery/institution-branches/by-code/{{branch_code}}Exact lookup for driver branch QR scanning. The QR should contain the branch code, URL-encoded if needed. By default only active branches are returned. Response includes branch detail, address, default processing point, and institution_user. If the same code exists for multiple institutions in the tenant, the API returns 409 branch_code_ambiguous with matching branch/institution summaries.
1curl --request GET "$ONDI_BASE_URL/delivery/institution-branches/by-code/{{branch_code}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
branch_codeRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Institution Branches - Get Detail
/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}Gets a branch owned by the institution.
1curl --request GET "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
institution_user_idRequiredVariable used inside the request path.
branch_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Institution Branches - Update
/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}Updates branch fields.
1curl --request PATCH "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "name": "G2G Branch Updated",7 "default_processing_point_id": "{{processing_point_id}}",8 "metadata": {9 "updated_from": "postman"10 }11}'1{2 "name": "G2G Branch Updated",3 "default_processing_point_id": "{{processing_point_id}}",4 "metadata": {5 "updated_from": "postman"6 }7}Path parameters
institution_user_idRequiredVariable used inside the request path.
branch_idRequiredVariable used inside the request path.
Request body fields
nameExampleExample field from the request body.
default_processing_point_idExampleExample field from the request body.
metadataExampleExample field from the request body.
metadata.updated_fromExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Institution Branches - Deactivate
/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}/deactivateSoft-deactivates a branch. Fails when non-terminal manifests reference it.
1curl --request POST "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}/deactivate" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{}'1{}Path parameters
institution_user_idRequiredVariable used inside the request path.
branch_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Barcodes - Generate Batch
/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}/barcode-batchesGenerates pre-printed barcode identities for an institution branch. Max quantity is 5000. Does not create driver tasks.
1curl --request POST "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}/barcode-batches" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "quantity": 3,7 "prefix": "G2G"8}'1{2 "quantity": 3,3 "prefix": "G2G"4}Path parameters
institution_user_idRequiredVariable used inside the request path.
branch_idRequiredVariable used inside the request path.
Request body fields
quantityExampleExample field from the request body.
prefixExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
Barcodes - List Batches
/delivery/institutions/{{institution_user_id}}/barcode-batches?page=1&limit=20&status=generatedLists barcode batches for an institution.
1curl --request GET "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}/barcode-batches?page=1&limit=20&status=generated" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
institution_user_idRequiredVariable used inside the request path.
Query parameters
pageOptional1
limitOptional20
statusOptionalgenerated
Optional: draft | generated | printed | voided
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Barcodes - List Branch Barcodes
/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}/barcodes?page=1&limit=20&status=availableLists individual barcodes for a branch. Pick an available barcode_value for manifest scanning.
1curl --request GET "$ONDI_BASE_URL/delivery/institutions/{{institution_user_id}}/branches/{{branch_id}}/barcodes?page=1&limit=20&status=available" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
institution_user_idRequiredVariable used inside the request path.
branch_idRequiredVariable used inside the request path.
Query parameters
pageOptional1
limitOptional20
statusOptionalavailable
Optional barcode status filter
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Barcodes - Lookup Barcode
/delivery/institution-barcodes/{{barcode_value}}Looks up a barcode by barcode_value. URL-encode barcode_value if it contains special characters.
1curl --request GET "$ONDI_BASE_URL/delivery/institution-barcodes/{{barcode_value}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
barcode_valueRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Barcodes - Get Batch Detail
/delivery/barcode-batches/{{batch_id}}Gets batch detail plus individual barcodes.
1curl --request GET "$ONDI_BASE_URL/delivery/barcode-batches/{{batch_id}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
batch_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Barcodes - Print Batch
/delivery/barcode-batches/{{batch_id}}/printGenerates a printable PDF for a barcode batch. Send an empty body or { "print_mode": "all" } to print all barcodes; this stores the returned file URL on institution_barcode_batches.print_file_url and marks the batch printed. Send print_mode=selective with barcode_ids, barcode_values, or barcodes to print only selected barcodes; this returns the PDF URL and updates institution_item_barcodes.printed_at only for selected rows without changing the batch print_file_url. Barcode row status remains the lifecycle status (available, in_manifest, etc.) so printed but unused barcodes can still be scanned.
1curl --request POST "$ONDI_BASE_URL/delivery/barcode-batches/{{batch_id}}/print" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "print_mode": "selective",7 "barcode_ids": [8 "{{barcode_id}}"9 ]10}'1{2 "print_mode": "selective",3 "barcode_ids": [4 "{{barcode_id}}"5 ]6}Path parameters
batch_idRequiredVariable used inside the request path.
Request body fields
print_modeExampleExample field from the request body.
barcode_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Barcodes - Void Single Barcode
/delivery/institution-barcodes/{{barcode_id}}/voidVoids a single barcode only when status is available.
1curl --request POST "$ONDI_BASE_URL/delivery/institution-barcodes/{{barcode_id}}/void" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{}'1{}Path parameters
barcode_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Barcodes - Void Batch
/delivery/barcode-batches/{{batch_id}}/voidVoids an entire batch only if all barcodes are unused (available or already void).
1curl --request POST "$ONDI_BASE_URL/delivery/barcode-batches/{{batch_id}}/void" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{}'1{}Path parameters
batch_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Driver - Create Draft Manifest
/delivery/transfer-manifestsDriver creates a draft transfer manifest for an institution branch. Normally driver_id resolves from the driver token; body driver_id is included here for explicit testing.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "institution_user_id": "{{institution_user_id}}",7 "source_branch_id": "{{branch_id}}",8 "processing_point_id": "{{processing_point_id}}",9 "driver_id": "{{driver_id}}",10 "notes": "Postman transfer manifest test"11}'1{2 "institution_user_id": "{{institution_user_id}}",3 "source_branch_id": "{{branch_id}}",4 "processing_point_id": "{{processing_point_id}}",5 "driver_id": "{{driver_id}}",6 "notes": "Postman transfer manifest test"7}Request body fields
institution_user_idExampleExample field from the request body.
source_branch_idExampleExample field from the request body.
processing_point_idExampleExample field from the request body.
driver_idExampleExample field from the request body.
notesExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
Driver - Scan Item Barcode
/delivery/transfer-manifests/{{manifest_id}}/items/scanScans a barcode into a draft or picked_up manifest. Validates barcode exists, belongs to same institution/branch, is available, and is not duplicated.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/items/scan" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "barcode_value": "{{barcode_value}}"7}'1{2 "barcode_value": "{{barcode_value}}"3}Path parameters
manifest_idRequiredVariable used inside the request path.
Request body fields
barcode_valueExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
Driver - Remove Item Before Submit
/delivery/transfer-manifests/{{manifest_id}}/items/{{item_id}}Removes a scanned item only while the manifest is still draft. The operation is atomic: it returns the barcode to available, deletes the manifest item, reconciles expected_item_count to the actual remaining row count, and records item_removed in manifest history. A success response guarantees that the database item row was deleted. Frontend integration: call DELETE with the manifest ID and item ID from the current manifest item. On HTTP 200, remove that item from the local list and use data.remaining_item_count as the authoritative count. Handle 404 as a stale/missing manifest or item, 409 as a manifest that is no longer editable, and 500 as a failed removal; do not remove the item locally for non-200 responses.
1curl --request DELETE "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/items/{{item_id}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
manifest_idRequiredVariable used inside the request path.
item_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
Driver - Submit Pickup
/delivery/transfer-manifests/{{manifest_id}}/submit-pickupLocks the scan list and moves manifest draft -> picked_up. Items move scanned -> picked_up. Requires at least one item.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/submit-pickup" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{}'1{}Path parameters
manifest_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Driver - Driver Action
/delivery/transfer-manifests/{{manifest_id}}/driver-actionGeneric driver action endpoint for transfer manifests. Supported action values: submit_pickup, arrive_processing. Kept for clients that send action in the request body.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/driver-action" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "action": "submit_pickup"7}'1{2 "action": "submit_pickup"3}Path parameters
manifest_idRequiredVariable used inside the request path.
Request body fields
actionExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Driver - Arrive Processing
/delivery/transfer-manifests/{{manifest_id}}/arrive-processingMarks the manifest as awaiting receipt at the processing point.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/arrive-processing" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{}'1{}Path parameters
manifest_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Driver - List My Transfer Manifests
/delivery/driver/transfer-manifests?page=1&limit=20Driver-scoped manifest list. Returns only manifests assigned to the authenticated driver.
1curl --request GET "$ONDI_BASE_URL/delivery/driver/transfer-manifests?page=1&limit=20" \2 --header "Authorization: Bearer {{access_token}}"Query parameters
pageOptional1
limitOptional20
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Driver - Get My Transfer Manifest
/delivery/driver/transfer-manifests/{{manifest_id}}Driver-scoped manifest detail with item list. Returns 404 if the manifest belongs to another driver.
1curl --request GET "$ONDI_BASE_URL/delivery/driver/transfer-manifests/{{manifest_id}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
manifest_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Dispatcher - List Transfer Manifests
/delivery/transfer-manifests?page=1&limit=20&status=&institution_user_id=&source_branch_id=&processing_point_id=&date_from=&date_to=&search=Dispatcher list with filters. Date filters apply to manifest created_at.
1curl --request GET "$ONDI_BASE_URL/delivery/transfer-manifests?page=1&limit=20&status=&institution_user_id=&source_branch_id=&processing_point_id=&date_from=&date_to=&search=" \2 --header "Authorization: Bearer {{access_token}}"Query parameters
pageOptional1
limitOptional20
statusOptionalOptional manifest status
institution_user_idOptionalOptional institution tenant_user id
source_branch_idOptionalOptional source branch id
processing_point_idOptionalOptional processing point id
date_fromOptionalOptional created_at from
date_toOptionalOptional created_at to
searchOptionalOptional manifest_number search
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Dispatcher - Get Manifest Detail
/delivery/transfer-manifests/{{manifest_id}}Manifest detail with item list, source branch, processing point, and source address embeds.
1curl --request GET "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
manifest_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Dispatcher - Start Receiving
/delivery/transfer-manifests/{{manifest_id}}/receive/startBegins receipt at processing point. Allowed from awaiting_receipt, picked_up, or in_transit_to_processing.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/receive/start" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{}'1{}Path parameters
manifest_idRequiredVariable used inside the request path.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Dispatcher - Receive Items
/delivery/transfer-manifests/{{manifest_id}}/receive/itemsMarks scanned items received in scan_each_item mode. Returns received, unknown, and already_processed arrays.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/receive/items" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "barcode_values": [7 "{{barcode_value}}"8 ]9}'1{2 "barcode_values": [3 "{{barcode_value}}"4 ]5}Path parameters
manifest_idRequiredVariable used inside the request path.
Request body fields
barcode_valuesExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
Dispatcher - Complete Receiving
/delivery/transfer-manifests/{{manifest_id}}/receive/completeCompletes receipt. In scan_each_item mode, remaining unreceived items become missing_at_receipt exceptions. In count_only mode, open items are bulk marked received.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/receive/complete" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "notes": "Receipt completed from Postman"7}'1{2 "notes": "Receipt completed from Postman"3}Path parameters
manifest_idRequiredVariable used inside the request path.
Request body fields
notesExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Dispatcher - Assign Item Destination
/delivery/transfer-manifests/{{manifest_id}}/items/{{item_id}}/destinationAssigns destination address and delivery service to one received item, then immediately creates the delivery order using institution wallet payment with payer_type=sender. destination_branch_id is optional; remove it or leave blank if not applicable. delivery_service_id is optional when G2G settings has default_delivery_service_id configured; otherwise it is required. Destination branches must be active and have an address. Fails if item is not received or is terminal.
1curl --request PATCH "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/items/{{item_id}}/destination" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "destination_address_id": "{{destination_address_id}}",7 "delivery_service_id": "{{delivery_service_id}}",8 "destination_branch_id": "{{destination_branch_id}}"9}'1{2 "destination_address_id": "{{destination_address_id}}",3 "delivery_service_id": "{{delivery_service_id}}",4 "destination_branch_id": "{{destination_branch_id}}"5}Path parameters
manifest_idRequiredVariable used inside the request path.
item_idRequiredVariable used inside the request path.
Request body fields
destination_address_idExampleExample field from the request body.
delivery_service_idExampleExample field from the request body.
destination_branch_idExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Dispatcher - Bulk Assign Destination
/delivery/transfer-manifests/{{manifest_id}}/items/bulk-assign-destinationAssigns the same destination and service to multiple received items, then creates delivery orders using institution wallet payment with payer_type=sender. Delivery creation uses bounded parallel processing. Successful promotions are finalized by one database operation that links deliveries, items, and barcodes and updates the manifest state and bulk event once. delivery_service_id is optional when G2G settings has default_delivery_service_id configured; otherwise it is required. Destination branches must be active and have an address. Items that are not received are not eligible.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/items/bulk-assign-destination" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "item_ids": [7 "{{item_id}}"8 ],9 "destination_address_id": "{{destination_address_id}}",10 "delivery_service_id": "{{delivery_service_id}}",11 "destination_branch_id": "{{destination_branch_id}}"12}'1{2 "item_ids": [3 "{{item_id}}"4 ],5 "destination_address_id": "{{destination_address_id}}",6 "delivery_service_id": "{{delivery_service_id}}",7 "destination_branch_id": "{{destination_branch_id}}"8}Path parameters
manifest_idRequiredVariable used inside the request path.
Request body fields
item_idsExampleExample field from the request body.
destination_address_idExampleExample field from the request body.
delivery_service_idExampleExample field from the request body.
destination_branch_idExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Dispatcher - Flag Item Exception
/delivery/transfer-manifests/{{manifest_id}}/items/{{item_id}}/exceptionMoves a non-order-created item to exception. Reasons: missing_at_receipt, duplicate_barcode, wrong_branch_or_institution, damaged, opened_envelope, restricted_destination, destination_unknown, manual_hold, other.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/items/{{item_id}}/exception" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "exception_reason": "manual_hold",7 "exception_notes": "Held for manual review"8}'1{2 "exception_reason": "manual_hold",3 "exception_notes": "Held for manual review"4}Path parameters
manifest_idRequiredVariable used inside the request path.
item_idRequiredVariable used inside the request path.
Request body fields
exception_reasonExampleExample field from the request body.
exception_notesExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Exceptions - List Unresolved Transfer Manifest Exceptions
/delivery/transfer-manifest-exceptions?page=1&limit=20&manifest_id={{manifest_id}}&exception_reason=Lists manifest items currently in exception status.
1curl --request GET "$ONDI_BASE_URL/delivery/transfer-manifest-exceptions?page=1&limit=20&manifest_id={{manifest_id}}&exception_reason=" \2 --header "Authorization: Bearer {{access_token}}"Query parameters
pageOptional1
limitOptional20
manifest_idOptional{{manifest_id}}
Optional manifest id
exception_reasonOptionalOptional reason filter
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Exceptions - Resolve Exception As Reprocess
/delivery/transfer-manifest-exceptions/{{item_id}}/resolveResolves an exception by returning item to received status so destination/order creation can continue.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifest-exceptions/{{item_id}}/resolve" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "resolution": "reprocess",7 "notes": "Corrected and ready for processing"8}'1{2 "resolution": "reprocess",3 "notes": "Corrected and ready for processing"4}Path parameters
item_idRequiredVariable used inside the request path.
Request body fields
resolutionExampleExample field from the request body.
notesExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Exceptions - Resolve Exception As Void
/delivery/transfer-manifest-exceptions/{{item_id}}/resolveResolves an exception by voiding the item/barcode. This may complete the manifest if all items are terminal.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifest-exceptions/{{item_id}}/resolve" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "resolution": "void",7 "notes": "Voided after review"8}'1{2 "resolution": "void",3 "notes": "Voided after review"4}Path parameters
item_idRequiredVariable used inside the request path.
Request body fields
resolutionExampleExample field from the request body.
notesExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.
Events - Manifest Timeline
/delivery/transfer-manifests/{{manifest_id}}/events?page=1&limit=50Returns append-only event history for a manifest. Expected happy-path events include manifest_created, item_scanned, manifest_picked_up, manifest_arrived, receiving_started, items_received, receiving_completed, order_created, and manifest_completed.
1curl --request GET "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/events?page=1&limit=50" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
manifest_idRequiredVariable used inside the request path.
Query parameters
pageOptional1
limitOptional50
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
No response example is available for this endpoint yet.
Dispatcher - Cancel Manifest
/delivery/transfer-manifests/{{manifest_id}}/cancelCancels a manifest before receiving/order creation. Non-order-created items become void and linked barcodes return to available.
1curl --request POST "$ONDI_BASE_URL/delivery/transfer-manifests/{{manifest_id}}/cancel" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --header "Content-Type: application/json" \5 --data '{6 "reason": "Cancelled from Postman test"7}'1{2 "reason": "Cancelled from Postman test"3}Path parameters
manifest_idRequiredVariable used inside the request path.
Request body fields
reasonExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Content-TypeOptionalapplication/json
Responses
No response example is available for this endpoint yet.