# D3 API

## D3 API Overview

D3 API allow for a fully custom integration of D3 features directly into your application. The API exposes an interface for interacting with Web3 Name Tokens on the D3 registry and allows searching, purchasing and minting, and more.

## Getting Started

* [Demo App](https://d3-inc.github.io/d3-api-demo/)
* [Sample Source Code](https://github.com/d3-inc/d3-api-demo) (See our github repository for an example app built using our APIs)
* Detailed Steps 👇

Sign up at [D3 Developer Dashboard ](https://developers.d3.app)to get your own API keys today.

Swagger for these APIs can also be viewed at <https://api-public.d3.app/swagger#/>&#x20;

## Search name tokens returning availability and pricing

> Provides search, combining availability information and pricing, both in native token and USD.

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"SearchPaginatedResponse":{"type":"object","properties":{"total":{"type":"number","description":"Total number of items."},"pageItems":{"description":"List of search items.","type":"array","items":{"$ref":"#/components/schemas/SearchItemResponse"}}},"required":["total","pageItems"]},"SearchItemResponse":{"type":"object","properties":{"sld":{"type":"string","description":"Second-level domain (SLD) of a name token."},"tld":{"type":"string","description":"Top-level domain (TLD) of a name token."},"status":{"type":"string","description":"Name availability status.","enum":["available","registered","reserved"]},"eoi":{"type":"boolean","description":"Indicates whether the name is an EOI name or ICANN domain."},"isListed":{"type":"boolean","description":"When status is registered, indicates if there's an active listing for it."},"registrationExpiresAt":{"type":"string","description":"When name is registered, indicates registration expiration date. Past expiration date means that the name has expired, but in a grace period now. It could be renewed by the current owner, or be back on the market after a grace period has passed.","format":"date-time","nullable":true},"reservationExpiresAt":{"type":"string","description":"When name is reserved, indicates reservation expiration date. When name is available, indicates reservation expiration date for the reserved user.","format":"date-time","nullable":true},"usdPrice":{"type":"string","description":"Price in USD (Deprecated, use registryUsdPrice instead)","nullable":true,"deprecated":true},"registryUsdPrice":{"type":"string","description":"Price in USD","nullable":true},"nativeAmount":{"type":"string","description":"Price in native token (Deprecated, use registryNativePrice instead)","nullable":true,"deprecated":true},"registryNativePrice":{"type":"string","description":"Price in native token","nullable":true},"listNativePrice":{"type":"string","description":"Price in native token for active listing","nullable":true},"listUsdPrice":{"type":"string","description":"Price in USD for active listing","nullable":true},"nativeCurrency":{"type":"object","description":"Native blockchain currency. Will be null if tokenization is unsupported for given TLD"},"clickUrl":{"type":"string","description":"Click URL for more information"},"lockExpiresAt":{"type":"string","description":"When name is locked, indicates lock expiration date. This is the date until which the domain remains locked, after which it may become available.","format":"date-time","nullable":true}},"required":["sld","tld","status","eoi","isListed","registrationExpiresAt","reservationExpiresAt","usdPrice","registryUsdPrice","nativeAmount","registryNativePrice","listNativePrice","listUsdPrice","nativeCurrency","clickUrl","lockExpiresAt"]}}},"paths":{"/v1/partner/search":{"get":{"description":"Provides search, combining availability information and pricing, both in native token and USD.","operationId":"PartnerController_search","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of records to return for pagination.","schema":{"minimum":1,"maximum":100,"default":25}},{"name":"skip","required":false,"in":"query","description":"Number of records to skip for pagination.","schema":{"default":0,"minimum":0}},{"name":"tld","required":false,"in":"query","description":"Top-level domain (TLD) of the name token to search for (comma separated list). Leave empty to search all available TLDs.","schema":{"type":"string"}},{"name":"sld","required":true,"in":"query","description":"Second-level domain (SLD) of the name token to search for (comma separated list)","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPaginatedResponse"}}}},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing SEARCH permission."}},"summary":"Search name tokens returning availability and pricing","tags":["Partner API"]}}}}
```

## Get name recommendations

> Returns name recommendations based on the provided SLDs and TLDs

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"SearchItemResponse":{"type":"object","properties":{"sld":{"type":"string","description":"Second-level domain (SLD) of a name token."},"tld":{"type":"string","description":"Top-level domain (TLD) of a name token."},"status":{"type":"string","description":"Name availability status.","enum":["available","registered","reserved"]},"eoi":{"type":"boolean","description":"Indicates whether the name is an EOI name or ICANN domain."},"isListed":{"type":"boolean","description":"When status is registered, indicates if there's an active listing for it."},"registrationExpiresAt":{"type":"string","description":"When name is registered, indicates registration expiration date. Past expiration date means that the name has expired, but in a grace period now. It could be renewed by the current owner, or be back on the market after a grace period has passed.","format":"date-time","nullable":true},"reservationExpiresAt":{"type":"string","description":"When name is reserved, indicates reservation expiration date. When name is available, indicates reservation expiration date for the reserved user.","format":"date-time","nullable":true},"usdPrice":{"type":"string","description":"Price in USD (Deprecated, use registryUsdPrice instead)","nullable":true,"deprecated":true},"registryUsdPrice":{"type":"string","description":"Price in USD","nullable":true},"nativeAmount":{"type":"string","description":"Price in native token (Deprecated, use registryNativePrice instead)","nullable":true,"deprecated":true},"registryNativePrice":{"type":"string","description":"Price in native token","nullable":true},"listNativePrice":{"type":"string","description":"Price in native token for active listing","nullable":true},"listUsdPrice":{"type":"string","description":"Price in USD for active listing","nullable":true},"nativeCurrency":{"type":"object","description":"Native blockchain currency. Will be null if tokenization is unsupported for given TLD"},"clickUrl":{"type":"string","description":"Click URL for more information"},"lockExpiresAt":{"type":"string","description":"When name is locked, indicates lock expiration date. This is the date until which the domain remains locked, after which it may become available.","format":"date-time","nullable":true}},"required":["sld","tld","status","eoi","isListed","registrationExpiresAt","reservationExpiresAt","usdPrice","registryUsdPrice","nativeAmount","registryNativePrice","listNativePrice","listUsdPrice","nativeCurrency","clickUrl","lockExpiresAt"]}}},"paths":{"/v1/partner/recommendations":{"get":{"description":"Returns name recommendations based on the provided SLDs and TLDs","operationId":"PartnerController_getRecommendations","parameters":[{"name":"tld","required":false,"in":"query","description":"Top-level domain (TLD) of the name token to recommend (comma separated list). Leave empty to recommend all available TLDs.","schema":{"type":"string"}},{"name":"sld","required":true,"in":"query","description":"Second-level domain (SLD) of the name token to recommend (comma separated list). Maximum of 5 SLDs allowed.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful name recommendations","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchItemResponse"}}}}},"400":{"description":"Invalid TLDs or other request issues"},"403":{"description":"Forbidden. API Key is missing necessary permissions."}},"summary":"Get name recommendations","tags":["Partner API"]}}}}
```

## Mint a name token

> Accepts mint name request. Only allows minting of non-premium name tokens (requires NON\_PREMIUM\_MINT permission).Token is not minted immediately but is scheduled for minting. Mint status could be checked using token status endpoint.

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"PartnerMintRequest":{"type":"object","properties":{"sld":{"type":"string","description":"Second-level domain (SLD) of the name to mint."},"tld":{"type":"string","description":"Top-level domain (TLD) of the name to mint."},"user":{"description":"User information required to mint the name.","allOf":[{"$ref":"#/components/schemas/PartnerUserRequest"}]}},"required":["sld","tld","user"]},"PartnerUserRequest":{"type":"object","properties":{"wallet":{"type":"string","description":"Wallet address to mint the name for. Format is chain-specific, and depends on a chosen TLD."},"email":{"type":"object","description":"Users email address. Used for renewal notifications and support.","format":"email"}},"required":["wallet"]},"PartnerMintResponse":{"type":"object","properties":{"tokenId":{"type":"string","description":"Token ID that will be minted."},"contractAddress":{"type":"string","description":"NFT Smart Contract address, which will be used to mint the token."},"chainId":{"type":"string","description":"Chain ID of the blockchain network where the token will be minted. For EVM chains, Chain ID is returned."}},"required":["tokenId","contractAddress","chainId"]}}},"paths":{"/v1/partner/mint":{"post":{"description":"Accepts mint name request. Only allows minting of non-premium name tokens (requires NON_PREMIUM_MINT permission).Token is not minted immediately but is scheduled for minting. Mint status could be checked using token status endpoint.","operationId":"PartnerController_partnerMint","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerMintRequest"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerMintResponse"}}}},"400":{"description":"Bad Request. Unable to mint the requested name token."},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing NON_PREMIUM_MINT permission."},"409":{"description":"Conflict. Name token is already minted."}},"summary":"Mint a name token","tags":["Partner API"]}}}}
```

## Get supported payment methods for name tokens

> Returns the supported payment options (contract and token addresses) for the provided TLDs.

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"PaymentOptionsResponse":{"type":"object","properties":{"options":{"description":"Array of payment options, each containing contract and token addresses","type":"array","items":{"$ref":"#/components/schemas/PaymentOptionResponse"}}},"required":["options"]},"PaymentOptionResponse":{"type":"object","properties":{"chainId":{"type":"string","description":"Chain ID of the blockchain network where the contract is deployed."},"chainName":{"type":"string","description":"Name of the blockchain network where the contract is deployed."},"addressType":{"type":"string","description":"Wallet address type for the current chain.","enum":["EVM","SUI","NEAR","TOKENPROOF","SOLANA"]},"contractAddress":{"type":"string","description":"The contract address of the payment method"},"tokenAddress":{"type":"object","description":"The token address used in the payment method"},"symbol":{"type":"object","description":"The token symbol used in the payment method currency"},"icon":{"type":"object","description":"The token icon used in the payment method currency"},"price":{"type":"number","description":"The token price used in the payment method"}},"required":["chainId","chainName","addressType","contractAddress","tokenAddress","symbol","icon","price"]}}},"paths":{"/v1/partner/payment/options":{"get":{"description":"Returns the supported payment options (contract and token addresses) for the provided TLDs.","operationId":"PartnerController_getPaymentOptions","parameters":[{"name":"tld","required":false,"in":"query","description":"Top-level domain (TLD) of the name token to fetch payment options (comma separated list). Leave empty to fetch for all available TLDs.","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns payment options for name tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentOptionsResponse"}}}},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing PURCHASE permission."}},"summary":"Get supported payment methods for name tokens","tags":["Partner API"]}}}}
```

## Create a partner order for name token purchase

> Creates a new order for name token purchase. The response includes a payment voucher and details necessary to complete the purchase.

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"PartnerOrderRequest":{"type":"object","properties":{"paymentOptions":{"description":"The payment options for the transaction","allOf":[{"$ref":"#/components/schemas/OrderPaymentOptionsRequest"}]},"names":{"description":"Array of names to mint, each including an SLD and TLD","type":"array","items":{"$ref":"#/components/schemas/NameRequest"}},"registrantContact":{"description":"The registrant contact for ICANN TLDs","allOf":[{"$ref":"#/components/schemas/ContactRequestModel"}]}},"required":["paymentOptions","names"]},"OrderPaymentOptionsRequest":{"type":"object","properties":{"contractAddress":{"type":"string","description":"The contract address of the payment method"},"tokenAddress":{"type":"string","description":"The token address used in the payment method"},"buyerAddress":{"type":"string","description":"The address of the buyer"}},"required":["contractAddress","tokenAddress","buyerAddress"]},"NameRequest":{"type":"object","properties":{"sld":{"type":"string","description":"Second-level domain (SLD) of the name to mint"},"tld":{"type":"string","description":"Top-level domain (TLD) of the name to mint"},"autoRenew":{"type":"boolean","description":"Whether to auto-renew the domain after it expires","default":true},"domainLength":{"type":"number","description":"The length of the domain registration in years","enum":[1,2,3,4,5,6,8,10],"default":1}},"required":["sld","tld"]},"ContactRequestModel":{"type":"object","properties":{"firstName":{"type":"string","description":"First name of the registrant"},"lastName":{"type":"string","description":"Last name of the registrant"},"organization":{"type":"object","description":"Organization name"},"email":{"type":"string","description":"Email address","format":"email"},"phone":{"type":"string","description":"Phone number"},"phoneCountryCode":{"type":"string","description":"Phone country code"},"fax":{"type":"object","description":"Fax number"},"faxCountryCode":{"type":"object","description":"Fax country code"},"street":{"type":"string","description":"Street address"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State/Province"},"postalCode":{"type":"string","description":"Postal code"},"countryCode":{"type":"string","description":"Country code (ISO 3166-1 alpha-2)"}},"required":["firstName","lastName","email","phone","phoneCountryCode","street","city","state","postalCode","countryCode"]},"PartnerOrderResponse":{"type":"object","properties":{"voucher":{"description":"The voucher details including names, amount, and expiration","oneOf":[{"type":"object","properties":{"buyer":{"type":"string"},"token":{"type":"string"},"amount":{"type":"string"},"voucherExpiration":{"type":"number"},"paymentId":{"type":"string"},"orderId":{"type":"string"},"names":{"type":"array","items":{"type":"object","properties":{"registry":{"type":"string"},"label":{"type":"string"},"tld":{"type":"string"},"expirationTime":{"type":"number"},"owner":{"type":"string"},"renewal":{"type":"boolean"}}}}}},{"type":"object","properties":{"buyer":{"type":"string"},"token":{"type":"string","nullable":true},"amount":{"type":"string"},"voucher_expiration":{"type":"number"},"payment_id":{"type":"string"},"order_id":{"type":"string"},"registry":{"type":"string"},"names":{"type":"array","items":{"type":"object","properties":{"sld":{"type":"string"},"tld":{"type":"string"},"expiration_time":{"type":"string"},"owner":{"type":"string"},"token_metadata":{"type":"object","properties":{"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"media":{"type":"string","nullable":true},"media_hash":{"type":"string","nullable":true},"copies":{"type":"number","nullable":true},"issued_at":{"type":"string","nullable":true},"expires_at":{"type":"string","nullable":true},"starts_at":{"type":"string","nullable":true},"updated_at":{"type":"string","nullable":true},"reference":{"type":"string","nullable":true},"reference_hash":{"type":"string","nullable":true},"extra":{"type":"string","nullable":true}}},"account_public_key":{"type":"string","nullable":true}}}}}}]},"signature":{"type":"string","description":"The signature of the voucher for submission"}},"required":["voucher","signature"]}}},"paths":{"/v1/partner/order":{"post":{"description":"Creates a new order for name token purchase. The response includes a payment voucher and details necessary to complete the purchase.","operationId":"PartnerController_createPartnerOrder","parameters":[],"requestBody":{"required":true,"description":"Details required to create an order for name token purchase","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerOrderRequest"}}}},"responses":{"201":{"description":"The order has been successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerOrderResponse"}}}},"400":{"description":"Bad Request. Some names are not available for purchase."},"403":{"description":"Forbidden. API Key is missing necessary permissions."}},"summary":"Create a partner order for name token purchase","tags":["Partner API"]}}}}
```

## Get name token metadata

> Returns metadata and registration status of a name token.

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"TokenStatusResponse":{"type":"object","properties":{"status":{"type":"string","description":"Status of the name token.","enum":["pending","waiting_for_finalization","registered"]},"sld":{"type":"string","description":"Second-level domain (SLD) of a name token. Only present when name token is registered."},"tld":{"type":"string","description":"Top-level domain (TLD) of a name token. Only present when name token is registered."},"registeredAt":{"format":"date-time","type":"string","description":"Domain registration date. Only present when name token is registered."},"expirationDate":{"format":"date-time","type":"string","description":"Expiration date of a registered name token. May return a past date if the token has expired. Only present when name token is registered."},"owner":{"type":"string","description":"Owner wallet address. Format is chain-specific. Only present when name token is registered."},"tokenId":{"type":"string","description":"Minted Token ID. Only present when name token is registered."},"contractAddress":{"type":"string","description":"NFT Smart Contract address. Only present when name token is registered."},"chainId":{"type":"string","description":"Chain ID of the blockchain network. Only present when name token is registered or waiting for finalization."},"txHash":{"type":"string","description":"Mint transaction hash. Only present when name token is waiting for finalization."},"imageURL":{"type":"string","description":"Token image URL, only present if token is minted."}},"required":["status"]}}},"paths":{"/v1/partner/token/{sld}/{tld}":{"get":{"description":"Returns metadata and registration status of a name token.","operationId":"PartnerController_tokenStatus","parameters":[{"name":"tld","required":true,"in":"path","description":"Top-level domain (TLD) of the name token.","schema":{}},{"name":"sld","required":true,"in":"path","description":"Second-level domain (SLD) of the name token.","schema":{}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenStatusResponse"}}}},"400":{"description":"Bad Request. Wrong SLD or TLD format."},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing NON_PREMIUM_MINT permission."},"404":{"description":"Not Found. Name token is not registered and mint is not in progress."}},"summary":"Get name token metadata","tags":["Partner API"]}}}}
```

## Get name token metadata by token ID

> Returns metadata of a name token by token ID.

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"TokenStatusResponse":{"type":"object","properties":{"status":{"type":"string","description":"Status of the name token.","enum":["pending","waiting_for_finalization","registered"]},"sld":{"type":"string","description":"Second-level domain (SLD) of a name token. Only present when name token is registered."},"tld":{"type":"string","description":"Top-level domain (TLD) of a name token. Only present when name token is registered."},"registeredAt":{"format":"date-time","type":"string","description":"Domain registration date. Only present when name token is registered."},"expirationDate":{"format":"date-time","type":"string","description":"Expiration date of a registered name token. May return a past date if the token has expired. Only present when name token is registered."},"owner":{"type":"string","description":"Owner wallet address. Format is chain-specific. Only present when name token is registered."},"tokenId":{"type":"string","description":"Minted Token ID. Only present when name token is registered."},"contractAddress":{"type":"string","description":"NFT Smart Contract address. Only present when name token is registered."},"chainId":{"type":"string","description":"Chain ID of the blockchain network. Only present when name token is registered or waiting for finalization."},"txHash":{"type":"string","description":"Mint transaction hash. Only present when name token is waiting for finalization."},"imageURL":{"type":"string","description":"Token image URL, only present if token is minted."}},"required":["status"]}}},"paths":{"/v1/partner/token/{chainId}/{contractAddress}/{tokenId}":{"get":{"description":"Returns metadata of a name token by token ID.","operationId":"PartnerController_getTokenById","parameters":[{"name":"chainId","required":true,"in":"path","description":"Chain ID of the blockchain network.","schema":{"type":"string"}},{"name":"contractAddress","required":true,"in":"path","description":"NFT Smart Contract address.","schema":{"type":"string"}},{"name":"tokenId","required":true,"in":"path","description":"Minted Token ID.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenStatusResponse"}}}},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing SEARCH permission."},"404":{"description":"Not Found. Name token does not exist for this contract on this chain or contract not found."}},"summary":"Get name token metadata by token ID","tags":["Partner API"]}}}}
```

## Get name token metadata by multiple token IDs at once

> Returns metadata of multiple name tokens by their token IDs.

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"BulkTokenStatusRequest":{"type":"object","properties":{"tokenIds":{"description":"List of token ids to lookup for","type":"array","items":{"type":"string"}}},"required":["tokenIds"]},"TokenStatusResponse":{"type":"object","properties":{"status":{"type":"string","description":"Status of the name token.","enum":["pending","waiting_for_finalization","registered"]},"sld":{"type":"string","description":"Second-level domain (SLD) of a name token. Only present when name token is registered."},"tld":{"type":"string","description":"Top-level domain (TLD) of a name token. Only present when name token is registered."},"registeredAt":{"format":"date-time","type":"string","description":"Domain registration date. Only present when name token is registered."},"expirationDate":{"format":"date-time","type":"string","description":"Expiration date of a registered name token. May return a past date if the token has expired. Only present when name token is registered."},"owner":{"type":"string","description":"Owner wallet address. Format is chain-specific. Only present when name token is registered."},"tokenId":{"type":"string","description":"Minted Token ID. Only present when name token is registered."},"contractAddress":{"type":"string","description":"NFT Smart Contract address. Only present when name token is registered."},"chainId":{"type":"string","description":"Chain ID of the blockchain network. Only present when name token is registered or waiting for finalization."},"txHash":{"type":"string","description":"Mint transaction hash. Only present when name token is waiting for finalization."},"imageURL":{"type":"string","description":"Token image URL, only present if token is minted."}},"required":["status"]}}},"paths":{"/v1/partner/tokens/{chainId}/{contractAddress}":{"post":{"description":"Returns metadata of multiple name tokens by their token IDs.","operationId":"PartnerController_getBatchedTokenById","parameters":[{"name":"chainId","required":true,"in":"path","description":"Chain ID of the blockchain network.","schema":{"type":"string"}},{"name":"contractAddress","required":true,"in":"path","description":"NFT Smart Contract address.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTokenStatusRequest"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TokenStatusResponse"}}}}},"400":{"description":"Bad Request. Wrong address or address type format."},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing SEARCH permission."},"404":{"description":"Not Found. Chain or Contract not found."}},"summary":"Get name token metadata by multiple token IDs at once","tags":["Partner API"]}}}}
```

## Get name tokens for a wallet address

> Returns registered name tokens for a wallet address

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"PaginatedTokensResponse":{"type":"object","properties":{"total":{"type":"number","description":"Total number of name tokens."},"pageItems":{"description":"List of name tokens.","type":"array","items":{"$ref":"#/components/schemas/TokenInfoResponse"}}},"required":["total","pageItems"]},"TokenInfoResponse":{"type":"object","properties":{"sld":{"type":"string","description":"Second-level domain (SLD) of a name token."},"tld":{"type":"string","description":"Top-level domain (TLD) of a name token."},"registeredAt":{"format":"date-time","type":"string","description":"Domain registration date. Only present when name token is registered."},"expirationDate":{"format":"date-time","type":"string","description":"Expiration date of a name token. May return a past date if the token has expired."},"tokenId":{"type":"string","description":"Token ID."},"contractAddress":{"type":"string","description":"NFT Smart Contract address."},"chainId":{"type":"string","description":"Chain ID of the blockchain network. Only present when name token is registered or waiting for finalization."}},"required":["sld","tld"]}}},"paths":{"/v1/partner/tokens/{addressType}/{address}":{"get":{"description":"Returns registered name tokens for a wallet address","operationId":"PartnerController_walletTokens","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of records to return for pagination.","schema":{"minimum":1,"maximum":100,"default":25}},{"name":"skip","required":false,"in":"query","description":"Number of records to skip for pagination.","schema":{"default":0,"minimum":0}},{"name":"address","required":true,"in":"path","description":"Wallet address.","schema":{}},{"name":"addressType","required":true,"in":"path","description":"Wallet address type.","schema":{"enum":["EVM","SUI","NEAR","TOKENPROOF","SOLANA"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedTokensResponse"}}}},"400":{"description":"Bad Request. Wrong address or address type format."},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing SEARCH permission."}},"summary":"Get name tokens for a wallet address","tags":["Partner API"]}}}}
```

## POST /v1/domain/{domainName}/records/web3

>

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"SetWeb3RecordBody":{"type":"object","properties":{"symbol":{"type":"string","description":"The symbol representing the asset or record, typically used as a short identifier (e.g., \"BTC\" for Bitcoin)."},"address":{"type":"string","description":"The address to associate with the domain and symbol. This is typically a blockchain address."},"signature":{"type":"string","description":"The signature generated by the registrant's wallet, authorizing this operation."},"signatureExpiresAt":{"type":"number","description":"The UNIX timestamp (in milliseconds) when the signature expires."}},"required":["symbol","address","signature","signatureExpiresAt"]}}},"paths":{"/v1/domain/{domainName}/records/web3":{"post":{"operationId":"Web3RecordsController_setWeb3Record","parameters":[{"name":"domainName","required":true,"in":"path","description":"The domain name to set the web3 record for","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetWeb3RecordBody"}}}},"responses":{"400":{"description":"Bad Request. Signature has expired or invalid."},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing WALLET_MAPPING permission."},"404":{"description":"Not Found. Domain does not exist."}},"tags":["Wallet Mapping API"]}}}}
```

## DELETE /v1/domain/{domainName}/records/web3

>

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"DeleteWeb3RecordBody":{"type":"object","properties":{"symbol":{"type":"string","description":"The symbol representing the asset or record, typically used as a short identifier (e.g., \"BTC\" for Bitcoin)."},"signature":{"type":"string","description":"The signature generated by the registrant's wallet, authorizing this operation."},"signatureExpiresAt":{"type":"number","description":"The UNIX timestamp (in milliseconds) when the signature expires."}},"required":["symbol","signature","signatureExpiresAt"]}}},"paths":{"/v1/domain/{domainName}/records/web3":{"delete":{"operationId":"Web3RecordsController_deleteWeb3Record","parameters":[{"name":"domainName","required":true,"in":"path","description":"The domain name to delete the web3 record from","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteWeb3RecordBody"}}}},"responses":{"400":{"description":"Bad Request. Signature has expired or invalid."},"401":{"description":"Unauthorized. API Key is missing or invalid."},"403":{"description":"Forbidden. API Key is missing WALLET_MAPPING permission."},"404":{"description":"Not Found. Domain does not exist."}},"tags":["Wallet Mapping API"]}}}}
```

## POST /v1/reverse-registry/{wallet}

>

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"SetPrimaryNameBody":{"type":"object","properties":{"name":{"type":"string","description":"The name to set as the primary name for the wallet"},"signature":{"type":"string","description":"The signature to verify the request"},"signatureExpiresAt":{"type":"number","description":"The timestamp when the signature expires"}},"required":["name","signature","signatureExpiresAt"]}}},"paths":{"/v1/reverse-registry/{wallet}":{"post":{"operationId":"ReverseRegistryController_setPrimaryName","parameters":[{"name":"wallet","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPrimaryNameBody"}}}},"responses":{"200":{"description":""}},"tags":["Reverse Wallet Mapping API"]}}}}
```

## DELETE /v1/reverse-registry/{wallet}

>

```json
{"openapi":"3.0.0","info":{"title":"D3 External API","version":"1.0"},"security":[{"Api-Key":[]}],"components":{"securitySchemes":{"Api-Key":{"type":"apiKey","in":"header","name":"Api-Key"}},"schemas":{"UnsetPrimaryNameBody":{"type":"object","properties":{"signature":{"type":"string","description":"The signature to verify the request"},"signatureExpiresAt":{"type":"number","description":"The timestamp when the signature expires"}},"required":["signature","signatureExpiresAt"]}}},"paths":{"/v1/reverse-registry/{wallet}":{"delete":{"operationId":"ReverseRegistryController_unsetPrimaryName","parameters":[{"name":"wallet","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsetPrimaryNameBody"}}}},"responses":{"200":{"description":""}},"tags":["Reverse Wallet Mapping API"]}}}}
```
