Skip to main content

Pricing & payTo

Pricing

Each service is priced per call in USDC, as a decimal string:

{ "priceUSDC": "0.01" }
  • USDC has 6 decimals, so "0.01" = 10000 base units in your 402 challenge.
  • Price whatever the call is worth — micropayments (fractions of a cent) up to a few cents are typical.
  • The advertised price must equal the amount in your 402 challenge. Agents compare them; a mismatch breaks trust and can fail the call.

payTo — where the USDC lands

payTo is the recipient address for your service's payments. It is not part of a service entry — it's attached to your provider at ingestion, in one of two ways:

Set payTo on your provider entry. This overrides any derived address and guarantees your listing advertises the exact address your 402 endpoint settles to:

{
"id": "acme-data",
"name": "Acme Data",
"payTo": "0xYourRecipientAddress",
"services": [ ]
}

Use this whenever your endpoint already settles to a known address — it keeps the advertised payTo and the authoritative 402 challenge in lock-step.

Option B — derived

If you omit payTo, the platform derives a stable recipient address for your provider at ingestion. Your 402 endpoint must then settle to that address.

:::warning Keep them in sync The single most common listing bug is a payTo mismatch: the marketplace advertises one recipient while your 402 challenge names another. Pin payTo (Option A) to your real settlement address to avoid it. :::

Checklist

  • priceUSDC is a plain decimal string ("0.01"), no symbols.
  • The 402 maxAmountRequired equals priceUSDC in base units (×10⁶).
  • asset is USDC on XDC (see Constants).
  • payTo in the listing == payTo in the 402 challenge == where you actually receive USDC.

Next: Submit your listing →