Skip to content
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.

sandbox.ts
// 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.