The endpoint
One endpoint serves every call. Paths in this reference are appended to it.
https://api.reg.ly
Authentication
Two headers on every request. The username header is your reseller account email address. The token header is built from your API key and expires on its own within the hour, so a captured token dies fast.
# the two headers on every request
username: you@yourname.ly
token: base64_encode(
hash_hmac(
"sha256",
$apiKey,
"you@yourname.ly:" . gmdate("y-m-d H")
)
)
The token is an HMAC-SHA256 of your API key, keyed by your email and the current UTC hour: the hex digest, then base64.
You generate and rotate your API keys yourself in your reseller area, where your API email also lives. An IP allowlist on your account is optional. POST bodies are application/x-www-form-urlencoded. Responses are JSON, with a shape specific to each call. The API does not cap your calls.
Quickstart
A first request that costs nothing: look a name up, then register it in the test zone.
# availability
curl -X POST "$ENDPOINT/domains/lookup" \
-H "username: you@yourname.ly" -H "token: $TOKEN" \
--data-urlencode "searchTerm=yourname" \
--data-urlencode "tldsToInclude[]=ote.ly"
# a registration in the test zone spends no credit
curl -X POST "$ENDPOINT/order/domains/register" \
-H "username: you@yourname.ly" -H "token: $TOKEN" \
--data-urlencode "domain=yourname.ote.ly" \
--data-urlencode "regperiod=1" \
--data-urlencode "nameservers[ns1]=ns1.get.ly" \
--data-urlencode "nameservers[ns2]=ns2.get.ly" \
--data-urlencode "contacts[registrant][firstname]=Ada"
# and the other contact fields
The calls
Thirty-one calls in five groups. Required parameters first, optional after. Calls on a domain you hold take the name in the path.
Orders
| Call | Method and path | Required | Optional |
|---|---|---|---|
| Register a domainRegisterDomain | POST /order/domains/register | domain, regperiod, nameservers, contacts | domainfields, addons, idnLanguage |
| Transfer a domain inTransferDomain | POST /order/domains/transfer | domain, regperiod, nameservers, contacts | eppcode, domainfields, addons, idnLanguage |
| Renew a domainRenewDomain | POST /order/domains/renew | domain, regperiod | addons, idnLanguage |
| Order pricingCartGetPricingRegister · Renew · Transfer | GET /order/pricing/domains/{type} | domain. The type is register, renew or transfer |
Lookup
| Call | Method and path | Parameters |
|---|---|---|
| Check availabilityCheckAvailability | POST /domains/lookup | searchTerm, punyCodeSearchTerm, tldsToInclude[], isIdnDomain, premiumEnabled |
| Domain suggestionsGetDomainSuggestions | POST /domains/lookup/suggestions | the lookup parameters plus suggestionSettings[] |
Domains you hold
| Call | Method and path | Also takes |
|---|---|---|
| Domain informationGetDomainInformation | GET /domains/{domain}/information | |
| Get the auth codeGetEPPCode | GET /domains/{domain}/eppcode | |
| Get contact detailsGetContactDetails | GET /domains/{domain}/contact | |
| Save contact detailsSaveContactDetails | POST /domains/{domain}/contact | contactdetails |
| Get the registrar lockGetRegistrarLock | GET /domains/{domain}/lock | |
| Set the registrar lockSaveRegistrarLock | POST /domains/{domain}/lock | lockstatus |
| Get DNS recordsGetDNS | GET /domains/{domain}/dns | not currently supported for .ly names |
| Save DNS recordsSaveDNS | POST /domains/{domain}/dns | dnsrecords. Not currently supported for .ly names |
| Get email forwardingGetEmailForwarding | GET /domains/{domain}/email | |
| Save email forwardingSaveEmailForwarding | POST /domains/{domain}/email | prefix[], forwardto[] |
| Toggle ID protectionIDProtectToggle | POST /domains/{domain}/protectid | status, 1 or 0 |
| Sync a domainDomainSync | POST /domains/{domain}/sync | |
| Sync a transferTransferSync | POST /domains/{domain}/transfersync | |
| Release a domainReleaseDomain | POST /domains/{domain}/release | transfertag |
| Request deletionRequestDelete | POST /domains/{domain}/delete |
Name servers
| Call | Method and path | Also takes |
|---|---|---|
| Get name serversGetNameServers | GET /domains/{domain}/nameservers | |
| Save name serversSaveNameServers | POST /domains/{domain}/nameservers | ns1 and ns2 required, ns3 to ns5 optional |
| Register a host recordRegisterNameserver | POST /domains/{domain}/nameservers/register | nameserver, ipaddress |
| Modify a host recordModifyNameserver | POST /domains/{domain}/nameservers/modify | nameserver, currentipaddress, newipaddress |
| Delete a host recordDeleteNameserver | POST /domains/{domain}/nameservers/delete | nameserver |
Pricing and account
| Call | Method and path |
|---|---|
| Available TLDsGetAvailableTLDs | GET /tlds |
| TLD pricingGetTldPricing | GET /tlds/pricing |
| Account creditsGetCredits | GET /billing/credits |
| API versionGetVersion | GET /version |
Models
| Model | Fields |
|---|---|
| nameservers | two name servers at least, up to five |
| contacts | registrant, tech, billing, admin, each a contact. registrant also answers to owner, tech to technical |
| contact | firstname, lastname, fullname, companyname, email, address1, city, state, postcode, country, phonenumber required. address2 optional |
| contactdetails | Registrant, Technical, Billing, Admin, each a contact, all required |
| dnsrecords | a list of records. hostname, type, address, priority required. recid names an existing record |
| addons | dnsmanagement, emailforwarding, idprotection, each 1 or 0 |
Testing with .ote.ly
The .ote.ly test zone ships with .ly and the second-level zones on the same endpoint. Register a .ote.ly name with your production credentials and point every call at it. Nothing is charged. No separate URL, no separate keys.
Changelog
Newest first. Fixes that change nothing for your integration ship inside a version.
| Version | Year | What changed |
|---|---|---|
| v2.3 | 2026 | Automatic top-ups in the reseller account. When credits run low, funds are added through the payment method you chose. No change to the API surface. |
| v2.2 | 2025 | The WHMCS module ships two files of your own, one for custom registrar functions and one for hooks. |
| v2.1 | 2023 | The registrar module on the WHMCS Marketplace, then the Blesta extension. |
| v2 | 2021 | The API rebuilt as REST with JSON responses and signed hourly tokens. The v2 generation introduces availability lookup, domain suggestions, the TLD list, TLD and order pricing, account credits, domain information, transfer sync and a version call, structured models for nameservers, DNS records and contacts, a generated WHMCS module and the .ote.ly test zone. |
| v1 | 2017 | The first reseller API. Static API key authentication, an IP allowlist, the core registry operations and a generated WHMCS registrar module. |
The machine-readable files
The same reference ships as an OpenAPI 3.1 contract, openapi.yaml, as plain Markdown, api.md, and as an llms.txt index, beside this page.
Rather not write code?
The WHMCS registrar module and the Blesta extension connect the same account with the same credentials and no custom code. The reseller page covers both, the tiers and how to join.
The .LY reseller program