Partner API
Live availability, rates and booking creation for OTAs, brokers and booking channels. One HTTP header, JSON in and out, no SDK required. Operators issue keys themselves under Settings → Integrations — bookings you create are attributed to your key on their OTA channel.
Authentication
Send the key the operator issued you on every request:
X-Api-Key: kpk_live_…
401 = bad or revoked key · 409 = no availability / not cancellable · 422 = validation problem.
/pingKey check. Returns the operator you are connected to.
curl -H "X-Api-Key: $KEY" https://keynetic.online/api/v1/partner/ping
/locationsActive pickup/return stations with codes, address, coordinates, contact details, timezone and opening hours.
/availabilityVehicle classes with live availability and OTA-channel rates for a window. Optional class_code filters to one class.
curl -H "X-Api-Key: $KEY" \ "https://keynetic.online/api/v1/partner/availability?pickup_at=2026-08-01T10:00:00Z&return_at=2026-08-05T10:00:00Z"
{
"classes": [{
"class_code": "CCAR", "acriss_code": "CCMR", "name": "Compact",
"seats": 5, "available": 3, "total_fleet": 8,
"rate": { "currency": "USD", "base_cents": 18000,
"tax_cents": 1440, "total_cents": 19440 }
}]
}/bookingsCreates a confirmed booking. The capacity guard is transactional — a 409 means the class sold out between your availability call and this request. The customer receives the operator's standard confirmation (email / WhatsApp).
curl -X POST -H "X-Api-Key: $KEY" -H "Content-Type: application/json" \
https://keynetic.online/api/v1/partner/bookings -d '{
"class_code": "CCAR",
"pickup_at": "2026-08-01T10:00:00Z",
"return_at": "2026-08-05T10:00:00Z",
"pickup_location": "APT",
"return_location": "APT",
"customer": { "first_name": "Ana", "last_name": "Diaz",
"email": "ana@example.com", "phone": "+297 5551234" },
"partner_reference": "FR-88213"
}'{ "reference": "KN-2026-00042", "status": "CONFIRMED",
"currency": "USD", "total_cents": 19440, "deposit_cents": 0 }/bookings/{reference}Status lookup by Keynetic reference.
/bookings/{reference}Cancels the booking when its status allows it. Idempotent — an already-cancelled booking returns 200.
OTA XML gateway
Broker systems that speak OpenTravel-style XML (the dialect used by RentalCars, CarTrawler and most legacy channel managers) can connect without touching JSON. One endpoint, dispatched on the message root — same API key, same live inventory.
https://keynetic.online/api/ota/v1Supported messages: OTA_PingRQ, OTA_VehAvailRateRQ, OTA_VehResRQ, OTA_VehRetResRQ and OTA_VehCancelRQ. Send the partner API key as POS/Source/RequestorID @MessagePassword (an X-Api-Keyheader also works). Vehicle classes are accepted as the operator's class code or the ACRISS code.
curl -X POST -H "Content-Type: application/xml" \
https://keynetic.online/api/ota/v1 -d '<?xml version="1.0"?>
<OTA_VehAvailRateRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.0">
<POS><Source>
<RequestorID Type="22" ID="your-agency" MessagePassword="kpk_live_…"/>
</Source></POS>
<VehAvailRQCore Status="Available">
<VehRentalCore PickUpDateTime="2026-08-01T10:00:00Z"
ReturnDateTime="2026-08-05T10:00:00Z">
<PickUpLocation LocationCode="APT"/>
<ReturnLocation LocationCode="APT"/>
</VehRentalCore>
</VehAvailRQCore>
</OTA_VehAvailRateRQ>'Bookings via OTA_VehResRQ carry the customer under Customer/Primary (PersonName, Email, Telephone) and the class under VehPref @Code; a voucher number in VehResRQInfo/RentalPaymentPref/Voucher @Identifier is stored as the broker reference. The response returns the Keynetic confirmation as ConfID Type="14", which OTA_VehRetResRQ and OTA_VehCancelRQ accept as UniqueID @ID. Errors come back as standard Errors/Error @Type @ShortText.
Building an integration and need something the API doesn't cover yet — webhooks, rate plans, extras, a broker-specific dialect? Email hello@keynetic.online. We ship connectivity requests fast.