WDK logoWDK documentation

API Reference

Complete reference for the WDK Indexer REST API

Download OpenAPI · Snapshot provenance · Request an API key

Replace placeholders in the cURL templates before running. For requests with a body, save your payload in request.json. Response examples illustrate the schema and are not captured API responses.

Text reference and complete schemas (available while the viewer loads)

Base URL

https://wdk-api.tether.io

Explore all 14 operations below. Use chain discovery to find current blockchain and token identifiers.

Download OpenAPI · Snapshot provenance

Authentication

Authentication requirements are listed under each endpoint. Send your API key in the documented header for protected endpoints. Request an API key.

API Endpoints

GET /api/v1/health

Deep health check endpoint

Checks internal dependencies and blockchain indexer sync status. Returns HTTP 200 only when the overall status is `healthy`. Returns HTTP 503 for any non-healthy overall status (`degraded` or `unhealthy`), so readiness probes and load balancers can rely on the HTTP status code alone.

Authentication: Public endpoint.

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/health'

Responses

StatusDescription
200Default Response
503Default Response

Response fields · HTTP 200 · application/json

FieldTypeDetails
$object—
$.statusstringAllowed values: "healthy", "degraded", "unhealthy". Example: "healthy".
$.timestampstringFormat: "date-time".
$.deployEnvironmentstringExample: "production".
$.deployedVersionstringExample: "1.1.2".
$.summaryobject—
$.summary.healthyintegerExample: 10.
$.summary.unhealthyintegerExample: 2.
$.summary.totalintegerExample: 12.
$.checksobject—
$.checks.dependenciesobject—
$.checks.dependencies.statusstringAllowed values: "healthy", "unhealthy". Example: "healthy".
$.checks.indexersobject—
$.checks.indexers.*object—
$.checks.indexers.*.statusstringAllowed values: "healthy", "unhealthy". Example: "healthy".
$.checks.indexers.*.rpcLatencyMsnumberExample: 45.
$.checks.indexers.*.lagnumberExample: 3.
$.checks.indexers.*.dependenciesobject—
$.checks.indexers.*.dependencies.statusstringAllowed values: "healthy", "unhealthy". Example: "healthy".
Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/health",
  "operation": {
    "summary": "Deep health check endpoint",
    "tags": [
      "Health"
    ],
    "description": "Checks internal dependencies and blockchain indexer sync status. Returns HTTP 200 only when the overall status is `healthy`. Returns HTTP 503 for any non-healthy overall status (`degraded` or `unhealthy`), so readiness probes and load balancers can rely on the HTTP status code alone.",
    "responses": {
      "200": {
        "description": "Default Response",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "healthy",
                    "degraded",
                    "unhealthy"
                  ],
                  "example": "healthy"
                },
                "timestamp": {
                  "type": "string",
                  "format": "date-time"
                },
                "deployEnvironment": {
                  "type": "string",
                  "example": "production"
                },
                "deployedVersion": {
                  "type": "string",
                  "example": "1.1.2"
                },
                "summary": {
                  "type": "object",
                  "properties": {
                    "healthy": {
                      "type": "integer",
                      "example": 10
                    },
                    "unhealthy": {
                      "type": "integer",
                      "example": 2
                    },
                    "total": {
                      "type": "integer",
                      "example": 12
                    }
                  }
                },
                "checks": {
                  "type": "object",
                  "properties": {
                    "dependencies": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "healthy",
                            "unhealthy"
                          ],
                          "example": "healthy"
                        }
                      }
                    },
                    "indexers": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "status": {
                            "type": "string",
                            "enum": [
                              "healthy",
                              "unhealthy"
                            ],
                            "example": "healthy"
                          },
                          "rpcLatencyMs": {
                            "type": "number",
                            "example": 45
                          },
                          "lag": {
                            "type": "number",
                            "example": 3
                          },
                          "dependencies": {
                            "type": "object",
                            "properties": {
                              "status": {
                                "type": "string",
                                "enum": [
                                  "healthy",
                                  "unhealthy"
                                ],
                                "example": "healthy"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "503": {
        "description": "Default Response",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "healthy",
                    "degraded",
                    "unhealthy"
                  ],
                  "example": "healthy"
                },
                "timestamp": {
                  "type": "string",
                  "format": "date-time"
                },
                "deployEnvironment": {
                  "type": "string",
                  "example": "production"
                },
                "deployedVersion": {
                  "type": "string",
                  "example": "1.1.2"
                },
                "summary": {
                  "type": "object",
                  "properties": {
                    "healthy": {
                      "type": "integer",
                      "example": 10
                    },
                    "unhealthy": {
                      "type": "integer",
                      "example": 2
                    },
                    "total": {
                      "type": "integer",
                      "example": 12
                    }
                  }
                },
                "checks": {
                  "type": "object",
                  "properties": {
                    "dependencies": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "healthy",
                            "unhealthy"
                          ],
                          "example": "healthy"
                        }
                      }
                    },
                    "indexers": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "status": {
                            "type": "string",
                            "enum": [
                              "healthy",
                              "unhealthy"
                            ],
                            "example": "healthy"
                          },
                          "rpcLatencyMs": {
                            "type": "number",
                            "example": 45
                          },
                          "lag": {
                            "type": "number",
                            "example": 3
                          },
                          "dependencies": {
                            "type": "object",
                            "properties": {
                              "status": {
                                "type": "string",
                                "enum": [
                                  "healthy",
                                  "unhealthy"
                                ],
                                "example": "healthy"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [],
  "securitySchemes": {}
}

GET /api/v1/chains

Get supported blockchains and tokens

Returns the list of all supported blockchains and their available tokens. Endpoint to discover valid blockchain and token combinations before calling other endpoints. This endpoint reads directly from the server configuration and requires no authentication.

Authentication: Public endpoint.

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/chains'

Responses

StatusDescription
200List of supported blockchains with their tokens and case sensitivity rules
500Internal Server Error - indexer service unavailable or unexpected failure

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectList of supported blockchains with their tokens and case sensitivity rules
$.chainsarrayAll supported blockchains.
$.chains[]object—
$.chains[].namestringRequired. Blockchain identifier used as the {blockchain} path parameter in other endpoints.
$.chains[].tokensarrayRequired. Token identifiers available on this blockchain, used as the {token} path parameter.
$.chains[].tokens[]string—
$.chains[].caseSensitiveobjectCase sensitivity rules. If present, addresses are preserved as-is (case-sensitive). If absent, addresses are automatically lowercased.
$.chains[].caseSensitive.addressoneOfIndicates address case sensitivity. When the caseSensitive object is present, addresses are not lowercased regardless of this field value.
$.chains[].caseSensitive.address (oneOf 1)boolean—
$.chains[].caseSensitive.address (oneOf 2)string—
$.chains[].caseSensitive.txbooleantrue = transaction hashes are case-sensitive.
$.chains[].caseSensitive.blockbooleantrue = block identifiers are case-sensitive.

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/chains",
  "operation": {
    "summary": "Get supported blockchains and tokens",
    "tags": [
      "Chains"
    ],
    "description": "Returns the list of all supported blockchains and their available tokens. Endpoint to discover valid blockchain and token combinations before calling other endpoints. This endpoint reads directly from the server configuration and requires no authentication.",
    "responses": {
      "200": {
        "description": "List of supported blockchains with their tokens and case sensitivity rules",
        "content": {
          "application/json": {
            "schema": {
              "description": "List of supported blockchains with their tokens and case sensitivity rules",
              "type": "object",
              "properties": {
                "chains": {
                  "type": "array",
                  "description": "All supported blockchains.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "description": "Blockchain identifier used as the {blockchain} path parameter in other endpoints."
                      },
                      "tokens": {
                        "type": "array",
                        "description": "Token identifiers available on this blockchain, used as the {token} path parameter.",
                        "items": {
                          "type": "string"
                        }
                      },
                      "caseSensitive": {
                        "type": "object",
                        "description": "Case sensitivity rules. If present, addresses are preserved as-is (case-sensitive). If absent, addresses are automatically lowercased.",
                        "properties": {
                          "address": {
                            "oneOf": [
                              {
                                "type": "boolean"
                              },
                              {
                                "type": "string"
                              }
                            ],
                            "description": "Indicates address case sensitivity. When the caseSensitive object is present, addresses are not lowercased regardless of this field value."
                          },
                          "tx": {
                            "type": "boolean",
                            "description": "true = transaction hashes are case-sensitive."
                          },
                          "block": {
                            "type": "boolean",
                            "description": "true = block identifiers are case-sensitive."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name",
                      "tokens"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - indexer service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - indexer service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [],
  "securitySchemes": {}
}

GET /api/v1/{blockchain}/{token}/{address}/token-transfers

Get token transfers for an address

Retrieve the token transfer history for a specific wallet address on a given blockchain. Returns incoming and outgoing transfers sorted by block number.

Authentication: X-API-KEY header required.

Parameters

NameTypeDetails
limit (query)integerRequired: No. Maximum number of transfers to return. Minimum: 1. Maximum: 1000. Default: 10.
fromTs (query)integerRequired: No. Start timestamp in milliseconds (inclusive). Use 0 to query from the beginning. Minimum: 0. Default: 0.
toTs (query)integerRequired: No. End timestamp in milliseconds (inclusive). Omit to query up to the latest available data. Minimum: 0.
blockchain (path)stringRequired: Yes. Blockchain network identifier. Use GET /api/v1/chains to see all available options. Allowed values: "ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark".
token (path)stringRequired: Yes. Token identifier. Must be a valid token for the specified blockchain. Allowed values: "usdt", "xaut", "usat", "btc".
address (path)stringRequired: Yes. Wallet address to query. Format varies by blockchain (e.g. 0x... for EVM, bc1... for Bitcoin, T... for Tron). Min length: 1.

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/{blockchain}/{token}/{address}/token-transfers' \
  --header 'X-API-KEY: <api-key>'

Responses

StatusDescription
200Token transfer history for the queried address
400Bad Request - invalid parameters, address format, blockchain, or token
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
429Too Many Requests - rate limit exceeded
500Internal Server Error - indexer service unavailable or unexpected failure

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectToken transfer history for the queried address
$.transfersarrayList of token transfers sorted by block number.
$.transfers[]object—
$.transfers[].blockchainstringBlockchain where the transfer occurred.
$.transfers[].blockNumberintegerBlock number containing the transfer.
$.transfers[].transactionHashstringHash of the transaction.
$.transfers[].transferIndexintegerIndex of the transfer within the transaction.
$.transfers[].tokenstringToken identifier.
$.transfers[].amountstringTransfer amount as a decimal string.
$.transfers[].timestampintegerBlock timestamp in milliseconds since Unix epoch.
$.transfers[].transactionIndexoneOfPosition of the transaction within the block.
$.transfers[].transactionIndex (oneOf 1)integer—
$.transfers[].transactionIndex (oneOf 2)null—
$.transfers[].logIndexoneOfEvent log index for EVM chains. null for non-EVM chains like Bitcoin.
$.transfers[].logIndex (oneOf 1)integer—
$.transfers[].logIndex (oneOf 2)null—
$.transfers[].fromoneOfSender wallet address.
$.transfers[].from (oneOf 1)string—
$.transfers[].from (oneOf 2)null—
$.transfers[].tooneOfThe recipient's address
$.transfers[].to (oneOf 1)string—
$.transfers[].to (oneOf 2)null—
$.transfers[].labelstringA label associated with the transfer, if any
$.transfers[].metadataoneOfChain-specific extra data attached to the transfer, if any.
$.transfers[].metadata (oneOf 1)object—
$.transfers[].metadata (oneOf 2)null—

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/{blockchain}/{token}/{address}/token-transfers",
  "operation": {
    "summary": "Get token transfers for an address",
    "tags": [
      "Token Transfers"
    ],
    "description": "Retrieve the token transfer history for a specific wallet address on a given blockchain. Returns incoming and outgoing transfers sorted by block number.",
    "parameters": [
      {
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000,
          "default": 10
        },
        "in": "query",
        "name": "limit",
        "required": false,
        "description": "Maximum number of transfers to return."
      },
      {
        "schema": {
          "type": "integer",
          "minimum": 0,
          "default": 0
        },
        "in": "query",
        "name": "fromTs",
        "required": false,
        "description": "Start timestamp in milliseconds (inclusive). Use 0 to query from the beginning."
      },
      {
        "schema": {
          "type": "integer",
          "minimum": 0
        },
        "in": "query",
        "name": "toTs",
        "required": false,
        "description": "End timestamp in milliseconds (inclusive). Omit to query up to the latest available data."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "ethereum",
            "arbitrum",
            "avalanche",
            "polygon",
            "plasma",
            "sepolia",
            "tron",
            "ton",
            "bitcoin",
            "spark"
          ]
        },
        "in": "path",
        "name": "blockchain",
        "required": true,
        "description": "Blockchain network identifier. Use GET /api/v1/chains to see all available options."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "usdt",
            "xaut",
            "usat",
            "btc"
          ]
        },
        "in": "path",
        "name": "token",
        "required": true,
        "description": "Token identifier. Must be a valid token for the specified blockchain."
      },
      {
        "schema": {
          "type": "string",
          "minLength": 1
        },
        "in": "path",
        "name": "address",
        "required": true,
        "description": "Wallet address to query. Format varies by blockchain (e.g. 0x... for EVM, bc1... for Bitcoin, T... for Tron)."
      }
    ],
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Token transfer history for the queried address",
        "content": {
          "application/json": {
            "schema": {
              "description": "Token transfer history for the queried address",
              "type": "object",
              "properties": {
                "transfers": {
                  "type": "array",
                  "description": "List of token transfers sorted by block number.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "blockchain": {
                        "type": "string",
                        "description": "Blockchain where the transfer occurred."
                      },
                      "blockNumber": {
                        "type": "integer",
                        "description": "Block number containing the transfer."
                      },
                      "transactionHash": {
                        "type": "string",
                        "description": "Hash of the transaction."
                      },
                      "transferIndex": {
                        "type": "integer",
                        "description": "Index of the transfer within the transaction."
                      },
                      "token": {
                        "type": "string",
                        "description": "Token identifier."
                      },
                      "amount": {
                        "type": "string",
                        "description": "Transfer amount as a decimal string."
                      },
                      "timestamp": {
                        "type": "integer",
                        "description": "Block timestamp in milliseconds since Unix epoch."
                      },
                      "transactionIndex": {
                        "oneOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Position of the transaction within the block."
                      },
                      "logIndex": {
                        "oneOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Event log index for EVM chains. null for non-EVM chains like Bitcoin."
                      },
                      "from": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Sender wallet address."
                      },
                      "to": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "The recipient's address"
                      },
                      "label": {
                        "type": "string",
                        "description": "A label associated with the transfer, if any"
                      },
                      "metadata": {
                        "oneOf": [
                          {
                            "type": "object",
                            "additionalProperties": true
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Chain-specific extra data attached to the transfer, if any."
                      }
                    },
                    "additionalProperties": true
                  }
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, blockchain, or token",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, blockchain, or token",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authentication error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authentication error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authorization error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authorization error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Rate limit error type"
                },
                "message": {
                  "type": "string",
                  "description": "Rate limit error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - indexer service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - indexer service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

GET /api/v1/{blockchain}/{token}/{address}/token-balances

Get token balance for an address

Retrieve the current token balance for a specific wallet address on a given blockchain. Returns a single balance amount representing how much of the specified token the address currently holds.

Authentication: X-API-KEY header required.

Parameters

NameTypeDetails
blockchain (path)stringRequired: Yes. Blockchain network identifier. Use GET /api/v1/chains to see all available options. Allowed values: "ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark".
token (path)stringRequired: Yes. Token identifier. Must be a valid token for the specified blockchain. Allowed values: "usdt", "xaut", "usat", "btc".
address (path)stringRequired: Yes. Wallet address to query. Format varies by blockchain (e.g. 0x... for EVM, bc1... for Bitcoin, T... for Tron). Min length: 1.

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/{blockchain}/{token}/{address}/token-balances' \
  --header 'X-API-KEY: <api-key>'

Responses

StatusDescription
200Current token balance for the queried address
400Bad Request - invalid parameters, address format, blockchain, or token
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
429Too Many Requests - rate limit exceeded
500Internal Server Error - indexer service unavailable or unexpected failure

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectCurrent token balance for the queried address
$.tokenBalanceobjectBalance information.
$.tokenBalance.blockchainstringBlockchain queried.
$.tokenBalance.tokenstringToken queried.
$.tokenBalance.amountstringCurrent balance as a decimal string.

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/{blockchain}/{token}/{address}/token-balances",
  "operation": {
    "summary": "Get token balance for an address",
    "tags": [
      "Token Balances"
    ],
    "description": "Retrieve the current token balance for a specific wallet address on a given blockchain. Returns a single balance amount representing how much of the specified token the address currently holds.",
    "parameters": [
      {
        "schema": {
          "type": "string",
          "enum": [
            "ethereum",
            "arbitrum",
            "avalanche",
            "polygon",
            "plasma",
            "sepolia",
            "tron",
            "ton",
            "bitcoin",
            "spark"
          ]
        },
        "in": "path",
        "name": "blockchain",
        "required": true,
        "description": "Blockchain network identifier. Use GET /api/v1/chains to see all available options."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "usdt",
            "xaut",
            "usat",
            "btc"
          ]
        },
        "in": "path",
        "name": "token",
        "required": true,
        "description": "Token identifier. Must be a valid token for the specified blockchain."
      },
      {
        "schema": {
          "type": "string",
          "minLength": 1
        },
        "in": "path",
        "name": "address",
        "required": true,
        "description": "Wallet address to query. Format varies by blockchain (e.g. 0x... for EVM, bc1... for Bitcoin, T... for Tron)."
      }
    ],
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Current token balance for the queried address",
        "content": {
          "application/json": {
            "schema": {
              "description": "Current token balance for the queried address",
              "type": "object",
              "properties": {
                "tokenBalance": {
                  "type": "object",
                  "description": "Balance information.",
                  "properties": {
                    "blockchain": {
                      "type": "string",
                      "description": "Blockchain queried."
                    },
                    "token": {
                      "type": "string",
                      "description": "Token queried."
                    },
                    "amount": {
                      "type": "string",
                      "description": "Current balance as a decimal string."
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, blockchain, or token",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, blockchain, or token",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authentication error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authentication error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authorization error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authorization error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Rate limit error type"
                },
                "message": {
                  "type": "string",
                  "description": "Rate limit error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - indexer service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - indexer service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

GET /api/v1/blockchains/{blockchain}/{token}/token-transfers/{transactionHash}

Get transfers for a transaction

Retrieve the transfer records of a single transaction for one token, read from the chain. Only transfers of the requested token are returned, so a transaction moving several tokens has to be queried once per token. Returns 404 when the transaction moved no amount of that token, including when the transaction id does not exist at all.

Authentication: X-API-KEY header required.

Parameters

NameTypeDetails
blockchain (path)stringRequired: Yes. Blockchain network identifier. Use GET /api/v1/chains to see all available options. Allowed values: "ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark".
token (path)stringRequired: Yes. Token identifier. Must be a valid token for the specified blockchain. Allowed values: "usdt", "xaut", "usat", "btc".
transactionHash (path)stringRequired: Yes. Transaction id/hash, as returned in the `transactionHash` field of transfers. Format varies by blockchain (e.g. 0x... for EVM, hex for TON, base58 signature for Solana). Min length: 1. Max length: 255.

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/blockchains/{blockchain}/{token}/token-transfers/{transactionHash}' \
  --header 'X-API-KEY: <api-key>'

Responses

StatusDescription
200Transfer records for the queried transaction
400Bad Request - invalid parameters, address format, blockchain, or token
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
404Not Found - the transaction has no transfers of the requested token
429Too Many Requests - rate limit exceeded
500Internal Server Error - indexer service unavailable or unexpected failure

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectTransfer records for the queried transaction
$.transfersarrayAll transfers recorded under this transaction for the requested token.
$.transfers[]object—
$.transfers[].blockchainstringBlockchain where the transfer occurred.
$.transfers[].blockNumberintegerBlock number containing the transfer.
$.transfers[].transactionHashstringHash of the transaction.
$.transfers[].transferIndexintegerIndex of the transfer within the transaction.
$.transfers[].tokenstringToken identifier.
$.transfers[].amountstringTransfer amount as a decimal string.
$.transfers[].timestampintegerBlock timestamp in milliseconds since Unix epoch.
$.transfers[].transactionIndexoneOfPosition of the transaction within the block.
$.transfers[].transactionIndex (oneOf 1)integer—
$.transfers[].transactionIndex (oneOf 2)null—
$.transfers[].logIndexoneOfEvent log index for EVM chains. null for non-EVM chains like Bitcoin.
$.transfers[].logIndex (oneOf 1)integer—
$.transfers[].logIndex (oneOf 2)null—
$.transfers[].fromoneOfSender wallet address.
$.transfers[].from (oneOf 1)string—
$.transfers[].from (oneOf 2)null—
$.transfers[].tooneOfThe recipient's address
$.transfers[].to (oneOf 1)string—
$.transfers[].to (oneOf 2)null—
$.transfers[].labelstringA label associated with the transfer, if any
$.transfers[].metadataoneOfChain-specific extra data attached to the transfer, if any.
$.transfers[].metadata (oneOf 1)object—
$.transfers[].metadata (oneOf 2)null—

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/blockchains/{blockchain}/{token}/token-transfers/{transactionHash}",
  "operation": {
    "summary": "Get transfers for a transaction",
    "tags": [
      "Token Transfers"
    ],
    "description": "Retrieve the transfer records of a single transaction for one token, read from the chain. Only transfers of the requested token are returned, so a transaction moving several tokens has to be queried once per token. Returns 404 when the transaction moved no amount of that token, including when the transaction id does not exist at all.",
    "parameters": [
      {
        "schema": {
          "type": "string",
          "enum": [
            "ethereum",
            "arbitrum",
            "avalanche",
            "polygon",
            "plasma",
            "sepolia",
            "tron",
            "ton",
            "bitcoin",
            "spark"
          ]
        },
        "in": "path",
        "name": "blockchain",
        "required": true,
        "description": "Blockchain network identifier. Use GET /api/v1/chains to see all available options."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "usdt",
            "xaut",
            "usat",
            "btc"
          ]
        },
        "in": "path",
        "name": "token",
        "required": true,
        "description": "Token identifier. Must be a valid token for the specified blockchain."
      },
      {
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        },
        "in": "path",
        "name": "transactionHash",
        "required": true,
        "description": "Transaction id/hash, as returned in the `transactionHash` field of transfers. Format varies by blockchain (e.g. 0x... for EVM, hex for TON, base58 signature for Solana)."
      }
    ],
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Transfer records for the queried transaction",
        "content": {
          "application/json": {
            "schema": {
              "description": "Transfer records for the queried transaction",
              "type": "object",
              "properties": {
                "transfers": {
                  "type": "array",
                  "description": "All transfers recorded under this transaction for the requested token.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "blockchain": {
                        "type": "string",
                        "description": "Blockchain where the transfer occurred."
                      },
                      "blockNumber": {
                        "type": "integer",
                        "description": "Block number containing the transfer."
                      },
                      "transactionHash": {
                        "type": "string",
                        "description": "Hash of the transaction."
                      },
                      "transferIndex": {
                        "type": "integer",
                        "description": "Index of the transfer within the transaction."
                      },
                      "token": {
                        "type": "string",
                        "description": "Token identifier."
                      },
                      "amount": {
                        "type": "string",
                        "description": "Transfer amount as a decimal string."
                      },
                      "timestamp": {
                        "type": "integer",
                        "description": "Block timestamp in milliseconds since Unix epoch."
                      },
                      "transactionIndex": {
                        "oneOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Position of the transaction within the block."
                      },
                      "logIndex": {
                        "oneOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Event log index for EVM chains. null for non-EVM chains like Bitcoin."
                      },
                      "from": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Sender wallet address."
                      },
                      "to": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "The recipient's address"
                      },
                      "label": {
                        "type": "string",
                        "description": "A label associated with the transfer, if any"
                      },
                      "metadata": {
                        "oneOf": [
                          {
                            "type": "object",
                            "additionalProperties": true
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Chain-specific extra data attached to the transfer, if any."
                      }
                    },
                    "additionalProperties": true
                  }
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, blockchain, or token",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, blockchain, or token",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authentication error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authentication error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authorization error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authorization error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "404": {
        "description": "Not Found - the transaction has no transfers of the requested token",
        "content": {
          "application/json": {
            "schema": {
              "description": "Not Found - the transaction has no transfers of the requested token",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Rate limit error type"
                },
                "message": {
                  "type": "string",
                  "description": "Rate limit error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - indexer service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - indexer service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

POST /api/v1/batch/token-transfers

Get token transfers for multiple addresses

Retrieve token transfer history for multiple addresses in a single request. Each item in the batch is processed independently - if one item fails (e.g. invalid address), the others still return results. The response array maintains the same order as the request. Maximum 10 items per batch.

Authentication: X-API-KEY header required.

Request body · application/json · Required

Array of transfer query objects. Maximum 10 items.

FieldTypeDetails
$arrayArray of transfer query objects. Maximum 10 items. Min items: 1. Max items: 10.
$[]object—
$[].blockchainstringRequired. Blockchain network identifier. Allowed values: "ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark".
$[].tokenstringRequired. Token identifier. Allowed values: "usdt", "xaut", "usat", "btc".
$[].addressstringRequired. Wallet address to query. Min length: 1.
$[].limitintegerMaximum number of transfers to return for this address. Minimum: 1. Maximum: 1000. Default: 10.
$[].fromTsintegerStart timestamp in milliseconds (inclusive). Minimum: 0. Default: 0.
$[].toTsintegerEnd timestamp in milliseconds (inclusive). Minimum: 0.

Example request

Replace path placeholders and the API key before running. Save your request body in request.json using the fields above.

curl --request POST 'https://wdk-api.tether.io/api/v1/batch/token-transfers' \
  --header 'X-API-KEY: <api-key>' \
  --header 'Content-Type: application/json' \
  --data-binary @request.json

Responses

StatusDescription
200Array of results in the same order as the request. Each element is either a transfer result or an error object.
400Bad Request - invalid parameters, address format, blockchain, or token
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
429Too Many Requests - rate limit exceeded
500Internal Server Error - indexer service unavailable or unexpected failure

Response fields · HTTP 200 · application/json

FieldTypeDetails
$arrayArray of results in the same order as the request. Each element is either a transfer result or an error object. Min items: 1.
$[]oneOf—
$[] (oneOf 1)objectToken transfer history for the queried address
$[] (oneOf 1).transfersarrayList of token transfers sorted by block number.
$[] (oneOf 1).transfers[]object—
$[] (oneOf 1).transfers[].blockchainstringBlockchain where the transfer occurred.
$[] (oneOf 1).transfers[].blockNumberintegerBlock number containing the transfer.
$[] (oneOf 1).transfers[].transactionHashstringHash of the transaction.
$[] (oneOf 1).transfers[].transferIndexintegerIndex of the transfer within the transaction.
$[] (oneOf 1).transfers[].tokenstringToken identifier.
$[] (oneOf 1).transfers[].amountstringTransfer amount as a decimal string.
$[] (oneOf 1).transfers[].timestampintegerBlock timestamp in milliseconds since Unix epoch.
$[] (oneOf 1).transfers[].transactionIndexoneOfPosition of the transaction within the block.
$[] (oneOf 1).transfers[].transactionIndex (oneOf 1)integer—
$[] (oneOf 1).transfers[].transactionIndex (oneOf 2)null—
$[] (oneOf 1).transfers[].logIndexoneOfEvent log index for EVM chains. null for non-EVM chains like Bitcoin.
$[] (oneOf 1).transfers[].logIndex (oneOf 1)integer—
$[] (oneOf 1).transfers[].logIndex (oneOf 2)null—
$[] (oneOf 1).transfers[].fromoneOfSender wallet address.
$[] (oneOf 1).transfers[].from (oneOf 1)string—
$[] (oneOf 1).transfers[].from (oneOf 2)null—
$[] (oneOf 1).transfers[].tooneOfThe recipient's address
$[] (oneOf 1).transfers[].to (oneOf 1)string—
$[] (oneOf 1).transfers[].to (oneOf 2)null—
$[] (oneOf 1).transfers[].labelstringA label associated with the transfer, if any
$[] (oneOf 1).transfers[].metadataoneOfChain-specific extra data attached to the transfer, if any.
$[] (oneOf 1).transfers[].metadata (oneOf 1)object—
$[] (oneOf 1).transfers[].metadata (oneOf 2)null—
$[] (oneOf 2)object—
$[] (oneOf 2).errorstring—
$[] (oneOf 2).messagestring—
$[] (oneOf 2).statusnumber—

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "POST",
  "path": "/api/v1/batch/token-transfers",
  "operation": {
    "summary": "Get token transfers for multiple addresses",
    "tags": [
      "Token Transfers"
    ],
    "description": "Retrieve token transfer history for multiple addresses in a single request. Each item in the batch is processed independently - if one item fails (e.g. invalid address), the others still return results. The response array maintains the same order as the request. Maximum 10 items per batch.",
    "requestBody": {
      "required": true,
      "content": {
        "application/json": {
          "schema": {
            "type": "array",
            "description": "Array of transfer query objects. Maximum 10 items.",
            "minItems": 1,
            "maxItems": 10,
            "items": {
              "type": "object",
              "properties": {
                "blockchain": {
                  "type": "string",
                  "enum": [
                    "ethereum",
                    "arbitrum",
                    "avalanche",
                    "polygon",
                    "plasma",
                    "sepolia",
                    "tron",
                    "ton",
                    "bitcoin",
                    "spark"
                  ],
                  "description": "Blockchain network identifier."
                },
                "token": {
                  "type": "string",
                  "enum": [
                    "usdt",
                    "xaut",
                    "usat",
                    "btc"
                  ],
                  "description": "Token identifier."
                },
                "address": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Wallet address to query."
                },
                "limit": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 1000,
                  "default": 10,
                  "description": "Maximum number of transfers to return for this address."
                },
                "fromTs": {
                  "type": "integer",
                  "minimum": 0,
                  "default": 0,
                  "description": "Start timestamp in milliseconds (inclusive)."
                },
                "toTs": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "End timestamp in milliseconds (inclusive)."
                }
              },
              "required": [
                "blockchain",
                "token",
                "address"
              ],
              "additionalProperties": false
            }
          }
        }
      },
      "description": "Array of transfer query objects. Maximum 10 items."
    },
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Array of results in the same order as the request. Each element is either a transfer result or an error object.",
        "content": {
          "application/json": {
            "schema": {
              "description": "Array of results in the same order as the request. Each element is either a transfer result or an error object.",
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "description": "Token transfer history for the queried address",
                    "type": "object",
                    "properties": {
                      "transfers": {
                        "type": "array",
                        "description": "List of token transfers sorted by block number.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "blockchain": {
                              "type": "string",
                              "description": "Blockchain where the transfer occurred."
                            },
                            "blockNumber": {
                              "type": "integer",
                              "description": "Block number containing the transfer."
                            },
                            "transactionHash": {
                              "type": "string",
                              "description": "Hash of the transaction."
                            },
                            "transferIndex": {
                              "type": "integer",
                              "description": "Index of the transfer within the transaction."
                            },
                            "token": {
                              "type": "string",
                              "description": "Token identifier."
                            },
                            "amount": {
                              "type": "string",
                              "description": "Transfer amount as a decimal string."
                            },
                            "timestamp": {
                              "type": "integer",
                              "description": "Block timestamp in milliseconds since Unix epoch."
                            },
                            "transactionIndex": {
                              "oneOf": [
                                {
                                  "type": "integer"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Position of the transaction within the block."
                            },
                            "logIndex": {
                              "oneOf": [
                                {
                                  "type": "integer"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Event log index for EVM chains. null for non-EVM chains like Bitcoin."
                            },
                            "from": {
                              "oneOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Sender wallet address."
                            },
                            "to": {
                              "oneOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "The recipient's address"
                            },
                            "label": {
                              "type": "string",
                              "description": "A label associated with the transfer, if any"
                            },
                            "metadata": {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "additionalProperties": true
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Chain-specific extra data attached to the transfer, if any."
                            }
                          },
                          "additionalProperties": true
                        }
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "error": {
                        "type": "string"
                      },
                      "message": {
                        "type": "string"
                      },
                      "status": {
                        "type": "number"
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "minItems": 1
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, blockchain, or token",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, blockchain, or token",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authentication error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authentication error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authorization error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authorization error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Rate limit error type"
                },
                "message": {
                  "type": "string",
                  "description": "Rate limit error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - indexer service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - indexer service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

POST /api/v1/batch/token-balances

Get token balances for multiple addresses

Retrieve the current token balance for multiple addresses in a single request. Each item in the batch is processed independently - if one item fails (e.g. invalid address), the others still return results. The response array maintains the same order as the request. Maximum 10 items per batch.

Authentication: X-API-KEY header required.

Request body · application/json · Required

Array of balance query objects. Maximum 10 items.

FieldTypeDetails
$arrayArray of balance query objects. Maximum 10 items. Min items: 1. Max items: 10.
$[]object—
$[].blockchainstringRequired. Blockchain network identifier. Allowed values: "ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark".
$[].tokenstringRequired. Token identifier. Allowed values: "usdt", "xaut", "usat", "btc".
$[].addressstringRequired. Wallet address to query. Min length: 1.

Example request

Replace path placeholders and the API key before running. Save your request body in request.json using the fields above.

curl --request POST 'https://wdk-api.tether.io/api/v1/batch/token-balances' \
  --header 'X-API-KEY: <api-key>' \
  --header 'Content-Type: application/json' \
  --data-binary @request.json

Responses

StatusDescription
200Array of results in the same order as the request. Each element is either a balance result or an error object.
400Bad Request - invalid parameters, address format, blockchain, or token
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
429Too Many Requests - rate limit exceeded
500Internal Server Error - indexer service unavailable or unexpected failure

Response fields · HTTP 200 · application/json

FieldTypeDetails
$arrayArray of results in the same order as the request. Each element is either a balance result or an error object.
$[]oneOf—
$[] (oneOf 1)objectCurrent token balance for the queried address
$[] (oneOf 1).tokenBalanceobjectBalance information.
$[] (oneOf 1).tokenBalance.blockchainstringBlockchain queried.
$[] (oneOf 1).tokenBalance.tokenstringToken queried.
$[] (oneOf 1).tokenBalance.amountstringCurrent balance as a decimal string.
$[] (oneOf 2)object—
$[] (oneOf 2).errorstring—
$[] (oneOf 2).messagestring—
$[] (oneOf 2).statusnumber—

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "POST",
  "path": "/api/v1/batch/token-balances",
  "operation": {
    "summary": "Get token balances for multiple addresses",
    "tags": [
      "Token Balances"
    ],
    "description": "Retrieve the current token balance for multiple addresses in a single request. Each item in the batch is processed independently - if one item fails (e.g. invalid address), the others still return results. The response array maintains the same order as the request. Maximum 10 items per batch.",
    "requestBody": {
      "required": true,
      "content": {
        "application/json": {
          "schema": {
            "type": "array",
            "description": "Array of balance query objects. Maximum 10 items.",
            "minItems": 1,
            "maxItems": 10,
            "items": {
              "type": "object",
              "properties": {
                "blockchain": {
                  "type": "string",
                  "enum": [
                    "ethereum",
                    "arbitrum",
                    "avalanche",
                    "polygon",
                    "plasma",
                    "sepolia",
                    "tron",
                    "ton",
                    "bitcoin",
                    "spark"
                  ],
                  "description": "Blockchain network identifier."
                },
                "token": {
                  "type": "string",
                  "enum": [
                    "usdt",
                    "xaut",
                    "usat",
                    "btc"
                  ],
                  "description": "Token identifier."
                },
                "address": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Wallet address to query."
                }
              },
              "required": [
                "blockchain",
                "token",
                "address"
              ],
              "additionalProperties": false
            }
          }
        }
      },
      "description": "Array of balance query objects. Maximum 10 items."
    },
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Array of results in the same order as the request. Each element is either a balance result or an error object.",
        "content": {
          "application/json": {
            "schema": {
              "description": "Array of results in the same order as the request. Each element is either a balance result or an error object.",
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "description": "Current token balance for the queried address",
                    "type": "object",
                    "properties": {
                      "tokenBalance": {
                        "type": "object",
                        "description": "Balance information.",
                        "properties": {
                          "blockchain": {
                            "type": "string",
                            "description": "Blockchain queried."
                          },
                          "token": {
                            "type": "string",
                            "description": "Token queried."
                          },
                          "amount": {
                            "type": "string",
                            "description": "Current balance as a decimal string."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "error": {
                        "type": "string"
                      },
                      "message": {
                        "type": "string"
                      },
                      "status": {
                        "type": "number"
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              }
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, blockchain, or token",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, blockchain, or token",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authentication error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authentication error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Authorization error type"
                },
                "message": {
                  "type": "string",
                  "description": "Authorization error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Rate limit error type"
                },
                "message": {
                  "type": "string",
                  "description": "Rate limit error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - indexer service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - indexer service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Error details"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

POST /api/v1/wallets

Register wallets for automatic transaction syncing

Registers one or more wallets for the authenticated owner. Registered wallet addresses are synced automatically - transfers touching them are collected continuously and can be queried via the wallet transfer endpoints without polling the chain endpoints. Each item is processed independently and returns its own status: 201 created, 400 invalid, 429 wallet limit exceeded. Registration is rejected with 409 if an address is already registered.

Authentication: X-API-KEY header required.

Request body · application/json · Required

Array of wallets to register. Maximum 10 items.

FieldTypeDetails
$arrayArray of wallets to register. Maximum 10 items. Min items: 1. Max items: 10.
$[]object—
$[].typestringRequired. Wallet type. Must be the type this gateway registers. Allowed values: "client_wallet".
$[].namestringOptional display name for the wallet. Min length: 1. Max length: 100.
$[].addressesobjectRequired. Addresses to register, keyed by blockchain (e.g. {"ethereum": "0x...", "bitcoin": "bc1..."}). Use GET /api/v1/chains for supported blockchains. Min properties: 1.
$[].addresses.*stringMin length: 1. Max length: 200.
$[].metaobjectOptional wallet metadata. Required when registering a spark address.
$[].meta.sparkobject—
$[].meta.spark.sparkDepositAddressstringRequired. Min length: 1. Pattern: "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$".
$[].meta.spark.sparkIdentityKeystringRequired. Min length: 1.

Example request

Replace path placeholders and the API key before running. Save your request body in request.json using the fields above.

curl --request POST 'https://wdk-api.tether.io/api/v1/wallets' \
  --header 'X-API-KEY: <api-key>' \
  --header 'Content-Type: application/json' \
  --data-binary @request.json

Responses

StatusDescription
200Per-wallet registration results in request order
400Bad Request - invalid parameters, address format, or blockchain
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
409Conflict - address already registered
429Too Many Requests - rate limit exceeded
500Internal Server Error - wallet service unavailable or unexpected failure
503Service Unavailable - wallet service temporarily unreachable

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectPer-wallet registration results in request order
$.walletsarray—
$.wallets[]objectPer-wallet registration result
$.wallets[].statusnumberPer-item status code: 201 created, 400 invalid, 429 wallet limit exceeded.
$.wallets[].idstringWallet identifier (present when created).
$.wallets[].namestringWallet display name.
$.wallets[].typestringWallet type assigned at registration.
$.wallets[].enabledbooleanWhether the wallet is active for transaction syncing.
$.wallets[].addressesobjectRegistered addresses keyed by blockchain.
$.wallets[].addresses.*string—
$.wallets[].metaobjectOptional wallet metadata. Required when registering a spark address.
$.wallets[].meta.sparkobject—
$.wallets[].meta.spark.sparkDepositAddressstringRequired. Min length: 1. Pattern: "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$".
$.wallets[].meta.spark.sparkIdentityKeystringRequired. Min length: 1.
$.wallets[].errorstringError code when the item was rejected.
$.wallets[].limitnumberWallet limit that was exceeded (present on 429).
$.wallets[].currentCountnumberCurrent wallet count (present on 429).

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "POST",
  "path": "/api/v1/wallets",
  "operation": {
    "summary": "Register wallets for automatic transaction syncing",
    "tags": [
      "Wallets"
    ],
    "description": "Registers one or more wallets for the authenticated owner. Registered wallet addresses are synced automatically - transfers touching them are collected continuously and can be queried via the wallet transfer endpoints without polling the chain endpoints. Each item is processed independently and returns its own status: 201 created, 400 invalid, 429 wallet limit exceeded. Registration is rejected with 409 if an address is already registered.",
    "requestBody": {
      "required": true,
      "content": {
        "application/json": {
          "schema": {
            "type": "array",
            "description": "Array of wallets to register. Maximum 10 items.",
            "minItems": 1,
            "maxItems": 10,
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "client_wallet"
                  ],
                  "description": "Wallet type. Must be the type this gateway registers."
                },
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 100,
                  "description": "Optional display name for the wallet."
                },
                "addresses": {
                  "type": "object",
                  "description": "Addresses to register, keyed by blockchain (e.g. {\"ethereum\": \"0x...\", \"bitcoin\": \"bc1...\"}). Use GET /api/v1/chains for supported blockchains.",
                  "minProperties": 1,
                  "propertyNames": {
                    "enum": [
                      "ethereum",
                      "arbitrum",
                      "avalanche",
                      "polygon",
                      "plasma",
                      "sepolia",
                      "tron",
                      "ton",
                      "bitcoin",
                      "spark"
                    ]
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  }
                },
                "meta": {
                  "type": "object",
                  "description": "Optional wallet metadata. Required when registering a spark address.",
                  "properties": {
                    "spark": {
                      "type": "object",
                      "properties": {
                        "sparkDepositAddress": {
                          "type": "string",
                          "minLength": 1,
                          "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"
                        },
                        "sparkIdentityKey": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "sparkDepositAddress",
                        "sparkIdentityKey"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                }
              },
              "required": [
                "type",
                "addresses"
              ],
              "additionalProperties": false
            }
          }
        }
      },
      "description": "Array of wallets to register. Maximum 10 items."
    },
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Per-wallet registration results in request order",
        "content": {
          "application/json": {
            "schema": {
              "description": "Per-wallet registration results in request order",
              "type": "object",
              "properties": {
                "wallets": {
                  "type": "array",
                  "items": {
                    "description": "Per-wallet registration result",
                    "type": "object",
                    "properties": {
                      "status": {
                        "type": "number",
                        "description": "Per-item status code: 201 created, 400 invalid, 429 wallet limit exceeded."
                      },
                      "id": {
                        "type": "string",
                        "description": "Wallet identifier (present when created)."
                      },
                      "name": {
                        "type": "string",
                        "description": "Wallet display name."
                      },
                      "type": {
                        "type": "string",
                        "description": "Wallet type assigned at registration."
                      },
                      "enabled": {
                        "type": "boolean",
                        "description": "Whether the wallet is active for transaction syncing."
                      },
                      "addresses": {
                        "type": "object",
                        "description": "Registered addresses keyed by blockchain.",
                        "additionalProperties": {
                          "type": "string"
                        }
                      },
                      "meta": {
                        "type": "object",
                        "description": "Optional wallet metadata. Required when registering a spark address.",
                        "properties": {
                          "spark": {
                            "type": "object",
                            "properties": {
                              "sparkDepositAddress": {
                                "type": "string",
                                "minLength": 1,
                                "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"
                              },
                              "sparkIdentityKey": {
                                "type": "string",
                                "minLength": 1
                              }
                            },
                            "required": [
                              "sparkDepositAddress",
                              "sparkIdentityKey"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "additionalProperties": false
                      },
                      "error": {
                        "type": "string",
                        "description": "Error code when the item was rejected."
                      },
                      "limit": {
                        "type": "number",
                        "description": "Wallet limit that was exceeded (present on 429)."
                      },
                      "currentCount": {
                        "type": "number",
                        "description": "Current wallet count (present on 429)."
                      }
                    },
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, or blockchain",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, or blockchain",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "409": {
        "description": "Conflict - address already registered",
        "content": {
          "application/json": {
            "schema": {
              "description": "Conflict - address already registered",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - wallet service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - wallet service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "503": {
        "description": "Service Unavailable - wallet service temporarily unreachable",
        "content": {
          "application/json": {
            "schema": {
              "description": "Service Unavailable - wallet service temporarily unreachable",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

GET /api/v1/wallets

List registered wallets

Returns all active wallets registered by the authenticated owner.

Authentication: X-API-KEY header required.

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/wallets' \
  --header 'X-API-KEY: <api-key>'

Responses

StatusDescription
200Registered wallets
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
429Too Many Requests - rate limit exceeded
500Internal Server Error - wallet service unavailable or unexpected failure
503Service Unavailable - wallet service temporarily unreachable

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectRegistered wallets
$.walletsarray—
$.wallets[]objectA registered wallet
$.wallets[].idstringWallet identifier.
$.wallets[].namestringOptional wallet display name.
$.wallets[].typestringWallet type assigned at registration.
$.wallets[].enabledbooleanWhether the wallet is active for transaction syncing.
$.wallets[].addressesobjectRegistered addresses keyed by blockchain.
$.wallets[].addresses.*string—
$.wallets[].metaobjectOptional wallet metadata. Required when registering a spark address.
$.wallets[].meta.sparkobject—
$.wallets[].meta.spark.sparkDepositAddressstringRequired. Min length: 1. Pattern: "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$".
$.wallets[].meta.spark.sparkIdentityKeystringRequired. Min length: 1.
$.wallets[].createdAtnumberCreation timestamp in milliseconds.
$.wallets[].updatedAtnumberLast update timestamp in milliseconds.

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/wallets",
  "operation": {
    "summary": "List registered wallets",
    "tags": [
      "Wallets"
    ],
    "description": "Returns all active wallets registered by the authenticated owner.",
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Registered wallets",
        "content": {
          "application/json": {
            "schema": {
              "description": "Registered wallets",
              "type": "object",
              "properties": {
                "wallets": {
                  "type": "array",
                  "items": {
                    "description": "A registered wallet",
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "description": "Wallet identifier."
                      },
                      "name": {
                        "type": "string",
                        "description": "Optional wallet display name."
                      },
                      "type": {
                        "type": "string",
                        "description": "Wallet type assigned at registration."
                      },
                      "enabled": {
                        "type": "boolean",
                        "description": "Whether the wallet is active for transaction syncing."
                      },
                      "addresses": {
                        "type": "object",
                        "description": "Registered addresses keyed by blockchain.",
                        "additionalProperties": {
                          "type": "string"
                        }
                      },
                      "meta": {
                        "type": "object",
                        "description": "Optional wallet metadata. Required when registering a spark address.",
                        "properties": {
                          "spark": {
                            "type": "object",
                            "properties": {
                              "sparkDepositAddress": {
                                "type": "string",
                                "minLength": 1,
                                "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"
                              },
                              "sparkIdentityKey": {
                                "type": "string",
                                "minLength": 1
                              }
                            },
                            "required": [
                              "sparkDepositAddress",
                              "sparkIdentityKey"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "additionalProperties": false
                      },
                      "createdAt": {
                        "type": "number",
                        "description": "Creation timestamp in milliseconds."
                      },
                      "updatedAt": {
                        "type": "number",
                        "description": "Last update timestamp in milliseconds."
                      }
                    },
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - wallet service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - wallet service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "503": {
        "description": "Service Unavailable - wallet service temporarily unreachable",
        "content": {
          "application/json": {
            "schema": {
              "description": "Service Unavailable - wallet service temporarily unreachable",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

GET /api/v1/wallets/{walletId}

Get a registered wallet

Returns a single wallet registered by the authenticated owner.

Authentication: X-API-KEY header required.

Parameters

NameTypeDetails
walletId (path)stringRequired: Yes. Wallet identifier from POST /api/v1/wallets. Min length: 1.

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/wallets/{walletId}' \
  --header 'X-API-KEY: <api-key>'

Responses

StatusDescription
200A registered wallet
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
404Not Found - wallet not found or access denied
429Too Many Requests - rate limit exceeded
500Internal Server Error - wallet service unavailable or unexpected failure
503Service Unavailable - wallet service temporarily unreachable

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectA registered wallet
$.idstringWallet identifier.
$.namestringOptional wallet display name.
$.typestringWallet type assigned at registration.
$.enabledbooleanWhether the wallet is active for transaction syncing.
$.addressesobjectRegistered addresses keyed by blockchain.
$.addresses.*string—
$.metaobjectOptional wallet metadata. Required when registering a spark address.
$.meta.sparkobject—
$.meta.spark.sparkDepositAddressstringRequired. Min length: 1. Pattern: "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$".
$.meta.spark.sparkIdentityKeystringRequired. Min length: 1.
$.createdAtnumberCreation timestamp in milliseconds.
$.updatedAtnumberLast update timestamp in milliseconds.

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/wallets/{walletId}",
  "operation": {
    "summary": "Get a registered wallet",
    "tags": [
      "Wallets"
    ],
    "description": "Returns a single wallet registered by the authenticated owner.",
    "parameters": [
      {
        "schema": {
          "type": "string",
          "minLength": 1
        },
        "in": "path",
        "name": "walletId",
        "required": true,
        "description": "Wallet identifier from POST /api/v1/wallets."
      }
    ],
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "A registered wallet",
        "content": {
          "application/json": {
            "schema": {
              "description": "A registered wallet",
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Wallet identifier."
                },
                "name": {
                  "type": "string",
                  "description": "Optional wallet display name."
                },
                "type": {
                  "type": "string",
                  "description": "Wallet type assigned at registration."
                },
                "enabled": {
                  "type": "boolean",
                  "description": "Whether the wallet is active for transaction syncing."
                },
                "addresses": {
                  "type": "object",
                  "description": "Registered addresses keyed by blockchain.",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "meta": {
                  "type": "object",
                  "description": "Optional wallet metadata. Required when registering a spark address.",
                  "properties": {
                    "spark": {
                      "type": "object",
                      "properties": {
                        "sparkDepositAddress": {
                          "type": "string",
                          "minLength": 1,
                          "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"
                        },
                        "sparkIdentityKey": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "sparkDepositAddress",
                        "sparkIdentityKey"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "createdAt": {
                  "type": "number",
                  "description": "Creation timestamp in milliseconds."
                },
                "updatedAt": {
                  "type": "number",
                  "description": "Last update timestamp in milliseconds."
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "404": {
        "description": "Not Found - wallet not found or access denied",
        "content": {
          "application/json": {
            "schema": {
              "description": "Not Found - wallet not found or access denied",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - wallet service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - wallet service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "503": {
        "description": "Service Unavailable - wallet service temporarily unreachable",
        "content": {
          "application/json": {
            "schema": {
              "description": "Service Unavailable - wallet service temporarily unreachable",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

PATCH /api/v1/wallets/{walletId}

Update a registered wallet

Updates the display name of a wallet or enables/disables its transaction syncing.

Authentication: X-API-KEY header required.

Parameters

NameTypeDetails
walletId (path)stringRequired: Yes. Wallet identifier from POST /api/v1/wallets. Min length: 1.

Request body · application/json · Required

FieldTypeDetails
$objectMin properties: 1.
$.namestringNew display name for the wallet. Min length: 1. Max length: 100.
$.enabledbooleanWhether the wallet is active for transaction syncing.

Example request

Replace path placeholders and the API key before running. Save your request body in request.json using the fields above.

curl --request PATCH 'https://wdk-api.tether.io/api/v1/wallets/{walletId}' \
  --header 'X-API-KEY: <api-key>' \
  --header 'Content-Type: application/json' \
  --data-binary @request.json

Responses

StatusDescription
200A registered wallet
400Bad Request - invalid parameters, address format, or blockchain
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
404Not Found - wallet not found or access denied
429Too Many Requests - rate limit exceeded
500Internal Server Error - wallet service unavailable or unexpected failure
503Service Unavailable - wallet service temporarily unreachable

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectA registered wallet
$.idstringWallet identifier.
$.namestringOptional wallet display name.
$.typestringWallet type assigned at registration.
$.enabledbooleanWhether the wallet is active for transaction syncing.
$.addressesobjectRegistered addresses keyed by blockchain.
$.addresses.*string—
$.metaobjectOptional wallet metadata. Required when registering a spark address.
$.meta.sparkobject—
$.meta.spark.sparkDepositAddressstringRequired. Min length: 1. Pattern: "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$".
$.meta.spark.sparkIdentityKeystringRequired. Min length: 1.
$.createdAtnumberCreation timestamp in milliseconds.
$.updatedAtnumberLast update timestamp in milliseconds.

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "PATCH",
  "path": "/api/v1/wallets/{walletId}",
  "operation": {
    "summary": "Update a registered wallet",
    "tags": [
      "Wallets"
    ],
    "description": "Updates the display name of a wallet or enables/disables its transaction syncing.",
    "requestBody": {
      "required": true,
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100,
                "description": "New display name for the wallet."
              },
              "enabled": {
                "type": "boolean",
                "description": "Whether the wallet is active for transaction syncing."
              }
            },
            "minProperties": 1,
            "additionalProperties": false
          }
        }
      }
    },
    "parameters": [
      {
        "schema": {
          "type": "string",
          "minLength": 1
        },
        "in": "path",
        "name": "walletId",
        "required": true,
        "description": "Wallet identifier from POST /api/v1/wallets."
      }
    ],
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "A registered wallet",
        "content": {
          "application/json": {
            "schema": {
              "description": "A registered wallet",
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Wallet identifier."
                },
                "name": {
                  "type": "string",
                  "description": "Optional wallet display name."
                },
                "type": {
                  "type": "string",
                  "description": "Wallet type assigned at registration."
                },
                "enabled": {
                  "type": "boolean",
                  "description": "Whether the wallet is active for transaction syncing."
                },
                "addresses": {
                  "type": "object",
                  "description": "Registered addresses keyed by blockchain.",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "meta": {
                  "type": "object",
                  "description": "Optional wallet metadata. Required when registering a spark address.",
                  "properties": {
                    "spark": {
                      "type": "object",
                      "properties": {
                        "sparkDepositAddress": {
                          "type": "string",
                          "minLength": 1,
                          "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"
                        },
                        "sparkIdentityKey": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "sparkDepositAddress",
                        "sparkIdentityKey"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "createdAt": {
                  "type": "number",
                  "description": "Creation timestamp in milliseconds."
                },
                "updatedAt": {
                  "type": "number",
                  "description": "Last update timestamp in milliseconds."
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, or blockchain",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, or blockchain",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "404": {
        "description": "Not Found - wallet not found or access denied",
        "content": {
          "application/json": {
            "schema": {
              "description": "Not Found - wallet not found or access denied",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - wallet service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - wallet service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "503": {
        "description": "Service Unavailable - wallet service temporarily unreachable",
        "content": {
          "application/json": {
            "schema": {
              "description": "Service Unavailable - wallet service temporarily unreachable",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

DELETE /api/v1/wallets/{walletId}

Delete a registered wallet

Deletes a wallet registered by the authenticated owner and stops syncing its transactions. Its addresses can be registered again afterwards.

Authentication: X-API-KEY header required.

Parameters

NameTypeDetails
walletId (path)stringRequired: Yes. Wallet identifier from POST /api/v1/wallets. Min length: 1.

Example request

Replace path placeholders and the API key before running.

curl --request DELETE 'https://wdk-api.tether.io/api/v1/wallets/{walletId}' \
  --header 'X-API-KEY: <api-key>'

Responses

StatusDescription
200Wallet deleted
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
404Not Found - wallet not found or access denied
429Too Many Requests - rate limit exceeded
500Internal Server Error - wallet service unavailable or unexpected failure
503Service Unavailable - wallet service temporarily unreachable

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectWallet deleted
$.successboolean—

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "DELETE",
  "path": "/api/v1/wallets/{walletId}",
  "operation": {
    "summary": "Delete a registered wallet",
    "tags": [
      "Wallets"
    ],
    "description": "Deletes a wallet registered by the authenticated owner and stops syncing its transactions. Its addresses can be registered again afterwards.",
    "parameters": [
      {
        "schema": {
          "type": "string",
          "minLength": 1
        },
        "in": "path",
        "name": "walletId",
        "required": true,
        "description": "Wallet identifier from POST /api/v1/wallets."
      }
    ],
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Wallet deleted",
        "content": {
          "application/json": {
            "schema": {
              "description": "Wallet deleted",
              "type": "object",
              "properties": {
                "success": {
                  "type": "boolean"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "404": {
        "description": "Not Found - wallet not found or access denied",
        "content": {
          "application/json": {
            "schema": {
              "description": "Not Found - wallet not found or access denied",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - wallet service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - wallet service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "503": {
        "description": "Service Unavailable - wallet service temporarily unreachable",
        "content": {
          "application/json": {
            "schema": {
              "description": "Service Unavailable - wallet service temporarily unreachable",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

GET /api/v1/wallets/{walletId}/transfers

Get synced transfers for a wallet

Returns the automatically synced transfer log for a single registered wallet, newest first by default.

Authentication: X-API-KEY header required.

Parameters

NameTypeDetails
blockchain (query)stringRequired: No. Filter transfers by blockchain. Allowed values: "ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark".
token (query)stringRequired: No. Filter transfers by token. Allowed values: "usdt", "xaut", "usat", "btc".
type (query)stringRequired: No. Filter by transfer direction relative to the wallet. Allowed values: "sent", "received".
from (query)oneOfRequired: No. Start of the time range - timestamp in milliseconds or ISO 8601 date.
to (query)oneOfRequired: No. End of the time range - timestamp in milliseconds or ISO 8601 date.
limit (query)integerRequired: No. Maximum number of transfers to return. Minimum: 1. Maximum: 100. Default: 10.
skip (query)integerRequired: No. Number of matching transfers to skip (pagination offset). Minimum: 0. Default: 0.
sort (query)stringRequired: No. Sort order by timestamp. Allowed values: "asc", "desc". Default: "desc".
walletId (path)stringRequired: Yes. Wallet identifier from POST /api/v1/wallets. Min length: 1.

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/wallets/{walletId}/transfers' \
  --header 'X-API-KEY: <api-key>'

Responses

StatusDescription
200Raw transfer log entries for registered wallets
400Bad Request - invalid parameters, address format, or blockchain
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
404Not Found - wallet not found or access denied
429Too Many Requests - rate limit exceeded
500Internal Server Error - wallet service unavailable or unexpected failure
503Service Unavailable - wallet service temporarily unreachable

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectRaw transfer log entries for registered wallets
$.transfersarrayList of transfers sorted by timestamp.
$.transfers[]object—
$.transfers[].walletIdstringWallet the transfer belongs to.
$.transfers[].blockchainstringBlockchain where the transfer occurred.
$.transfers[].tokenstringToken identifier.
$.transfers[].transactionHashstringHash of the transaction.
$.transfers[].transferIndexintegerIndex of the transfer within the transaction.
$.transfers[].blockNumberintegerBlock number containing the transfer.
$.transfers[].amountstringTransfer amount as a decimal string.
$.transfers[].fromoneOfSender address.
$.transfers[].from (oneOf 1)string—
$.transfers[].from (oneOf 2)null—
$.transfers[].tooneOfRecipient address.
$.transfers[].to (oneOf 1)string—
$.transfers[].to (oneOf 2)null—
$.transfers[].tsintegerBlock timestamp in milliseconds since Unix epoch.
$.transfers[].transactionIndexoneOfPosition of the transaction within the block.
$.transfers[].transactionIndex (oneOf 1)integer—
$.transfers[].transactionIndex (oneOf 2)null—
$.transfers[].logIndexoneOfEvent log index for EVM chains. null for non-EVM chains.
$.transfers[].logIndex (oneOf 1)integer—
$.transfers[].logIndex (oneOf 2)null—
$.transfers[].labelstringA label associated with the transfer, if any.
$.transfers[].typestringDirection of the transfer relative to the wallet. Allowed values: "sent", "received".

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/wallets/{walletId}/transfers",
  "operation": {
    "summary": "Get synced transfers for a wallet",
    "tags": [
      "Wallet Transfers"
    ],
    "description": "Returns the automatically synced transfer log for a single registered wallet, newest first by default.",
    "parameters": [
      {
        "schema": {
          "type": "string",
          "enum": [
            "ethereum",
            "arbitrum",
            "avalanche",
            "polygon",
            "plasma",
            "sepolia",
            "tron",
            "ton",
            "bitcoin",
            "spark"
          ]
        },
        "in": "query",
        "name": "blockchain",
        "required": false,
        "description": "Filter transfers by blockchain."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "usdt",
            "xaut",
            "usat",
            "btc"
          ]
        },
        "in": "query",
        "name": "token",
        "required": false,
        "description": "Filter transfers by token."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "sent",
            "received"
          ]
        },
        "in": "query",
        "name": "type",
        "required": false,
        "description": "Filter by transfer direction relative to the wallet."
      },
      {
        "schema": {
          "oneOf": [
            {
              "type": "integer",
              "minimum": 0
            },
            {
              "type": "string",
              "format": "date-time"
            }
          ]
        },
        "in": "query",
        "name": "from",
        "required": false,
        "description": "Start of the time range - timestamp in milliseconds or ISO 8601 date."
      },
      {
        "schema": {
          "oneOf": [
            {
              "type": "integer",
              "minimum": 0
            },
            {
              "type": "string",
              "format": "date-time"
            }
          ]
        },
        "in": "query",
        "name": "to",
        "required": false,
        "description": "End of the time range - timestamp in milliseconds or ISO 8601 date."
      },
      {
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 10
        },
        "in": "query",
        "name": "limit",
        "required": false,
        "description": "Maximum number of transfers to return."
      },
      {
        "schema": {
          "type": "integer",
          "minimum": 0,
          "default": 0
        },
        "in": "query",
        "name": "skip",
        "required": false,
        "description": "Number of matching transfers to skip (pagination offset)."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "asc",
            "desc"
          ],
          "default": "desc"
        },
        "in": "query",
        "name": "sort",
        "required": false,
        "description": "Sort order by timestamp."
      },
      {
        "schema": {
          "type": "string",
          "minLength": 1
        },
        "in": "path",
        "name": "walletId",
        "required": true,
        "description": "Wallet identifier from POST /api/v1/wallets."
      }
    ],
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Raw transfer log entries for registered wallets",
        "content": {
          "application/json": {
            "schema": {
              "description": "Raw transfer log entries for registered wallets",
              "type": "object",
              "properties": {
                "transfers": {
                  "type": "array",
                  "description": "List of transfers sorted by timestamp.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "walletId": {
                        "type": "string",
                        "description": "Wallet the transfer belongs to."
                      },
                      "blockchain": {
                        "type": "string",
                        "description": "Blockchain where the transfer occurred."
                      },
                      "token": {
                        "type": "string",
                        "description": "Token identifier."
                      },
                      "transactionHash": {
                        "type": "string",
                        "description": "Hash of the transaction."
                      },
                      "transferIndex": {
                        "type": "integer",
                        "description": "Index of the transfer within the transaction."
                      },
                      "blockNumber": {
                        "type": "integer",
                        "description": "Block number containing the transfer."
                      },
                      "amount": {
                        "type": "string",
                        "description": "Transfer amount as a decimal string."
                      },
                      "from": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Sender address."
                      },
                      "to": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Recipient address."
                      },
                      "ts": {
                        "type": "integer",
                        "description": "Block timestamp in milliseconds since Unix epoch."
                      },
                      "transactionIndex": {
                        "oneOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Position of the transaction within the block."
                      },
                      "logIndex": {
                        "oneOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Event log index for EVM chains. null for non-EVM chains."
                      },
                      "label": {
                        "type": "string",
                        "description": "A label associated with the transfer, if any."
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "sent",
                          "received"
                        ],
                        "description": "Direction of the transfer relative to the wallet."
                      }
                    },
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, or blockchain",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, or blockchain",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "404": {
        "description": "Not Found - wallet not found or access denied",
        "content": {
          "application/json": {
            "schema": {
              "description": "Not Found - wallet not found or access denied",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - wallet service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - wallet service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "503": {
        "description": "Service Unavailable - wallet service temporarily unreachable",
        "content": {
          "application/json": {
            "schema": {
              "description": "Service Unavailable - wallet service temporarily unreachable",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

GET /api/v1/transfers

Get synced transfers across all registered wallets

Returns the automatically synced transfer log across all the owner's registered wallets, merged and sorted by timestamp.

Authentication: X-API-KEY header required.

Parameters

NameTypeDetails
blockchain (query)stringRequired: No. Filter transfers by blockchain. Allowed values: "ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark".
token (query)stringRequired: No. Filter transfers by token. Allowed values: "usdt", "xaut", "usat", "btc".
type (query)stringRequired: No. Filter by transfer direction relative to the wallet. Allowed values: "sent", "received".
from (query)oneOfRequired: No. Start of the time range - timestamp in milliseconds or ISO 8601 date.
to (query)oneOfRequired: No. End of the time range - timestamp in milliseconds or ISO 8601 date.
limit (query)integerRequired: No. Maximum number of transfers to return. Minimum: 1. Maximum: 100. Default: 10.
skip (query)integerRequired: No. Number of matching transfers to skip (pagination offset). Minimum: 0. Default: 0.
sort (query)stringRequired: No. Sort order by timestamp. Allowed values: "asc", "desc". Default: "desc".

Example request

Replace path placeholders and the API key before running.

curl --request GET 'https://wdk-api.tether.io/api/v1/transfers' \
  --header 'X-API-KEY: <api-key>'

Responses

StatusDescription
200Raw transfer log entries for registered wallets
400Bad Request - invalid parameters, address format, or blockchain
401Unauthorized - expired API key
403Forbidden - missing or invalid API key
429Too Many Requests - rate limit exceeded
500Internal Server Error - wallet service unavailable or unexpected failure
503Service Unavailable - wallet service temporarily unreachable

Response fields · HTTP 200 · application/json

FieldTypeDetails
$objectRaw transfer log entries for registered wallets
$.transfersarrayList of transfers sorted by timestamp.
$.transfers[]object—
$.transfers[].walletIdstringWallet the transfer belongs to.
$.transfers[].blockchainstringBlockchain where the transfer occurred.
$.transfers[].tokenstringToken identifier.
$.transfers[].transactionHashstringHash of the transaction.
$.transfers[].transferIndexintegerIndex of the transfer within the transaction.
$.transfers[].blockNumberintegerBlock number containing the transfer.
$.transfers[].amountstringTransfer amount as a decimal string.
$.transfers[].fromoneOfSender address.
$.transfers[].from (oneOf 1)string—
$.transfers[].from (oneOf 2)null—
$.transfers[].tooneOfRecipient address.
$.transfers[].to (oneOf 1)string—
$.transfers[].to (oneOf 2)null—
$.transfers[].tsintegerBlock timestamp in milliseconds since Unix epoch.
$.transfers[].transactionIndexoneOfPosition of the transaction within the block.
$.transfers[].transactionIndex (oneOf 1)integer—
$.transfers[].transactionIndex (oneOf 2)null—
$.transfers[].logIndexoneOfEvent log index for EVM chains. null for non-EVM chains.
$.transfers[].logIndex (oneOf 1)integer—
$.transfers[].logIndex (oneOf 2)null—
$.transfers[].labelstringA label associated with the transfer, if any.
$.transfers[].typestringDirection of the transfer relative to the wallet. Allowed values: "sent", "received".

Other response fields: $.error, $.message, $.status. See the full schema for each status.

Full endpoint schema (JSON)
{
  "method": "GET",
  "path": "/api/v1/transfers",
  "operation": {
    "summary": "Get synced transfers across all registered wallets",
    "tags": [
      "Wallet Transfers"
    ],
    "description": "Returns the automatically synced transfer log across all the owner's registered wallets, merged and sorted by timestamp.",
    "parameters": [
      {
        "schema": {
          "type": "string",
          "enum": [
            "ethereum",
            "arbitrum",
            "avalanche",
            "polygon",
            "plasma",
            "sepolia",
            "tron",
            "ton",
            "bitcoin",
            "spark"
          ]
        },
        "in": "query",
        "name": "blockchain",
        "required": false,
        "description": "Filter transfers by blockchain."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "usdt",
            "xaut",
            "usat",
            "btc"
          ]
        },
        "in": "query",
        "name": "token",
        "required": false,
        "description": "Filter transfers by token."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "sent",
            "received"
          ]
        },
        "in": "query",
        "name": "type",
        "required": false,
        "description": "Filter by transfer direction relative to the wallet."
      },
      {
        "schema": {
          "oneOf": [
            {
              "type": "integer",
              "minimum": 0
            },
            {
              "type": "string",
              "format": "date-time"
            }
          ]
        },
        "in": "query",
        "name": "from",
        "required": false,
        "description": "Start of the time range - timestamp in milliseconds or ISO 8601 date."
      },
      {
        "schema": {
          "oneOf": [
            {
              "type": "integer",
              "minimum": 0
            },
            {
              "type": "string",
              "format": "date-time"
            }
          ]
        },
        "in": "query",
        "name": "to",
        "required": false,
        "description": "End of the time range - timestamp in milliseconds or ISO 8601 date."
      },
      {
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 10
        },
        "in": "query",
        "name": "limit",
        "required": false,
        "description": "Maximum number of transfers to return."
      },
      {
        "schema": {
          "type": "integer",
          "minimum": 0,
          "default": 0
        },
        "in": "query",
        "name": "skip",
        "required": false,
        "description": "Number of matching transfers to skip (pagination offset)."
      },
      {
        "schema": {
          "type": "string",
          "enum": [
            "asc",
            "desc"
          ],
          "default": "desc"
        },
        "in": "query",
        "name": "sort",
        "required": false,
        "description": "Sort order by timestamp."
      }
    ],
    "security": [
      {
        "ApiKeyAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Raw transfer log entries for registered wallets",
        "content": {
          "application/json": {
            "schema": {
              "description": "Raw transfer log entries for registered wallets",
              "type": "object",
              "properties": {
                "transfers": {
                  "type": "array",
                  "description": "List of transfers sorted by timestamp.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "walletId": {
                        "type": "string",
                        "description": "Wallet the transfer belongs to."
                      },
                      "blockchain": {
                        "type": "string",
                        "description": "Blockchain where the transfer occurred."
                      },
                      "token": {
                        "type": "string",
                        "description": "Token identifier."
                      },
                      "transactionHash": {
                        "type": "string",
                        "description": "Hash of the transaction."
                      },
                      "transferIndex": {
                        "type": "integer",
                        "description": "Index of the transfer within the transaction."
                      },
                      "blockNumber": {
                        "type": "integer",
                        "description": "Block number containing the transfer."
                      },
                      "amount": {
                        "type": "string",
                        "description": "Transfer amount as a decimal string."
                      },
                      "from": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Sender address."
                      },
                      "to": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Recipient address."
                      },
                      "ts": {
                        "type": "integer",
                        "description": "Block timestamp in milliseconds since Unix epoch."
                      },
                      "transactionIndex": {
                        "oneOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Position of the transaction within the block."
                      },
                      "logIndex": {
                        "oneOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Event log index for EVM chains. null for non-EVM chains."
                      },
                      "label": {
                        "type": "string",
                        "description": "A label associated with the transfer, if any."
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "sent",
                          "received"
                        ],
                        "description": "Direction of the transfer relative to the wallet."
                      }
                    },
                    "additionalProperties": false
                  }
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "400": {
        "description": "Bad Request - invalid parameters, address format, or blockchain",
        "content": {
          "application/json": {
            "schema": {
              "description": "Bad Request - invalid parameters, address format, or blockchain",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized - expired API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Unauthorized - expired API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "403": {
        "description": "Forbidden - missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "description": "Forbidden - missing or invalid API key",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "429": {
        "description": "Too Many Requests - rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "description": "Too Many Requests - rate limit exceeded",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "500": {
        "description": "Internal Server Error - wallet service unavailable or unexpected failure",
        "content": {
          "application/json": {
            "schema": {
              "description": "Internal Server Error - wallet service unavailable or unexpected failure",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      },
      "503": {
        "description": "Service Unavailable - wallet service temporarily unreachable",
        "content": {
          "application/json": {
            "schema": {
              "description": "Service Unavailable - wallet service temporarily unreachable",
              "type": "object",
              "properties": {
                "error": {
                  "type": "string",
                  "description": "Error type"
                },
                "message": {
                  "type": "string",
                  "description": "Human-readable error description"
                },
                "status": {
                  "type": "number",
                  "description": "HTTP status code"
                }
              },
              "additionalProperties": false
            }
          }
        }
      }
    }
  },
  "pathParameters": [],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "securitySchemes": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-KEY",
      "description": "API key obtained via the registration form. Include in the X-API-KEY header for all authenticated requests."
    }
  }
}

Rate Limiting

The production snapshot does not declare per-endpoint quotas. Handle HTTP 429 according to the response documented for the operation you call.

Error Handling

Check the HTTP status before consuming a response. Use the error statuses and schemas documented under the operation you call.

Error Response Format

Use the schema for the returned status under the relevant operation. Error bodies can differ between operations.


Next Steps


Need Help?

Loading API reference. The text reference is available.