Nymwell
View as Markdown

REST API

Base address https://nymwell.com/api/v1. JSON in and out. Every response has an x-request-id header; quote it when you ask for help.

Authentication

EndpointsSend
Search, suggestions, ending info, screening, statusNothing
Everything on an accountAn agent key: X-Nymwell-Key: nw_live_… (or Authorization: Bearer nw_live_…)

A signed-in owner creates agent keys in AI Agents or with POST /api/v1/api-keys, with scopes (domains:read, dns:read, quotes:create, orders:create, actions:prepare, actions:read), an optional domain allowlist and an expiry of up to 90 days. MCP clients sign in with OAuth instead; see MCP and sign-in.

Public endpoints

Rate limited to 30 searches a minute per client; past that the answer is 429 with retry_after_seconds.

RequestAnswers
GET /api/v1/statusWhat is live: registrar, payments, sign-in
GET /api/v1/domains/search?domain=example.comOne exact name, from the registrar
GET /api/v1/domains/search?q=example&tlds=com,ai,ioOne name across up to 20 endings
GET /api/v1/domains/suggest?q=coffee+roasterNames the registrar can sell now
GET /api/v1/domains/tld-info?tlds=ai,ioRegistration, renewal and transfer prices and rules per ending
GET /api/v1/domains/screen?q=examplePublic-record screen (RDAP and DNS). Not availability.
curl "https://nymwell.com/api/v1/domains/search?q=yourbrandlab&tlds=com,dev"
{
  "results": [
    {"domain": "yourbrandlab.com", "available": false, "tier": null, "reason": "domain_unavailable", "buy_url": null},
    {"domain": "yourbrandlab.dev", "available": true, "tier": "standard", "price_minor": 1649, "price_display": "US$16.49",
     "renewal_minor": 2529, "renewal_display": "US$25.29", "reason": null, "buy_url": "https://nymwell.com/buy?domain=yourbrandlab.dev"}
  ],
  "suggestions": [],
  "currency": "USD",
  "source": "namecom:live"
}

Prices are integers in cents (price_minor) and display strings. The first price is the first term at the ending's minimum length; renewal_* is what renewing for that length costs. suggestions offers priced alternatives when names are taken.

GET https://nymwell.com/buy?domain=example.com (add &lang=zh-tw for Traditional Chinese). A signed-out person goes through Google sign-in; then the console opens on that name with its price, and they pay on Stripe Checkout. No key is involved.

Account endpoints

The same actions as the MCP tools. Each mutation that waits on a person or the registrar returns a workflow object (see Statuses and errors).

RequestDoes
POST /api/v1/quotes {"domain", "action": "register"/"renew"/"transfer", "years", "currency": "USD"}Locks a price for 40 minutes
POST /api/v1/orders {"quote_id"}Starts paying: returns the order with checkout_url for the person
GET /api/v1/orders?id=Where an order is, with workflow
GET /api/v1/domainsDomains in the workspace
GET /api/v1/domains/detail?domain=Live state from the registrar
GET /api/v1/dns/records?domain=DNS records
POST /api/v1/dns/change-setsPrepares DNS creates, updates and deletes for approval
GET /api/v1/approvalsChanges waiting for a person, each with workflow
POST /api/v1/domains/settings, /nameservers, /contacts, /auth-code, /cancel, /servicesPrepares a domain change for approval

The full contract, with every field: https://nymwell.com/openapi.json

Errors

Errors are JSON with an error code and the matching HTTP status, for example {"error": "quote_expired", "next": "Call get_quote again."}. Every code is in Statuses and errors.