# Cardzone B2B API > Merchant API for listing Cardzone digital products, looking up player profiles, creating wallet-funded orders, polling order status, checking wallet balance, and receiving webhooks. > > For final fulfillment decisions, use the public API `status` returned by `GET /api/b2b/v1/orders/{id}` and by the `b2b.order.status_changed` webhook. > > Order responses use a single 22-character Base58 `order_id` for polling, links, display, and support. Legacy full order UUIDs remain accepted as lookup inputs but are not returned. Store-scoped `merchant_order_ref` values also remain accepted by order lookup endpoints. > > The endpoint paths and request shapes are the same for live and sandbox keys. Cardzone automatically adapts response behavior based on the key you send, so API consumers do not need a separate sandbox base URL. > > Send your store API key as `Authorization: Bearer ` on every endpoint. See the `Sandbox` section for sandbox key behavior and scenario product IDs. > > Live keys need an enabled postpaid wallet or a prepaid wallet balance of at least 100 SAR. Below that, live endpoints other than `GET /balance`, `GET /orders/{id}`, and `POST /orders/{id}/cancel` return `403 insufficient_store_wallet_balance` with the minimum in `error.details` (`POST /player_profiles` keeps its own `player_lookup_requirements_not_met` code), and hosted checkout orders placed below it send no webhooks. Webhooks for orders already accepted are still sent. Sandbox keys are not affected. ## Pages - [Cardzone B2B API](https://docs.cardzone.ai/reference/index.md) — Merchant API for listing Cardzone digital products, looking up player profiles, creating wallet-funded orders, polling order status, checking wallet balance, and receiving webhooks. For final fulfillment decisions, use the public API `status` returned by `GET /api/b2b/v1/orders/{id}` and by the `b2b.order.status_changed` webhook. Order responses use a single 22-character Base58 `order_id` for polling, links, display, and support. Legacy full order UUIDs remain accepted as lookup inputs but are not returned. Store-scoped `merchant_order_ref` values also remain accepted by order lookup endpoints. The endpoint paths and request shapes are the same for live and sandbox keys. Cardzone automatically adapts response behavior based on the key you send, so API consumers do not need a separate sandbox base URL. Send your store API key as `Authorization: Bearer ` on every endpoint. See the `Sandbox` section for sandbox key behavior and scenario product IDs. Live keys need an enabled postpaid wallet or a prepaid wallet balance of at least 100 SAR. Below that, live endpoints other than `GET /balance`, `GET /orders/{id}`, and `POST /orders/{id}/cancel` return `403 insufficient_store_wallet_balance` with the minimum in `error.details` (`POST /player_profiles` keeps its own `player_lookup_requirements_not_met` code), and hosted checkout orders placed below it send no webhooks. Webhooks for orders already accepted are still sent. Sandbox keys are not affected. ## Sections - [Balance](https://docs.cardzone.ai/reference/balance/llms.txt) - [Categories](https://docs.cardzone.ai/reference/categories/llms.txt) - [Orders](https://docs.cardzone.ai/reference/orders/llms.txt) - [Player Profiles](https://docs.cardzone.ai/reference/player-profiles/llms.txt) - [Products](https://docs.cardzone.ai/reference/products/llms.txt) - [Schemas](https://docs.cardzone.ai/reference/schemas/llms.txt) - [Tags](https://docs.cardzone.ai/reference/tags/llms.txt) - [Webhooks](https://docs.cardzone.ai/reference/webhooks/llms.txt)