Concept: For what Gas Waiver is, why it exists, and how governance-authorized waivers work, see Gas waiver. For the full protocol specification (wrapper transaction format, marker address, execution semantics, security model), see Gas waiver protocol.
Prerequisites
- An API key for the Waiver Server, issued by the Stable team
- Target contract address must be registered in the waiver’s
AllowedTargetpolicy
Waiver Server
Base URLs:- Mainnet: TBD
- Testnet:
https://waiver.testnet.stable.xyz
Bearer <your-api-key>
Overview
The integration flow has three steps:- Build an InnerTx: the user signs a transaction with
gasPrice = 0. - Submit to Waiver Server: submit the signed transaction to the Waiver Server API.
- Handle the response: the waiver server wraps and broadcasts the transaction. Process the streamed results and surface the transaction hash to the user.
Step 1: create the user’s InnerTx
The user signs a standard transaction withgasPrice = 0. The to address and method selector must be permitted by the waiver’s AllowedTarget policy.
Step 2: submit to the Waiver Server
Batch submissions
You can submit multiple signed transactions in a single request:index field corresponding to the transaction’s position in the array.
Step 3: handle the response
The response is streamed as NDJSON (newline-delimited JSON). Each line corresponds to one submitted transaction.Error codes
| Code | Description |
|---|---|
PARSE_ERROR | Failed to parse transaction |
INVALID_REQUEST | Malformed request body |
BATCH_SIZE_EXCEEDED | Batch size exceeds allowed maximum |
VALIDATION_FAILED | Transaction validation failed (e.g., invalid signature, disallowed target) |
BROADCAST_FAILED | Failed to broadcast to chain |
RATE_LIMITED | Rate limit exceeded |
QUEUE_FULL | Server queue at capacity |
TIMEOUT | Request timed out |
API reference
GET /v1/health
Health check endpoint. Authentication: none.
POST /v1/submit
Submit a batch of signed inner transactions. Authentication: required (Bearer).
Request body:
GET /v1/submit
WebSocket interface for streaming submissions. Authentication: required (Bearer).
Key takeaways
- Gas Waiver is a server-side integration: your backend submits signed user transactions to the Waiver Server. Users never interact with the Waiver Server directly.
- The user always signs the InnerTx, preserving signature integrity. The waiver cannot modify the user’s transaction.
- The target contract must be on the waiver’s
AllowedTargetlist.
Next recommended
Zero gas transactions
See the demo-focused flow and how to verify zero gas on a receipt.
Self-hosted Gas Waiver
Run your own waiver without the hosted API.
Gas waiver protocol
Full wrapper transaction spec and governance model.

