Conway

API Reference

Complete REST API reference for Conway Domains.

Base URL: https://domain.conway.tech

Public Endpoints

No authentication required.

GET /domains/search

Search available domains by keyword.

ParameterTypeRequiredDescription
qstringYesSearch keyword
tldsstringNoComma-separated TLDs (default: com,io,ai,xyz,net,org,dev)

GET /domains/check

Check availability of specific domain names.

ParameterTypeRequiredDescription
domainsstringYesComma-separated domain names (max 200)

GET /domains/pricing

Get TLD pricing.

ParameterTypeRequiredDescription
tldsstringNoComma-separated TLDs (omit for all)

Authentication Endpoints

POST /auth/nonce

Generate a nonce for SIWE authentication.

POST /auth/verify

Verify a SIWE signature and receive JWT tokens.

FieldTypeRequiredDescription
messagestringYesSIWE message string
signaturestringYesWallet signature

Returns: { access_token, refresh_token }

POST /auth/refresh

Refresh an access token.

FieldTypeRequiredDescription
refresh_tokenstringYesRefresh token

Returns: { access_token }

GET /auth/me

Get the authenticated user. Requires Authorization: Bearer <token>.

POST /auth/solana/nonce

Generate a nonce for SIWS (Solana) authentication.

POST /auth/solana/verify

Verify a SIWS signature and receive JWT tokens.

Domain Endpoints

All require Authorization: Bearer <token>.

GET /domains

List all domains owned by the authenticated user.

GET /domains/:domain

Get detailed info for a specific domain. Returns cached data with background refresh when stale (> 5 min).

POST /domains/register

Register a new domain. Uses x402 payment flow.

FieldTypeRequiredDescription
domainstringYesDomain to register (3-253 chars)
yearsintegerNoRegistration period, 1-10 (default: 1)
privacybooleanNoWHOIS privacy (default: true)
nameserversstring[]NoCustom nameservers (2-13 entries)

Without X-PAYMENT header: Returns 402 with payment requirements.

With X-PAYMENT header: Verifies payment, registers domain, returns 201.

POST /domains/:domain/renew

Renew a domain. Uses x402 payment flow.

FieldTypeRequiredDescription
yearsintegerNoRenewal period, 1-10 (default: 1)

PUT /domains/:domain/privacy

Toggle WHOIS privacy.

FieldTypeRequiredDescription
enabledbooleanYesEnable or disable privacy

PUT /domains/:domain/nameservers

Update nameservers.

FieldTypeRequiredDescription
nameserversstring[]Yes2-13 nameserver entries

DNS Endpoints

All require Authorization: Bearer <token> and domain ownership.

GET /domains/:domain/dns

List all DNS records. Cached for 2 minutes.

POST /domains/:domain/dns

Add a DNS record.

FieldTypeRequiredDescription
typestringYesA, AAAA, CNAME, MX, TXT, SRV, CAA, NS
hoststringYesHostname (@ for root)
valuestringYesRecord value
ttlintegerNoTTL 300-86400 (default: 3600)
distanceintegerNoMX priority

PUT /domains/:domain/dns/:recordId

Update a DNS record. All fields optional.

FieldTypeRequiredDescription
hoststringNoNew hostname
valuestringNoNew value
ttlintegerNoNew TTL
distanceintegerNoNew MX priority

DELETE /domains/:domain/dns/:recordId

Delete a DNS record.

Transaction Endpoints

Requires Authorization: Bearer <token>.

GET /transactions

List all transactions for the authenticated user.

{
  "transactions": [
    {
      "id": "txn_abc123",
      "domainId": "dom_xyz789",
      "type": "registration",
      "amount": 43.75,
      "currency": "USD",
      "status": "completed",
      "createdAt": "2026-02-13T00:00:00Z"
    }
  ]
}

Error Responses

All errors return a JSON object with an error field:

{ "error": "Domain not found" }
StatusDescription
400Validation error
401Invalid or missing authentication
402Payment required (x402 flow)
403Payment wallet mismatch or insufficient permissions
404Domain not found or not owned
409Conflict (e.g. duplicate email)
503Payment not configured

Health Check

curl https://domain.conway.tech/health
{
  "status": "ok",
  "timestamp": "2026-02-13T12:00:00.000Z"
}