Create a sandbox order
Get a token and create your first order with one complete request.
Understand the lifecycle
See how orders, webhooks, tracking, and files fit together.
Build tracking
Show ETAs, pickup progress, and a map marker for each vehicle.
Order as a platform
Place orders for other businesses with an ordering-channel credential.
The standard integration
A typical integration follows one simple loop. A price check is optional. The order is not.- Get an OAuth access token.
- Check the price if your product needs to show one before checkout.
- Create the order and store the Bahn order ID.
- Receive webhooks for meaningful changes.
- Read the current order or related resource after a webhook.
Timing has four meanings
Customer products often make timing confusing. Keep these values separate in your data model and UI:- A requested window is the time the customer asked for.
- An agreed window is the time range Bahn agreed to target.
- An ETA is the latest arrival estimate.
- An actual time records when pickup or delivery completed.
Production and sandbox
Each environment has separate credentials and data.
A few rules prevent most integration bugs
Use a new idempotency key for each logical write. Store therevision from every order response, and send it in If-Match when you update or cancel an order. Check allowed_actions before you offer those actions in your UI.
Treat webhooks as change notifications. Verify the signature, deduplicate the event, and read data.resource_url when you need the latest resource.
Start with the Quickstart. Use the API Reference tab for complete field definitions and interactive requests.
For credentials or integration support, contact support@bahnexpress.com.