Skip to main content

Quickstart for people

This is the path from "I have USDC and no EGLD" to "my transaction is on chain". You buy the plan from any MultiversX wallet. You send from a key your own program holds, or with the dashboard's test transfer to yourself. It takes four steps: one signed transaction to buy the plan, then one signature for each transaction you send.

Which wallets can send today

Buying works from xPortal, the Web Wallet, the browser extension and a Ledger. Sending through CoRelayer works from a key your own program holds, and from the dashboard's test transfer. If you sign in xPortal, the Web Wallet, the browser extension or a Ledger on another app, CoRelayer can't relay for you yet, so don't buy a plan for that. (FAQ)

On devnet only

CoRelayer runs on devnet only; nothing is deployed on mainnet yet.

Before you start: try it on devnet

Devnet runs the same code as mainnet, with test tokens, so you can try everything before you pay with real money.

  1. Open the devnet dashboard and connect a devnet wallet.
  2. Get test EGLD from the faucet of the devnet web wallet, and swap some of it for USDC-350c4e on the devnet xExchange.
  3. Buy a plan on the Plan screen, paid in USDC-350c4e. To pay for your users, pick Builder or above.
  4. To pay for your users, create a sponsor key on the API keys screen. A devnet key starts with crk_test_.

In your code, use https://devnet-api.co-relayer.com as the API origin.

What you need​

A MultiversX wallet, to buy the planxPortal, the Web Wallet, the browser extension or a Ledger.
A key your own program holds, to sendThe program signs each transaction with it (step 4). The dashboard's test transfer needs none.
USDC on MultiversXThe token identifier of the network you are on. On mainnet that is USDC-c76f1f; on devnet, USDC-350c4e. The pricing endpoint states which one applies.
EGLDNone. That is the point.

1. Connect​

Open app.co-relayer.com and connect your wallet. Connecting asks your wallet to sign one login message; it costs nothing and is not a transaction. That signature is what lets the dashboard read what is yours alone — your usage history, your API keys, your notification settings.

Connecting tells the dashboard your address. From it, the dashboard shows which shard you are in, whether you have a plan (from the chain), and how many transactions are left in the current period (from CoRelayer's usage records).

2. Pick a plan​

The Plan screen lists every tier that is currently purchasable, with its monthly cap in Relay Units, its price in USDC and its rate class. The numbers come from the contract, not from a price list we keep in a file — see Tiers for the ladder and Tariff for the single value everything is derived from.

Before you buy, know how the price works and that a purchase cannot be refunded. The price is price_units × tariff, and the tariff is one number on chain. If it ever goes up, the contract gives 48 hours of notice, and what you have already paid for does not change. USDC that enters the contract becomes credits, and credits are spent on plans. Credits cannot be withdrawn, so buy the size you will use.

3. Pay​

Checkout builds one transaction: a USDC transfer to the CoRelayer contract that carries the tier id, the number of months and a maximum price you are willing to pay. You sign it once.

You can pay without holding any EGLD. Buying a plan is on the free list, so CoRelayer pays the fee for that transaction. The transaction also says the most you will pay: if the price moves between the quote and the block, the contract reverts instead of charging you more, and you see PRICE_ABOVE_MAX with a fresh quote.

When the transaction executes, the contract converts your USDC, credits your account and writes the plan block that fixes your cap, your period length, your pay-as-you-go price and the number of wallets you can name, for as long as that block lasts.

4. Send your first relayed transaction​

From the dashboard, send a test transfer to yourself: the Overview screen offers it while the account has sent nothing yet. It needs no EGLD, and it shows on the Transactions screen once the chain has executed it.

From your own code (a program key), it is one call. This is the relay step of the site's tested example, for a program that holds its own key:

send-token.ts
const result = await relayOnce({
client,
sender: wallet.address,
// Every assign call gets a fresh presence proof: the first one, and the renewal when the lease
// expires while the wallet is signing. A proof is accepted only once.
signProof: (message) => wallet.signProofMessage(message),
intentKey: request.intentKey,
...(signal === undefined ? {} : { signal }),
buildTransaction: (assignment) => forAssignment(call, nonce, assignment, chainId),
// The single signature. The relayer is checked on chain first; if it is not an active
// CoRelayer relayer in your shard, nothing is signed.
signOnce: async ({ assignment, transaction }) => {
await relayers.verify(wallet.address, assignment.relayer, assignment.registryVersion, signal);
return wallet.signTransaction(transaction);
},
});

relayOnce has your wallet sign a presence proof (a short message, not a transaction), asks CoRelayer for a relayer in your shard, builds your transaction with that relayer in it, checks the relayer against the contract, asks your wallet to sign the transaction once, and submits it. If the lease expires while you sign, it has your wallet sign one more presence proof to renew the lease, never a second transaction. The whole file, including the transfer it sends and the check that you are on the network you meant, is in Sign and relay.

Building an app that pays for its users? Your server relays each transaction with a sponsor key: Pay for your users.

What you should see afterwards​

WhereWhat
The Overview screenRelay Units used against your cap, and the day the period rolls over.
The Transactions screenOne row per relayed transaction: hash, state, how many Relay Units it cost, and how long each stage took — with a CSV export.
The Usage screenThe same rows aggregated over the period.
The explorerYour transaction, with your signature and the relayer's, and a fee paid by the relayer.

When something goes wrong​

Every failure is an RFC 9457 problem document whose type is the address of a page on this site. The three you are most likely to meet first:

CodeWhat it meansWhat to do
NO_ENTITLEMENTNo plan, or the plan has lapsed.Buy or renew one.
QUOTA_EXHAUSTEDThe cap is used up and pay-as-you-go is off.Turn on pay-as-you-go or move up a tier.
RESIGN_REQUIREDThe relayer became unavailable before anything was co-signed. Nothing was sent.Sign once more, on the same nonce, for the new relayer. The dashboard asks you; it never does this silently.

Next​

  • What the dashboard shows you, screen by screen: Dashboard tour
  • Questions people ask first: FAQ
  • Why a heavy transaction costs more than one unit: Relay Units