Skip to main content

GET /v1/bulk-deliveries/{ref}

GET /v1/bulk-deliveries/{ref}

ScopeIdempotency-KeyOperation ID
delivery.read—getBulkDelivery

A Bulk Delivery and its children.

Another tenant's Bulk Delivery and an unknown reference are the same TENANT_ACCESS_DENIED. Recipients appear by name with a masked phone; links, destinations and IDs never appear.

Request​

Signed with your API credential: see Authentication.

ParameterInRequiredDescription
refpathYesPattern ^BK-[0-9A-HJKMNP-TV-Z]{8}$.

Responses​

200​

The Bulk Delivery.

FieldTypeRequiredDescription
bulk_referencestringYesPattern ^BK-[0-9A-HJKMNP-TV-Z]{8}$.
statusstringYesOne of: BULK_DRAFT, BULK_AWAITING_RECIPIENTS, BULK_PARTIALLY_CONFIRMED, BULK_READY_FOR_QUOTE, BULK_AWAITING_SENDER_CONFIRMATION, BULK_DISPATCHING, BULK_IN_PROGRESS, BULK_PARTIALLY_COMPLETED, BULK_COMPLETED, BULK_CANCELLED, BULK_EXCEPTION.
recipient_countintegerYes2–5.
active_recipient_countintegerYes0–5.
confirmed_countintegerYes0–5.
quote_revisionintegerYes
totalstring or nullYesThe sum of the children's quotes, null until every active child is quoted.
currencystringYesOne of: GHS.
childrenarray of objectYes
children[].positionintegerYes1–5.
children[].delivery_referencestringYesPublic reference of a delivery job or Bulk child. Pattern ^DX-[0-9A-HJKMNP-TV-Z]{8}$.
children[].statusstringYesThe child request's status (request-level states; REMOVED once removed)
children[].location_confirmedbooleanYesThe recipient confirmed the drop-off
children[].recipientobjectYes
children[].recipient.first_namestringYes
children[].recipient.last_namestringYes
children[].recipient.phonestringYesMasked: the last three digits only
children[].link_expires_atstring or null, date-timeYesWhen the child's live link stops working; null once revoked
children[].resends_remaininginteger or nullYesResends left while the recipient is awaited, else null
children[].resend_available_atstring or null, date-timeYesWhen the resend cooldown ends while the recipient is awaited, else null
children[].quoteobject or nullYesThe child's own quote: the server's total only, never its arithmetic. expired is judged by the server clock. Null before the child is quoted.
children[].quote.referencestringYesPattern ^QT-[0-9A-HJKMNP-TV-Z]{8}$.
children[].quote.totalstringYesExact decimal with two places; never a JSON number. Pattern ^-?[0-9]+\.[0-9]{2}$.
children[].quote.currencystringYesOne of: GHS.
children[].quote.expires_atstring, date-timeYes
children[].quote.expiredbooleanYes
children[].customer_statusstring or nullYesThe child's delivery status as tracking shows it, once dispatched
children[].tracking_linksobjectNoThe child's tracking links, shown once on the tenant's confirming response: the sender's link confirms the handover
children[].tracking_links.sender_urlstringYes
children[].tracking_links.recipient_urlstringYes
children[].tracking_links.expires_atstring, date-timeYes
cancellationsarray of objectNoAfter dispatch, each child's answer to the cancellation; present only on that answer.
cancellations[].delivery_referencestringYesPublic reference of a delivery job or Bulk child. Pattern ^DX-[0-9A-HJKMNP-TV-Z]{8}$.
cancellations[].cancelledbooleanYes
cancellations[].reasonstring or nullYesWhy the stage policy left it, e.g. after_pickup
created_atstring, date-timeYes

401​

Unknown, revoked or wrong-environment credential, bad signature, or expired session.

The error envelope: code, message, detail, request_id.

403​

Tenant access denied (existence is not disclosed), insufficient scope, MFA/step-up required, partner blocked or module disabled.

The error envelope: code, message, detail, request_id.

429​

Rate limit reached; honour Retry-After.

The error envelope: code, message, detail, request_id.

500​

Unexpected failure. Only code and request_id are returned.

The error envelope: code, message, detail, request_id.