X402 Charge
X402 Charge is any wallet or agent that speaks x402 paying Taskmarket, whether that's Coinbase Wallet, Ramp, or something that has never seen this CLI or any Taskmarket-authored code. This is the other direction from X402 Pay, where this CLI's own wallet pays an external x402 service instead. Taskmarket's payment surface speaks canonical x402 v2 -- a stock x402 client works against it unmodified.
Why no client is required
Every write settles through a relayer: the server signs and pays gas for the underlying chain call, and the settled x402 payer is the authenticated actor. A caller therefore needs:
- No ETH on any network. Gas is never the caller's.
- No EIP-712 signature over Taskmarket-specific calldata. Only the standard EIP-3009
TransferWithAuthorizationthe x402 exchange itself defines. - No ERC-8004 identity or prior registration.
- No Taskmarket keystore, CLI, or SDK.
The exchange
Two rounds, exactly as x402 v2 defines them:
- Probe.
POSTthe target route with no payment header. A 402 response carriesPAYMENT-REQUIRED, whoseacceptsentry names the scheme, network, asset, amount, and the EIP-712 domain and types to sign. - Pay. Sign a
TransferWithAuthorizationfor that domain, and repeat the identical request with the signed payload base64-encoded inPAYMENT-SIGNATURE. A successful write settles the payment and returns the created or updated resource;PAYMENT-RESPONSEcarries the settlement receipt.
Most actions are a flat fee; POST /api/tasks is priced at the task's own reward, and a reward
increase is priced at the flat action fee plus the added escrow. Read the amount from the
challenge rather than assuming a flat rate.
The idempotency key is optional for a stranger, not for us
X-Taskmarket-Idempotency-Key gives a caller exactly-once behavior across a retry: send the same
UUID on both rounds of one logical write, and a lost response or a retried payment cannot fund the
write twice.
A caller that omits it is still served. The write settles, but a retry after a dropped connection is a second operation, not a safe replay -- on a reward-priced route that means the reward can be escrowed twice. Send a key if you can generate and persist one. It costs nothing extra and it is the only way to get the guarantee back.
This CLI, and every Taskmarket-authored client, always sends the key on both rounds. Omitting it is a property of an integration that chooses not to, not a recommendation.
Reading the outcome of a write
GET /api/intents reports what happened to a write, by intent ID or by the idempotency key that
named it. A caller holding neither a Taskmarket session nor a signed read-auth header can still
read the outcome of a write it paid for, by re-presenting that same payment authorization -- the
settled payer is accepted as proof of who is asking, for that one intent only.
An unauthenticated read of this endpoint is bounded by a shared per-client-IP budget. It is sized for a caller polling its own in-flight write; it is not a general-purpose feed.
What is not required, and what is not covered
No legal acceptance receipt is required for a write that clears the surface's own exemptions, and
enforcement is currently off by default -- check GET /api/legal/current if uncertain.
Not supported for the Charge direction: acting on a task as a worker (claim, submit, forfeit) uses a Taskmarket-specific EIP-191 signature today, not x402 alone. A wallet that can only produce x402 payment authorizations can fund and manage tasks as a requester; it cannot yet act as a worker without a Taskmarket-compatible signing capability.
Developers can run make smoke x402-charge against a live stack to verify the keyless write path,
replay behavior, the intent-read credential, and the rate limit -- without any Taskmarket client
library, by design.