Skip to main content
POST
Cancel a car rental booking
Cancel the booking at the rental provider and refund the customer’s payment minus the cancellation fee. Requires the cancellation_id from a preceding preview, binding the commit to the fee the customer saw. Safe to call twice, a committed cancellation is reported as it stands rather than repeated. state: confirmed is done; state: pending is recorded but not finished, the platform is still completing it, or a Jinko agent has it, so read car_cancel_status rather than committing again. refund_pending_review: true means the refund needs a person before it is issued. A preview that answered manual_required: true is committed with manual_ok: true, once the customer agrees: the cancellation is then recorded for a Jinko agent (state: pending, refund_pending_review: true) and nothing is sent to the rental company by this call. Without the flag that commit is refused 409 manual_required. The other 409 refusals are quote_expired (preview again), quote_drift (the refund moved; commit against the requote it names after showing the customer current.refund), active_operation_exists, not_cancellable and funds_unavailable, see CarServicingConflictCode. In every one of them nothing was cancelled.

Authorizations

X-API-Key
string
header
required

Body

application/json
booking_ref
string
required

Jinko booking reference. Call get_booking first, then select its item_id for servicing.

Minimum string length: 1
Example:

"JNK-A0AUR2"

cancellation_id
string
required

The "ccl_…" reference from a preceding car_cancel_preview. Binds the commit to the fee the customer saw.

Minimum string length: 1
Example:

"ccl_2f7c9a4e8b1d4c6f9e3a5b7d1c2e4f6a"

item_id
integer

Stable booked item ID from get_booking items[].item_id. Preserved across exchanges. Omit only when the booking has exactly one item of the requested domain; otherwise a 409 returns items to choose from.

Required range: 0 < x <= 9007199254740991
Example:

42

last_name
string

Required for guest lookup. A credential that owns the booking may omit it; ownership is checked by the platform.

Minimum string length: 1
Example:

"Doe"

intent
object
reason
string

Optional free-text cancellation reason.

Example:

"Change of plans"

manual_ok
boolean

Send true to commit a preview that answered manual_required: true. The cancellation is then recorded for a Jinko agent — NOTHING is sent to the rental company by this call — and the answer is state: pending with refund_pending_review: true; the agent completes it and settles the refund by hand, and car_cancel_status reports the outcome. Without the flag such a commit is refused 409 manual_required, so a customer is never put in an agent queue unasked: send it only once the customer has agreed to that. On a preview that can be committed online the flag changes nothing.

Example:

false

Response

Cancellation result

cancellation_id
string
Example:

"ccl_2f7c9a4e8b1d4c6f9e3a5b7d1c2e4f6a"

state
string

confirmed — cancelled and the refund issued or on its way. pending — recorded but not finished: the platform is still completing it, or (with refund_pending_review: true) a Jinko agent has it; read car_cancel_status, do not commit again. rejected — the rental company declined; the booking still stands and rejected_reason says why. failed — the attempt did not complete; read car_cancel_status before trying again.

Example:

"confirmed"

fee_known
boolean
fee
object
paid
object
refund_amount
object
refund_pending_review
boolean

true means the booking IS cancelled (or, with state: pending, recorded for a Jinko agent) but the refund needs a person before it is issued — do not quote refund_amount as final.

stripe_refund_id
string
rejected_reason
string
completed_at
string
Example:

"2026-08-20T15:18:00Z"