Why a deterministic sandbox
Integration tests that depend on a real parcel are flaky by construction. TrackJet reserves the TJTEST- prefix for synthetic, byte-stable fixtures: same request, same response, forever — safe to pin in your test suite.
The catalogue
| Number | Scenario | | --- | --- | | TJTEST-DELIVERED | Full happy path ending delivered | | TJTEST-IN-TRANSIT | Mid-journey, latest event in_transit | | TJTEST-EXCEPTION | Carrier exception (damaged label) | | TJTEST-CUSTOMS-HOLD | Held at customs awaiting duties | | TJTEST-RETURNED | Refused and returned to sender | | TJTEST-STALE | No scans for 14 days — exercise staleness logic | | TJTEST-NOT-FOUND | Always "no data" — exercise the empty state |
Any other TJTEST-* number answers with this catalogue, so the sandbox documents itself.
Properties you can rely on
sandbox: truein every payload — impossible to mistake for production data.- Timestamps are deliberately in 2030 so they can never be confused with real events.
- The prefix cannot collide with a real format: no carrier scheme admits it.
- Real numbers are never intercepted by the sandbox.
Webhook dry-runs
Pair the fixtures with POST /api/v1/webhooks/{id}/test ([webhooks](/docs/webhooks)) and your CI can prove the whole loop — request, signature, receiver — without a single real shipment.