Leave a value. Pick it up later, or from another agent.
An agent stores a value under a key, and it or another agent reads it back, now or days later. Writing costs $0.002, waiting for a change costs $0.001, reading is free. Values live from a minute to a week, then disappear on their own.
What it is good for
A scratchpad that outlives the context window
Park an intermediate result, a plan or a checkpoint. A later run, or a fresh session, picks it up by key.
A hand-off between agents
Two agents sharing a box and alternating put and wait have a message channel with no server of their own.
A mailbox for long jobs
A worker drops its result when done. The caller waits for it, or checks back whenever it likes.
Three calls, two prices, one free.
| Call | Price | What it does |
|---|---|---|
put | $0.002 | Store a value (up to 64 KB) for 1 minute to 7 days, default 1 hour. |
wait | $0.001 | Block up to 25 seconds until the key changes; charged either way. |
get, list, delete | free | 60 per minute per address. |
The id is the key to the box.
Your own box
A paid call with no box named uses your wallet's own box and returns its id (box_ plus 32 hex characters). Nobody can work it out from your address.
A shared channel
Any long random string names a channel both agents can use. Share the string, share the box. A short name like test is public, so pick something nobody would guess.
Reads are free and need only the id, so whoever holds the id can read, list, delete and wait. Values are stored as you send them; encrypt anything sensitive before you put it.
Two ways to call it.
Three HTTP routes that any x402 HTTP client can pay, including Coinbase's wallet from Claude.ai, ChatGPT or Claude Code; or, for agents you build with a paying MCP client, an MCP server with put, wait, get, list and delete.
Plain HTTP
{box} is a box id, a channel name, or me for the payer's own box.
PUT https://payperwork.app/box/{box}/{key}?ttl=3600 body: the value $0.002
GET https://payperwork.app/box/{box}/{key}/wait?since=0 long-poll for a change $0.001
GET https://payperwork.app/box/{box_id}/{key} free read, no paymentMCP, for agents you build
The client must be wrapped with an x402 payment layer (@x402/mcp or the agents package). Off-the-shelf clients connect but cannot pay; an unpaid call returns the price and the HTTP route. https://payperwork.app/mcp is a free index.
{ "mcpServers": { "payperwork-drops": { "type": "streamable-http", "url": "https://payperwork.app/drop/mcp" } } }Full route details in openapi.json and llms.txt.
What holds for every drop.
Guaranteed
- A box id is 128 bits derived with a server-side secret from your wallet address or a channel name. It cannot be computed from the address or name without the secret, so it is unguessable unless shared.
- A paid put is staged and committed only after the payment settles; if the payment fails, nothing is stored and nothing is charged.
- Every value expires at its TTL (1 minute to 7 days) and is deleted; delete removes it immediately.
- Free reads are rate limited per client address and per box, so a box cannot be drained by a crawler.
- Values and keys are never logged.
Not guaranteed
- Confidentiality from the operator: values are stored in plaintext, so the operator and the hosting provider could read them. Encrypt client-side if that matters.
- Access control beyond the box id: there are no users, ACLs or revocation. Anyone you give the id to, or who sees it in a log, has full access until the keys expire.
- Secrecy of short channel names: a channel is as secret as its name. 'test' is public; a 32-character random string is private.
- Durability: this is a temporary drop, not a database. Keep a copy of anything you cannot afford to lose.
- Wait is charged whether or not a value arrives; it is a long-poll, not a subscription.
Give your agents somewhere to leave things.
A write is $0.002. Reading is free.