Sandbox

A real Keynetic workspace with a real fleet, a published key and no paperwork. It runs the same code as every operator account, so what passes here passes in production. Book what you like: the workspace is swept hourly and the cars come back.

Your key

Send it as X-Api-Key, or as MessagePassword on the XML gateway. It is public and shared, so treat the data in there as public too.

kpk_live_75b6b2489b74ab39a86c163c91ad3bfae3a40439a0f17011

Rate limit 60 requests per minute. A production key gets 240.

What is in the workspace

Two stations with separate fleets, so availability really is per station and one-way behaves like one-way.

StationAlso acceptsHours (local)One-way
SBX-APTAUA, SBXAPT07:00-22:00, weekends 08:00-20:00Allowed
SBX-CITYSBXCITY08:00-18:00, Sat to 13:00, closed SunRefused, on purpose

Classes: ECAR (ECMR), CCAR, IFAR and FVAR, a van with exactly one car in the fleet so a second overlapping booking sells it out. Minimum driver ages run from 21 to 25. Extras include SCDW, CHILD_SEAT (capped at 6 days), ADDITIONAL_DRIVER and GPS; the one-way, airport and young driver fees are mandatory where they apply. The timezone is America/Aruba, which has no daylight saving, and prices are USD with 8 percent tax.

A full cycle in five calls

export KEY=kpk_live_75b6b2489b74ab39a86c163c91ad3bfae3a40439a0f17011
export BASE=https://keynetic.online/api/v1/partner

# 1. Is the connection healthy?
curl -H "X-Api-Key: $KEY" $BASE/selftest

# 2. What can I sell, and for how much?
curl -H "X-Api-Key: $KEY" \
  "$BASE/availability?pickup_location=SBX-APT&pickup_at=2026-10-01T10:00:00&return_at=2026-10-05T10:00:00&driver_age=23&extras=CHILD_SEAT:1"

# 3. Book it (partner_reference is yours, and is the idempotency key).
curl -X POST -H "X-Api-Key: $KEY" -H "Content-Type: application/json" \
  $BASE/bookings -d '{
    "class_code": "CCAR",
    "pickup_location": "SBX-APT", "return_location": "SBX-APT",
    "pickup_at": "2026-10-01T10:00:00", "return_at": "2026-10-05T10:00:00",
    "customer": { "first_name": "Test", "last_name": "Broker",
                  "email": "[email protected]" },
    "driver_age": 23, "extras": [{ "code": "CHILD_SEAT", "quantity": 1 }],
    "partner_reference": "MY-REF-1"
  }'

# 4. Price a change before you show it to the traveller.
curl -X PATCH -H "X-Api-Key: $KEY" -H "Content-Type: application/json" \
  "$BASE/bookings/MY-REF-1?preview=1" -d '{ "return_at": "2026-10-07T10:00:00" }'

# 5. Cancel.
curl -X DELETE -H "X-Api-Key: $KEY" $BASE/bookings/MY-REF-1

Cases worth testing here

  • Book FVAR twice over the same dates. The second answers 409 unavailable, and availability shows it at 0 while still quoting a price.
  • Pick up at SBX-APT and return at SBX-CITY: refused with one_way_return (XML 225). Reverse it for one_way_pickup (224).
  • Ask for a 20:00 pickup at SBX-CITY: refused with closed (XML 227). Sunday there is closed all day.
  • Quote with and without driver_age and compare the young driver fee: without an age it is listed with a condition and left out of the total.
  • Send the same partner_reference twice. The second returns 200 with replayed: true and the original reference.
  • Book a 10-day rental with a child seat and check charged_units stops at the 6-day cap.
  • Fetch a booking that is not yours, for example KN-2026-00001: 404, never someone else's data.

House rules

  • The key is public and shared. Do not put real traveller data in it, and expect other people's bookings in the workspace.
  • Bookings are cancelled and the fleet released every hour. A booking you made can disappear; that is the sweep, not a bug.
  • No email or WhatsApp leaves the sandbox, so use any address you like.
  • 60 requests per minute. Over that you get 429 with Retry-After.

Ready for a real operator? The JSON API and the XML gateway are identical in production; only the key changes. Email [email protected].