DEVELOPER PLATFORM

Build on the platform that moves Switzerland

One key into a Swiss chauffeur network. Quote, book, dispatch and follow every transfer in real time.

Real time

Every event, signed and retried

EASYTRANSFER TRANSPORT®

Developer Guide

Subscribe once. We deliver each event as an HTTP POST with a JSON body, signed with HMAC SHA256 in the X-ET-Signature header. Failed deliveries retry automatically with backoff, and every attempt is logged.

GUIDE
EASYTRANSFER TRANSPORT®

The platform

A booking engine you call over HTTPS

Quote a route, place a booking, assign a chauffeur, and follow the car to the door. Requests are HTTPS POST with a JSON body; responses are JSON. Access is by partner key, scoped to your own account. Admin and internal endpoints are never exposed.

Quotes and pricing across the fleet, with zones and vehicle classes
Create, amend and cancel bookings; a chauffeur is assigned and notified
A live GPS tracking link on every job, to hand to your customer
Real time webhooks for every step, signed with HMAC SHA256
Flight status checks and NET statements, ready to reconcile
Emails and PDFs delivered in the language of the recipient
1 / 12
EASYTRANSFER TRANSPORT®

Capabilities · one platform, the whole journey

From the first quote to the paid invoice, every part of the transfer lifecycle is an endpoint you can call.

Quotes and pricingPrice any route across the fleet, with zones, surcharges and vehicle classes
Bookings and dispatchCreate, amend and cancel; a chauffeur is assigned, notified and set in motion
Live trackingEvery job carries a live GPS tracking link, ready to hand to your customer
FlightsTrack flights in real time; arrivals, delays and status drive the pickup
Statements and billingNET statements and invoices, issued and reconciled through the API
WebhooksSigned, retried events for every step, delivered to your endpoint
2 / 12
EASYTRANSFER TRANSPORT®

Authentication · one header on every request

Authenticate with your partner key in the X-Api-Key header. Keep it secret. Your key only ever sees and acts on your own data.

curl -X POST "https://api.easy-transfers.ch/?action=getQuote" \
  -H "X-Api-Key: YOUR_PARTNER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"GVA","to":"Verbier","pax":3}'
Discovery: call any endpoint without its required parameters and it returns its own metadata, the required fields, an example, and a note. Nothing is modified. It is the fastest way to learn an endpoint.
3 / 12
EASYTRANSFER TRANSPORT®

The API · every part of the journey

A comprehensive API across the whole transport lifecycle, grouped by domain and read live from the running platform, so the reference always matches what your key can call.

Bookingsbooking.create booking.status booking.amend booking.cancel booking.list
Quotes and pricinggetQuote b2b.quote pricing.calculate pricing.zones
Tracking and flightstracking.get flight.check flight.airports
Statements and webhooksstatement webhook.config webhook.deliveries
The full scoped reference, with every endpoint your key can call, lives in the Partner Console under Help & API.
4 / 12
EASYTRANSFER TRANSPORT®

The Console · keys and webhooks, managed for you

The Partner Console is where you manage your API key, configure a webhook endpoint, and watch every delivery in real time, with automatic retries and a full log.

Live keyetk_live_••••7f2a
Scopeyour account
Rotationone click
Deliveriesevery attempt logged, with HTTP code and retries
5 / 12
EASYTRANSFER TRANSPORT®

1 · Overview

Webhooks let your system react in real time to events in the EasyTransfer Transport® platform. When a subscribed event occurs, we send an HTTP POST with a JSON body to your endpoint, signed with HMAC-SHA256.

One subscription per partner. Configure it once in the Partner Console, Webhook configuration (URL, events, secret). Leave the secret blank to have one generated; it is shown once.

Subscribe with exact names or wildcards, e.g. booking.*,invoice.* or all.

6 / 12
EASYTRANSFER TRANSPORT®

2 · Events · booking lifecycle

EventWhen it fires
booking.createdA booking is created for your account
booking.confirmedBooking is confirmed
booking.amendedBooking details are changed
booking.cancelledBooking cancelled
booking.completedTransfer completed
booking.no_showNo-show recorded (still billable)
booking.flight_updatedTracked flight changed status
booking.driver_assignedA chauffeur was assigned
booking.driver_reassignedA different chauffeur replaced the assigned one
booking.sla_warningLegal waiting period at pickup elapsed
7 / 12
EASYTRANSFER TRANSPORT®

2 · Events · chauffeur, billing, notifications

booking.driver_acceptedChauffeur accepted the job
booking.driver_startedChauffeur started the run
booking.driver_en_routeChauffeur en route to pickup
booking.driver_arrivedChauffeur arrived at pickup
booking.photos_addedChauffeur added pickup photos
booking.passenger_onboardPassenger on board
invoice.createdIncoming invoice issued to you (NET terms)
invoice.paidAn invoice is marked paid
booking.documents_readyInvoice, booking and GPS-evidence PDFs ready
booking.sms_deliveredTracking SMS reached the recipient
booking.sms_failedTracking SMS failed; payload carries the error code
Every booking.* payload includes a live tracking_link whenever a tracking token exists, so you can show your customer real-time vehicle tracking.
8 / 12
EASYTRANSFER TRANSPORT®

3 · Delivery & headers

Each delivery is a POST with Content-Type: application/json and:

X-ET-EventThe event name, e.g. booking.completed
X-ET-SignatureHMAC-SHA256 of the raw body, keyed with your secret (hex)
X-ET-RetryPresent on retries; the attempt number

Payload

{
  "event": "booking.completed",
  "data": {
    "ref": "ET-000999",
    "status": "COMPLETED",
    "client": "Max Muster",
    "price": 120.00
  },
  "timestamp": "2026-06-30T16:33:00+02:00"
}
9 / 12
EASYTRANSFER TRANSPORT®

4 · Verifying the signature

Compute HMAC-SHA256 over the raw body with your secret and compare (constant-time) to X-ET-Signature.

# PHP
$expected = hash_hmac('sha256', $rawBody, $yourSecret);
if (!hash_equals($expected, $_SERVER['HTTP_X_ET_SIGNATURE'] ?? '')) { http_response_code(401); exit; }

# Node
const exp = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(exp), Buffer.from(req.header('X-ET-Signature')||''))) return res.sendStatus(401);
10 / 12
EASYTRANSFER TRANSPORT®

5 · Responses, timeouts & retries

SuccessRespond 2xx within the timeout
Timeout5s on first delivery, 8s on retries
RetriesBackoff 2, 4, 8, 16, 32 min · up to 6 attempts
Auto-disableAfter 10 consecutive failures the subscription is paused
Delivery logEvery attempt is recorded
Treat deliveries as at-least-once: the same event may arrive more than once. Make your handler idempotent (dedupe on data.ref + event).
11 / 12
EASYTRANSFER TRANSPORT®

6 · Configuration, test & versioning

partner.webhook.configPOST saves URL + events + secret · GET reads current config
partner.webhook.testSends a signed test POST to your URL
partner.webhook.deliveriesRecent delivery log for your account
curl -X POST "https://api.easy-transfers.ch/?action=partner.webhook.config" \
  -H "X-Api-Key: etk_partner_..." -H "Content-Type: application/json" \
  -d '{"url":"https://your-domain.com/webhook","events":["booking.created","invoice.paid"]}'

This is v1. New event types and fields may be added; your handler must ignore unknown fields and events. Breaking changes would ship as v2.

EasyTransfer Transport® · Chemin du midi 15d, 1260 Nyon, Switzerland · info@easy-transfers.ch

12 / 12
EASYTRANSFER TRANSPORT®