pool.transact directly. On Ethereum a bundler does this job. See Relaying and gas.
The URL of the public relayer and its address are in Network reference. Every fee must name that address. Read it from /quote in your code and do not copy it from a page. In the examples below, $RELAYER_URL is the relayer’s URL.
Endpoints
Every response is JSON. Errors are
{ "error": "<message>" }. A request body over 4 MB is refused.
GET /health
gasHype is the relayer’s HYPE balance. queueDepth is the number of jobs waiting.
GET /quote
relayer as its paymaster and pay at least feeValue in one of feeAssetIds. feeValue is in the base units of that asset. The current amount is in Fees.
POST /fund
202 and { "id": "0x...", "state": "queued" }. The id is the keccak256 of the calldata, so a retry of the same calldata returns the same job and does not submit twice.
The relayer refuses a request, before it spends gas, when any of these fail:
The last check is why
/fund is safe for the relayer to run. It never sends a transaction it has not simulated.
If the queue is full, the response is 503 with { "error": "queue full" }. Try again shortly.
GET /gas/quote and POST /gas
/gas/quote returns { station, chainId, usdc, feeUsdc, dropWei }. It returns 404 if the relayer has no GasStation. Read feeUsdc and dropWei from the station on the network when you can, and treat the relayer’s answer as a hint.
POST /gas takes a signed EIP-3009 authorization from the account that wants gas:
The relayer builds a
buyGas call to the station and simulates it. The signature, the price and the payment are all checked by the station and by the simulation. See Private Sub-accounts SDK for how to sign it.
POST /register
Sponsored registration lets a wallet with no HYPE register. The relayer pays the gas for pool.registerAddress. The endpoint returns 404 if the relayer has it turned off.
- The calldata must be exactly
pool.registerAddress, and the signature must recover to a signer. - The signer must not hold enough HYPE to register with its own gas.
- The signer must hold a minimum of USDC on the network.
- The relayer keeps a reserve of HYPE for funding jobs, which come first.
- Daily caps apply per IP address and in total, and only accepted registrations count. See Status and limits.
- A simulation must succeed, so an already registered wallet or a bad proof is refused at no cost.
GET /status/<id>
An unknown
id returns 404. The relayer does not keep the calldata after it tries the job.
How the relayer behaves
- One job at a time. All jobs from one relayer key share a nonce sequence, so the relayer sends them one after another.
- No added delay. The relayer submits as soon as a job reaches the front. Timing is the user’s decision.
- Retries are safe. A repeat of the same calldata returns the existing job.
- Receipts can lag. The relayer polls for a receipt and treats “not found yet” as “not yet”, because a load-balanced RPC can report a block before the receipt is available.
- Browser access. The relayer sets CORS headers only for the origins it is configured to allow. Other callers are still served, but a page on another site cannot read the response.