# sigil.bond > An advertising exchange for AI coding tools. A single sponsored line renders in > a developer's agent status bar; the developer is paid in SOL for the seconds it > was on screen. Advertisers buy over HTTP with x402 and never create an account. sigil.bond is designed to be used by agents as well as people. Both sides of the market are plain HTTP with JSON, and the advertiser side needs no signup — a `402 Payment Required` carries everything needed to pay and retry. ## What is actually sold **Rendered seconds**, not impressions. A Claude Code status-line command receives JSON on stdin, prints, and exits; it is never told when its output left the screen or whether the terminal was focused. So the only honest claim is that the line was *rendered*, and for how long — inferred from the gap to the next render, capped, and biased low at every step. Anyone selling "viewable impressions" from a status line is describing something that surface cannot measure. An interval only bills if the agent did real model work across it, proven by two monotonic counters the agent itself produces. An idle machine earns nothing and costs advertisers nothing. ## Pricing - Advertisers bid **CPRM** — micro-USD per 1,000 rendered minutes. Minimum $1.00. - Publishers receive **70%** of gross. - An advertiser's deposit is a hard ceiling. Delivery past it is given away, not billed. - Budgets may be spent as they deliver, or paced evenly across a window. - Payment is **USDC on Solana**, via x402. ## For advertisers (agent-friendly) GET /.well-known/x402 discovery document GET /v1/campaigns 402 with payment requirements POST /v1/campaigns create; X-Payment header required GET /v1/campaigns/{id} state and spend (Bearer manage key) PATCH /v1/campaigns/{id} text, bid, pacing, pause/resume/cancel POST /v1/campaigns/{id}/topup add budget; X-Payment required GET /v1/campaigns/{id}/delivery hourly spend and publisher spread Creating a campaign returns a **manage key, shown once**. Only a hash is stored and there is no recovery — sigil.bond runs no accounts, so the key is the only way back to a campaign. Creative is plain text, 72 characters maximum. Terminal control sequences are refused: the line renders inside somebody else's terminal. ## For publishers POST /v1/publishers register a wallet; free, no payment GET /v1/publishers/me balances, rendered time, liveness (Bearer token) PATCH /v1/publishers/me choose payout asset(s) POST /v1/exchange the daemon's tick-for-ad exchange (Bearer token) A wallet may hold several tokens, one per machine; issuing one never revokes another. Earnings are held against the WALLET, not the token, so a lost token is recovered by registering the same wallet again — the new token sees the existing balance. Returning operators check earnings at https://sigil.bond/#dashboard and should not repeat registration to do so. Registration is free and always will be. Sybil resistance comes from the payout floor rather than a fee: attention does not split, so a farm across N wallets earns 1/N each and none of them clear it. ## What is collected Six fields per render: publisher wallet, session id, sequence number, timestamp, ad id, and two activity counters produced by the agent. The status line itself is `printf`, `cat` and `date` — it appends bytes to a file and prints a file, and never parses the payload it is handed. No path, repository, branch, prompt, transcript or code is uploaded, and the protocol has nowhere to put them. ## Documentation - [Docs and troubleshooting](https://sigil.bond/docs): install, verify, API reference, common failures - [Advertiser console](https://sigil.bond/admin): campaigns, spend, pacing, delivery - [Terms](https://sigil.bond/legal#terms) - [Privacy](https://sigil.bond/legal#privacy) - [Disclaimer](https://sigil.bond/legal#disclaimer) - [x402 discovery](https://sigil.bond/.well-known/x402) - [$PACT token](https://sigil.bond/token) — supply, venue, fees, risks. Not minted; no contract address exists. - Announcements: https://t.me/sigilbond ## Status The exchange is live. Payouts have not yet been executed on mainnet — the rails are built and tested but no publisher has been sent SOL. Balances accrue and are honoured; nothing about that is hidden in the product. ## Notes for agents - Money crosses the wire as **decimal strings**, never JSON numbers. Amounts are integers in micro-USD (1e-6 USD) or token base units. Parse them as big integers; a float loses precision above 2^53. - Every 402 carries an `accepts` array. Choose an entry you can pay; ignore the rest. - `POST /v1/campaigns` without an `X-Payment` header is the intended way to discover the price. It is not an error. - Errors return a machine-readable `error` string, not prose.