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

Retrieves the message that must be signed to verify ownership of a blockchain address

Request

Retrieves the message that must be signed to verify ownership of a blockchain address. The message must be signed with the blockchain address private key and submitted using the POST call for verification.

Path
domainstringrequired

The domain name to query profile data

symbolstringrequired

The ticker symbol for the blockchain to verify

curl -i -X GET \
  'https://api.unstoppabledomains.com/profile/user/{domain}/address/{symbol}/signature'

Responses

Message to be signed

Bodyapplication/json
addressstring

The address being verified

messagestring

The message that must be signed by the domain owner's private key to verify the blockchain address

symbolstring

The blockchain associated with the address

Response
application/json
{ "address": "string", "message": "string", "symbol": "string" }

Retrieves the message that must be signed to view private domain profile data

Request

Retrieve the message text that must be signed by the domain owner. The request URL and any request data must match exactly the data that will be used on the signature required endpoint.

Path
domainstringrequired

The domain name to query profile data

Query
expirynumber

Expiry time represented by milliseconds since epoch

Example: expiry=1765522015090
deviceboolean

Indicates the user wishes to authorize and remember the device for profile management

Example: device=true
curl -i -X GET \
  'https://api.unstoppabledomains.com/profile/user/{domain}/signature?expiry=1765522015090&device=true'

Responses

Message to be signed

Bodyapplication/json
messagestring

The message that must be signed by the domain owner's private key to authenticate a subsequent request

headersobject
Response
application/json
{ "message": "string", "headers": { "x-auth-domain": "mydomain.tld", "x-auth-expires": "Milliseconds since epoch" } }

Retrieves the message that must be signed to edit private domain profile data

Request

Retrieve the required message that must be signed by the domain owner to update a domain profile. A POST request must include the exact JSON body that will be used to make the update. The entire contents of the JSON body are included in the message hash, to ensure the signature cannot be used in combination with unauthorized modifications to the domain profile.

Path
domainstringrequired

The domain name to query profile data

Query
expirynumber

Expiry time represented by milliseconds since epoch

Example: expiry=1765522015090
Bodyapplication/jsonrequired
displayNamestring

Name of domain owner

Example: "John Doe"
displayNamePublicboolean
descriptionstring

Short biography about the domain

Example: "This is my domain"
descriptionPublicboolean
locationstring

Location

Example: "Metaverse"
locationPublicboolean
imagePathstring

URL to the domain profile picture

Example: "https://ipfs.io/ipfs/path/to/pfp"
imagePathPublicboolean
coverPathstring

URL to the domain banner image

Example: "https://ipfs.io/ipfs/path/to/banner"
coverPathPublicboolean
web2Urlstring

Website URL

Example: "https://www.mywebsite.com"
publicDomainSellerEmailstring

Public domain seller email visible to anyone

Example: "seller@gmail.com"
web2UrlPublicboolean
showDomainSuggestionboolean
showFeaturedCommunityboolean
showFeaturedPartnerboolean
phoneNumberstring

Phone number of domain owner

Example: "555-555-5555"
phoneNumberPublicboolean
privateEmailstring

Personal email address to contact the domain owner

Example: "me@email.com"
messagingDisabledboolean

Indicates if messaging feature should be disabled

thirdPartyMessagingEnabledboolean

Indicates if third party messaging should be enabled

thirdPartyMessagingConfigTypestring

Type of third part messaging

Example: "Skiff"
dataobject
socialAccountsobject
curl -i -X POST \
  'https://api.unstoppabledomains.com/profile/user/{domain}/signature?expiry=1765522015090' \
  -H 'Content-Type: application/json' \
  -d '{
    "displayName": "John Doe",
    "displayNamePublic": true,
    "description": "This is my domain",
    "descriptionPublic": true,
    "location": "Metaverse",
    "locationPublic": true,
    "imagePath": "https://ipfs.io/ipfs/path/to/pfp",
    "imagePathPublic": true,
    "coverPath": "https://ipfs.io/ipfs/path/to/banner",
    "coverPathPublic": true,
    "web2Url": "https://www.mywebsite.com",
    "publicDomainSellerEmail": "seller@gmail.com",
    "web2UrlPublic": true,
    "showDomainSuggestion": true,
    "showFeaturedCommunity": true,
    "showFeaturedPartner": true,
    "phoneNumber": "555-555-5555",
    "phoneNumberPublic": true,
    "privateEmail": "me@email.com",
    "messagingDisabled": true,
    "thirdPartyMessagingEnabled": true,
    "thirdPartyMessagingConfigType": "Skiff",
    "data": {
      "image": {
        "base64": "aGVsbG8gd29ybGQK",
        "type": "image/png"
      },
      "cover": {
        "base64": "aGVsbG8gd29ybGQK",
        "type": "image/png"
      }
    },
    "socialAccounts": {
      "discord": "discorduser",
      "reddit": "reddituser",
      "twitter": "twitteruser",
      "telegram": "telegramuser",
      "youtube": "youtubeuser"
    }
  }'

Responses

Message to be signed

Bodyapplication/json
messagestring

The message that must be signed by the domain owner's private key to authenticate a subsequent request

headersobject
Response
application/json
{ "message": "string", "headers": { "x-auth-domain": "mydomain.tld", "x-auth-expires": "Milliseconds since epoch" } }

Wallet data endpoints

Operations

Market data endpoints

Operations

Wallet management endpoints

Operations

Solana wallet endpoints

Operations

Wallet storage endpoints

Operations

Identity management endpoints

Operations