.LY domain reseller API documentation

Register, renew, transfer and manage .ly domains from your own system. REST over HTTPS, form-encoded requests, JSON responses. Every call works against the .ote.ly test zone without spending credit.

Reseller API · one registration

  1. Your platformyour codeSent

    POST /order/domains/registerdomain=get.ly&regperiod=1

  2. reg.ly APIREST · JSONSuccess

    • HMAC-SHA256 · valid
    • order created · credits charged

    200 "success"

  3. RegistryNIC.LY

    Status
    active
    Nameservers
    ns1.get.ly
    Registrar
    reg.ly

The endpoint

One endpoint serves every call. Paths in this reference are appended to it.

Endpoint
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
# 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.

curl · lookup, then a test registration
# 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

CallMethod and pathRequiredOptional
Register a domainRegisterDomainPOST /order/domains/registerdomain, regperiod, nameservers, contactsdomainfields, addons, idnLanguage
Transfer a domain inTransferDomainPOST /order/domains/transferdomain, regperiod, nameservers, contactseppcode, domainfields, addons, idnLanguage
Renew a domainRenewDomainPOST /order/domains/renewdomain, regperiodaddons, idnLanguage
Order pricingCartGetPricingRegister · Renew · TransferGET /order/pricing/domains/{type}domain. The type is register, renew or transfer

Lookup

CallMethod and pathParameters
Check availabilityCheckAvailabilityPOST /domains/lookupsearchTerm, punyCodeSearchTerm, tldsToInclude[], isIdnDomain, premiumEnabled
Domain suggestionsGetDomainSuggestionsPOST /domains/lookup/suggestionsthe lookup parameters plus suggestionSettings[]

Domains you hold

CallMethod and pathAlso takes
Domain informationGetDomainInformationGET /domains/{domain}/information
Get the auth codeGetEPPCodeGET /domains/{domain}/eppcode
Get contact detailsGetContactDetailsGET /domains/{domain}/contact
Save contact detailsSaveContactDetailsPOST /domains/{domain}/contactcontactdetails
Get the registrar lockGetRegistrarLockGET /domains/{domain}/lock
Set the registrar lockSaveRegistrarLockPOST /domains/{domain}/locklockstatus
Get DNS recordsGetDNSGET /domains/{domain}/dnsnot currently supported for .ly names
Save DNS recordsSaveDNSPOST /domains/{domain}/dnsdnsrecords. Not currently supported for .ly names
Get email forwardingGetEmailForwardingGET /domains/{domain}/email
Save email forwardingSaveEmailForwardingPOST /domains/{domain}/emailprefix[], forwardto[]
Toggle ID protectionIDProtectTogglePOST /domains/{domain}/protectidstatus, 1 or 0
Sync a domainDomainSyncPOST /domains/{domain}/sync
Sync a transferTransferSyncPOST /domains/{domain}/transfersync
Release a domainReleaseDomainPOST /domains/{domain}/releasetransfertag
Request deletionRequestDeletePOST /domains/{domain}/delete

Name servers

CallMethod and pathAlso takes
Get name serversGetNameServersGET /domains/{domain}/nameservers
Save name serversSaveNameServersPOST /domains/{domain}/nameserversns1 and ns2 required, ns3 to ns5 optional
Register a host recordRegisterNameserverPOST /domains/{domain}/nameservers/registernameserver, ipaddress
Modify a host recordModifyNameserverPOST /domains/{domain}/nameservers/modifynameserver, currentipaddress, newipaddress
Delete a host recordDeleteNameserverPOST /domains/{domain}/nameservers/deletenameserver

Pricing and account

CallMethod and path
Available TLDsGetAvailableTLDsGET /tlds
TLD pricingGetTldPricingGET /tlds/pricing
Account creditsGetCreditsGET /billing/credits
API versionGetVersionGET /version

Models

ModelFields
nameserverstwo name servers at least, up to five
contactsregistrant, tech, billing, admin, each a contact. registrant also answers to owner, tech to technical
contactfirstname, lastname, fullname, companyname, email, address1, city, state, postcode, country, phonenumber required. address2 optional
contactdetailsRegistrant, Technical, Billing, Admin, each a contact, all required
dnsrecordsa list of records. hostname, type, address, priority required. recid names an existing record
addonsdnsmanagement, 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.

VersionYearWhat changed
v2.32026Automatic 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.22025The WHMCS module ships two files of your own, one for custom registrar functions and one for hooks.
v2.12023The registrar module on the WHMCS Marketplace, then the Blesta extension.
v22021The 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.
v12017The 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

Reviewed on 10 Nov 2026 by the reg.ly team.

© 2014–2026 Midmak United, LLC. All rights reserved.

All prices are in USD. Please keep exchange rates in mind when placing an order.