Skip to content

Price moving this booking to another departure, on the server, and remember it 15 minutes

POST
/account/bookings/{booking_id}/rebook-quotes
curl --request POST \
--url https://quikstik-core.fly.dev/account/bookings/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/rebook-quotes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "new_variant_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "new_start_time": "2026-04-15T12:00:00Z", "party_size": 1 }'

Customer portal, guest-scoped (HANDOFF-account-self-serve-2026-10-18 WP2). local-person session; the booking must be inside the caller’s reach AND bought by the caller. The body names a TARGET (variant + start) — never a price; unknown fields are refused. The server checks the slot is a scheduled departure past its lead-time cutoff that can seat the whole party (leaf and ancestors), prices the same party at the booking’s current slot and at the target from the governed rate calendar, and stores the signed difference (commerce_rebook_quotes). kind is upcharge | downgrade | even. An upcharge is quoted with redeemable: false: the ledger books an upcharge as cash received, so it cannot be completed online until it can be booked as money owed. A booking inside its tenant no-refund window is 409 inside_notice_window; OTA / departed / cancelled bookings are 409 not_rebookable.

booking_id
required
string format: uuid
Media typeapplication/json
object
new_variant_id
required
string format: uuid
new_start_time
required

RFC3339 UTC start of the target departure

string format: date-time
party_size

Optional; must equal the booking’s party (rider changes are the amendment lane)

integer
>= 1

Example generated

{
"new_variant_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"new_start_time": "2026-04-15T12:00:00Z",
"party_size": 1
}

The stored quote

Media typeapplication/json
object
quote_id
required
string format: uuid
kind
required
string
Allowed values: upcharge downgrade even
delta_net_minor
required

Signed; positive = the guest owes more

integer format: int64
delta_tax_minor
required
integer format: int64
currency
required
string
expires_at
required
string format: date-time
redeemable
required

False for an upcharge (see the operation description)

boolean

Example

{
"kind": "upcharge"
}

Missing or invalid session bearer token

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

The session’s effect authority does not cover this operation

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

Expired, consumed, unknown, or unresolvable — indistinguishable by design

Media typeapplication/json
object
reason
required
string

Example generated

{
"reason": "example"
}

not_rebookable (detail: already_cancelled | ota_booking | departed | needs_staff | party_unknown | currency_unsupported), inside_notice_window, or unavailable (the slot cannot take the party)

Media typeapplication/json
object
reason
required

Stable machine reason

string
detail

Finer machine code under reason

string
current
object
booking_id
required
string format: uuid
refund_minor
required

Minor units the card gets back

integer format: int64
refund_bps
required
integer
<= 10000
tier_hours

Hours-before-departure the applying tier requires; absent when no tier applies

integer
deadline_at

Last instant this refund still applies; absent when no tier applies

string format: date-time
currency
required
string

Example generated

{
"reason": "example",
"detail": "example",
"current": {
"booking_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"refund_minor": 1,
"refund_bps": 1,
"tier_hours": 1,
"deadline_at": "2026-04-15T12:00:00Z",
"currency": "example"
}
}

invalid_start_time, slot_closed, departure_not_scheduled, same_departure, party_size_mismatch, no_rate_for_slot, or an unknown request field

Media typeapplication/json
object
reason
required

Stable machine reason

string
detail

Finer machine code under reason

string
current
object
booking_id
required
string format: uuid
refund_minor
required

Minor units the card gets back

integer format: int64
refund_bps
required
integer
<= 10000
tier_hours

Hours-before-departure the applying tier requires; absent when no tier applies

integer
deadline_at

Last instant this refund still applies; absent when no tier applies

string format: date-time
currency
required
string

Example generated

{
"reason": "example",
"detail": "example",
"current": {
"booking_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"refund_minor": 1,
"refund_bps": 1,
"tier_hours": 1,
"deadline_at": "2026-04-15T12:00:00Z",
"currency": "example"
}
}

No durable backend is wired for this operation (fail-closed)

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}