The Partner API v3 provides you with the ability to lookup, claim and manage Web3 domains. The API exposes a RESTful interface for interacting with Web3 domains and the Unstoppable Domains registry.
The API takes the hassle of Web3 out of the equation. Unstoppable Domains will handle all blockchain interactions and concepts, while Partners simply use a RESTful API for managing domains.
Since the domains will be in custody of the Partner, through Unstoppable Domains, the Partner is empowered to make any and all changes to the domains on behalf of their users.
Under the hood, Unstoppable Domains will manage dedicated custodial wallets for Partner-owned domains. These wallets are not shared between Partners and will uniquely identify the Partner on the various supported blockchains.
Should the need arise to remove domains from custody, this is supported by changing the owner of domains to external owners.
The API will keep track of a running balance of charges and Unstoppable Domains will periodically invoice Partners to settle that balance. This empowers Partners to build payment processing in a way that works best for them.
Domain details can be viewed across all of our supported blockchains:
In this version of the API, Domains can only be managed on Polygon (MATIC). Ethereum (ETH) management support is coming soon.
The API has some important concepts, in addition to Web3 Domains, that provide added utility, consistency and information.
Web3 domains exist on the supported Blockchains, and are owned by wallet addresses associated with those Blockchains.
We take ownership a step further, to provide improved security and reliability, by including an owner type
in our ownership data.
The result is that a Domain's owner is defined by two values: address
and type
The owner type
can be one of the following:
NONE
: Either the domain has never been owned or belongs to a "burn" addressUD
: Owned by Unstoppable DomainsSELF
: Domain belongs to a wallet addressed associated with your account, indicating you are able to manage it via the APIEXTERNAL
: Owner doesn't qualify as any of the above. Changing to an EXTERNAL
owner will result in the domain belonging to an address outside of the management of Unstoppable Domains and we will have no way to recover it.By defining an owner in two parts (address
and type
) we ensure any irreversible action, such as transferring ownership, is deliberate and intended by requiring both the address
and type
in the request.
All interactions with the API that initiate changes will create an Operation for tracking that change. Operations can complete immediately or run in the background over the course of several minutes, depending on the Operation type and current conditions on the Blockchain.
Operations include dependencies that represent the smaller units of work associated with the overall operation. These dependencies can also be tracked through the API and each have their own status and metadata.
Your integration should properly handle and anticipate all of the following possible statuses for Operations and their dependencies:
QUEUED
: The Operation has not started processing yet, but should be started shortlyPROCESSING
: The Operation has started, often involving sending transactions to the BlockchainCOMPLETED
: The Operation has finished processing successfullyFAILED
: The Operation has finished processing and has either fully or partially failedCANCELLED
: The Operation has been cancelled, usually due to a failure with a sibling dependencySee the Operations API for additional information.
Domains ownership on the Blockchain is handled by associating a Domain with an "address". These addresses are typically managed by Wallets (usually in the form of an application on your computer or mobile device) that manage the private key for the public "address".
The API provides endpoints for creating/managing Wallets within your account to enable you to handle Domain ownership distribution in whatever way works for you. Any Domain that is owned by one of your account's Wallets is fully in your control to manage.
See the Wallets API for additional information.
Contact our Partner Engineering Team to get access to the API or learn more.
Domain searching and management. All functionality applies to both second-level domains and subdomains, unless otherwise noted.
Get domain availability and owner details for multiple domains using the query string search options. Optionally, use the $expand
query string to include additional data in the response (ie. ?$expand=records&$expand=registration
).
If the domain is available to be claimed it will have a availability.status
of AVAILABLE
and will include an availability.price
object.
{- "@type": "unstoppabledomains.com/partner.v3.List",
- "items": [
- {
- "@type": "unstoppabledomains.com/partner.v3.Domain",
- "records": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "name": "matt.crypto",
- "owner": {
- "type": "NONE",
- "address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}, - "availability": {
- "status": "AVAILABLE",
- "price": {
- "listPrice": {
- "usdCents": 1000
}, - "subTotal": {
- "usdCents": 1000
}
}
}, - "registration": {
- "tokenId": "string"
}, - "blockchain": "MATIC"
}
]
}
If a domain is available, use this route to claim it to your account. The domain will be minted or transfered to your custodial wallet where only Unstoppable Domains, on your behalf, will be able to make changes to it.
The price of the domain will be automatically added to your running balance with Unstoppable Domains. The pending balance of your account will be invoiced periodically.
If you do not provide an owner
in your request, your account's default wallet address will be used as the owner. Use GET /account
to confirm your default wallet address.
When providing an owner
object in your request, be sure the type
aligns with the address
. To claim to one of your own wallets, the type
must be SELF
. Use GET /account/wallets
to see your list of available wallets.
{- "name": "matt.crypto",
- "records": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "owner": {
- "type": "NONE",
- "address": "string"
}
}
{- "@type": "unstoppabledomains.com/partner.v3.DomainOperationResult",
- "operation": {
- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.Operation",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790,
- "dependencies": [
- {
- "id": "bc-2db427bd-5613-40c7-85b1-ab38beed0ed0",
- "status": "QUEUED",
- "@type": "unstoppabledomains.com/partner.v3.BlockchainOperation",
- "transaction": {
- "hash": "string"
}, - "type": "MINT",
- "parameters": {
- "initialRecords": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "toAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
}
]
}
}
If a subdomain is available, and the Parent domain in your account's custody, use this route to claim it to your account. The domain will be minted or transfered to your custodial wallet where only Unstoppable Domains, on your behalf, will be able to make changes to it.
The price of the domain will be automatically added to your running balance with Unstoppable Domains. The pending balance of your account will be invoiced periodically.
If you do not provide an owner
in your request, your account's default wallet address will be used as the owner. Use GET /account
to confirm your default wallet address.
When providing an owner
object in your request, be sure the type
aligns with the address
. To claim to one of your own wallets, the type
must be SELF
. Use GET /account/wallets
to see your list of available wallets.
After successfully claiming a subdomain to your account, you can use any of the Domain management APIs to manage it just like any other domain.
While claiming subdomains uses a different process, in every other way a subdomain is just like a second-level domain.
{- "name": "matt.crypto",
- "records": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "owner": {
- "type": "NONE",
- "address": "string"
}
}
{- "@type": "unstoppabledomains.com/partner.v3.DomainOperationResult",
- "operation": {
- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.Operation",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790,
- "dependencies": [
- {
- "id": "bc-2db427bd-5613-40c7-85b1-ab38beed0ed0",
- "status": "QUEUED",
- "@type": "unstoppabledomains.com/partner.v3.BlockchainOperation",
- "transaction": {
- "hash": "string"
}, - "type": "MINT",
- "parameters": {
- "initialRecords": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "toAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
}
]
}
}
Get information about the domain's current owner and availability status. Optionally, use the $expand
query string to include additional data in the response (ie. ?$expand=records&$expand=registration
).
If the domain is available to be claimed it will have a availability.status
of AVAILABLE
and will include an availability.price
object.
{- "@type": "unstoppabledomains.com/partner.v3.Domain",
- "records": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "name": "matt.crypto",
- "owner": {
- "type": "NONE",
- "address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}, - "availability": {
- "status": "AVAILABLE",
- "price": {
- "listPrice": {
- "usdCents": 1000
}, - "subTotal": {
- "usdCents": 1000
}
}
}, - "registration": {
- "tokenId": "string"
}, - "blockchain": "MATIC"
}
Perform Domain updates while preserving the existing records.
{
"owner": {
"type": "EXTERNAL",
"address": "0x123"
}
}
Changes owner to the new owner address without modifying the domain records.
When changing owner of a domain, you must provide both a type
and an address
to clearly indicate the intent of the change.
NONE
: Used when changing the owner to a "burn" address, which will result in nobody owning the domain0x0000000000000000000000000000000000000000
and 0x000000000000000000000000000000000000dEaD
UD
: Used when changing the owner to an addressed owned by Unstoppable DomainsSELF
: Used when changing the owner to another address that belongs to your accountEXTERNAL
: Used when changing the owner to address that doesn't qualify as any of the above. {
"records": {
"key2": "value2"
}
}
When applied to a domain with existing records, or with an existing key2
, will result in only the key2
value being set to the new value.
Validation error or bad request due to domain custody, unsupported blockchain, etc.
{- "owner": {
- "type": "NONE",
- "address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}, - "records": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}
}
{- "@type": "unstoppabledomains.com/partner.v3.DomainOperationResult",
- "operation": {
- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.Operation",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790,
- "dependencies": [
- {
- "id": "bc-2db427bd-5613-40c7-85b1-ab38beed0ed0",
- "status": "QUEUED",
- "@type": "unstoppabledomains.com/partner.v3.BlockchainOperation",
- "transaction": {
- "hash": "string"
}, - "type": "MINT",
- "parameters": {
- "initialRecords": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "toAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
}
]
}
}
Perform Domain updates while doing full resets of the records.
{
"owner": {
"type": "EXTERNAL",
"address": "0x123"
},
"records": {}
}
Clears all records from the domain, then changes owner to the new owner address.
NOTE: You must include "records": {}
to indicate the intent to clear records.
When changing owner of a domain, you must provide both a type
and an address
to clearly indicate the intent of the change.
NONE
: Used when changing the owner to a "burn" address, which will result in nobody owning the domain0x0000000000000000000000000000000000000000
and 0x000000000000000000000000000000000000dEaD
UD
: Used when changing the owner to an addressed owned by Unstoppable DomainsSELF
: Used when changing the owner to another address that belongs to your accountEXTERNAL
: Used when changing the owner to address that doesn't qualify as any of the above.{
"records": {
"key2": "value2"
}
}
When applied to a domain with existing records, only key2
will remain after the update is complete.
Validation error or bad request due to domain custody, unsupported blockchain, etc.
{- "owner": {
- "type": "NONE",
- "address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}, - "records": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}
}
{- "@type": "unstoppabledomains.com/partner.v3.DomainOperationResult",
- "operation": {
- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.Operation",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790,
- "dependencies": [
- {
- "id": "bc-2db427bd-5613-40c7-85b1-ab38beed0ed0",
- "status": "QUEUED",
- "@type": "unstoppabledomains.com/partner.v3.BlockchainOperation",
- "transaction": {
- "hash": "string"
}, - "type": "MINT",
- "parameters": {
- "initialRecords": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "toAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
}
]
}
}
Return the domain to Unstoppable Domains so it is once again considered available for claiming. The amount previously added to your running balance will be removed after successfully returning a domain.
Returns are only allowed within 14 days of the original claim date, per our return policy.
{- "@type": "unstoppabledomains.com/partner.v3.DomainOperationResult",
- "operation": {
- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.Operation",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790,
- "dependencies": [
- {
- "id": "bc-2db427bd-5613-40c7-85b1-ab38beed0ed0",
- "status": "QUEUED",
- "@type": "unstoppabledomains.com/partner.v3.BlockchainOperation",
- "transaction": {
- "hash": "string"
}, - "type": "MINT",
- "parameters": {
- "initialRecords": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "toAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
}
]
}
}
All asynchronous processes handled by the API are represented as Operations. This includes claiming a domain, updating a domain's records, changing a domain's owner and returning a domain.
Get paginated list of past operations, with the ability to filter based on various criteria.
Results ordered with newest operations first.
{- "@type": "unstoppabledomains.com/partner.v3.CursorList",
- "items": [
- {
- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.OperationMinimal",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790
}
], - "next": {
- "$cursor": "string"
}
}
Use this endpoint to check on the status for any Operation being processed by the API.
{- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.Operation",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790,
- "dependencies": [
- {
- "id": "bc-2db427bd-5613-40c7-85b1-ab38beed0ed0",
- "status": "QUEUED",
- "@type": "unstoppabledomains.com/partner.v3.BlockchainOperation",
- "transaction": {
- "hash": "string"
}, - "type": "MINT",
- "parameters": {
- "initialRecords": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "toAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
}
]
}
{- "@type": "unstoppabledomains.com/partner.v3.List",
- "items": [
- {
- "@type": "unstoppabledomains.com/partner.v3.DomainSuggestion",
- "name": "matt.crypto",
- "price": {
- "listPrice": {
- "usdCents": 1000
}, - "subTotal": {
- "usdCents": 1000
}
}
}
]
}
Any domains held in these wallets can be managed by your account. You can use these wallets to distribute domains in whatever way works best for you.
Paginated list of your wallets
{- "@type": "unstoppabledomains.com/partner.v3.CursorList",
- "items": [
- {
- "@type": "unstoppabledomains.com/partner.v3.InternalWalletMinimal",
- "address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
], - "next": {
- "$cursor": "string"
}
}
Create an additional custodial wallet in your account.
{- "@type": "unstoppabledomains.com/partner.v3.InternalWalletCreateResult",
- "operation": {
- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.Operation",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790,
- "dependencies": [
- {
- "id": "bc-2db427bd-5613-40c7-85b1-ab38beed0ed0",
- "status": "QUEUED",
- "@type": "unstoppabledomains.com/partner.v3.BlockchainOperation",
- "transaction": {
- "hash": "string"
}, - "type": "MINT",
- "parameters": {
- "initialRecords": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "toAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
}
]
}
}
{- "@type": "unstoppabledomains.com/partner.v3.InternalWalletMinimal",
- "address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
Change your default wallet address, which is used when no wallet address is specified during domain claiming.
required | EvmOwnerAddress (string) (OwnerAddress) |
{- "defaultWalletAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
{- "@type": "unstoppabledomains.com/partner.v3.AccountUpdateResult",
- "operation": {
- "id": "op-4abb409c-9283-4589-bd36-d27a757a2165",
- "@type": "unstoppabledomains.com/partner.v3.Operation",
- "status": "QUEUED",
- "type": "DOMAIN_CLAIM",
- "domain": "matt.crypto",
- "lastUpdatedTimestamp": 1684356429790,
- "dependencies": [
- {
- "id": "bc-2db427bd-5613-40c7-85b1-ab38beed0ed0",
- "status": "QUEUED",
- "@type": "unstoppabledomains.com/partner.v3.BlockchainOperation",
- "transaction": {
- "hash": "string"
}, - "type": "MINT",
- "parameters": {
- "initialRecords": {
- "crypto.ETH.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321",
- "crypto.MATIC.version.MATIC.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e5678",
- "crypto.MATIC.version.ERC20.address": "0xb4783AeF93923a2d4eEA29C84f347F26E62e0921"
}, - "toAddress": "0xb4783AeF93923a2d4eEA29C84f347F26E62e4321"
}
}
]
}
}