API reference
Pickups
Carrier pickups: options, quotes, booking, changes and cancellation.
Endpoints
- GET /pickups
- POST /pickups
- GET /pickups/{id}
- DELETE /pickups/{id}
- POST /pickups/{id}/archive
- POST /pickups/{id}/cancel
- POST /pickups/{id}/retry
- POST /pickups/{id}/shipments
- DELETE /pickups/{id}/shipments/{shipment_id}
- GET /pickups/{id}/timeline
- GET /pickups/carriers
- GET /pickups/counts
- GET /pickups/cutoffs
- POST /pickups/draft
- PATCH /pickups/draft/{id}
- POST /pickups/draft/{id}/confirm
- GET /pickups/options
- POST /pickups/quote
List pickups
GET /v1/pickups
Pickups on the account, newest first. Filter by list (tab), status, dates or a search.
Query parameters
tabstringWhich list:
active,history,exceptions,cancelled,archivedordraft.searchstringFree-text search.
fromdateShip-from address.
todateShip-to address.
limitintegerMost results to return.
offsetintegerResults to skip, for paging.
archivedbooleantrueto archive (the default),falseto bring it back.
Response in data
items• Required array of objectsEach item · 27
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
total• Required integer
curl "https://api.parcelhub.ca/v1/pickups" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": {
"items": [
{
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
}
],
"total": 1
},
"request_id": "01JBX7Q2…"
}Book a pickup
POST /v1/pickups
Books a carrier pickup for the given shipments and charges the wallet the pickup fee. Get the price with POST /v1/pickups/quote first.
Confirm with the account owner before calling it.
Request body
address• Required anyPickup address: the same fields as an address book entry.
carrier• Required stringCarrier code, as returned with each rate.
pickup_date• Required datePickup day (
YYYY-MM-DD).shipment_ids• Required array of uuidsIds of purchased shipments.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).building_typestringKind of building:
Office,Warehouse,ResidentialorOther.discount_codestringA discount code to apply.
instructionsstringInstructions for the driver.
pickup_locationstringWhere the parcels will be, e.g. front door, reception.
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl -X POST "https://api.parcelhub.ca/v1/pickups" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"address": "123 King St W, Toronto ON",
"building_type": "Office",
"carrier": "ups",
"discount_code": "string",
"instructions": "string",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"time_window_end": "string",
"time_window_start": "string"
}'{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Get a pickup
GET /v1/pickups/{id}
One pickup: carrier, date, time window, address, shipments, charges and status.
Path parameters
id• Required string
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl "https://api.parcelhub.ca/v1/pickups/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Delete a pickup draft
DELETE /v1/pickups/{id}
Deletes a pickup draft. A booked pickup is cancelled instead (POST /v1/pickups/{id}/cancel).
Path parameters
id• Required string
Response in data
See the example on the right.
curl -X DELETE "https://api.parcelhub.ca/v1/pickups/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": null,
"request_id": "01JBX7Q2…"
}Archive a pickup
POST /v1/pickups/{id}/archive
Hides a finished pickup from the normal lists, or brings it back with archived: false.
Path parameters
id• Required string
Request body
archivedbooleantrueto archive (the default),falseto bring it back.
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl -X POST "https://api.parcelhub.ca/v1/pickups/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f/archive" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"archived": true
}'{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Cancel a pickup
POST /v1/pickups/{id}/cancel
Cancels a booked pickup with the carrier and refunds its fee to the wallet.
Path parameters
id• Required string
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl -X POST "https://api.parcelhub.ca/v1/pickups/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f/cancel" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Retry a failed pickup
POST /v1/pickups/{id}/retry
Sends a pickup whose booking failed to the carrier again. No new charge.
Path parameters
id• Required string
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl -X POST "https://api.parcelhub.ca/v1/pickups/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f/retry" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Add shipments to a pickup
POST /v1/pickups/{id}/shipments
Adds shipments to a booked pickup that has not been cancelled.
Path parameters
id• Required string
Request body
shipment_ids• Required array of uuidsIds of purchased shipments.
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl -X POST "https://api.parcelhub.ca/v1/pickups/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f/shipments" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
]
}'{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Remove a shipment from a pickup
DELETE /v1/pickups/{id}/shipments/{shipment_id}
Takes one shipment off a pickup; the pickup stays booked. If it was the last shipment, the response says empty: true: cancel the pickup if it is no longer needed.
Path parameters
id• Required stringshipment_id• Required string
Response in data
empty• Required booleanpickup• Required objectFields · 27
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
remaining_shipments• Required integer
curl -X DELETE "https://api.parcelhub.ca/v1/pickups/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f/shipments/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": {
"empty": true,
"pickup": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"remaining_shipments": 1
},
"request_id": "01JBX7Q2…"
}Pickup timeline
GET /v1/pickups/{id}/timeline
Everything that happened to the pickup: booking, carrier confirmation, charges and changes.
Path parameters
id• Required string
Response in data
items• Required array of objectsEach item · 4
created_at• Required timestampWhen it was created (ISO 8601, UTC).
event_type• Required stringmessage• Required stringseverity• Required string
curl "https://api.parcelhub.ca/v1/pickups/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f/timeline" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": {
"items": [
{
"created_at": "2026-10-31T15:04:05Z",
"event_type": "string",
"message": "string",
"severity": "string"
}
]
},
"request_id": "01JBX7Q2…"
}Pickup carriers
GET /v1/pickups/carriers
Carriers this account can book a pickup with.
Response in data
carrier• Required stringCarrier code, as returned with each rate.
display_name• Required string
curl "https://api.parcelhub.ca/v1/pickups/carriers" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": [
{
"carrier": "ups",
"display_name": "string"
}
],
"request_id": "01JBX7Q2…"
}Pickup counts
GET /v1/pickups/counts
How many pickups are in each list.
Response in data
active• Required integerarchived• Required integertrueto archive (the default),falseto bring it back.cancelled• Required integerdraft• Required integerexceptions• Required integerhistory• Required integer
curl "https://api.parcelhub.ca/v1/pickups/counts" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": {
"active": 1,
"archived": 1,
"cancelled": 1,
"draft": 1,
"exceptions": 1,
"history": 1
},
"request_id": "01JBX7Q2…"
}Pickup cutoff times
GET /v1/pickups/cutoffs
Each carrier's latest time to request a same-day pickup, for the pickup area.
Query parameters
postal_codestringPickup postal code (cutoffs vary by area for some carriers).
provincestringPickup province.
countrystringTwo-letter country code, e.g.
CA,US.
Response in data
carrier• Required stringCarrier code, as returned with each rate.
display_name• Required stringsupports_pickup• Required booleancutoff_timestringnotestringsourcestringWhere the shipment came from. Leave out (it becomes
manual) or name your integration, e.g.api.
curl "https://api.parcelhub.ca/v1/pickups/cutoffs" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": [
{
"carrier": "ups",
"cutoff_time": "string",
"display_name": "string",
"note": "string",
"source": "manual",
"supports_pickup": true
}
],
"request_id": "01JBX7Q2…"
}Start a pickup draft
POST /v1/pickups/draft
Starts a pickup without booking it, for building one up in steps.
Request body
carrier• Required stringCarrier code, as returned with each rate.
shipment_idsarray of uuidsIds of purchased shipments.
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl -X POST "https://api.parcelhub.ca/v1/pickups/draft" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"carrier": "ups"
}'{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Update a pickup draft
PATCH /v1/pickups/draft/{id}
Sets the date, time window, address and shipments of a pickup draft.
Path parameters
id• Required string
Request body
address• Required anyPickup address: the same fields as an address book entry.
carrier• Required stringCarrier code, as returned with each rate.
pickup_date• Required datePickup day (
YYYY-MM-DD).time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).building_typestringKind of building:
Office,Warehouse,ResidentialorOther.instructionsstringInstructions for the driver.
pickup_locationstringWhere the parcels will be, e.g. front door, reception.
shipment_idsarray of uuidsIds of purchased shipments.
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl -X PATCH "https://api.parcelhub.ca/v1/pickups/draft/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"address": "123 King St W, Toronto ON",
"building_type": "Office",
"carrier": "ups",
"instructions": "string",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"time_window_end": "string",
"time_window_start": "string"
}'{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Book a pickup draft
POST /v1/pickups/draft/{id}/confirm
Books the pickup draft with the carrier and charges the wallet the pickup fee.
Confirm with the account owner before calling it.
Path parameters
id• Required string
Request body
discount_codestringA discount code to apply.
Response in data
address• Required anyarchived• Required booleantrueto archive (the default),falseto bring it back.carrier• Required stringCarrier code, as returned with each rate.
created_at• Required timestampWhen it was created (ISO 8601, UTC).
currency• Required stringThree-letter currency code, e.g.
CAD.dispatch_attempts• Required integerfee_cents• Required integerid• Required uuidpickup_date• Required datePickup day (
YYYY-MM-DD).pickup_number• Required stringshipment_ids• Required array of uuidsIds of purchased shipments.
status• Required stringtax_cents• Required integerSales tax, in cents.
time_window_end• Required stringLatest pickup time, local (
HH:MM:SS).time_window_start• Required stringEarliest pickup time, local (
HH:MM:SS).total_cents• Required integerTotal, in cents.
archived_attimestampbuilding_typestringKind of building:
Office,Warehouse,ResidentialorOther.cancelled_attimestampcarrier_pickup_idstringcarrier_statusstringconfirmation_numberstringinstructionsstringInstructions for the driver.
last_dispatch_errorstringlast_synced_attimestamppickup_locationstringWhere the parcels will be, e.g. front door, reception.
tax_jurisdictionstring
curl -X POST "https://api.parcelhub.ca/v1/pickups/draft/3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f/confirm" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"discount_code": "string"
}'{
"ok": true,
"data": {
"address": "123 King St W, Toronto ON",
"archived": true,
"archived_at": "2026-10-31T15:04:05Z",
"building_type": "Office",
"cancelled_at": "2026-10-31T15:04:05Z",
"carrier": "ups",
"carrier_pickup_id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"carrier_status": "string",
"confirmation_number": "string",
"created_at": "2026-10-31T15:04:05Z",
"currency": "CAD",
"dispatch_attempts": 1,
"fee_cents": 1299,
"id": "3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f",
"instructions": "string",
"last_dispatch_error": "string",
"last_synced_at": "2026-10-31T15:04:05Z",
"pickup_date": "2026-11-03",
"pickup_location": "string",
"pickup_number": "string",
"shipment_ids": [
"3f2b8c1e-5d6a-4b7c-9e0f-1a2b3c4d5e6f"
],
"status": "string",
"tax_cents": 1299,
"tax_jurisdiction": "string",
"time_window_end": "string",
"time_window_start": "string",
"total_cents": 1299
},
"request_id": "01JBX7Q2…"
}Pickup scheduling options
GET /v1/pickups/options
Whether same-day pickups can be booked right now, and the same-day cutoff hour.
Response in data
allow_same_day• Required booleansame_day_cutoff_hour• Required integer
curl "https://api.parcelhub.ca/v1/pickups/options" \
-H "Authorization: Bearer $TOKEN"{
"ok": true,
"data": {
"allow_same_day": true,
"same_day_cutoff_hour": 1
},
"request_id": "01JBX7Q2…"
}Quote a pickup
POST /v1/pickups/quote
The pickup fee, discount and tax for a carrier, date and address. Nothing is booked or charged.
Request body
address• Required anyPickup address: the same fields as an address book entry.
carrier• Required stringCarrier code, as returned with each rate.
pickup_date• Required datePickup day (
YYYY-MM-DD).discount_codestringA discount code to apply.
Response in data
currency• Required stringThree-letter currency code, e.g.
CAD.discountCents• Required integerfeeCents• Required integertaxCents• Required integertaxJurisdiction• Required stringtotalCents• Required integer
curl -X POST "https://api.parcelhub.ca/v1/pickups/quote" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"address": "123 King St W, Toronto ON",
"carrier": "ups",
"discount_code": "string",
"pickup_date": "2026-11-03"
}'{
"ok": true,
"data": {
"currency": "CAD",
"discountCents": 1,
"feeCents": 1,
"taxCents": 1,
"taxJurisdiction": "string",
"totalCents": 1
},
"request_id": "01JBX7Q2…"
}