Pickup types
There are two fundamentally different ways your parcel reaches the carrier,
and they are easy to confuse in the API: the pickup type chosen when
creating an order (order.pickup.type) and the standalone pickup
endpoints for orders that already exist. This page explains both.
Payload examples below follow the API v2 reference.
Pickup type at order creation
The pickup object inside the order payload decides
how the parcel is handed over:
| Type | Meaning |
|---|---|
SELF | You deliver the parcel yourself to the carrier's depot or drop-off location. No courier comes. This is the default. |
COURIER | A courier picks the parcel up at the sender address, in the time window you choose. |
These are the only two pickup types in the public contract. Dropping the
parcel at a parcel point (locker, PUDO, post office) is still SELF — the
point itself is selected by foreign_address_id on the sender address
(the id comes from the points/{type}/ directory).
POCZTA and POINT are not pickup types
You may run into POCZTA or POINT in older integrations or in the Apaczka
panel. Neither is part of the public API contract: POCZTA is a leftover of
the retired SOAP API v1, POINT only drives the buttons of the panel's order
form. Always send SELF and put the point id in foreign_address_id.
SELF — own drop-off
Code
After creating the order, download the waybill and, for carriers that require it, the dispatch code to present at the drop-off location.
COURIER — ordered pickup
Code
Naming trap
At order creation the fields are plural — hours_from / hours_to. The
standalone pickup and
batch_pickup endpoints use the singular
hour_from / hour_to. Yes, really.
Always check the available windows first with
pickup_hours — the carrier's pickup calendar
depends on the postal code and service:
Code
Scheduling a pickup for existing orders
If you created orders with SELF (or the courier did not arrive), you can
order a pickup afterwards — without creating a new order:
pickup/{order_id}/ — single order
Re-orders a courier pickup for one existing order. Current constraints:
- available only for DPD orders,
- the account needs the pickup via API privilege (enabled by Apaczka support).
Code
batch_pickup/ — one courier, many orders
Orders a single pickup for multiple orders at once:
Code
Constraints checked by the API:
- all orders must have the same sender address,
- all orders must use the same service, and the service must support batch pickup,
- the account needs the pickup via API privilege.
With the SDK
The PHP SDK wraps all three endpoints:
Code
Which one do I want?
- Shipping ad-hoc, single parcel, courier should come →
pickup.type = COURIERdirectly inorder_send. - Printing labels for many parcels during the day, courier comes once in
the afternoon → create orders with
SELF, then onebatch_pickupfor all of them. - Dropping parcels at a locker/branch on your way →
SELF, with the point in the sender'sforeign_address_idfor point-based services — no pickup needed at all.

