{"openapi":"3.0.0","info":{"title":"Really SMS","version":"1.0.0","description":"Sandbox: persistent SMS phone numbers for AI agents.\n\nImportant: Your wallet address is your permanent account identity for this service. If you lose access to the wallet that paid for the subscription, you cannot recover your phone number or your remaining subscription time. Do not use ephemeral or per-session wallets. Recovery via signature requires the original wallet's private key.","contact":{"email":"support@really.com"},"x-service-info":{"categories":["communication","developer-tools"],"documentation":"https://sandbox.agentnumber.really.com/sms/llms.txt"}},"servers":[{"url":"https://sandbox.agentnumber.really.com"}],"paths":{"/sms/subscribe":{"post":{"summary":"Subscribe to a persistent phone number","description":"Pay $1000/year via x402 (USDC on Base) or MPP to acquire a persistent US phone number bound to your wallet address. Re-paying with the same wallet renews and keeps the same number. Important: Your wallet address is your permanent account identity for this service. If you lose access to the wallet that paid for the subscription, you cannot recover your phone number or your remaining subscription time. Do not use ephemeral or per-session wallets. Recovery via signature requires the original wallet's private key.","x-payment-info":{"intent":"payment","paymentMethod":"x402","amount":"1000.00","currency":"USDC","network":"base-sepolia"},"responses":{"200":{"description":"Subscription confirmed","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Bearer token for /send, /receive, /number"},"number":{"type":"string","description":"Assigned E.164 phone number"},"expires_at":{"type":"string","format":"date-time"},"renewed":{"type":"boolean","description":"true if this was a renewal of an existing subscription"}},"required":["token","number","expires_at","renewed"]}}}},"402":{"description":"Payment required — see WWW-Authenticate / X-Payment headers"}}}},"/sms/auth/nonce":{"post":{"summary":"Get a nonce for wallet-signature authentication","description":"Single-use nonce with 5-minute TTL. Sign the message 'Sign in to really.com SMS\\nNonce: <nonce>' with the wallet that owns the subscription, then POST the signature to /auth.","responses":{"200":{"description":"Nonce issued","content":{"application/json":{"schema":{"type":"object","properties":{"nonce":{"type":"string"},"expires_in":{"type":"integer","description":"Seconds until the nonce is rejected (300)"}},"required":["nonce","expires_in"]}}}}}}},"/sms/auth":{"post":{"summary":"Recover subscription access via wallet signature","description":"Verifies that `signature` is a valid EIP-191 signature of 'Sign in to really.com SMS\\nNonce: <nonce>' by `wallet`. On success, revokes all prior tokens for the wallet and issues a fresh one. Important: Your wallet address is your permanent account identity for this service. If you lose access to the wallet that paid for the subscription, you cannot recover your phone number or your remaining subscription time. Do not use ephemeral or per-session wallets. Recovery via signature requires the original wallet's private key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["wallet","nonce","signature"],"properties":{"wallet":{"type":"string","description":"0x-prefixed Ethereum address"},"nonce":{"type":"string"},"signature":{"type":"string","description":"0x-prefixed 65-byte EIP-191 signature"}}}}}},"responses":{"200":{"description":"Token rotated, recovery successful"},"401":{"description":"Invalid signature, expired nonce, or replayed nonce"},"402":{"description":"No active subscription for this wallet — subscribe first"}}}},"/sms/send":{"post":{"summary":"Send an SMS from your assigned number","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["to","body"],"properties":{"to":{"type":"string","description":"E.164 destination phone number"},"body":{"type":"string","description":"Message text"}}}}}},"responses":{"200":{"description":"Sent","content":{"application/json":{"schema":{"type":"object","properties":{"message_id":{"type":"string"},"status":{"type":"string"}}}}}},"401":{"description":"Invalid or revoked bearer token"}}}},"/sms/receive":{"get":{"summary":"Poll for inbound SMS","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Buffered inbound messages","content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}}}}}}}},"/sms/number":{"get":{"summary":"Get your assigned number and subscription details","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Number + subscription metadata","content":{"application/json":{"schema":{"type":"object","properties":{"number":{"type":"string"},"status":{"type":"string"},"subscription":{"type":"object"}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}}}