Read a merchant's published cancellation schedule (public)
const url = 'https://quikstik-core.fly.dev/merchants/example/cancellation-schedule';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://quikstik-core.fly.dev/merchants/example/cancellation-schedulePublic, unauthenticated read side of setTenantCancellationSchedule, resolved
by merchant slug like the public content routes. Feeds the guest policy page
(/policies). Tiers are sorted by min_hours_before descending (most notice first);
updated_at_ms is the last write. Fail-closed: 404 for an unknown merchant, 503 when
the tenant has no schedule or no backend is wired — a default schedule is never served.
200 carries Cache-Control: public, max-age=300.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The merchant’s slug (the same slug the public content routes use).
Responses
Section titled “Responses”The merchant’s cancellation schedule
object
object
Example generated
{ "tiers": [ { "min_hours_before": 1, "refund_bps": 1 } ], "updated_at_ms": 1}Headers
Section titled “Headers”Always public, max-age=300.
Unknown merchant
object
Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).
Example
{ "reason": "sold_out"}No durable backend is wired for this operation (fail-closed)
object
Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).
Example
{ "reason": "sold_out"}