Halaman ini hanya tersedia dalam bahasa Inggris.

Pay with a wallet (x402)

Where the deployment enables it, you can call Aile with no account and no API key. Send the request with no Authorization header. Aile answers 402 with the exact price and the sharer being paid, once per network it accepts: Solana, and Base where the deployment enables it. Sign a USDC payment for that amount on either chain and send the same request again with a PAYMENT-SIGNATURE header. This is x402, and any x402 client (@x402/fetch, x402-axios, agentcash) does the signing for you. The same 402 can also be paid with MPP where that is enabled.

Texttext
1POST /v1/images/generations no Authorization header
2 ← 402 + PAYMENT-REQUIRED price, USDC mint, payTo, feePayer, request schema
3POST /v1/images/generations PAYMENT-SIGNATURE: <signed>
4 → 200 + PAYMENT-RESPONSE the image, and the settled transaction

The money goes straight to the sharer who serves the call. Aile takes no cut on this path and never holds the payment.

What you can buy

EndpointPriced perNotes
/v1/chat/completions, /v1/messages, /v1/responsestokenQuoted against your max_tokens
/v1/images/generations, /v1/images, /v1/images/editsimageUp to 4 per request (1 on cloudflare-ai); base64 answer. An openai/gpt-image-* edit adds a fixed worst-case price per input image to each image
/v1/audio/speech1,000 characters (1,000 UTF-8 bytes on Fish Audio models)Buffered; stream_format: "sse" works, audio streaming needs a key
/v1/audio/transcriptions, /v1/audio/translationsminute of audioPriced on the file's measured length; up to 10 minutes
/v1/searchquery of up to 10 results
/v1/scrapewebpageOne page, at the render price where the model prices one; on Firecrawl, name max_pdf_pages to parse a PDF, and you pay for that many
/v1/rerank, /v2/reranksearch (up to 100 document chunks)Quoted at a ceiling: a document counts once per (500 − query bytes) of its bytes (an object at its JSON). You pay the ceiling in full; a query over 400 UTF-8 bytes is a 400
/v1/moderationsinput
/v1/ocrpageName pages for a PDF
/v1/music/generationstrackOne-shot models such as Lyria
/v1/videos, /v1/videos/generationssecondCharged when the render starts, refunded if it fails; poll with no key

Keyless chat and the media endpoints are separate deployment settings. GET https://api.aile.sh/x402/discovery lists exactly which endpoints take a wallet payment right now. Embeddings, decisions, music render jobs (Suno), gemini/lyria-3.5, cloudflare-ai/@cf/black-forest-labs/flux-2-dev, gemini/gemini-3-pro-image, gemini/gemini-nano-banana-2.1, FLUX.3 Image, Hy Image 3.5 Preview and Nano Banana 2.1 on OpenRouter, and Seedream 4.5, 5.0 Lite and 5.0 Pro on OpenRouter, BytePlus and NanoGPT, need an API key.

Example: one image

cURLcurl
1# 1. Ask. No credential.
2curl -si https://api.aile.sh/v1/images/generations \
3-H "Content-Type: application/json" \
4-d '{ "model": "openrouter/black-forest-labs/flux.2-pro", "prompt": "a lighthouse at dusk" }'
5# -> 402. accepts[0] has amount (micro-USDC), asset, payTo and extra.feePayer.
6
7# 2. Sign that transfer, base64 it, and resend the same body.
8curl -si https://api.aile.sh/v1/images/generations \
9-H "Content-Type: application/json" \
10-H "PAYMENT-SIGNATURE: $SIGNED" \
11-d '{ "model": "openrouter/black-forest-labs/flux.2-pro", "prompt": "a lighthouse at dusk" }'
12# -> 200 with data[0].b64_json, plus PAYMENT-RESPONSE.

Every 402 carries extensions.bazaar with the request schema for that endpoint, so an agent can build the paid call from the challenge alone. Each required field has an example, and the example request earns a real 402; a large example (the sample audio on transcription) is left out of the 402 to keep its headers small, and is in full in /openapi.json.

Solana or Base

accepts[0] is always Solana: a USDC transfer built around the extra.feePayer it names. Where the deployment enables Base, a second entry on eip155:8453 pays the same amount to the sharer's Base address, when the sharer has one: sign an EIP-3009 transferWithAuthorization for Base USDC. There is no fee payer on Base; the facilitator pays the gas. Register both schemes and the client pays on whichever chain holds your USDC:

TypeScriptts
1import { ExactEvmScheme } from "@x402/evm/exact/client";
2
3client.register("eip155:*", new ExactEvmScheme(evmSigner));

The PAYMENT-RESPONSE receipt names the network the payment settled on.

Paying with MPP instead

Where the deployment enables it, every priced 402 also speaks MPP, the "Payment" HTTP auth scheme. Beside the unchanged x402 document it carries WWW-Authenticate: Payment challenges, one per method that can pay this call, at the same price to the same sharer. Several challenges share one comma-separated header line. Each is intent="charge" and expires after 120 seconds. The JSON body also gains the problem fields type, title, status and detail.

MethodWhat you signOffered when
evmAn EIP-3009 authorization for USDC on Base, whose nonce is bound to the challenge. The facilitator settles it.The deployment enables Base and the sharer has a Base address
solanaA USDC transfer to the sharer, sent unbroadcast. Aile's sponsor is the fee payer: it co-signs and broadcasts once your answer is ready.Aile's sponsor is funded and the sharer's USDC account exists
tempoA stablecoin transfer on Tempo to the sharer's EVM address (USDC.e on mainnet). Aile pays the fee, co-signs and broadcasts.The deployment runs a Tempo fee payer. Not on video or use_agent_tool

An MPP client (mppx for EVM and Tempo, @solana/pay-kit for Solana) answers with Authorization: Payment <credential>, which is never read as an API key. A chat request made with an API key is offered header="Payment-Authorization" instead: send the credential in Payment-Authorization and keep your key in Authorization.

TypeScriptts
1import { Mppx, evm } from "mppx/client";
2
3const mppx = Mppx.create({ methods: [evm({ account })], polyfill: false });
4const res = await mppx.fetch("https://api.aile.sh/v1/images/generations", { method: "POST", body });

A settled payment comes back with a Payment-Receipt header and Cache-Control: private, never PAYMENT-RESPONSE. The receipt is base64url JSON naming the method, the challengeId, the transaction as reference, and a status, timestamp and chainId. A settlement that failed or could not be confirmed carries no receipt. On the media endpoints a refused settlement is a 402 with a fresh challenge.

Everything else is x402's: the payment goes straight to the sharer with no platform cut, a credential is single-use, and the answer is buffered, never streamed.

When you are charged

  • Only for what you get. The payment settles after the answer is ready and before it is sent. If the sharer fails, or returns fewer images than you paid for, nothing settles and you get an error saying you were not charged. Two surfaces charge the quote as named: a transcription is priced on the length Aile measured, and a scrape on the page cap you chose. If the provider measures the audio more than 2% + 1 second longer than the file's header said, the transcript is withheld with a 400 and nothing settles. Video is the exception, below.
  • No failover. A signed payment names one sharer at one price, so a failed call is not retried elsewhere. Sign a new payment to try again.
  • A signed payment is single-use. Re-sending the same PAYMENT-SIGNATURE after a call is refused. A Solana payment also expires about a minute after you sign it.

Video: paid up front, refunded on failure

A render takes minutes, longer than a signed payment lives, so a video is charged when the provider accepts the job. Poll GET /v1/videos/{id} with no key. If the render fails or expires, the payment goes back to the wallet that paid, on the chain it paid on, and the job's status shows refund: { state, transaction } until it lands. Base is offered for video only where the deployment can send that refund on Base, and MPP's tempo method is not offered for video.

Limits

  • One call costs at most $5.00 without an account.
  • Wallet calls are rate-limited per IP: 30 a minute carrying a payment, and 300 a minute without one (those only fetch a 402). Per paying wallet, two run at a time.
  • Very small quotes, such as a short speech clip, can fall under the facilitator's minimum (about $0.0008 on Solana, $0.0011 on Base). The 402 then has no accepts entry and says so; use an API key.
  • Wallet calls reach self-hosted sharers and sharers selling through a provider API key only, never a sharer's subscription or sign-in account (Claude Code, Codex and the like). A refusal naming an API key means the model you asked for is only served that way.

Over MCP

The same purchases are MCP tools on https://api.aile.sh/mcp: use_model (one chat call), generate_image, edit_image, text_to_speech, transcribe_audio, generate_music, web_search, scrape_url, generate_video with get_video, and find_models to see what is for sale. Another agent's tool is find_agent_tools, then use_agent_tool. A session with no key sees use_model and the two agent-tool tools where the deployment enables keyless chat, and the media tools where it enables keyless media.

With no key, the first call returns the 402 document as a tool result (isError, the document in structuredContent). Sign it and call the tool again with the PaymentPayload in _meta["x402/payment"]; images and audio come back as content blocks and the receipt in _meta["x402/payment-response"]. An MPP client finds the same challenges in _meta["org.paymentauth/payment-required"] on that result, pays with _meta["org.paymentauth/credential"], and gets _meta["org.paymentauth/receipt"] back. use_agent_tool takes an evm or solana credential; tempo is not offered there, and an unpaid call gets its challenge before the sharer is contacted. See Call via MCP.

Finding it without asking

  • GET https://api.aile.sh/x402/discovery (also /.well-known/x402): what is payable now, on which network, in which asset.
  • GET https://api.aile.sh/openapi.json: the payable routes with their schemas and price bands. Where MPP is enabled, each payable operation's x-payment-info.protocols lists an mpp entry (method, intent, currency) beside x402 for every method that can settle right now, and /x402/discovery carries an mpp block. A method that is off is never listed.
  • GET https://api.aile.sh/v1/models?x402=keyless: the models a wallet can buy right now, each with pricing (its list price, the most a call can cost; the sharer you get may charge less).

Older clients that send X-PAYMENT and read X-PAYMENT-RESPONSE (x402 v1) work too; Aile answers in whichever version you used.