Overview

The Entri Sell (Enterprise) API enables you to offer domain search, registration, and management directly within your platform. By integrating with our API, you can sell domains to your customers without needing to manage ICANN compliance, registry integrations, or billing infrastructure. Entri handles the provisioning and maintenance behind the scenes, while you focus on building a seamless customer experience.

Request Structure

All requests to the Entri Sell Enterprise API must be made over HTTPS. Base URL:
https://api.goentri.com/enterprise/sell/{api-version}/{resource}
General format:
{http-method} https://api.goentri.com/enterprise/sell/{api-version}/{resource}?{query-params}
Request headers:
  • Authorization: Bearer {access_token} — required for authentication
  • Accept: application/json — required, JSON is the only supported format
  • Content-Type: application/json — required for requests with a body (POST, PUT)
  • applicationId: {your-application-name} — identifies your integration

Authentication

The Entri Sell Enterprise API uses a short-lived JWT that you mint server-side using your applicationId and secret. Do not expose your secret in client code. The JWT expires after 60 minutes.

1) Create a JWT

Endpoint POST https://api.goentri.com/token Headers Content-Type: application/json Body
{
  "applicationId": "<YOUR_APPLICATION_ID>",
  "secret": "<YOUR_SECRET>"
}
Response (200)
{ "auth_token": "eyJ0eXAiOiJKV1QiLCJhbGciOi..." }
JWT creation with applicationId and secret, 60-minute expiry.

2) Call the API with the JWT

Include the JWT as a Bearer token, and pass your applicationId header on every request:
Authorization: Bearer <auth_token>
applicationId: <YOUR_APPLICATION_ID>
(Use of the JWT in Authorization and the applicationId header is shown across the Secure/Power API examples and applies here as well.) Example
curl -X GET "https://api.goentri.com/enterprise/sell/v1/domains/availability?domainName=example.com" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"

Notes

  • Mint tokens server-side only; never ship your secret to the browser.
  • Tokens expire after 60 minutes—mint a fresh token as needed.

Check Domain Availability

GET /domains/availability — Check if a domain is available. Params
  • domainName (required): SLD+TLD, no subdomains (e.g., mydomain.com). 1–63 chars, alphanumeric + -, not starting/ending with -.
Example request
curl -X GET \
"https://api.goentri.com/enterprise/sell/v1/domains/availability?domainName=mydomain.com" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
Example response
{
  "domainName": "mydomain.com",
  "availability": "AVAILABLE",
  "price": 19,
  "renewalPrice": 24,
}
Availability values: AVAILABLE|UNAVAILABLE|UNSUPPORTED|UNKNOWN|ERROR

Retrieve Domain Suggestions

GET /domains/suggestions — Up to 20 suggestions based on a query + TLDs. Params
  • searchQuery (required): 1–63 chars, alphanumeric + - only.
  • tlds (required): Comma-separated TLDs (e.g., com, net).
Example request
curl -X GET \
"https://api.goentri.com/enterprise/sell/v1/domains/suggestions?searchQuery=mydomain&tlds=com,net" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
Example response
{
  "suggestions": [
    {
      "domainName": "mydomain.com",
      "availability": "AVAILABLE",
      "price": 19,
      "renewalPrice": 24,
    },
    {
      "domainName": "mydomain.net",
      "availability": "AVAILABLE",
      "price": 22,
      "renewalPrice": 22,
    },
    {
      "domainName": "mydomain.io",
      "availability": "UNAVAILABLE",
      "price": 60,
      "renewalPrice": 100,
    }
  ]
}

Domains – Management

Retrieve List of Domains

GET /domains — Domains registered Params
  • page (optional)
  • limit (optional)
Example request
curl -X GET \
"https://api.goentri.com/enterprise/sell/v1/domains?page=1&limit=50" \
  -H "Authorization: Bearer <AUTH_TOKEN>" \
  -H "applicationId: <YOUR_APPLICATION_ID>" \
  -H "Accept: application/json"
Example response
[
  {
    "domainName": "mydomain.com",
    "status": "ACTIVE",
    "createdAt": "2025-01-12T15:22:31Z",
    "expiresAt": "2026-01-12T15:22:31Z",
    "autoRenew": true,
    "whoisPrivacy": true,
    "locked": false,
    "nameservers": [
      "ns1.mydns.net",
      "ns2.mydns.net"
    ],
    "dnsRecords": [
      { "name": "@", "recordType": "A", "value": ["203.0.113.10"], "ttl": 3600 },
      { "name": "www", "recordType": "CNAME", "value": ["app.mydomain.com"], "ttl": 3600 }
    ],
    "customerId": "8a1ad3f2-0b2a-4a3d-9357-8c7b0bafdb1e",
    "resoldStatus": "ACTIVE"
  },
  {...}, 
  ...
]

Retrieve Single Domain

GET /domains/{domainName} — Full domain details. Params
  • domainName (required)
Example request
curl -X GET \
"https://api.goentri.com/enterprise/sell/v1/domains/mydomain.com" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
Example response
{
  "domainName": "mydomain.com",
  "status": "ACTIVE",
  "createdAt": "2025-01-12T15:22:31Z",
  "expiresAt": "2026-01-12T15:22:31Z",
  "autoRenew": true,
  "whoisPrivacy": true,
  "locked": false,
  "nameservers": [
    "ns1.mydns.net",
    "ns2.mydns.net"
  ],
  "dnsRecords": [
    { "name": "@", "recordType": "A", "value": ["203.0.113.10"], "ttl": 3600 },
    { "name": "www", "recordType": "CNAME", "value": ["app.mydomain.com"], "ttl": 3600 }
  ],
  "customerId": "8a1ad3f2-0b2a-4a3d-9357-8c7b0bafdb1e",
  "resoldStatus": "ACTIVE"
}

Update Domain Automatic Renewal Status

PUT /domains/{domainName}/auto-renew — Toggle auto-renew. Params
  • domainName (required)
Body
{ "value": true }
Example request
curl -X PUT \
"https://api.goentri.com/enterprise/sell/v1/domains/mydomain.com/auto-renew" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
-d '{ "value": true }'
Example response
{ "autoRenew": true }

Resend Registrant Verification Email

POST /domains/{domainName}/resend-verification — Retrigger registrant verification email. Params
  • domainName (required)
Example request
curl -X POST \
"https://api.goentri.com/enterprise/sell/v1/domains/mydomain.com/resend-verification" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"

Update Domain Nameservers

PUT /domains/{domainName}/nameservers — Set nameservers. Params
  • domainName (required)
Body
{ "nameservers": ["ns1.example.net","ns2.example.net"] }
Example response
{ "nameservers": [...] }
Example request
curl -X PUT \
"https://api.goentri.com/enterprise/sell/v1/domains/mydomain.com/nameservers" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
-d '{ "nameservers": ["ns1.example.net","ns2.example.net"] }'

Retrieve Domain DNS Records

GET /domains//dns — Get DNS records. Params
  • domainName (required)
Example request
curl -X GET \
"https://api.goentri.com/enterprise/sell/v1/domains/mydomain.com/dns" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
Example response
{
  "records": [
    { "name": "@", "recordType": "A", "value": ["203.0.113.10"], "ttl": 3600 },
    { "name": "www", "recordType": "CNAME", "value": ["app.example.com"], "ttl": 3600 }
  ]
}
Record types include A, AAAA, CNAME, MX, TXT, … per spec.

Update Domain DNS Records

PUT /domains/{domainName}/dns — Replace DNS records. Params
  • domainName (required)
Body
{
  "records": [
    { "name": "@", "recordType": "A", "value": ["203.0.113.10"], "ttl": 3600 },
    { "name": "www", "recordType": "CNAME", "value": ["app.example.com"], "ttl": 3600 }
  ]
}
Returns the updated records. Example request
curl -X PUT \
"https://api.goentri.com/enterprise/sell/v1/domains/mydomain.com/dns" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
-d '{ "records": [ { "name":"@", "recordType":"A", "value":["203.0.113.10"], "ttl":3600 } ] }

Orders

Validate Whois Contacts

POST /domains/contacts/validate — Pre-validate contacts to avoid order failures. Body (minimal example)
{
  "domain": "mydomain.com",
  "contacts": [
    { "contactType": "REGISTRANT","firstName":"John","lastName":"Doe",
      "street1":"1 Main St","city":"New York","zip":"10001","country":"US",
      "phone":"+1.2125550100","email":"john.doe@example.com" }
  ]
}
Format and constraints per domainContact schema: EPP phone +<cc>.<number>, ISO-3166 country code, email pattern. Example request
curl -X POST "https://api.goentri.com/enterprise/sell/v1/domains/contacts/validate" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
-d @contacts.json

Retrieve Orders

GET /orders — Orders placed via your integration. Params
  • page (optional)
  • limit (optional)
Example request
curl -X GET \
"https://api.goentri.com/enterprise/sell/v1/orders?page=1&limit=50" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
Example response
{
  "orders": [
    {
      "orderId": "9b2b7e99-6c17-4c4a-8f43-0a9e5f1e2a10",
      "type": "DOMAIN_REGISTRATION",
      "domainName": "mydomain.com",
      "status": "COMPLETED",
      "createdAt": "2025-01-12T15:22:31Z",
      "updatedAt": "2025-01-12T15:23:02Z",
      "years": 1,
      "whoisPrivacy": true
    },
    {
      "orderId": "72f7e3a1-1a4b-4f8c-9c6d-b3a3bcd9c100",
      "type": "DOMAIN_RENEWAL",
      "domainName": "anotherdomain.net",
      "status": "PENDING",
      "createdAt": "2025-02-02T10:11:45Z",
      "updatedAt": "2025-02-02T10:11:45Z",
      "years": 1,
      "whoisPrivacy": false
    }
  ],
  "nextPageUrl": "https://api.entri.com/enterprise/sell/v1/orders?page=2&limit=50"
}

Place New Order

POST /orders — Place one item per order (e.g., domain registration). Body
{
  "type": "DOMAIN_REGISTRATION",
  "domainName": "mydomain.com",
  "years": 1,
  "whoisPrivacy": true,
  "contacts": {
    "registrant": { "firstName":"John","lastName":"Doe","email":"john.doe@example.com",
      "street1":"1 Main St","city":"New York","zip":"10001","country":"US",
      "phone":"+1.2125550100" }
  }
}
Exact order schema is defined in spec; send one item per request. Example request
curl -X POST "https://api.goentri.com/enterprise/sell/v1/orders" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
-d @order.json

Get Order Status

GET /orders/{orderId}  — Retrieve Single Order Retrieve the latest status and details for a specific order placed through your integration. Use this endpoint to check whether an order (e.g., domain registration) is pending, completed, failed, or otherwise updated. Params
  • orderId (required, UUID) — The reseller order ID you received when the order was created.
Example request
curl -X GET \
"https://api.entri.com/enterprise/sell/v1/orders/9b2b7e99-6c17-4c4a-8f43-0a9e5f1e2a10" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"
Example response 200 OK — Returns the order object with its current status and related fields (shape defined in the API spec; fields may vary by order type). Common status values include states representing whether the order is in progress, completed, or failed (see order schema and example in the spec).

Retrieve Single Order

GET /orders/{orderId} — Get one order. Params
  • orderId (required, UUID)
Example
curl -X GET \
"https://api.goentri.com/enterprise/sell/v1/orders/9b2b7e99-6c17-4c4a-8f43-0a9e5f1e2a10" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-H "applicationId: <YOUR_APPLICATION_ID>" \
-H "Accept: application/json"

Webhook Notifications

When your users go through the Sell flow, Entri will send you webhook notifications to update you on their progress and the status of their purchase. To learn more about the configuration and webhook notifications, please visit our webhook documentation page.

Errors

All errors from the API are returned in a standard JSON structure. The respective HTTP status code is also returned part of the HTTP response headers. Format:
{
  "message": "Error description"
}
  • message – human-readable description of the error

Security

IP Safelisting

The Entri Sell Enterprise API supports optional IP safelisting. If configured, only requests from approved IPs or CIDR ranges will be accepted. To request or update your safelist, please contact our support team with the IP addresses you would like to register.

Billing Integration

For a streamlined customer experience, you should provide your users with direct access to Entri’s billing management interface. When displaying a customer account (created via Entri Sell) inside your own dashboard, include a “Manage Billing” link or button that opens the following URL in a new browser tab:
https://billing.entri.com/
This allows customers to review invoices, update payment details, and manage billing. without leaving your platform.