Testing your integration
Develop and test against the sandbox environment — production orders are real orders, with real couriers and real invoices.
The sandbox
| Production | Sandbox | |
|---|---|---|
| Base URL | https://www.apaczka.pl/api/v2/ | https://panel-sandbox.apaczka.pl/api/v2/ |
| Credentials | Production app_id / app_secret | Sandbox app_id / app_secret |
The API contract is the same in both environments; credentials are issued per environment.
Check which environment you are pointing at
Never assume a key is locked to one environment — always verify the base URL your integration targets before running tests. An order sent to production "by accident" is a real order with a real courier and a real invoice.
Sandbox limitations
The sandbox runs an older deployment and a smaller dataset than production. Known differences:
tracking/anddispatch_code/are not available on the sandbox — verify those parts of your integration read-only against production.points/may time out on the sandbox; it works on production.- The service catalogue is smaller than production and the ids differ
per account — fetch
service_structureper environment, never copy service ids between environments. - Some response fields may come back empty (e.g.
supplierin theorder_sendresponse). pickup/andbatch_pickup/require the pickup via API privilege, enabled per account by Apaczka support — sandbox accounts included.
Pointing the SDK at the sandbox
The PHP SDK ships the sandbox base URL as a constant:
Code
Keep the base URL and credentials in configuration (environment variables), so the same code runs against either environment.
Without the SDK
Sign and send requests exactly as described in
Request signing (HMAC) — only the host changes to
panel-sandbox.apaczka.pl. Remember the route in the string-to-sign stays
the same (order_send/ etc.); the host is not part of the signature.
What to verify before going live
- Errors are detected from the body
status, not the HTTP status — see Error semantics. - The service list is fetched from
service_structure, not hardcoded. - Failed
order_sendcalls are not blindly retried (duplicate orders). - Webhook signatures are verified if you use push tracking.

