# DeadDrop > One-time secret sharing API. POST an encrypted secret, get a link that > self-destructs after a single read. Zero-knowledge: the server stores only > ciphertext; the AES-256-GCM key rides in the URL fragment and never reaches > the server. No accounts, no API keys - machines pay per call in USDC on > Base via the x402 protocol (HTTP 402). Base URL: https://deaddrop.jerrywrongalot.workers.dev ## Paid endpoint ($0.01 in USDC per call, x402 "exact" scheme, network "base") POST /secret - Request body: {"ciphertext": "", "ttlSeconds": 86400} - ciphertext max 90000 chars; ttlSeconds optional (default 86400, max 604800). - Unpaid response: HTTP 402 with an x402 challenge in the body ("accepts"). Any x402 client (e.g. x402-fetch) handles it: sign the EIP-3009 authorization for the challenge amount and retry with the X-PAYMENT header. The payer needs USDC on Base but no ETH (gasless for the payer). - Paid response: 201 {"id", "expiresAt", "revealPath"} plus an X-PAYMENT-RESPONSE receipt header (base64 JSON, on-chain tx). - Share as: https://deaddrop.jerrywrongalot.workers.dev/s/# - keep the fragment client-side; whoever holds the full link can read the secret once. ## Free endpoints (recipients need no wallet) - GET /s/:id - metadata (JSON) or the human reveal page (HTML). NEVER consumes the secret, so link previews cannot burn it. - POST /s/:id/reveal - returns {"ciphertext"} exactly once, then the secret is destroyed. 404 when already read or expired. - GET / - service description (JSON for non-HTML clients). - GET /healthz - health check. ## Notes for agents - Decrypt client-side: base64url-decode, first 12 bytes are the AES-GCM IV, the rest is ciphertext; the key is the link fragment. - Rate limit: 30 requests per 60 s per IP on the secret routes. - Nothing is charged unless the secret is stored (verify-before-work, settle-after-success). - Security policy: https://deaddrop.jerrywrongalot.workers.dev/.well-known/security.txt