Skip to content

Profile API (1.0.0)

Feature Overview

The Profile API allows clients to retrieve and update domain profile details. There are both public and authenticated endpoints available for domain profiles. For authenticated endpoints, the API requires request signatures generated using the domain owner's private key.

Public endpoint overview

These endpoints are available without any authentication.

  • Retrieve public profile data associated with a domain
    • Domain owner controls which fields are public or private
    • Private data is always the default
  • Retrieve NFTs for addresses associated with domain
    • Domain can have any number of blockchain addresses associated for resolution services
    • Resolution addresses are stored on-chain
    • Query on-chain data for NFTs
  • Retrieve badges data for addresses associated with domain
  • Retrieve the following status of two domains

Authenticated endpoint overview

The owner of a domain may use this API to view or edit their private profile data. When managing profile data, authentication headers must be provided using the approach described below.

How to authenticate

  • Determine the message that must be signed through the message generator endpoint
    • Request GET /api/user/{domain}/signature?device=true&expiry={timestamp}
      • Replace '{domain}' with desired domain
      • Replace '{expiry}' with desired Unix epoch timestamp
    • Response contains the message that must be signed
      • Message is a unique hash value
      • Represents combination of provided request parameters
      • Includes an expiration timestamp
  • User must sign the message returned by the message generator API
    • For example, the Metamask wallet could be used to sign the message
    • Generated signature is used in header of subsequent GET or POST request
  • Construct a request to the desired endpoint that requires user authentication
    • Must include headers
      • x-auth-domain - Must equal the {domain} in context
      • x-auth-expiration - Must equal the {expiry} timestamp in the signed message
      • x-auth-signature - Must be set to the value of the user generated signature
Languages
Servers
Production
https://api.unstoppabledomains.com/profile/
Staging
https://api.ud-staging.com/profile/

Badge endpoints

Operations

Follower endpoints

Operations

Profile data endpoints

Operations

Swap endpoints

Operations

Search endpoints

Operations

Status

Operations

Profile management endpoints

Operations

Message generator endpoints

Operations

Wallet data endpoints

Operations

Market data endpoints

Operations

Wallet management endpoints

Operations

Retrieves account status for an account specified by an identifier

Request

Retrieves account status for an account specified by an identifier

Path
identifierstringrequired

An account identifier

curl -i -X POST \
  'https://api.unstoppabledomains.com/profile/user/{identifier}/wallet/account'

Responses

Account status

Bodyapplication/json
emailAddressstring

Email address associated with the account

Example: "myname@email.com"
activeboolean

Flag to indicate the account is active

Example: true
clocknumber

Expected epoch milliseconds for cryptography operations

Example: 1722600216741
Response
application/json
{ "emailAddress": "myname@email.com", "active": true, "clock": 1722600216741 }

Request to synchronize wallet addresses with tokenized identity

Request

Request to synchronize wallet addresses with tokenized identity

Path
addressstringrequired

Any blockchain address associated with the wallet

Headers
Authorizationstringrequired

The JWT access token that authorizes the request

Example: my-jwt-access-token
curl -i -X POST \
  'https://api.unstoppabledomains.com/profile/user/{address}/wallet/identity' \
  -H 'Authorization: my-jwt-access-token'

Responses

Successful request to tokenize the identity

Bodyapplication/json
accountstring

Account identifier associated with the identity

Example: "user123xyz"
domainstring

Obfuscated domain name associated with the identity

Example: "22aba33b5d41558729dd176c8727239577562ccd1a939ca8931957b352c8342d.crypto"
statusstring

Describes the state of the tokenized identity

Example: "ready"
Response
application/json
{ "account": "user123xyz", "domain": "22aba33b5d41558729dd176c8727239577562ccd1a939ca8931957b352c8342d.crypto", "status": "ready" }

Sends an Unstoppable Lite Wallet invitation to a specified contact

Request

Sends an Unstoppable Lite Wallet invitation to a specified contact

Path
addressstringrequired

A wallet address associated with the invitation sender account

Bodyapplication/jsonrequired
emailAddressstring

Email address to register

Example: "user@email.com"
passwordstring

Password to use when creating new wallet

Example: "secret-password"
curl -i -X POST \
  'https://api.unstoppabledomains.com/profile/user/{address}/wallet/invite' \
  -H 'Content-Type: application/json' \
  -d '{
    "emailAddress": "user@email.com",
    "password": "secret-password"
  }'

Responses

Account status

Bodyapplication/json
emailAddressstring

Email address associated with the account

Example: "myname@email.com"
activeboolean

Flag to indicate the account is active

Example: true
clocknumber

Expected epoch milliseconds for cryptography operations

Example: 1722600216741
Response
application/json
{ "emailAddress": "myname@email.com", "active": true, "clock": 1722600216741 }

An asynchronous request to claim a wallet to self custody

Request

An asynchronous request to claim a wallet to self custody, using a server generated secret.

Headers
x-api-keystringrequired

The server generated secret required to authorize the request. This value should be the same one used returned in the POST response when the wallet was created.

Example: user-provided-secret
Bodyapplication/jsonrequired
emailAddressstring

Email address to register

Example: "user@email.com"
passwordstring

Password to use when creating new wallet

Example: "secret-password"
curl -i -X POST \
  https://api.unstoppabledomains.com/profile/user/wallet/claim \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: user-provided-secret' \
  -d '{
    "emailAddress": "user@email.com",
    "password": "secret-password"
  }'

Responses

Successfully requested to claim the wallet to self custody. The status will of the response will always be PROCESSING. Must use the corresponding GET endpoint to check status to determine when claiming is complete.

Bodyapplication/json
secretstring

A secret created by the server and provided to the client only at initial wallet creation

Example: "server-generated-secret"
statestring

Indicates custody state of the wallet (CUSTODY or SELF_CUSTODY)

Example: "SELF_CUSTODY"
statusstring

Indicates status of the onboarding process

Example: "COMPLETE"
addressesobject

Blockchain addresses associated with the wallet

Response
application/json
{ "secret": "server-generated-secret", "state": "SELF_CUSTODY", "status": "COMPLETE", "addresses": { "SYMBOL": "blockchain-address" } }

Get status of a wallet claim to self custody

Request

Get status of a wallet claim to self custody.

Headers
x-api-keystringrequired

The server generated secret required to authorize the request. This value should be the same one used returned in the POST response when the wallet was created.

Example: user-provided-secret
curl -i -X GET \
  https://api.unstoppabledomains.com/profile/user/wallet/claim \
  -H 'x-api-key: user-provided-secret'

Responses

Successfully retrieved self custody wallet status

Bodyapplication/json
secretstring

A secret created by the server and provided to the client only at initial wallet creation

Example: "server-generated-secret"
statestring

Indicates custody state of the wallet (CUSTODY or SELF_CUSTODY)

Example: "SELF_CUSTODY"
statusstring

Indicates status of the onboarding process

Example: "COMPLETE"
addressesobject

Blockchain addresses associated with the wallet

Response
application/json
{ "secret": "server-generated-secret", "state": "SELF_CUSTODY", "status": "COMPLETE", "addresses": { "SYMBOL": "blockchain-address" } }

An asynchronous request to create a wallet

Request

An asynchronous request to create a wallet. The resulting wallet will be custodial, but the user can claim custody at a later time using the server generated secret provided in the response.

Headers
x-api-keystringrequired

Required to authorize the request for a new wallet

Example: wallet-creation-secret
curl -i -X POST \
  https://api.unstoppabledomains.com/profile/user/wallet/launch \
  -H 'x-api-key: wallet-creation-secret'

Responses

Successfully requested to create a custody wallet. The status will of the response will always be PROCESSING with an empty list of addresses. Must use the corresponding GET endpoint to check status and address metadata, using the provided server generated secret as authentication.

Bodyapplication/json
secretstring

A secret created by the server and provided to the client only at initial wallet creation

Example: "server-generated-secret"
statestring

Indicates custody state of the wallet (CUSTODY or SELF_CUSTODY)

Example: "SELF_CUSTODY"
statusstring

Indicates status of the onboarding process

Example: "COMPLETE"
addressesobject

Blockchain addresses associated with the wallet

Response
application/json
{ "secret": "server-generated-secret", "state": "SELF_CUSTODY", "status": "COMPLETE", "addresses": { "SYMBOL": "blockchain-address" } }

Get status of a wallet

Request

Get status of a wallet associated with a server generated secret. The secret is provided to the client at wallet create time.

Headers
x-api-keystringrequired

The server generated secret required to authorize the request. This value should be the same one used returned in the POST response when the wallet was created.

Example: user-provided-secret
curl -i -X GET \
  https://api.unstoppabledomains.com/profile/user/wallet/launch \
  -H 'x-api-key: user-provided-secret'

Responses

Successfully retrieved custody wallet status

Bodyapplication/json
secretstring

A secret created by the server and provided to the client only at initial wallet creation

Example: "server-generated-secret"
statestring

Indicates custody state of the wallet (CUSTODY or SELF_CUSTODY)

Example: "SELF_CUSTODY"
statusstring

Indicates status of the onboarding process

Example: "COMPLETE"
addressesobject

Blockchain addresses associated with the wallet

Response
application/json
{ "secret": "server-generated-secret", "state": "SELF_CUSTODY", "status": "COMPLETE", "addresses": { "SYMBOL": "blockchain-address" } }

Request a one time code required to setup a new walletDeprecated

Request

If a wallet does not already exist, a one time code will created and sent to the provided email address.

Bodyapplication/jsonrequired
emailAddressstring

Email address to register

Example: "user@email.com"
passwordstring

Password to use when creating new wallet

Example: "secret-password"
curl -i -X POST \
  https://api.unstoppabledomains.com/profile/user/wallet \
  -H 'Content-Type: application/json' \
  -d '{
    "emailAddress": "user@email.com",
    "password": "secret-password"
  }'

Responses

Successfully sent one time code to verify email address

Bodyapplication/json
emailAddressstring

Email address associated with the account

Example: "myname@email.com"
activeboolean

Flag to indicate the account is active

Example: true
clocknumber

Expected epoch milliseconds for cryptography operations

Example: 1722600216741
Response
application/json
{ "emailAddress": "myname@email.com", "active": true, "clock": 1722600216741 }

Create a wallet with a verified email addressDeprecated

Request

The one time code generated with the associated POST request must be provided in the request body.

Bodyapplication/jsonrequired
emailAddressstring

Email address to register

Example: "user@email.com"
passwordstring

Password to use when creating new wallet

Example: "secret-password"
curl -i -X POST \
  https://api.unstoppabledomains.com/profile/user/wallet/register \
  -H 'Content-Type: application/json' \
  -d '{
    "emailAddress": "user@email.com",
    "password": "secret-password"
  }'

Responses

Successfully submitted request to create wallet

Bodyapplication/json
emailAddressstring

Email address associated with the account

Example: "myname@email.com"
activeboolean

Flag to indicate the account is active

Example: true
clocknumber

Expected epoch milliseconds for cryptography operations

Example: 1722600216741
Response
application/json
{ "emailAddress": "myname@email.com", "active": true, "clock": 1722600216741 }

Solana wallet endpoints

Operations

Wallet storage endpoints

Operations

Identity management endpoints

Operations