# Offbook > Invite-only desk for domain names, DNS, and virtual servers. > Humans use the website. Programs use an API key against the same dollar credit. Fund the account with crypto: USDC (Solana, Base, Ethereum), native ETH (Base, Ethereum), BTC, or ZEC. Credit posts in USD after confirmation — USDC counts 1:1, other coins at the fill price. Purchases debit that credit. Short credit is refused — nothing is bought. No KYC and no activity logs. An account is an email, a password, and an invite. Registrations carry our name, not the account holder's. This file is the contract for agents. The public homepage does not document the API. ## Site - [Home](/): product - [Pricing](/pricing/): shelf prices for names, servers and DNS - [Domain endings](/tld/): all 388 TLDs, each with a page at `/tld//` carrying its yearly price, max term and DNSSEC support - [Endings by group](/tld/for/countries/): the catalog split into 15 groups under `/tld/for//` — countries, places, tech, trades, business, finance, health, food, shops, creative, community, sport, informal, education, generic - [API overview](/domain-api/): the human-readable summary of this file - [Questions](/faq/): what is and is not collected - [Sign in](/): use the Sign in control on the home page - [This file](/llms.txt): machine instructions Those pages are static HTML and safe to read. Everything under `/v1` is the API and needs a key — read this file rather than scraping the desk. ## Auth Mint a key while signed in (Keys in the desk). Send it on every call: Authorization: Bearer Cookie sessions are for the human desk only. Do not scrape the UI. ## Money - GET /v1/wallet — `{ balanceUsd, markup, role }` - GET /v1/deposit — `{ channels: [{ family, address, assets, networks }], minUsd }`. One address per family: `solana` (USDC), `evm` (one address valid on Base/Ethereum/Robinhood for USDC and ETH), `btc`, `zec`. A network with `auto:true` is credited automatically; `manual` networks (Robinhood, Zcash) are credited by the operator on confirmation. - GET /v1/ledger — credit and debit rows. Balance is the sum of rows. Quote before a paid call: POST /v1/quote { "method": "register-domain", "params": { "domain": "example.com", "years": 1 } } The `priceUsd` in the quote is what will be debited (whole-dollar shelf pricing). If credit is short, paid calls return **402**. Paid methods: register-domain, renew-domain, add-server, renew-server, add-vpn, renew-vpn. DNS is not billed. ## Names GET /v1/find?q= → { domains: [{ name, status, priceUsd }] } GET /v1/domains POST /v1/domains { "domain": "example.com", "years": 1 } GET /v1/domains/:name GET /v1/domains/:name/dns POST /v1/domains/:name/dns { "type", "name", "content", "ttl" } PATCH /v1/domains/:name/dns/:id DELETE /v1/domains/:name/dns/:id Search first. Buy only if status is available. Registration can take a while — wait for the JSON response. ## Servers GET /v1/server-types GET /v1/server-images GET /v1/servers POST /v1/servers { "name", "type", "os", "months"? , "ssh_key"? } GET /v1/servers/:id GET /v1/servers/:id/ssh POST /v1/servers/:id/action { "action": "start"|"stop"|"restart"|"reset"|"renew"|"remove" } `type` is `vps15` … `vps90` (1–6 cores). If you omit `ssh_key`, we mint an ed25519 pair and return `ssh.privateKey` once. Re-download with GET …/ssh if we stored it. Provisioning is not instant. Poll GET /v1/servers/:id until `ips` is set. ## Escape hatch POST /v1/rpc { "method": "", "params": { } } Same billing rules. Same auth. ## Errors - 401 AUTH — missing or bad key - 402 NO_CREDIT — fund USDC, then retry - 403 — invite required, or forbidden - 404 — not yours or not found JSON shape: `{ "ok": false, "error": "...", "code": "..." }` ## Rules Send only the asset an address lists. Wrong-asset or shielded (ZEC) sends are not credited. Do not put private keys or API keys in chat, issues, or this file. Invite-only until the operator opens public signup.