Overview
The Waffo Pancake API lets you programmatically manage your entire payment infrastructure:- Create and manage stores
- Create products (one-time and subscription)
- Generate checkout sessions and process orders
- Manage subscriptions and billing
- Query data via GraphQL
- Handle refunds
Base URL
All API requests are made to:api.waffo.ai currently resolves over IPv4 only (A records, no AAAA). From an IPv6-only host, give the process an IPv4 route (dual-stack networking or NAT64/DNS64); otherwise DNS resolution fails before any request is sent.Architecture
The API uses a hybrid approach:- REST endpoints (
/v1/actions/...) for all write operations (create, update, delete) - GraphQL (
/v1/graphql) for all read operations (queries)
POST method exclusively. There are no GET, PUT, PATCH, or DELETE methods.
TypeScript SDK
The official@waffo/pancake-ts SDK wraps the entire API with full type safety. It handles authentication, request signing, and webhook verification automatically. Idempotency keys are the one thing it leaves to you — pass one per call when a retry must not duplicate the write (see Idempotency).
Authentication
Waffo Pancake uses API Key authentication for all programmatic API access. API Key authentication is handled automatically by the SDK. For public-facing checkout flows, use Store Slug authentication with theX-Store-Slug header.
Learn more about authentication ->
Common Headers
API Key authentication headers (
X-Merchant-Id, X-Timestamp, X-Signature) are handled automatically by the SDK. You only need to provide your Merchant ID and private key when initializing the client.Request Format
- Method: All write endpoints use
POST - Body: JSON
- Timestamps: ISO 8601 UTC (e.g.,
2026-01-23T00:00:00.000Z) - Amounts: Display format strings (e.g.,
"29.00"= $29.00 USD) - Currencies: ISO 4217 codes (e.g.,
USD,EUR,JPY) - Status values: Always lowercase (e.g.,
active, notACTIVE)
ID Formats
All externally-facing entity IDs use Short ID format:{PREFIX}_{base62}.
Checkout Session IDs use a special format:
cs_ + UUID (e.g., cs_550e8400-e29b-41d4-a716-446655440000). They are not part of the Short ID system.Response Format
Success
Error
In the
errors array, errors[0] is the root cause of the failure. Subsequent entries represent higher-level callers in the request chain.Error layer Field
Each error includes a layer string indicating which part of the system produced the error. Use this to identify the root cause when debugging. The value is always one of the predefined layer names (e.g., "gateway", "store", "product").
HTTP Status Codes
Environments
API Key authentication determines the environment automatically based on which key verifies successfully. Store Slug authentication requires theX-Environment header:
Idempotency
A write operation is deduplicated only when it carries anX-Idempotency-Key header.
The SDKs do not set this header for you. They used to derive a key from
merchantId + path + body; they no longer do, on any credential. Nothing is deduplicated unless you supply a key, so a write retried after a timeout executes twice.In the SDKs, pass it per call — client.stores.create(params, { idempotencyKey }) in TypeScript, pancake.WithIdempotencyKey(key) in Go, or the trailing options object of a @waffo/pancake-nextjs server action. Calling REST directly, set the header yourself. Either way the requirements below are the ones to meet.
Combine your
merchantId with a UUID:
Endpoint Groups
Authentication
Issue session tokens for checkout flows
Stores
Create, update, and delete stores
One-Time Products
Create and manage one-time purchase products
Subscription Products
Create tiered subscription products and groups
Orders
Create checkout sessions and orders
Subscriptions
Manage subscription lifecycle
Refunds
Request and process refunds
GraphQL
Query all data with GraphQL