Beta: the Biskèt Partner API may still change before v1 is final. Sandbox access is by request:partners@bisket.ai.
Sandbox and simulator
The sandbox (https://sandbox.api.bisket.ai, bk_test_ keys) is a separate Biskèt environment with synthetic
restaurants only. It runs the same code as live: the same validation, events, webhooks, ledger and statements.
The simulator (sandbox only, /v1/sandbox/…) does what restaurant staff would do:
| Endpoint | Actions |
|---|---|
POST /v1/sandbox/orders/{order_id}/simulations |
accept, partially_accept, refuse, start_preparing, mark_ready, approve_cancel, reject_cancel, issue_pickup_token, close_not_picked_up |
POST /v1/sandbox/locations/{location_id}/simulations |
set_status (open, closed, unreachable), set_sold_out / clear_sold_out, set_price, set_autopilot, confirm_payout / dispute_payout (pausing is done from the sandbox restaurant’s POS in this release) |
POST /v1/sandbox/payment_intents/{payment_intent_id}/simulations |
outcome: succeeded / failed (the sandbox never calls MonCash) |
POST /v1/sandbox/locations/{location_id}/statements |
issue the statement of a period now |
set_autopilot accepts and readies your orders by themselves after the delays you choose, for end-to-end tests.
The reference lists each action’s fields.
// The sandbox simulator plays the restaurant: here, close the location (not accepting orders), then open it.import { createBisket } from '@bisket-ai/partner-sdk';
export async function main(env: { apiKey: string; locationId: string }) { const bisket = createBisket({ apiKey: env.apiKey }); // a bk_test_ key: simulations exist only on the sandbox const path = { location_id: env.locationId }; await bisket.POST('/v1/sandbox/locations/{location_id}/simulations', { params: { path }, body: { action: 'set_status', status: 'closed' } }); const { data: closed } = await bisket.GET('/v1/locations/{location_id}', { params: { path } }); await bisket.POST('/v1/sandbox/locations/{location_id}/simulations', { params: { path }, body: { action: 'set_status', status: 'open' } }); const { data: open } = await bisket.GET('/v1/locations/{location_id}', { params: { path } }); return { acceptingWhileClosed: closed!.accepting_orders, acceptingWhenOpen: open!.accepting_orders };}Sandbox data is reset monthly; sandbox restaurants keep their ids.
Certification. Before live keys, you show in the sandbox: create, partial acceptance, refusal, both cancel paths, pickup, not picked up, verified webhooks, statements read, and a payout recorded and confirmed.