Live on Solana mainnet, small limits. Status page.Reviewed internally. Early. Real money. Use with caution.Report a problemState as of October 2026

Build

Mainnet quickstart: your first paid request

Five steps from a new account to one paid request on Solana mainnet. This is real money in USDC: a Solana transaction cannot be undone on the blockchain. Use cents, not dollars.

Real money. New accounts start with small limits, set by us.

Want to watch one payment first? The real-money demo (about one US cent) shows the whole exchange. Then come back.

What you need

  • Node 20.18 or newer.
  • A Solana wallet you control, to receive payments. It is your receiving wallet.
  • A second Solana wallet you control, holding a few cents of USDC, to pay your own service once. It must be a different wallet.
  • No SOL for the seller side: Payzilla’s fee payer pays the network fee. The paying wallet should not need SOL either; that was checked in one test-network run only.
More on what you need

Never send anyone a private key or seed phrase. Step 4 reads a key file for your second wallet, on your own computer only: use a wallet that holds a few cents, not your main wallet, and restrict the file (chmod 600 payer.json). The commands below put your API key on the command line, so it can end up in your shell history: use a terminal you trust, and replace the key on the start page if it may have leaked.

Step 1: Make your account and key

Go to start.payzilla.ai. Sign in with an email code, give the name buyers will see, and sign a message with your receiving wallet. Signing sends no transaction and moves no money. Copy your API key: it is shown once and starts with afk_live_. Keep it in your server’s secrets, never in a web page or a repository.

More on make your account and key

Check that the key works:

curl https://api-mainnet.payzilla.ai/supported \
  -H "x-api-key: <YOUR_KEY>"

You should see: HTTP 200. If you see 401, the key is wrong: send it exactly as shown, in the x-api-key header.

Step 2: Make your receiving wallet ready

Send 0.01 USDC (real money, about one US cent) to your receiving wallet from another wallet, so it can receive USDC. Payments are refused until then.

Step 3: Create a service and start your seller server

A service is what you sell, with its own price. "2000" means 0.002 USDC; the smallest price is 0.001 USDC through the API, and 0.01 USDC in the start app.

More on create a service and start your seller server
curl -X POST https://api-mainnet.payzilla.ai/v1/services \
  -H "x-api-key: <YOUR_KEY>" \
  -H "content-type: application/json" \
  -d '{"name": "Weather lookup", "price": "2000"}'

You should see: HTTP 201 and your new service with its id. Keep the id.

Then run the small reference seller server. Its code is on the developer hub, so this step continues there: copy it from seller.mjs (step 3 of the hub), save it as seller.mjs, come back here and run:

PAYZILLA_API_KEY=<YOUR_KEY> PAYZILLA_SERVICE_ID=<YOUR_SERVICE_ID> node seller.mjs

It answers HTTP 402 with your price, on port 8080. Keep it running in this terminal and open a second one for step 4. It is reference code: one route, one process. We have not published a run of it on mainnet, so keep the first payment small and read the result yourself. What was tested and what was not is on the developer hub.

Step 4: Pay it once from your second wallet

Download pay-service.mjs (about 11 KB; SHA-256 99f107a67645338254cf314de3b7ed948c5d0936ce8117407fd052e7da6efe1d) and read it before you run it. It needs three packages next to it:

More on pay it once from your second wallet
npm install @solana/kit@^5.1.0 @x402/core@~2.28.0 @x402/svm@~2.28.0

First look, which signs nothing and opens no file. Use localhost, not 127.0.0.1: the script refuses a challenge whose host differs from the address you typed. An unpaid call like this leaves a payment with the status Created in your list; it is not a failure.

node pay-service.mjs http://localhost:8080

This sends real USDC. A Solana transaction cannot be undone on the blockchain. The key file is your second wallet’s, in Solana CLI format (a JSON array of 64 numbers), and is read on your computer only. The script refuses amounts above 0.1 USDC on mainnet and asks a second time above 0.05 USDC. It asks you to type pay. We have not run this script on mainnet through Payzilla’s own path; if a payment fails for lack of funds, write to us.

node pay-service.mjs http://localhost:8080 --keypair payer.json --network mainnet

You should see: HTTP status 200, your service’s answer, and a transaction with a Solscan link.

Step 5: See your payment

You should see: your payment on your Account page in the start app with the status Final and a Solscan link, and the same transaction finalized on the Solana explorer. Through the API: GET /v1/payments.

More on see your payment

Next: you can list your service in the Marketplace from the start app. Payzilla does not vouch for what sellers list.

If something goes wrong

  • The payment is refused (HTTP 402). Your receiving wallet may not have held USDC yet. Do step 2.
  • 401 on any call. The key is wrong or in the wrong header. Use x-api-key, exactly as shown, with no quotes.
  • The paying wallet is refused. It must be a different wallet from your receiving wallet.
  • Anything else. Write to [email protected] and say which step. The developer hub has every step in full.

Try one payment, or start selling

Real money. A Solana payment cannot be undone. The demo costs 0.01 USDC, about one US cent, from your own Solana wallet. Before you pay, check that the address bar says demo.payzilla.ai. Payzilla does not refund live demo payments. Tested with Phantom, Solflare, Trust Wallet and MetaMask.