Per-request data sales can skip vendor accounts and prepaid credits. Verify scoped access and recover lost responses without charging agents twice.
An agent assembling a logistics report needs one regional data lookup. Your API has the answer, but access requires creating an account, obtaining a key and loading a credit balance. That process may suit a continuing customer. For a single lookup, it asks the buyer to establish a billing relationship before discovering whether your data is useful.
You can sell eligible API access per request instead: publish a bounded paid resource, communicate payment requirements to a compatible client, validate the required payment evidence, and let your resource server authorize the operation. The buyer need not create a vendor account or maintain prepaid credits with you. It still needs payment authority, a supported payment method and permission to use the data.
The harder design question comes after removing signup. What exactly did the agent buy, and what happens if it pays but never receives the response? A useful accountless API must answer both.
Define the Data Purchase Before the Payment
Start with the result, not the payment button. In a hypothetical service, one purchase might return the latest available hourly logistics dataset for one region. The offer should specify the region, dataset version or freshness rule, response format, maximum response size and permitted use. A successful purchase is then recognizable to the buyer and enforceable by the seller.
"One API call" is too ambiguous on its own. Does it mean an HTTP attempt, an accepted query, a completed computation or a delivered result? An agent may send several HTTP requests to complete one purchase because payment negotiation and retries are separate from data delivery. Charging every network attempt makes an ordinary timeout an unexpected second purchase.
For a read-only dataset, a bounded result is often easier to reason about than a metered attempt. Define what counts as a valid empty answer, what happens when the requested region is unsupported, and how old the data may be. Reject malformed or unsupported inputs before committing funds where the payment lifecycle allows it. If an empty result is still chargeable, disclose that rule rather than leaving the client to infer it from a successful HTTP response.
Keep the data contract available before payment. An agent needs enough information to decide whether the result answers its task: a schema, input constraints, example output without paid content, and license terms. Payment negotiation communicates the charge; it does not automatically communicate whether the dataset permits redistribution, training or commercial use. These restrictions belong in the offer and the resource policy.
There are also APIs where money cannot be the only admission condition. Access to a customer's private records may require authorization from that customer. A restricted dataset may require a license or an identified counterparty. Receiving payment does not establish either permission. Such services can use per-request billing while retaining authentication or an eligibility check; they should not advertise unrestricted accountless access.
The strongest starting point is therefore a public-to-purchase, read-only resource with bounded inputs and a clear result promise. You can remove the vendor billing account from that transaction without pretending the resource has no access policy.
Choose the Exchange the Buyer Can Actually Complete
HTTP 402 Payment Required can tell a client that payment is necessary. It does not, by itself, specify compatible payment messages, wallet support, verification rules or the order in which funds and work move. Those details come from the protocol, payment scheme and implementation profile you choose.
x402 is an open payment standard, not a synonym for GOAT Flow. The current x402 v2 specification distinguishes payment flows. In its default authorization flow, the server verifies payment authorization, executes the resource, settles payment, then responds. Other flows can commit funds before execution. This matters because valid authorization is not the same as settled funds, and execution before settlement creates a different supplier exposure from payment before execution. The distinction is explicit in the x402 payment-flow models.
Select an exchange supported by your actual client and server libraries. A protocol specification can describe a flow that a particular installed package does not implement. If a buyer cannot interpret a requested flow or use its asset-transfer method, it should reject that option rather than attempt an improvised transfer. A familiar token symbol is not sufficient: the network, asset contract, recipient and amount must all match the selected terms.
Machine Payments Protocol, or MPP, is a separate open protocol. Its standard HTTP exchange uses a server challenge, a client payment credential on a retried resource request, and an optional receipt with the resource response. That terminology should not be collapsed into x402's message contract.
GOAT Flow's current MPP integration profile introduces another important distinction. It uses JSON challenge and verify endpoints, a buyer-authorized direct ERC-20 transfer, and a signed receipt that the buyer later presents to the protected resource. Its wire messages and receipt extension are GOAT-specific. A generic MPP client or an arbitrary x402 client is not automatically compatible with that profile.
Choose on execution order and client support, not the presence of "402" in a product description. If funds move before data is served, you need a plan for paid-but-undelivered requests. If the resource executes against payment authorization before settlement, you need to understand settlement failure and avoid treating a preliminary verification response as final payment. Neither arrangement eliminates the application contract between buyer and seller.
Put Payment Evidence at the Resource Boundary
GOAT Flow provides a documented example of how a buyer can pay without receiving your merchant credentials. In its current paid-route profile, the buyer uses a wallet signer and chain RPC. The merchant separately configures an enabled paid route and receiving address. Merchant setup still involves an authenticated operational relationship; accountless here describes the buyer's resource access, not the merchant's onboarding.
The sequence is concrete. The buyer requests a challenge for the merchant and route. A successful challenge request returns HTTP 402 with authoritative transfer terms, including the exact amount, chain, token contract, recipient and expiry. The buyer transfers that ERC-20 amount directly to the merchant's receiving address. GOAT Flow observes and verifies the transfer, then issues its signed Payment-Receipt. Funds do not pass through GOAT Flow in this DIRECT model.
The buyer next calls your data endpoint with that receipt. This is a separate protected request, not proof that the data has already been served. Your resource server validates the receipt before continuing to the handler. The GOAT Flow MPP integration profile documents this lifecycle and explicitly distinguishes it from generic MPP interoperability.
The supplied receipt middleware checks the signature, merchant audience, configured canonical route scope and expiry. If a receipt-ID store is configured, it also rejects a receipt that has already been consumed. An Ed25519 public key or an HMAC secret establishes which issuer evidence your server accepts. Merely decoding the receipt, recognizing its three segments or finding a transaction hash does not validate it.
Install that enforcement where the paid data becomes accessible. A check at a landing page is ineffective if an unprotected origin URL or alternate API path serves the same content. Treat cache behavior and logging as part of the resource boundary: shared caches must not expose one buyer's protected response, and logs should not retain reusable receipt headers or private keys.
For single-use receipts across several service replicas, use a shared atomic consumption store. Two servers must not both approve the same unused receipt after independent local checks. An in-memory store may help in a single-process test, but it cannot coordinate a fleet. The documented middleware returns 503 when its receipt store is unavailable; keeping the resource closed is preferable to silently disabling replay enforcement.
Availability remains deployment-specific. Confirm that the merchant is enabled in DIRECT mode, Paid API Routes is active, and the intended chain/token has a receiving address. Use the active portal, manifest and challenge rather than a copied network list. The middleware is documented as source-distributed; a package name in the repository is not confirmation that a public registry installation works.
A Paid Route Is Not a License for Every Query
A receipt for a configured route tells the server something important about paid access. It does not automatically prove that every input sent to that route was purchased.
Consider the hypothetical logistics lookup again. A single-region, latest-hour query and a five-year, all-region export could share an HTTP path. If the payment gate checks only that path, the buyer may obtain a much larger operation for the smaller operation's price. The same problem applies to a POST body that changes after payment, an output-size parameter, or a pagination cursor that reaches additional data.
Make the purchased scope enforceable. A simple fixed-price route can accept only a small, explicitly bounded family of inputs. A richer service may need an immutable purchase specification stored server-side before payment, with the eventual receipt associated with that specification. Alternatively, use a protocol/profile that supports the necessary authenticated request binding. These are application design choices; do not assume a route identifier alone binds arbitrary query strings and request bodies.
Canonicalization needs special care. Define how the application treats duplicate parameters, omitted defaults, URL encoding, body serialization and dataset versions. Comparing a raw URL in one place and normalized inputs in another can produce different meanings for the same purchase. The receipt middleware's configured canonical-route check is a useful admission boundary, but the seller still needs exact scope checks for the actual data operation.
GOAT Flow's merchant guide also notes that the current profile receipt does not carry route_pricing_version. Core binds pricing to the challenge/order. Resource middleware cannot independently read that version from a field the receipt lacks. Keep the challenge's charge authoritative and do not infer a dynamic pricing or arbitrary-query entitlement feature from the signed receipt.
A digest is useful for detecting whether inputs differ only when the system binds it to trusted evidence or trusted server state. An unsigned hash labeled "signature" is not a cryptographic signature and does not establish who approved an order. Use the actual signed profile receipt for its documented purpose, and separately enforce the data purchase specification.
Identity is another boundary. A wallet address associated with a payment is not proof of a legal identity, a customer's consent or the agent operator's license. Conversely, removing supplier accounts does not prohibit authorization. Your application can require an additional scoped credential or proof of wallet control without creating a credit balance. That requirement should be disclosed before payment, particularly for data with buyer-specific permissions.
Receipt possession also deserves protection. Unless the resource adds another check, anyone who obtains valid transferable request evidence may try to redeem it. Use secure transport, avoid exposing credentials in URLs and telemetry, and define whether recovery requires fresh proof of control of the original payer wallet. A payment gate should not accidentally become a data-sharing mechanism for whoever copies a header first.
Recover the Payment Before Asking for Another One
Payment failures fall into different states. If the wallet rejects the action before a transfer is broadcast, the buyer has not completed that transfer. If a transaction hash exists and verification times out, the transfer may already be on-chain. The second situation needs reconciliation, not another charge.
In GOAT Flow's profile, the client should capture the broadcast transaction hash and proceed to verification rather than wait for a slow local RPC confirmation first. The challenge has an expiry, and unnecessary waiting can consume that window. Verify can return 202 while finality is pending or 429 when rate-limited; clients should honor the documented retry guidance. A 200 verification response must include the profile receipt before the client treats it as usable resource evidence.
When a post-broadcast SDK error carries recoverable context, retain the original challenge, transaction hash and payer context and resume verification with them. Starting another payment can create another direct transfer. The current CLI documentation does not provide a resume-verification command, so simply rerunning its payment command is not a recovery procedure.
Preserve this state durably enough for the client's failure model. Keeping it only in an agent's conversational memory or a process-local variable may lose it on restart. Store necessary reconciliation identifiers securely, but avoid putting wallet keys or receipt credentials into general analytics. An operational log should help determine whether money moved without becoming a credential distribution channel.
Recovery still has boundaries. An expired challenge or terminal rejection is not fixed by an endless retry loop. A pending or transient response warrants bounded backoff; terminal failure needs reconciliation and an explicit support or application policy. Do not respond to every error by requesting a fresh challenge, and do not describe eventual receipt issuance as guaranteed.
Keep payment verification distinct from data execution. Until the buyer has acceptable resource evidence, it cannot assume the data server has admitted or completed the query. Once it does, a different class of failure begins.
Preserve the Result After a Receipt Is Consumed
Suppose your server validates a single-use receipt, consumes its ID and generates the dataset response. The connection then drops before the buyer receives the body. The buyer retries with the same receipt, but replay protection rejects it. Payment was valid, replay defense worked, and the purchased result is still missing from the buyer's perspective.
Relaxing receipt consumption indiscriminately creates a different problem: repeated requests may trigger repeated expensive work or serve multiple purchases for one payment. You need application recovery that distinguishes retrieving the original result from buying a new result.
One possible design is a durable request journal. Agree an application purchase identifier before payment, bind it to the bounded request specification, then associate verified payment evidence with that record. The association must be verifiable through an immutable resource identifier, supported authenticated request binding or a trusted server-side mapping. An arbitrary purchase ID attached by the client after payment is not enough. The current Flow receipt does not automatically carry your application's purchase ID or an arbitrary input digest; integration must establish that relationship, or restrict the route to fixed, enforceable scope. Track whether execution is pending, running, completed or failed. Store the completed result, or a durable reference to the exact result, for a disclosed recovery window. This is merchant application architecture, not a built-in delivery feature of GOAT Flow's middleware.
For the hypothetical logistics API, a recovery request should retrieve the dataset version purchased by the original operation. It should not silently run a newer hourly lookup and charge again. If your offer promises "latest at execution," record which version execution selected. That makes recovery meaningful even after the underlying dataset changes.
Coordinate concurrent attempts. A uniqueness constraint or atomic claim on the application operation can ensure that two requests do not both start the same upstream computation. A second caller should receive a defined pending response or access the existing completed result, rather than trigger duplicate work. Receipt replay state and application execution state must agree about which purchase was admitted.
The supplied middleware's single-use check runs before the protected handler; a handler-only journal cannot recover a retry that middleware already rejects. A merchant must deliberately implement a separate recovery path or custom integration that preserves receipt enforcement while consulting purchase state. Authenticate that path, for example through fresh proof of control of the payer wallet associated with the purchase. An opaque purchase ID alone should not reveal protected data. No supplier signup is needed merely to retain server-side operation records.
This design requires care around the crash window between consuming a receipt and creating or updating the application record. Do not claim exactly-once execution because two unrelated stores each have an atomic operation. Persist enough correlation to reconcile an admitted receipt with its purchase, define the order of state changes, and test interruptions between them. Expensive or side-effecting upstream operations may need their own idempotency support.
An upstream failure needs an explicit policy too. Before requesting payment, check input validity and readily observable service availability. After payment, a failed upstream lookup may require a retry of the same operation, support handling or another disclosed remedy. Direct payment and receipt verification do not provide automatic refunds, escrow or a guarantee that the data is correct. Give buyers a machine-readable status and a support reference instead of treating "receipt consumed" as "customer served."
Price the Whole Operation, Not Only the Data
No prepaid vendor credits does not mean no funding. A buyer using the DIRECT ERC-20 profile needs the payment token and the native asset required for transaction gas, along with a compatible wallet and RPC access. Those are not balances held in your API's credit ledger, but they remain prerequisites for buying.
Evaluate the cost of producing and delivering one bounded result. Include upstream data licensing, compute, verification dependencies, storage for recoverable results, bandwidth and support for ambiguous transactions. Also consider the buyer's transaction expense and time waiting for usable payment evidence. Removing signup can improve a one-off purchase experience without making every tiny request economical.
For illustration only, suppose a result contributes half a cent before payment overhead and a buyer incurs one cent in transaction expense. That expense is twice the hypothetical contribution. These are not live network fees; the arithmetic shows why an endpoint with a tiny useful unit may need a larger bounded unit instead. A short batch of related lookups can still be a per-request purchase if its price and scope are explicit.
Measure the actual environment before promising cheap or fast access. A slow RPC, delayed finality, rate-limited verifier or unavailable upstream provider can determine the user experience even when the API handler itself is fast. Decide whether the agent's task can tolerate those dependencies. For a latency-sensitive lookup, a technically valid payment rail may be the wrong commercial interface.
Existing account billing may remain better for continuing customers, negotiated licenses, long-running jobs or large variable workloads. You can retain it alongside an accountless path for smaller bounded requests. The aim is to make a one-off purchase possible, not to abolish every relationship between the seller and its customers.
Finally, verify that you have the right to sell the data and that the offered use matches its license and privacy constraints. Payment records do not resolve those questions. Restricted content needs its own access review, regardless of how efficiently an agent can pay.
Open One Route With a Recovery Policy
Begin with one bounded, read-only operation whose result you can retain. Define its inputs, charge, successful output and recovery window before exposing it to automated buyers. Confirm the selected client can complete the exact payment profile and that your server rejects unpaid or out-of-scope access.
A useful pilot should exercise more than the happy path. Try a wrong-route receipt, an expired receipt and simultaneous reuse across replicas. Interrupt verification after broadcast, then resume with the original transaction context. Interrupt delivery after receipt consumption, restart the relevant process and recover the same purchased result without another transfer. These are acceptance tests to perform, not outcomes established by documentation.
For a compatible direct-transfer pilot, evaluate paid API access through GOAT Flow against that operation and recovery policy. Confirm the merchant's active route capability and asset configuration before relying on it; payment middleware does not supply your data handler or result journal.
Retain a deployment record of what passed, what stayed pending and what required intervention. If the service cannot reliably distinguish a new purchase from recovery of an old one, keep the paid route closed while resolving that gap. If transaction overhead or license requirements make the bounded unit unsuitable, retain account billing or choose a different purchase unit. Removing signup is valuable when the buyer can purchase, receive and recover the promised result with fewer steps, not when a failed request merely reaches the payment screen faster.
FAQ
Does funding an agent wallet count as prepaid API credits?
Not in the vendor-credit sense. Wallet assets can fund compatible purchases, whereas vendor credits are a balance held for spending within a particular service. The agent still needs adequate funds and spending authorization; eliminating your credit ledger does not make payment unfunded.
Can an existing API-key service also offer accountless paid requests?
Yes, as an application design choice. Keep the existing authenticated billing path and add a separately enforced paid-resource path for eligible operations. Prevent either path from bypassing the other's data restrictions, and make the charge and entitlement rules unambiguous. A payment protocol does not migrate those policies automatically.



