# Registrar Domains > Find a domain. Keep it for less. A domain registrar with a search on the website and the same tools as an MCP server and a REST API. MCP endpoint: https://registrar-domains.com/mcp (Streamable HTTP, stateless; open tools, account tools with a bearer API key) MCP endpoint with sign-in: https://registrar-domains.com/mcp/oauth (OAuth 2.1, for Claude.ai and ChatGPT connectors and Claude Code) OAuth scopes: domains:read (search, read, orders and renewals paid by link), domains:write (DNS, nameservers, locking, auto-renew), domains:transfer (unlock and transfer code). A bearer API key has full access. OpenAPI: https://registrar-domains.com/openapi.json Docs: https://registrar-domains.com/docs Price comparison: https://registrar-domains.com/compare (JSON: https://registrar-domains.com/compare.json) ## Tools - check_domain: Is this exact domain available? Answers available, taken, or unknown. Taken also covers a name we already sold. - suggest_domains: Try one idea across the launch TLDs and rank by availability. - get_price: First-year and renewal price in USD before VAT for one TLD, next to our registrar's costs (cost, renewCost). Our price is our registrar's cost plus 30 %, and never less than what covers the payment fees, the VAT and US$1.00 of margin. - register_domain: Start a registration. Needs an API key or a signed-in connection. Answers an order with a payment link for the human; the domain is registered once payment clears. A retried call answers the same open order. .fr needs a registrant living or established in the EU, Iceland, Liechtenstein, Norway or Switzerland; .eu needs one in the EU, Iceland, Liechtenstein or Norway. Other registrants are refused before payment (see /terms#eligibility). - get_order: Follow an order. The state is one of: awaiting_payment, expired, paid, registering, registered, partly_failed, failed, refunded. The final states: registered, partly_failed, failed, refunded, expired. partly_failed: some names were registered and the others were not; each line's status, and whether its refund is done or pending, is in lines[]. A line with heldUntil set waits for a registrar top-up on our side; after that time, it fails and a refund is started. - list_domains: The domains of your account, soonest expiry first, with state, expiry, days left and auto-renew. - list_orders: The orders of your account, newest first, from every key and connection, with the amount paid and the invoice link. - get_domain: One domain: expiry, auto-renew, nameservers, transfer lock, DNSSEC, what the registry allows, and whether it is managed here. - renew_domain: Start a renewal for N years. Answers an order with a payment link for the human; the domain is renewed once payment clears. A registrant whose country cannot hold the .fr or .eu name is refused with { error, field }. - get_basket: The account's basket, priced live: domains, years, options, line totals and the subtotal. - set_basket: Replace the basket with lines of { domain, years, addons }. Nothing is charged. It does not cancel an open order. - checkout_basket: One order and one payment link for the whole basket, every domain to the same registrant. A failed line is refunded alone. Payment clears the saved basket only when its domain names match the paid order; a basket changed after checkout stays. A retried call, or any key or connection of the account, gets the same open order for the same lines and registrant. A new order closes the older open ones for the same names. .fr needs a registrant living or established in the EU, Iceland, Liechtenstein, Norway or Switzerland; .eu needs one in the EU, Iceland, Liechtenstein or Norway. Other registrants are refused before payment (see /terms#eligibility). - list_dns_records: The DNS records of a domain, each with a stable id, and whether our nameservers serve them. - add_dns_record: Add a DNS record: A, AAAA, CNAME, MX, TXT, CAA or SRV. TTL 600 to 86400 seconds. - update_dns_record: Replace one DNS record by its id. - delete_dns_record: Remove one DNS record by its id. - set_nameservers: Ask to point the domain to other nameservers (two to thirteen), or back to ours with an empty list. Nothing changes until the owner confirms it from an email. Hosts public DNS does not find come back as warnings. - use_cloudflare: Ask to move the domain's DNS to Cloudflare: exactly the two nameservers Cloudflare assigned. Refused while DNSSEC is on. Nothing changes until the owner confirms it from an email. - get_cloudflare_status: Where the move to Cloudflare stands: pending, waiting, live (visible in public DNS), failed with the reason, or replaced, and what public DNS answers now. - export_zone_file: The domain's DNS records as a BIND zone file, to import in Cloudflare (DNS → Records → Import and Export) before a move. - turn_off_dnssec: Ask to turn DNSSEC off before a move to Cloudflare. Nothing changes until the owner confirms it from an email; public DNS then drops the DS record within a day. - connect_cloudflare: Link the owner's Cloudflare account with an API token (Zone: Read, Zone: Edit, DNS: Edit), so the one-click move can create the zone and copy the records. The token is stored encrypted and never shown again. - get_cloudflare_connection: Whether a Cloudflare account is linked: its id and name, when, and whether the link stays after a move. Never the token. - disconnect_cloudflare: Delete the stored Cloudflare token. Delete the token in Cloudflare too. - prepare_cloudflare_move: Create the domain's zone on the linked Cloudflare account (Free plan) and copy every DNS record exactly, then read it back. Shows the diff. Nameservers do not change. - switch_cloudflare_move: Point a prepared move's nameservers to Cloudflare, after every check again. Nothing changes until the owner confirms it from an email. - get_cloudflare_move: Where the one-click move stands: preparing, prepared (with the diff), switching, switched, active, failed or cancelled, and what public DNS shows. - cancel_cloudflare_move: Cancel a prepared move. Deletes the zone only when apex created it and it is still pending. - set_transfer_lock: Lock the domain against transfers, at once, where the registry allows it. An unlock waits for the owner to confirm it from an email. - set_auto_renew: Turn auto-renew off at once, or ask to turn it on. On: we charge the saved card 7 days before expiry, then renew. Turning it on waits for the owner to confirm it from an email, and needs a card the owner saved with Stripe through Manage payment method in the dashboard (save_card_url). A registrant whose country cannot hold the .fr or .eu name is refused with { error }. - get_auth_code: Ask for the transfer code, to move the domain to another registrar. The owner confirms it from an email and sees the code on that page. The agent never gets the code. - get_domain_activity: Who changed what on a domain, newest first: DNS, nameservers, lock, auto-renew, transfer code, renewals. ## Availability answers available | taken | unknown. Unknown is never available. ## Prices per year in US dollars before VAT, live on 2026-10-27 (same as GET /api/price) - .com: first year 15.99 USD, renewal 13.99 USD - .net: first year 20.49 USD, renewal 15.49 USD - .org: first year 11.49 USD, renewal 14.99 USD - .fr: first year 9.49 USD, renewal 8.49 USD - .eu: first year 10.99 USD, renewal 7.99 USD - .io: first year 97.49 USD, renewal 65.49 USD - .xyz: first year 5.49 USD, renewal 17.99 USD - .ai: first year 283.49 USD, renewal 208.49 USD, minimum 2 years - .dev: first year 20.99 USD, renewal 15.99 USD - .app: first year 20.99 USD, renewal 18.49 USD - .co: first year 12.99 USD, renewal 39.49 USD ## Price comparison Every renewal is priced from our registrar's cost by the same margin rule, so the price you see is the price you keep paying. Not the cheapest everywhere: Cloudflare and Porkbun often renew for less. Sources and ranking per TLD at /compare.json. ## Guides and comparisons - Guides: https://registrar-domains.com/learn - Guides to domain names: costs, transfers, renewals, choosing an extension, registering through the API. - Glossary: https://registrar-domains.com/glossary - Definitions of domain terms (nameserver, DNSSEC, auth code, RDAP, TLD, IDN), each with its RFC, IANA or ICANN source. - Registrar comparison: https://registrar-domains.com/vs - Registrar Domains compared with other registrars, row by row, each cell with its source and date. - Renewal prices: https://registrar-domains.com/pricing/renewals - Registry fees, first-year and renewal prices by registrar, each with its source and date. ## Status Checks and prices are open without a key. Every other tool needs an account: Authorization: Bearer on /mcp, or sign-in on /mcp/oauth. register_domain and renew_domain answer an order with checkoutUrl for the human to pay. Follow it with get_order. Nothing is registered, renewed or charged before payment. All sales are final once registered. DNS records, nameservers, transfer lock and the transfer code are managed with the domain tools. New records usually reach our nameservers within minutes; networks that saw an old answer keep it until its TTL runs out, and a TTL change can take the old TTL plus an hour. Four agent actions wait for the owner: a nameserver change, an unlock, the transfer code and turning auto-renew on. The tool answers { status: "confirmation_sent" } (202 on REST), we email the owner a link that works once, for 30 minutes, and nothing changes until they confirm it, signed in. The agent never gets the transfer code: the owner sees it on the confirmation page. Renewal: the account gets reminder emails 30 and 7 days before expiry, and renew_domain starts a renewal at any time. Automatic renewal is off by default; the owner saves a card with Stripe through Manage payment method in the dashboard first, then set_auto_renew asks to turn it on per domain, and once the owner confirms it, the saved card is charged 7 days before expiry. A person gets an API key by signing in at https://registrar-domains.com/signin with the link we email (or the code in the same email) and creating one under Connect agent. A person without a key can buy on the website. Search, and add the names you want to your basket. Sign in with the link we email you. Fill in the registrant once for every name, then pay once by card. That route has an anti-bot check and is not for agents.