Developers

domain.latino API

A stable, versioned HTTP API to check .latino availability, search the curated catalogue, place pre-orders against a saved card, and manage cards and webhooks. JSON in, JSON out.

Download OpenAPI (JSON) Get an API key

Base URL https://domain.latino/api/v1

Authentication

Send your API key as a Bearer token. Create and manage keys in your account settings — the full key is shown only once at creation, so store it securely.

Authorization: Bearer dpk_live_<selector>_<secret>

Keys look like dpk_<env>_<selector>_<secret>, where env is live or test.

A logged-in browser session can call the same endpoints; session-authenticated writes additionally require an X-CSRF-Token header. Bearer-token requests do not.

Scopes & rate limits

Every key carries a set of scopes. A call must be made with a key that holds the endpoint's scope. Rate limits are applied per scope, per key.

Scope Grants Rate limit Tier
domain.check Check a single .pay domain — availability + pricing 50/sec Public
catalog.search AI keyword search against the curated catalog 30/min Public
orders.read List + read the account's own orders 60/min Public
orders.write Create a pre-order against a saved payment method 10/min Public
payment_methods.read List saved cards (Stripe payment methods) 20/min Public
payment_methods.write Add (SetupIntent) + remove saved cards 20/min Public
account.read Read account profile: email, role, vip_tier, granted scopes 60/min Public
webhooks.read List configured webhook endpoints 20/min Public
webhooks.write Create + delete webhook endpoints 10/min Public
zone_file.download Download the full daily .pay DNS zone-file snapshot 24/day Restricted
premium.list Paginated registry premium catalogue (incl. reserved/blocked) 60/min Restricted
registered.list Paginated registered .pay names (from the DNS zone file) + AI brand context 60/min Restricted

Restricted scopes are double-gated: a key may list the scope, but calls only succeed once an admin has granted it to your account. Apply from your account settings.

Supported domain zones

One account and one API key work across every zone below — the base URL you call selects the zone.

.pay https://domain.pay/api/v1
.latino https://domain.latino/api/v1
.dot https://domain.dot/api/v1

Quickstart

Two quick calls to get started:

# Check a name
curl -s https://domain.latino/api/v1/check-domain \
  -H "Authorization: Bearer dpk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"domain":"acme.latino"}'

# Who am I + what can I do
curl -s https://domain.latino/api/v1/account \
  -H "Authorization: Bearer dpk_live_…"

Endpoints

All endpoints are live. Request and response schemas, parameters and status codes are fully described in the OpenAPI document.

Account

GET /account account.read Your profile + the scopes effective for this key.

Domains

POST /check-domain domain.check Availability + pricing for one name in a supported zone. Fast DB-only lookup (no live registry call) — POST /orders re-verifies live.

Catalog

POST /catalog/search catalog.search Keyword search over the curated catalogue.

Orders

GET /orders orders.read List your orders, newest first.
GET /orders/{id} orders.read One order + its customer message thread.
POST /orders orders.write Create a pre-order + charge a saved card (send an Idempotency-Key).

Payment methods

GET /account/payment-methods payment_methods.read List saved cards.
POST /account/payment-methods payment_methods.write Start a Stripe SetupIntent to add a card.
DELETE /account/payment-methods/{id} payment_methods.write Remove a saved card.

Webhooks

GET /webhooks webhooks.read List webhook endpoints.
POST /webhooks webhooks.write Register an endpoint (signing secret shown once).
DELETE /webhooks/{id} webhooks.write Delete an endpoint.

Restricted

GET /zone-file zone_file.download Daily DNS zone-file snapshot for the zone of the host you call.
GET /premium premium.list Registry premium catalogue.
GET /registered registered.list Registered names in the called zone + AI brand context.

For the complete request/response contract, import the OpenAPI spec: Download OpenAPI (JSON).

Webhooks

Register an HTTPS endpoint and we push signed events as they happen. The signing secret is shown once at creation.

EventDescription
order.createdA new order (pre-order) was created on the account
order.status_changedAn order changed payment status
payment.succeededA payment for an order succeeded
payment.failedA payment for an order failed or was canceled
payment.refundedA charge for an order was refunded
appraisal.completedA domain appraisal for an order finished

We POST the event envelope as JSON:

{
  "id": "evt_…",
  "event": "payment.succeeded",
  "created": "2026-05-28T12:00:00+00:00",
  "data": { "order": { … } }
}

Verify every delivery by recomputing the HMAC-SHA256 over the raw request body with your signing secret and comparing in constant time:

X-Domain-Pay-Signature: sha256=<HMAC_SHA256(raw_body, signing_secret)>

Non-2xx responses (or timeouts) are retried with exponential backoff (1 min to 24 h) up to 6 attempts. After 5 consecutive dead deliveries the endpoint is auto-disabled and the owner is alerted.

Errors

All errors share one shape. The request_id is echoed on every error — quote it in support requests.

{ "error": "scope_required", "message": "…", "request_id": "req_ab12…", "scope": "orders.read" }
HTTPerrorMeaning
400invalid_requestMalformed or missing parameters.
401unauthorized / invalid_keyNo or invalid credential.
402card_declined / authentication_requiredPayment failed or needs SCA.
403scope_requiredThe key lacks the endpoint's scope.
403access_not_grantedRestricted scope not yet approved for this account.
403csrf_requiredSession write without a valid X-CSRF-Token.
404not_foundNo such endpoint or resource.
405method_not_allowedWrong HTTP verb.
409request_in_progressAn idempotency key's first request is still in flight.
422idempotency_key_reusedSame idempotency key, different parameters.
422contact_incompleteGA zones: add a registrant contact under /account/contacts first.
423account_lockedAccount is locked — contact support.
429rate_limitedSlow down; see the Retry-After header.
500server_errorOur fault.

Restricted access

The zone-file, premium and registered endpoints need an approved grant in addition to the scope:

  1. Create (or already have) an API key listing the restricted scope.
  2. In your account settings, open Restricted API access, pick the scope, and explain how you'll use the data.
  3. Our team reviews and emails you a decision.
  4. Once approved, any key on your account that lists that scope can use it immediately. No paid tier — approval is per account.

Get an API key Download OpenAPI (JSON)