Unstoppable Domains Wallets API

Manage custody wallets used for storing and managing domains without any signature collection. These wallets provide the most streamlined way to interact with domains since the initial management request is the only step needed to make changes.

Operations 4

GET /account/wallets Get list of account wallets #
POST /account/wallets Create a new custody wallet #
GET /account/wallets/{address} Get wallet details #
PATCH /account/wallets/{address} Update custody wallet #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/unstoppable-domains-wallets-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

unstoppable-domains-wallets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Web3 Partner API v3 Wallets API
  version: 3.0.0
  contact:
    name: Unstoppable Domains (Partner Engineering)
    email: partnerengineering@unstoppabledomains.com
  description: '# Feature Overview

    The Web3 Partner API v3 provides you with the ability to lookup, register and manage Web3 domains.'
servers:
- url: https://api.unstoppabledomains.com/partner/v3
  description: Production
- url: https://api.ud-sandbox.com/partner/v3
  description: Sandbox
security:
- bearer: []
tags:
- name: Wallets
  x-displayName: Custody Wallets
  description: 'Manage custody wallets used for storing and managing domains without any signature collection.


    These wallets provide the most streamlined way to interact with domains since the initial management request is the only step needed to make changes.'
paths:
  /account/wallets:
    get:
      operationId: getWallets
      summary: Get list of account wallets
      description: 'Any domains held in the wallets of type `SELF` can be managed by your account without any signature collection. You can use these `SELF` wallets to distribute domains in whatever way works best for you.


        This route will return both custody (`SELF`) and self-custody (`EXTERNAL`) wallets associated with your account. To only list custody wallets, simply include the `?type=SELF` query string parameter.'
      parameters:
      - name: $cursor
        required: false
        description: The `next.$cursor` value from the previous page response
        in: query
        schema:
          type: string
      - name: type
        in: query
        schema:
          type: array
          items:
            type: string
            enum:
            - SELF
            - EXTERNAL
      responses:
        '200':
          description: Paginated list of wallets associated with your account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletListResponse'
      tags:
      - Wallets
    post:
      operationId: createWallet
      summary: Create a new custody wallet
      description: Create an additional custodial wallet in your account.
      parameters: []
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletCreateResponse'
        400:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                WalletLimitReached:
                  $ref: '#/components/examples/WalletLimitReached'
      tags:
      - Wallets
  /account/wallets/{address}:
    get:
      operationId: getWallet
      summary: Get wallet details
      description: 'Get details for a wallet associated with your account. This route supports both custody (`SELF`) and self-custody (`EXTERNAL`) wallets.


        Include the `?$expand=primaryDomain` to include the wallet''s Primary Domain (also known as the Reverse Resolution) in the response.'
      parameters:
      - name: address
        required: true
        in: path
        schema:
          type: string
      - name: $expand
        in: query
        schema:
          enum:
          - primaryDomain
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MinimalWalletResponse'
        404:
          description: Wallet does not exist in your account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Wallets
    patch:
      operationId: updateWallet
      summary: Update custody wallet
      description: 'Update details for a specific custody wallet in your account.


        This can be used to set (or clear) the Primary Domain (also known as the Reverse Resolution) for a custody wallet.


        To clear the Primary Domain for a wallet, pass a `null` value for the `primaryDomain` property within the request body.'
      parameters:
      - name: address
        required: true
        in: path
        schema:
          type: string
      - name: $preview
        in: query
        schema:
          $ref: '#/components/schemas/OperationPreviewParameter'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletUpdateRequestBody'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletUpdateResponse'
        400:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                ValidationError:
                  $ref: '#/components/examples/ValidationError'
                NoChange:
                  $ref: '#/components/examples/NoChange'
                CustodyRequired:
                  $ref: '#/components/examples/CustodyRequired'
                BadRequest:
                  $ref: '#/components/examples/BadRequest'
        404:
          description: Wallet does not exist in your account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Wallets
components:
  examples:
    ValidationError:
      description: Validation error due to incorrect parameters.
      value:
        code: VALIDATION
    BadRequest:
      description: Request is malformed or invalid.
      value:
        code: BAD_REQUEST
    CustodyRequired:
      description: The domain or wallet is not in your custody.
      value:
        code: CUSTODY_REQUIRED
    NoChange:
      description: No change would occur by the requested operation.
      value:
        code: NO_CHANGE
    WalletLimitReached:
      description: Maximum number of wallets for your account has been reached
      value:
        code: WALLET_LIMIT_REACHED
  schemas:
    SubOperationResponse:
      type: object
      properties:
        id:
          type: string
          example: bc-2db427bd-5613-40c7-85b1-ab38beed0ed0
        status:
          $ref: '#/components/schemas/OperationStatus'
      required:
      - status
      - id
    WebhookDeleteParametersResponse:
      type: object
      properties:
        id:
          type: string
      required:
      - id
    WalletCreateResultResponse:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/OwnerAddress'
      required:
      - address
    ErrorResponseMulti:
      type: object
      properties:
        code:
          type: string
          enum:
          - MULTIPLE_ERRORS
        message:
          type: string
        context:
          $ref: '#/components/schemas/ErrorResponseContext'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorResponseSingle'
      required:
      - code
      - errors
    WalletSetDefaultParametersResponse:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/OwnerAddress'
      required:
      - address
    TransferParametersResponse:
      type: object
      properties:
        fromAddress:
          $ref: '#/components/schemas/OwnerAddress'
        toAddress:
          $ref: '#/components/schemas/OwnerAddress'
        resetRecords:
          type: boolean
      required:
      - fromAddress
      - toAddress
      - resetRecords
    MintSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/BlockchainSubOperationResponse'
      - type: object
        properties:
          type:
            type: string
            enum:
            - MINT
          parameters:
            $ref: '#/components/schemas/MintParametersResponse'
        required:
        - type
        - parameters
    UpdateRecordsParametersResponse:
      type: object
      properties:
        recordUpdates:
          $ref: '#/components/schemas/DomainRecords'
        resetRecords:
          type: boolean
      required:
      - recordUpdates
      - resetRecords
    WalletCreateSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/PlatformSubOperationResponse'
      - type: object
        properties:
          result:
            $ref: '#/components/schemas/WalletCreateResultResponse'
          type:
            type: string
            enum:
            - WALLET_CREATE
        required:
        - type
    WalletSetDefaultSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/PlatformSubOperationResponse'
      - type: object
        properties:
          parameters:
            $ref: '#/components/schemas/WalletSetDefaultParametersResponse'
          type:
            type: string
            enum:
            - WALLET_SET_DEFAULT
        required:
        - parameters
        - type
    PlatformSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/SubOperationResponse'
      - type: object
        properties:
          '@type':
            type: string
            enum:
            - unstoppabledomains.com/partner.v3.PlatformOperation
        required:
        - '@type'
    ErrorResponse:
      oneOf:
      - $ref: '#/components/schemas/ErrorResponseSingle'
      - $ref: '#/components/schemas/ErrorResponseMulti'
    WebhookCreateParametersResponse:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/WebhookType'
        url:
          type: string
          format: uri
      required:
      - type
      - url
    ErrorResponseContextEntity:
      oneOf:
      - $ref: '#/components/schemas/ErrorResponseContextEntitySingle'
      - $ref: '#/components/schemas/ErrorResponseContextEntityMulti'
    OwnerAddress:
      oneOf:
      - $ref: '#/components/schemas/EvmOwnerAddress'
    WebhookCreateSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/PlatformSubOperationResponse'
      - type: object
        properties:
          parameters:
            $ref: '#/components/schemas/WebhookCreateParametersResponse'
          result:
            $ref: '#/components/schemas/WebhookCreateResultResponse'
          type:
            type: string
            enum:
            - WEBHOOK_CREATE
        required:
        - parameters
        - type
    ErrorResponseContextEntityMulti:
      type: object
      properties:
        type:
          type: string
          enum:
          - MULTI_VALUE
        values:
          type: array
          items:
            $ref: '#/components/schemas/ErrorResponseContextEntitySingle'
      required:
      - type
      - values
    ErrorResponseContextEntitySingle:
      type: object
      properties:
        type:
          type: string
        value:
          type: string
      required:
      - type
      - value
    OperationCheckResponse:
      type: object
      properties:
        id:
          type: string
          example: op-4abb409c-9283-4589-bd36-d27a757a2165
        '@type':
          type: string
          enum:
          - unstoppabledomains.com/partner.v3.Operation
        status:
          $ref: '#/components/schemas/OperationStatus'
        type:
          $ref: '#/components/schemas/OperationType'
        domain:
          $ref: '#/components/schemas/DomainName'
        lastUpdatedTimestamp:
          type: number
          example: 1684356429790
        dependencies:
          type: array
          items:
            anyOf:
            - $ref: '#/components/schemas/MintSubOperationResponse'
            - $ref: '#/components/schemas/UpdateRecordsSubOperationResponse'
            - $ref: '#/components/schemas/TransferSubOperationResponse'
            - $ref: '#/components/schemas/ReturnSubOperationResponse'
            - $ref: '#/components/schemas/WalletCreateSubOperationResponse'
            - $ref: '#/components/schemas/WalletSetDefaultSubOperationResponse'
            - $ref: '#/components/schemas/WebhookCreateSubOperationResponse'
            - $ref: '#/components/schemas/WebhookDeleteSubOperationResponse'
      required:
      - id
      - status
      - type
      - dependencies
      - '@type'
      - lastUpdatedTimestamp
    OperationStatus:
      type: string
      enum:
      - QUEUED
      - SIGNATURE_REQUIRED
      - PROCESSING
      - COMPLETED
      - FAILED
      - CANCELLED
    WalletListResponse:
      type: object
      properties:
        '@type':
          type: string
          enum:
          - unstoppabledomains.com/partner.v3.CursorList
        items:
          type: array
          items:
            $ref: '#/components/schemas/MinimalWalletResponse'
        next:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/CursorListResponseNext'
      required:
      - '@type'
      - items
      - next
    ErrorResponseSingle:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
        context:
          $ref: '#/components/schemas/ErrorResponseContext'
    ErrorResponseContext:
      type: object
      properties:
        entities:
          type: array
          items:
            $ref: '#/components/schemas/ErrorResponseContextEntity'
      required:
      - entities
    MinimalWalletResponse:
      type: object
      properties:
        '@type':
          type: string
          enum:
          - unstoppabledomains.com/partner.v3.WalletMinimal
        address:
          $ref: '#/components/schemas/OwnerAddress'
        type:
          type: string
          enum:
          - SELF
          - EXTERNAL
        primaryDomain:
          oneOf:
          - $ref: '#/components/schemas/DomainName'
          - type: 'null'
      required:
      - '@type'
      - address
      - type
    TransferSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/BlockchainSubOperationResponse'
      - type: object
        properties:
          type:
            type: string
            enum:
            - TRANSFER
          parameters:
            $ref: '#/components/schemas/TransferParametersResponse'
        required:
        - type
        - parameters
    BlockchainType:
      type: string
      enum:
      - MATIC
      - ETH
      - BASE
    BlockchainSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/SubOperationResponse'
      - type: object
        properties:
          '@type':
            type: string
            enum:
            - unstoppabledomains.com/partner.v3.BlockchainOperation
          transaction:
            $ref: '#/components/schemas/SubOperationTransactionResponse'
        required:
        - '@type'
    DomainRecords:
      type: object
      additionalProperties:
        type: string
      example:
        crypto.ETH.address: '0xb4783AeF93923a2d4eEA29C84f347F26E62e4321'
        crypto.MATIC.version.MATIC.address: '0xb4783AeF93923a2d4eEA29C84f347F26E62e5678'
        crypto.MATIC.version.ERC20.address: '0xb4783AeF93923a2d4eEA29C84f347F26E62e0921'
    WebhookType:
      type: string
      enum:
      - OPERATION_FINISHED
      - OPERATION_ACTION_REQUIRED
    WebhookDeleteSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/PlatformSubOperationResponse'
      - type: object
        properties:
          parameters:
            $ref: '#/components/schemas/WebhookDeleteParametersResponse'
          type:
            type: string
            enum:
            - WEBHOOK_DELETE
        required:
        - parameters
        - type
    OperationType:
      type: string
      enum:
      - DOMAIN_CLAIM
      - DOMAIN_UPDATE
      - DOMAIN_RETURN
      - WALLET_CREATE
      - WALLET_UPDATE
      - WALLET_VERIFY
      - ACCOUNT_UPDATE
    WalletCreateResponse:
      type: object
      properties:
        '@type':
          type: string
          enum:
          - unstoppabledomains.com/partner.v3.InternalWalletCreateResult
        operation:
          $ref: '#/components/schemas/OperationCheckResponse'
      required:
      - '@type'
      - operation
    DomainName:
      type: string
      example: matt.crypto
    UpdateRecordsSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/BlockchainSubOperationResponse'
      - type: object
        properties:
          type:
            type: string
            enum:
            - UPDATE_RECORDS
          parameters:
            $ref: '#/components/schemas/UpdateRecordsParametersResponse'
        required:
        - type
        - parameters
    ReturnSubOperationResponse:
      allOf:
      - $ref: '#/components/schemas/BlockchainSubOperationResponse'
      - type: object
        properties:
          type:
            type: string
            enum:
            - RETURN
        required:
        - type
    OperationPreviewParameter:
      type: boolean
      default: false
      description: 'Allows simulating the operation creation (when set to `true`), without actually starting any processing. This can be used to validate the operation will be permitted and get a preview of the initial outcome.


        When used, the operation in the response will have `PREVIEW` for all `id` and `status` values.

        '
    EvmOwnerAddress:
      type: string
      example: '0xb4783AeF93923a2d4eEA29C84f347F26E62e4321'
      pattern: ^0x[a-fA-F0-9]{40}$
    WebhookCreateResultResponse:
      type: object
      properties:
        id:
          type: string
      required:
      - id
    SubOperationTransactionResponse:
      type: object
      properties:
        hash:
          type: string
        blockchain:
          $ref: '#/components/schemas/BlockchainType'
      required:
      - blockchain
    WalletUpdateRequestBody:
      type: object
      properties:
        primaryDomain:
          oneOf:
          - $ref: '#/components/schemas/DomainName'
          - type: 'null'
      required:
      - primaryDomain
    MintParametersResponse:
      type: object
      properties:
        initialRecords:
          $ref: '#/components/schemas/DomainRecords'
        toAddress:
          $ref: '#/components/schemas/OwnerAddress'
      required:
      - toAddress
    WalletUpdateResponse:
      type: object
      properties:
        '@type':
          type: string
          enum:
          - unstoppabledomains.com/partner.v3.WalletUpdateResult
        operation:
          $ref: '#/components/schemas/OperationCheckResponse'
      required:
      - '@type'
      - operation
    CursorListResponseNext:
      type: object
      properties:
        $cursor:
          oneOf:
          - type: string
          - type: 'null'
      required:
      - $cursor
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT