{"openapi":"3.1.0","info":{"title":"Registrar Domains API","version":"0.4.0","description":"REST mirror of the MCP tools at /mcp (bearer API key). Live prices in EUR before VAT, first year and renewal. Registration needs a bearer API key and answers an order with a payment link. Create keys in the dashboard after signing in at /signin. The read routes also accept the dashboard session cookie."},"servers":[{"url":"https://registrar-domains.com"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"},"session":{"type":"apiKey","in":"cookie","name":"__Host-apex_session"}}},"paths":{"/api/check":{"get":{"operationId":"check_domain","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Availability","content":{"application/json":{"schema":{"type":"object","required":["domain","availability","source","checkedAt"],"properties":{"domain":{"type":"string"},"availability":{"type":"string","enum":["available","taken","unknown"]},"source":{"type":"string","enum":["rdap","registrar","none"],"description":"registrar: the TLD has no public RDAP server, our registrar answered"},"checkedAt":{"type":"string","format":"date-time"},"reason":{"type":"string"}}}}}},"400":{"description":"Bad domain"},"429":{"description":"Rate limited"}}}},"/api/suggest":{"get":{"operationId":"suggest_domains","parameters":[{"name":"idea","in":"query","required":true,"schema":{"type":"string"},"description":"A word, a phrase, or a full domain (its TLD is tried first)"},{"name":"tlds","in":"query","required":false,"schema":{"type":"string"},"description":"Comma separated"}],"responses":{"200":{"description":"Ranked suggestions","content":{"application/json":{"schema":{"type":"object","properties":{"suggestions":{"type":"array","items":{"allOf":[{"type":"object","required":["domain","availability","source","checkedAt"],"properties":{"domain":{"type":"string"},"availability":{"type":"string","enum":["available","taken","unknown"]},"source":{"type":"string","enum":["rdap","registrar","none"],"description":"registrar: the TLD has no public RDAP server, our registrar answered"},"checkedAt":{"type":"string","format":"date-time"},"reason":{"type":"string"}}},{"type":"object","properties":{"price":{"type":"object","required":["tld","price","renewPrice","cost","renew","renewCost","minYears","currency"],"properties":{"tld":{"type":"string"},"price":{"type":"number","description":"Our price for the first year, EUR before VAT"},"renewPrice":{"type":"number","description":"Our price for each renewal year, EUR before VAT"},"cost":{"type":"number","description":"Registrar purchase price per year, EUR"},"renew":{"type":"number","description":"Registrar renewal price per year, EUR. Same as renewCost; kept for existing clients."},"renewCost":{"type":"number","description":"Registrar renewal price per year, EUR"},"minYears":{"type":"integer"},"currency":{"type":"string","enum":["EUR"]}}}}}]}}}}}}}}}},"/api/price":{"get":{"operationId":"get_price","parameters":[{"name":"tld","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"One price or the launch list","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["tld","price","renewPrice","cost","renew","renewCost","minYears","currency"],"properties":{"tld":{"type":"string"},"price":{"type":"number","description":"Our price for the first year, EUR before VAT"},"renewPrice":{"type":"number","description":"Our price for each renewal year, EUR before VAT"},"cost":{"type":"number","description":"Registrar purchase price per year, EUR"},"renew":{"type":"number","description":"Registrar renewal price per year, EUR. Same as renewCost; kept for existing clients."},"renewCost":{"type":"number","description":"Registrar renewal price per year, EUR"},"minYears":{"type":"integer"},"currency":{"type":"string","enum":["EUR"]}}},{"type":"object","properties":{"pricing":{"type":"array","items":{"type":"object","required":["tld","price","renewPrice","cost","renew","renewCost","minYears","currency"],"properties":{"tld":{"type":"string"},"price":{"type":"number","description":"Our price for the first year, EUR before VAT"},"renewPrice":{"type":"number","description":"Our price for each renewal year, EUR before VAT"},"cost":{"type":"number","description":"Registrar purchase price per year, EUR"},"renew":{"type":"number","description":"Registrar renewal price per year, EUR. Same as renewCost; kept for existing clients."},"renewCost":{"type":"number","description":"Registrar renewal price per year, EUR"},"minYears":{"type":"integer"},"currency":{"type":"string","enum":["EUR"]}}}},"note":{"type":"string"}}}]}}}},"404":{"description":"TLD not sold by our registrar"},"429":{"description":"Rate limited"},"503":{"description":"Catalogue unavailable","content":{"application/json":{"schema":{"type":"object","required":["error","source","code","category"],"properties":{"error":{"type":"string"},"source":{"type":"string"},"code":{"type":"integer"},"category":{"type":"string","enum":["auth","rate_limit","not_found","invalid","duplicate","insufficient_balance","upstream"]}}}}}}}}},"/api/register":{"post":{"operationId":"register_domain","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain","registrant"],"properties":{"domain":{"type":"string"},"years":{"type":"integer","minimum":1,"maximum":10,"default":1},"registrant":{"type":"object","required":["firstname","lastname","address","postal","city","country","phone","email"],"properties":{"firstname":{"type":"string"},"lastname":{"type":"string"},"company":{"type":"string"},"address":{"type":"string"},"postal":{"type":"string"},"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"phone":{"type":"string","pattern":"^\\+\\d{1,3}\\.\\d{4,14}$","description":"EPP format, for example +33.612345678"},"state":{"type":"string"},"email":{"type":"string","format":"email"}}}}}}}},"responses":{"201":{"description":"Order created; pay at checkoutUrl","content":{"application/json":{"schema":{"type":"object","required":["orderId","status","domain","years","total","currency","statusUrl","policy"],"properties":{"orderId":{"type":"string"},"status":{"type":"string","enum":["awaiting_payment","expired","paid","registering","registered","failed","refunded"]},"domain":{"type":"string"},"years":{"type":"integer"},"total":{"type":"number","description":"EUR before VAT: the first-year price, plus the larger of the first-year and renewal price for each extra year"},"currency":{"type":"string","enum":["EUR"]},"checkoutUrl":{"type":["string","null"],"description":"Give this link to the human to pay. Present while awaiting payment."},"statusUrl":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"registeredAt":{"type":["string","null"]},"failureReason":{"type":["string","null"]},"policy":{"type":"object"}}}}}},"400":{"description":"Bad domain, registrant, or period"},"401":{"description":"Missing or revoked API key"}}}},"/api/checkout":{"post":{"operationId":"web_checkout","description":"The website's Buy button. Same order as register_domain, without an API key, behind a Cloudflare Turnstile check and 5 orders per hour per IP. Agents use register_domain.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain","registrant","turnstile"],"properties":{"domain":{"type":"string"},"years":{"type":"integer","minimum":1,"maximum":10,"default":1},"registrant":{"type":"object","required":["firstname","lastname","address","postal","city","country","phone","email"],"properties":{"firstname":{"type":"string"},"lastname":{"type":"string"},"company":{"type":"string"},"address":{"type":"string"},"postal":{"type":"string"},"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$"},"phone":{"type":"string","pattern":"^\\+\\d{1,3}\\.\\d{4,14}$","description":"EPP format, for example +33.612345678"},"state":{"type":"string"},"email":{"type":"string","format":"email"}}},"turnstile":{"type":"string"}}}}}},"responses":{"201":{"description":"Order created; pay at checkoutUrl","content":{"application/json":{"schema":{"type":"object","required":["orderId","status","domain","years","total","currency","statusUrl","policy"],"properties":{"orderId":{"type":"string"},"status":{"type":"string","enum":["awaiting_payment","expired","paid","registering","registered","failed","refunded"]},"domain":{"type":"string"},"years":{"type":"integer"},"total":{"type":"number","description":"EUR before VAT: the first-year price, plus the larger of the first-year and renewal price for each extra year"},"currency":{"type":"string","enum":["EUR"]},"checkoutUrl":{"type":["string","null"],"description":"Give this link to the human to pay. Present while awaiting payment."},"statusUrl":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"registeredAt":{"type":["string","null"]},"failureReason":{"type":["string","null"]},"policy":{"type":"object"}}}}}},"400":{"description":"Bad domain, registrant, or period"},"403":{"description":"Turnstile check failed"},"429":{"description":"Too many orders from this network"},"501":{"description":"Web checkout not open on this deployment"}}}},"/api/domains":{"get":{"operationId":"list_domains","security":[{"bearer":[]},{"session":[]}],"responses":{"200":{"description":"The account's domains","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"state":{"type":"string"},"expiresAt":{"type":["string","null"]},"autoRenew":{"type":"boolean"},"orderId":{"type":"string"},"registeredAt":{"type":"string"}}}}}}}}},"401":{"description":"No key or session"}}}},"/api/orders":{"get":{"operationId":"list_orders","security":[{"bearer":[]},{"session":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"The account's orders, newest first","content":{"application/json":{"schema":{"type":"object","properties":{"orders":{"type":"array","items":{"type":"object","required":["orderId","status","domain","years","total","currency","statusUrl","policy"],"properties":{"orderId":{"type":"string"},"status":{"type":"string","enum":["awaiting_payment","expired","paid","registering","registered","failed","refunded"]},"domain":{"type":"string"},"years":{"type":"integer"},"total":{"type":"number","description":"EUR before VAT: the first-year price, plus the larger of the first-year and renewal price for each extra year"},"currency":{"type":"string","enum":["EUR"]},"checkoutUrl":{"type":["string","null"],"description":"Give this link to the human to pay. Present while awaiting payment."},"statusUrl":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"registeredAt":{"type":["string","null"]},"failureReason":{"type":["string","null"]},"policy":{"type":"object"}}}}}}}}},"400":{"description":"Bad limit"},"401":{"description":"No key or session"}}}},"/api/orders/{id}":{"get":{"operationId":"get_order","security":[{"bearer":[]},{"session":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"t","in":"query","required":false,"schema":{"type":"string"},"description":"View token from statusUrl, instead of a key"}],"responses":{"200":{"description":"Order","content":{"application/json":{"schema":{"type":"object","required":["orderId","status","domain","years","total","currency","statusUrl","policy"],"properties":{"orderId":{"type":"string"},"status":{"type":"string","enum":["awaiting_payment","expired","paid","registering","registered","failed","refunded"]},"domain":{"type":"string"},"years":{"type":"integer"},"total":{"type":"number","description":"EUR before VAT: the first-year price, plus the larger of the first-year and renewal price for each extra year"},"currency":{"type":"string","enum":["EUR"]},"checkoutUrl":{"type":["string","null"],"description":"Give this link to the human to pay. Present while awaiting payment."},"statusUrl":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"registeredAt":{"type":["string","null"]},"failureReason":{"type":["string","null"]},"policy":{"type":"object"}}}}}},"401":{"description":"No key or token"},"404":{"description":"Not found"}}}}}}