Skip to content

What cancelling this booking now would refund, and until when that figure holds

GET
/account/bookings/{booking_id}/cancellation-quote
curl --request GET \
--url https://quikstik-core.fly.dev/account/bookings/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/cancellation-quote \
--header 'Authorization: Bearer <token>'

Customer portal, guest-scoped (HANDOFF-account-self-serve-2026-10-18). local-person session only; the booking must be inside the caller’s reach AND bought by the caller (a rider or head who did not buy it gets 403 buyer_only). The refund is derived server-side: the tier the tenant’s T-minus schedule yields for the notice remaining now, applied with the ledger’s own arithmetic to what the booking actually paid. Read-only. 409 not_cancellable (detail: already_cancelled | ota_booking | departed | needs_staff) when the guest cannot cancel it here; 503 when no schedule or ledger window is wired (never a guessed figure).

booking_id
required
string format: uuid

The current cancellation quote

Media typeapplication/json
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

{
"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"
}

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"
}

The booking cannot be cancelled by its guest here

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"
}