Authentification
Envoyez votre clé API sous la forme d'un jeton Bearer. Créez et gérez vos clés dans les paramètres de votre compte — la clé complète n'est affichée qu'une seule fois à la création, alors conservez-la en lieu sûr.
Authorization: Bearer dpk_live_<selector>_<secret>
Les clés ressemblent à dpk_<env>_<selector>_<secret>, où env vaut live ou test.
Une session de navigateur connectée peut appeler les mêmes points de terminaison ; les écritures authentifiées par session nécessitent en plus un en-tête X-CSRF-Token. Les requêtes par jeton Bearer non.
Portées et limites de débit
Chaque clé porte un ensemble de portées. Un appel doit être effectué avec une clé qui détient la portée du point de terminaison. Les limites de débit s'appliquent par portée et par clé.
| Portée | Autorise | Limite de débit | Niveau |
|---|---|---|---|
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 | Restreint |
premium.list |
Paginated registry premium catalogue (incl. reserved/blocked) | 60/min | Restreint |
registered.list |
Paginated registered .pay names (from the DNS zone file) + AI brand context | 60/min | Restreint |
Les portées restreintes sont doublement protégées : une clé peut lister la portée, mais les appels ne réussissent qu'une fois qu'un administrateur l'a accordée à votre compte. Faites votre demande depuis les paramètres de votre compte.
Zones de domaine prises en charge
Un seul compte et une seule clé API fonctionnent sur toutes les zones ci-dessous — l'URL de base appelée sélectionne la zone.
.pay |
https://domain.pay/api/v1 |
.latino |
https://domain.latino/api/v1 |
.dot |
https://domain.dot/api/v1 |
Démarrage rapide
Deux appels rapides pour démarrer :
# Vérifier un nom
curl -s https://domain.latino/api/v1/check-domain \
-H "Authorization: Bearer dpk_live_…" \
-H "Content-Type: application/json" \
-d '{"domain":"acme.latino"}'
# Qui suis-je + ce que je peux faire
curl -s https://domain.latino/api/v1/account \
-H "Authorization: Bearer dpk_live_…"
Points de terminaison
Tous les points de terminaison sont opérationnels. Les schémas de requête et de réponse, les paramètres et les codes de statut sont entièrement décrits dans le document OpenAPI.
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. |
Pour le contrat complet de requête/réponse, importez la spécification OpenAPI : Télécharger OpenAPI (JSON).
Webhooks
Enregistrez un point de terminaison HTTPS et nous vous transmettons des événements signés au fil de l'eau. Le secret de signature est affiché une seule fois à la création.
| Événement | Description |
|---|---|
order.created | A new order (pre-order) was created on the account |
order.status_changed | An order changed payment status |
payment.succeeded | A payment for an order succeeded |
payment.failed | A payment for an order failed or was canceled |
payment.refunded | A charge for an order was refunded |
appraisal.completed | A domain appraisal for an order finished |
Nous envoyons l'enveloppe de l'événement en POST au format JSON :
{
"id": "evt_…",
"event": "payment.succeeded",
"created": "2026-05-28T12:00:00+00:00",
"data": { "order": { … } }
}
Vérifiez chaque livraison en recalculant le HMAC-SHA256 sur le corps brut de la requête avec votre secret de signature, puis en comparant à temps constant :
X-Domain-Pay-Signature: sha256=<HMAC_SHA256(raw_body, signing_secret)>
Les réponses non-2xx (ou les délais dépassés) sont réessayées avec un backoff exponentiel (1 min to 24 h) jusqu'à 6 tentatives. Après 5 livraisons mortes consécutives, le point de terminaison est automatiquement désactivé et le propriétaire est averti.
Erreurs
Toutes les erreurs partagent une même forme. Le request_id est renvoyé sur chaque erreur — mentionnez-le dans vos demandes d'assistance.
{ "error": "scope_required", "message": "…", "request_id": "req_ab12…", "scope": "orders.read" }
| HTTP | error | Signification |
|---|---|---|
| 400 | invalid_request | Malformed or missing parameters. |
| 401 | unauthorized / invalid_key | No or invalid credential. |
| 402 | card_declined / authentication_required | Payment failed or needs SCA. |
| 403 | scope_required | The key lacks the endpoint's scope. |
| 403 | access_not_granted | Restricted scope not yet approved for this account. |
| 403 | csrf_required | Session write without a valid X-CSRF-Token. |
| 404 | not_found | No such endpoint or resource. |
| 405 | method_not_allowed | Wrong HTTP verb. |
| 409 | request_in_progress | An idempotency key's first request is still in flight. |
| 422 | idempotency_key_reused | Same idempotency key, different parameters. |
| 422 | contact_incomplete | GA zones: add a registrant contact under /account/contacts first. |
| 423 | account_locked | Account is locked — contact support. |
| 429 | rate_limited | Slow down; see the Retry-After header. |
| 500 | server_error | Our fault. |
Accès restreint
Les points de terminaison zone-file, premium et registered nécessitent une autorisation approuvée en plus de la portée :
- Créez (ou possédez déjà) une clé API qui liste la portée restreinte.
- Dans les paramètres de votre compte, ouvrez Accès API restreint, choisissez la portée et expliquez comment vous utiliserez les données.
- Notre équipe examine votre demande et vous communique une décision par e-mail.
- Une fois approuvée, toute clé de votre compte qui liste cette portée peut l'utiliser immédiatement. Aucun palier payant — l'approbation se fait par compte.