API Reference
Complete reference for the WDK Indexer REST API
Base URL
https://wdk-api.tether.ioAPI contract
Generated from the production OpenAPI snapshot. Deployment version observed separately: 1.2.2. The export currently declares document version 1.0.0. Its version metadata has not yet been aligned with the deployed API.
Download OpenAPI · Snapshot provenance
This reference includes all 14 operations in the snapshot. Required-list labels describe only the local object schema; composition branches may add requirements. Consult exact schemas for combined constraints. Use chain discovery for current chain and token combinations.
The upstream export declares OpenAPI 3.0.0 and contains 24 known schema-format incompatibilities. They are preserved below, including null branches and property-name constraints. These docs do not establish full OpenAPI conformance or authenticated runtime verification.
Authentication
Authentication is specified for each operation below. Where required, supply the API key in the documented header. Request an API key.
API Endpoints
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/health | Deep health check endpoint |
| GET | /api/v1/chains | Get supported blockchains and tokens |
| GET | /api/v1/{blockchain}/{token}/{address}/token-transfers | Get token transfers for an address |
| GET | /api/v1/{blockchain}/{token}/{address}/token-balances | Get token balance for an address |
| GET | /api/v1/blockchains/{blockchain}/{token}/token-transfers/{transactionHash} | Get transfers for a transaction |
| POST | /api/v1/batch/token-transfers | Get token transfers for multiple addresses |
| POST | /api/v1/batch/token-balances | Get token balances for multiple addresses |
| POST | /api/v1/wallets | Register wallets for automatic transaction syncing |
| GET | /api/v1/wallets | List registered wallets |
| GET | /api/v1/wallets/{walletId} | Get a registered wallet |
| PATCH | /api/v1/wallets/{walletId} | Update a registered wallet |
| DELETE | /api/v1/wallets/{walletId} | Delete a registered wallet |
| GET | /api/v1/wallets/{walletId}/transfers | Get synced transfers for a wallet |
| GET | /api/v1/transfers | Get synced transfers across all registered wallets |
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.
Tags: Health.
Authentication
This operation declares no authentication requirement.
Parameters
No parameters are declared.
Responses
HTTP 200
Default Response
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | — | |
| $.status | string | Not listed | {"enum": ["healthy", "degraded", "unhealthy"], "example": "healthy"} | |
| $.timestamp | string | Not listed | {"format": "date-time"} | |
| $.deployEnvironment | string | Not listed | {"example": "production"} | |
| $.deployedVersion | string | Not listed | {"example": "1.1.2"} | |
| $.summary | object | Not listed | — | |
| $.summary.healthy | integer | Not listed | {"example": 10} | |
| $.summary.unhealthy | integer | Not listed | {"example": 2} | |
| $.summary.total | integer | Not listed | {"example": 12} | |
| $.checks | object | Not listed | — | |
| $.checks.dependencies | object | Not listed | — | |
| $.checks.dependencies.status | string | Not listed | {"enum": ["healthy", "unhealthy"], "example": "healthy"} | |
| $.checks.indexers | object | Not listed | — | |
| $.checks.indexers.* | object | — | — | |
| $.checks.indexers.*.status | string | Not listed | {"enum": ["healthy", "unhealthy"], "example": "healthy"} | |
| $.checks.indexers.*.rpcLatencyMs | number | Not listed | {"example": 45} | |
| $.checks.indexers.*.lag | number | Not listed | {"example": 3} | |
| $.checks.indexers.*.dependencies | object | Not listed | — | |
| $.checks.indexers.*.dependencies.status | string | Not listed | {"enum": ["healthy", "unhealthy"], "example": "healthy"} |
Exact media definition
{
"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"
}
}
}
}
}
}
}
}
}
}
}HTTP 503
Default Response
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | — | |
| $.status | string | Not listed | {"enum": ["healthy", "degraded", "unhealthy"], "example": "healthy"} | |
| $.timestamp | string | Not listed | {"format": "date-time"} | |
| $.deployEnvironment | string | Not listed | {"example": "production"} | |
| $.deployedVersion | string | Not listed | {"example": "1.1.2"} | |
| $.summary | object | Not listed | — | |
| $.summary.healthy | integer | Not listed | {"example": 10} | |
| $.summary.unhealthy | integer | Not listed | {"example": 2} | |
| $.summary.total | integer | Not listed | {"example": 12} | |
| $.checks | object | Not listed | — | |
| $.checks.dependencies | object | Not listed | — | |
| $.checks.dependencies.status | string | Not listed | {"enum": ["healthy", "unhealthy"], "example": "healthy"} | |
| $.checks.indexers | object | Not listed | — | |
| $.checks.indexers.* | object | — | — | |
| $.checks.indexers.*.status | string | Not listed | {"enum": ["healthy", "unhealthy"], "example": "healthy"} | |
| $.checks.indexers.*.rpcLatencyMs | number | Not listed | {"example": 45} | |
| $.checks.indexers.*.lag | number | Not listed | {"example": 3} | |
| $.checks.indexers.*.dependencies | object | Not listed | — | |
| $.checks.indexers.*.dependencies.status | string | Not listed | {"enum": ["healthy", "unhealthy"], "example": "healthy"} |
Exact media definition
{
"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"
}
}
}
}
}
}
}
}
}
}
}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.
Tags: Chains.
Authentication
This operation declares no authentication requirement.
Parameters
No parameters are declared.
Responses
HTTP 200
List of supported blockchains with their tokens and case sensitivity rules
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | List of supported blockchains with their tokens and case sensitivity rules | {"additionalProperties": false} |
| $.chains | array | Not listed | All supported blockchains. | — |
| $.chains[] | object | — | {"required": ["name", "tokens"], "additionalProperties": false} | |
| $.chains[].name | string | Yes | Blockchain identifier used as the {blockchain} path parameter in other endpoints. | — |
| $.chains[].tokens | array | Yes | Token identifiers available on this blockchain, used as the {token} path parameter. | — |
| $.chains[].tokens[] | string | — | — | |
| $.chains[].caseSensitive | object | Not listed | Case sensitivity rules. If present, addresses are preserved as-is (case-sensitive). If absent, addresses are automatically lowercased. | {"additionalProperties": false} |
| $.chains[].caseSensitive.address | oneOf | Not listed | Indicates 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.tx | boolean | Not listed | true = transaction hashes are case-sensitive. | — |
| $.chains[].caseSensitive.block | boolean | Not listed | true = block identifiers are case-sensitive. | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - indexer service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - indexer service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Token Transfers.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
limit (query)
Required: No. Maximum number of transfers to return.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | integer | — | {"minimum": 1, "maximum": 1000, "default": 10} |
Exact parameter definition
{
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"default": 10
},
"in": "query",
"name": "limit",
"required": false,
"description": "Maximum number of transfers to return."
}fromTs (query)
Required: No. Start timestamp in milliseconds (inclusive). Use 0 to query from the beginning.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | integer | — | {"minimum": 0, "default": 0} |
Exact parameter definition
{
"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."
}toTs (query)
Required: No. End timestamp in milliseconds (inclusive). Omit to query up to the latest available data.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | integer | — | {"minimum": 0} |
Exact parameter definition
{
"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."
}blockchain (path)
Required: Yes. Blockchain network identifier. Use GET /api/v1/chains to see all available options.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]} |
Exact parameter definition
{
"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."
}token (path)
Required: Yes. Token identifier. Must be a valid token for the specified blockchain.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["usdt", "xaut", "usat", "btc"]} |
Exact parameter definition
{
"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."
}address (path)
Required: Yes. Wallet address to query. Format varies by blockchain (e.g. 0x... for EVM, bc1... for Bitcoin, T... for Tron).
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"minLength": 1} |
Exact parameter definition
{
"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)."
}Responses
HTTP 200
Token transfer history for the queried address
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Token transfer history for the queried address | {"additionalProperties": false} |
| $.transfers | array | Not listed | List of token transfers sorted by block number. | — |
| $.transfers[] | object | — | {"additionalProperties": true} | |
| $.transfers[].blockchain | string | Not listed | Blockchain where the transfer occurred. | — |
| $.transfers[].blockNumber | integer | Not listed | Block number containing the transfer. | — |
| $.transfers[].transactionHash | string | Not listed | Hash of the transaction. | — |
| $.transfers[].transferIndex | integer | Not listed | Index of the transfer within the transaction. | — |
| $.transfers[].token | string | Not listed | Token identifier. | — |
| $.transfers[].amount | string | Not listed | Transfer amount as a decimal string. | — |
| $.transfers[].timestamp | integer | Not listed | Block timestamp in milliseconds since Unix epoch. | — |
| $.transfers[].transactionIndex | oneOf | Not listed | Position of the transaction within the block. | — |
| $.transfers[].transactionIndex (oneOf 1) | integer | — | — | |
| $.transfers[].transactionIndex (oneOf 2) | null | — | — | |
| $.transfers[].logIndex | oneOf | Not listed | Event log index for EVM chains. null for non-EVM chains like Bitcoin. | — |
| $.transfers[].logIndex (oneOf 1) | integer | — | — | |
| $.transfers[].logIndex (oneOf 2) | null | — | — | |
| $.transfers[].from | oneOf | Not listed | Sender wallet address. | — |
| $.transfers[].from (oneOf 1) | string | — | — | |
| $.transfers[].from (oneOf 2) | null | — | — | |
| $.transfers[].to | oneOf | Not listed | The recipient's address | — |
| $.transfers[].to (oneOf 1) | string | — | — | |
| $.transfers[].to (oneOf 2) | null | — | — | |
| $.transfers[].label | string | Not listed | A label associated with the transfer, if any | — |
| $.transfers[].metadata | oneOf | Not listed | Chain-specific extra data attached to the transfer, if any. | — |
| $.transfers[].metadata (oneOf 1) | object | — | {"additionalProperties": true} | |
| $.transfers[].metadata (oneOf 2) | null | — | — |
Exact media definition
{
"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
}
}HTTP 400
Bad Request - invalid parameters, address format, blockchain, or token
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, blockchain, or token | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authentication error type | — |
| $.message | string | Not listed | Authentication error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authorization error type | — |
| $.message | string | Not listed | Authorization error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Rate limit error type | — |
| $.message | string | Not listed | Rate limit error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - indexer service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - indexer service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Token Balances.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
blockchain (path)
Required: Yes. Blockchain network identifier. Use GET /api/v1/chains to see all available options.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]} |
Exact parameter definition
{
"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."
}token (path)
Required: Yes. Token identifier. Must be a valid token for the specified blockchain.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["usdt", "xaut", "usat", "btc"]} |
Exact parameter definition
{
"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."
}address (path)
Required: Yes. Wallet address to query. Format varies by blockchain (e.g. 0x... for EVM, bc1... for Bitcoin, T... for Tron).
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"minLength": 1} |
Exact parameter definition
{
"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)."
}Responses
HTTP 200
Current token balance for the queried address
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Current token balance for the queried address | {"additionalProperties": false} |
| $.tokenBalance | object | Not listed | Balance information. | {"additionalProperties": false} |
| $.tokenBalance.blockchain | string | Not listed | Blockchain queried. | — |
| $.tokenBalance.token | string | Not listed | Token queried. | — |
| $.tokenBalance.amount | string | Not listed | Current balance as a decimal string. | — |
Exact media definition
{
"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
}
}HTTP 400
Bad Request - invalid parameters, address format, blockchain, or token
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, blockchain, or token | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authentication error type | — |
| $.message | string | Not listed | Authentication error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authorization error type | — |
| $.message | string | Not listed | Authorization error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Rate limit error type | — |
| $.message | string | Not listed | Rate limit error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - indexer service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - indexer service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Token Transfers.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
blockchain (path)
Required: Yes. Blockchain network identifier. Use GET /api/v1/chains to see all available options.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]} |
Exact parameter definition
{
"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."
}token (path)
Required: Yes. Token identifier. Must be a valid token for the specified blockchain.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["usdt", "xaut", "usat", "btc"]} |
Exact parameter definition
{
"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."
}transactionHash (path)
Required: 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).
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"minLength": 1, "maxLength": 255} |
Exact parameter definition
{
"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)."
}Responses
HTTP 200
Transfer records for the queried transaction
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Transfer records for the queried transaction | {"additionalProperties": false} |
| $.transfers | array | Not listed | All transfers recorded under this transaction for the requested token. | — |
| $.transfers[] | object | — | {"additionalProperties": true} | |
| $.transfers[].blockchain | string | Not listed | Blockchain where the transfer occurred. | — |
| $.transfers[].blockNumber | integer | Not listed | Block number containing the transfer. | — |
| $.transfers[].transactionHash | string | Not listed | Hash of the transaction. | — |
| $.transfers[].transferIndex | integer | Not listed | Index of the transfer within the transaction. | — |
| $.transfers[].token | string | Not listed | Token identifier. | — |
| $.transfers[].amount | string | Not listed | Transfer amount as a decimal string. | — |
| $.transfers[].timestamp | integer | Not listed | Block timestamp in milliseconds since Unix epoch. | — |
| $.transfers[].transactionIndex | oneOf | Not listed | Position of the transaction within the block. | — |
| $.transfers[].transactionIndex (oneOf 1) | integer | — | — | |
| $.transfers[].transactionIndex (oneOf 2) | null | — | — | |
| $.transfers[].logIndex | oneOf | Not listed | Event log index for EVM chains. null for non-EVM chains like Bitcoin. | — |
| $.transfers[].logIndex (oneOf 1) | integer | — | — | |
| $.transfers[].logIndex (oneOf 2) | null | — | — | |
| $.transfers[].from | oneOf | Not listed | Sender wallet address. | — |
| $.transfers[].from (oneOf 1) | string | — | — | |
| $.transfers[].from (oneOf 2) | null | — | — | |
| $.transfers[].to | oneOf | Not listed | The recipient's address | — |
| $.transfers[].to (oneOf 1) | string | — | — | |
| $.transfers[].to (oneOf 2) | null | — | — | |
| $.transfers[].label | string | Not listed | A label associated with the transfer, if any | — |
| $.transfers[].metadata | oneOf | Not listed | Chain-specific extra data attached to the transfer, if any. | — |
| $.transfers[].metadata (oneOf 1) | object | — | {"additionalProperties": true} | |
| $.transfers[].metadata (oneOf 2) | null | — | — |
Exact media definition
{
"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
}
}HTTP 400
Bad Request - invalid parameters, address format, blockchain, or token
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, blockchain, or token | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authentication error type | — |
| $.message | string | Not listed | Authentication error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authorization error type | — |
| $.message | string | Not listed | Authorization error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 404
Not Found - the transaction has no transfers of the requested token
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Not Found - the transaction has no transfers of the requested token | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Rate limit error type | — |
| $.message | string | Not listed | Rate limit error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - indexer service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - indexer service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Token Transfers.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
No parameters are declared.
Request body
Required: Yes.
Array of transfer query objects. Maximum 10 items.
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | array | — | Array of transfer query objects. Maximum 10 items. | {"minItems": 1, "maxItems": 10} |
| $[] | object | — | {"required": ["blockchain", "token", "address"], "additionalProperties": false} | |
| $[].blockchain | string | Yes | Blockchain network identifier. | {"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]} |
| $[].token | string | Yes | Token identifier. | {"enum": ["usdt", "xaut", "usat", "btc"]} |
| $[].address | string | Yes | Wallet address to query. | {"minLength": 1} |
| $[].limit | integer | Not listed | Maximum number of transfers to return for this address. | {"minimum": 1, "maximum": 1000, "default": 10} |
| $[].fromTs | integer | Not listed | Start timestamp in milliseconds (inclusive). | {"minimum": 0, "default": 0} |
| $[].toTs | integer | Not listed | End timestamp in milliseconds (inclusive). | {"minimum": 0} |
Exact media definition
{
"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
}
}
}Responses
HTTP 200
Array of results in the same order as the request. Each element is either a transfer result or an error object.
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | array | — | Array of results in the same order as the request. Each element is either a transfer result or an error object. | {"minItems": 1} |
| $[] | oneOf | — | — | |
| $[] (oneOf 1) | object | — | Token transfer history for the queried address | {"additionalProperties": false} |
| $[] (oneOf 1).transfers | array | Not listed | List of token transfers sorted by block number. | — |
| $[] (oneOf 1).transfers[] | object | — | {"additionalProperties": true} | |
| $[] (oneOf 1).transfers[].blockchain | string | Not listed | Blockchain where the transfer occurred. | — |
| $[] (oneOf 1).transfers[].blockNumber | integer | Not listed | Block number containing the transfer. | — |
| $[] (oneOf 1).transfers[].transactionHash | string | Not listed | Hash of the transaction. | — |
| $[] (oneOf 1).transfers[].transferIndex | integer | Not listed | Index of the transfer within the transaction. | — |
| $[] (oneOf 1).transfers[].token | string | Not listed | Token identifier. | — |
| $[] (oneOf 1).transfers[].amount | string | Not listed | Transfer amount as a decimal string. | — |
| $[] (oneOf 1).transfers[].timestamp | integer | Not listed | Block timestamp in milliseconds since Unix epoch. | — |
| $[] (oneOf 1).transfers[].transactionIndex | oneOf | Not listed | Position of the transaction within the block. | — |
| $[] (oneOf 1).transfers[].transactionIndex (oneOf 1) | integer | — | — | |
| $[] (oneOf 1).transfers[].transactionIndex (oneOf 2) | null | — | — | |
| $[] (oneOf 1).transfers[].logIndex | oneOf | Not listed | Event 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[].from | oneOf | Not listed | Sender wallet address. | — |
| $[] (oneOf 1).transfers[].from (oneOf 1) | string | — | — | |
| $[] (oneOf 1).transfers[].from (oneOf 2) | null | — | — | |
| $[] (oneOf 1).transfers[].to | oneOf | Not listed | The recipient's address | — |
| $[] (oneOf 1).transfers[].to (oneOf 1) | string | — | — | |
| $[] (oneOf 1).transfers[].to (oneOf 2) | null | — | — | |
| $[] (oneOf 1).transfers[].label | string | Not listed | A label associated with the transfer, if any | — |
| $[] (oneOf 1).transfers[].metadata | oneOf | Not listed | Chain-specific extra data attached to the transfer, if any. | — |
| $[] (oneOf 1).transfers[].metadata (oneOf 1) | object | — | {"additionalProperties": true} | |
| $[] (oneOf 1).transfers[].metadata (oneOf 2) | null | — | — | |
| $[] (oneOf 2) | object | — | {"additionalProperties": false} | |
| $[] (oneOf 2).error | string | Not listed | — | |
| $[] (oneOf 2).message | string | Not listed | — | |
| $[] (oneOf 2).status | number | Not listed | — |
Exact media definition
{
"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
}
}HTTP 400
Bad Request - invalid parameters, address format, blockchain, or token
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, blockchain, or token | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authentication error type | — |
| $.message | string | Not listed | Authentication error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authorization error type | — |
| $.message | string | Not listed | Authorization error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Rate limit error type | — |
| $.message | string | Not listed | Rate limit error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - indexer service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - indexer service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Token Balances.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
No parameters are declared.
Request body
Required: Yes.
Array of balance query objects. Maximum 10 items.
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | array | — | Array of balance query objects. Maximum 10 items. | {"minItems": 1, "maxItems": 10} |
| $[] | object | — | {"required": ["blockchain", "token", "address"], "additionalProperties": false} | |
| $[].blockchain | string | Yes | Blockchain network identifier. | {"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]} |
| $[].token | string | Yes | Token identifier. | {"enum": ["usdt", "xaut", "usat", "btc"]} |
| $[].address | string | Yes | Wallet address to query. | {"minLength": 1} |
Exact media definition
{
"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
}
}
}Responses
HTTP 200
Array of results in the same order as the request. Each element is either a balance result or an error object.
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | array | — | Array of results in the same order as the request. Each element is either a balance result or an error object. | — |
| $[] | oneOf | — | — | |
| $[] (oneOf 1) | object | — | Current token balance for the queried address | {"additionalProperties": false} |
| $[] (oneOf 1).tokenBalance | object | Not listed | Balance information. | {"additionalProperties": false} |
| $[] (oneOf 1).tokenBalance.blockchain | string | Not listed | Blockchain queried. | — |
| $[] (oneOf 1).tokenBalance.token | string | Not listed | Token queried. | — |
| $[] (oneOf 1).tokenBalance.amount | string | Not listed | Current balance as a decimal string. | — |
| $[] (oneOf 2) | object | — | {"additionalProperties": false} | |
| $[] (oneOf 2).error | string | Not listed | — | |
| $[] (oneOf 2).message | string | Not listed | — | |
| $[] (oneOf 2).status | number | Not listed | — |
Exact media definition
{
"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
}
]
}
}
}HTTP 400
Bad Request - invalid parameters, address format, blockchain, or token
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, blockchain, or token | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authentication error type | — |
| $.message | string | Not listed | Authentication error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Authorization error type | — |
| $.message | string | Not listed | Authorization error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Rate limit error type | — |
| $.message | string | Not listed | Rate limit error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - indexer service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - indexer service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Error details | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Wallets.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
No parameters are declared.
Request body
Required: Yes.
Array of wallets to register. Maximum 10 items.
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | array | — | Array of wallets to register. Maximum 10 items. | {"minItems": 1, "maxItems": 10} |
| $[] | object | — | {"required": ["type", "addresses"], "additionalProperties": false} | |
| $[].type | string | Yes | Wallet type. Must be the type this gateway registers. | {"enum": ["client_wallet"]} |
| $[].name | string | Not listed | Optional display name for the wallet. | {"minLength": 1, "maxLength": 100} |
| $[].addresses | object | Yes | 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"]}} |
| $[].addresses.* | string | — | {"minLength": 1, "maxLength": 200} | |
| $[].meta | object | Not listed | Optional wallet metadata. Required when registering a spark address. | {"additionalProperties": false} |
| $[].meta.spark | object | Not listed | {"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false} | |
| $[].meta.spark.sparkDepositAddress | string | Yes | {"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"} | |
| $[].meta.spark.sparkIdentityKey | string | Yes | {"minLength": 1} |
Exact media definition
{
"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
}
}
}Responses
HTTP 200
Per-wallet registration results in request order
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Per-wallet registration results in request order | {"additionalProperties": false} |
| $.wallets | array | Not listed | — | |
| $.wallets[] | object | — | Per-wallet registration result | {"additionalProperties": false} |
| $.wallets[].status | number | Not listed | Per-item status code: 201 created, 400 invalid, 429 wallet limit exceeded. | — |
| $.wallets[].id | string | Not listed | Wallet identifier (present when created). | — |
| $.wallets[].name | string | Not listed | Wallet display name. | — |
| $.wallets[].type | string | Not listed | Wallet type assigned at registration. | — |
| $.wallets[].enabled | boolean | Not listed | Whether the wallet is active for transaction syncing. | — |
| $.wallets[].addresses | object | Not listed | Registered addresses keyed by blockchain. | — |
| $.wallets[].addresses.* | string | — | — | |
| $.wallets[].meta | object | Not listed | Optional wallet metadata. Required when registering a spark address. | {"additionalProperties": false} |
| $.wallets[].meta.spark | object | Not listed | {"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false} | |
| $.wallets[].meta.spark.sparkDepositAddress | string | Yes | {"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"} | |
| $.wallets[].meta.spark.sparkIdentityKey | string | Yes | {"minLength": 1} | |
| $.wallets[].error | string | Not listed | Error code when the item was rejected. | — |
| $.wallets[].limit | number | Not listed | Wallet limit that was exceeded (present on 429). | — |
| $.wallets[].currentCount | number | Not listed | Current wallet count (present on 429). | — |
Exact media definition
{
"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
}
}HTTP 400
Bad Request - invalid parameters, address format, or blockchain
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, or blockchain | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 409
Conflict - address already registered
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Conflict - address already registered | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - wallet service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - wallet service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 503
Service Unavailable - wallet service temporarily unreachable
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Service Unavailable - wallet service temporarily unreachable | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}GET /api/v1/wallets
List registered wallets
Returns all active wallets registered by the authenticated owner.
Tags: Wallets.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
No parameters are declared.
Responses
HTTP 200
Registered wallets
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Registered wallets | {"additionalProperties": false} |
| $.wallets | array | Not listed | — | |
| $.wallets[] | object | — | A registered wallet | {"additionalProperties": false} |
| $.wallets[].id | string | Not listed | Wallet identifier. | — |
| $.wallets[].name | string | Not listed | Optional wallet display name. | — |
| $.wallets[].type | string | Not listed | Wallet type assigned at registration. | — |
| $.wallets[].enabled | boolean | Not listed | Whether the wallet is active for transaction syncing. | — |
| $.wallets[].addresses | object | Not listed | Registered addresses keyed by blockchain. | — |
| $.wallets[].addresses.* | string | — | — | |
| $.wallets[].meta | object | Not listed | Optional wallet metadata. Required when registering a spark address. | {"additionalProperties": false} |
| $.wallets[].meta.spark | object | Not listed | {"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false} | |
| $.wallets[].meta.spark.sparkDepositAddress | string | Yes | {"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"} | |
| $.wallets[].meta.spark.sparkIdentityKey | string | Yes | {"minLength": 1} | |
| $.wallets[].createdAt | number | Not listed | Creation timestamp in milliseconds. | — |
| $.wallets[].updatedAt | number | Not listed | Last update timestamp in milliseconds. | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - wallet service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - wallet service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 503
Service Unavailable - wallet service temporarily unreachable
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Service Unavailable - wallet service temporarily unreachable | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}GET /api/v1/wallets/{walletId}
Get a registered wallet
Returns a single wallet registered by the authenticated owner.
Tags: Wallets.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
walletId (path)
Required: Yes. Wallet identifier from POST /api/v1/wallets.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"minLength": 1} |
Exact parameter definition
{
"schema": {
"type": "string",
"minLength": 1
},
"in": "path",
"name": "walletId",
"required": true,
"description": "Wallet identifier from POST /api/v1/wallets."
}Responses
HTTP 200
A registered wallet
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | A registered wallet | {"additionalProperties": false} |
| $.id | string | Not listed | Wallet identifier. | — |
| $.name | string | Not listed | Optional wallet display name. | — |
| $.type | string | Not listed | Wallet type assigned at registration. | — |
| $.enabled | boolean | Not listed | Whether the wallet is active for transaction syncing. | — |
| $.addresses | object | Not listed | Registered addresses keyed by blockchain. | — |
| $.addresses.* | string | — | — | |
| $.meta | object | Not listed | Optional wallet metadata. Required when registering a spark address. | {"additionalProperties": false} |
| $.meta.spark | object | Not listed | {"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false} | |
| $.meta.spark.sparkDepositAddress | string | Yes | {"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"} | |
| $.meta.spark.sparkIdentityKey | string | Yes | {"minLength": 1} | |
| $.createdAt | number | Not listed | Creation timestamp in milliseconds. | — |
| $.updatedAt | number | Not listed | Last update timestamp in milliseconds. | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 404
Not Found - wallet not found or access denied
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Not Found - wallet not found or access denied | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - wallet service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - wallet service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 503
Service Unavailable - wallet service temporarily unreachable
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Service Unavailable - wallet service temporarily unreachable | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}PATCH /api/v1/wallets/{walletId}
Update a registered wallet
Updates the display name of a wallet or enables/disables its transaction syncing.
Tags: Wallets.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
walletId (path)
Required: Yes. Wallet identifier from POST /api/v1/wallets.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"minLength": 1} |
Exact parameter definition
{
"schema": {
"type": "string",
"minLength": 1
},
"in": "path",
"name": "walletId",
"required": true,
"description": "Wallet identifier from POST /api/v1/wallets."
}Request body
Required: Yes.
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | {"minProperties": 1, "additionalProperties": false} | |
| $.name | string | Not listed | New display name for the wallet. | {"minLength": 1, "maxLength": 100} |
| $.enabled | boolean | Not listed | Whether the wallet is active for transaction syncing. | — |
Exact media definition
{
"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
}
}Responses
HTTP 200
A registered wallet
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | A registered wallet | {"additionalProperties": false} |
| $.id | string | Not listed | Wallet identifier. | — |
| $.name | string | Not listed | Optional wallet display name. | — |
| $.type | string | Not listed | Wallet type assigned at registration. | — |
| $.enabled | boolean | Not listed | Whether the wallet is active for transaction syncing. | — |
| $.addresses | object | Not listed | Registered addresses keyed by blockchain. | — |
| $.addresses.* | string | — | — | |
| $.meta | object | Not listed | Optional wallet metadata. Required when registering a spark address. | {"additionalProperties": false} |
| $.meta.spark | object | Not listed | {"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false} | |
| $.meta.spark.sparkDepositAddress | string | Yes | {"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"} | |
| $.meta.spark.sparkIdentityKey | string | Yes | {"minLength": 1} | |
| $.createdAt | number | Not listed | Creation timestamp in milliseconds. | — |
| $.updatedAt | number | Not listed | Last update timestamp in milliseconds. | — |
Exact media definition
{
"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
}
}HTTP 400
Bad Request - invalid parameters, address format, or blockchain
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, or blockchain | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 404
Not Found - wallet not found or access denied
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Not Found - wallet not found or access denied | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - wallet service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - wallet service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 503
Service Unavailable - wallet service temporarily unreachable
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Service Unavailable - wallet service temporarily unreachable | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Wallets.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
walletId (path)
Required: Yes. Wallet identifier from POST /api/v1/wallets.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"minLength": 1} |
Exact parameter definition
{
"schema": {
"type": "string",
"minLength": 1
},
"in": "path",
"name": "walletId",
"required": true,
"description": "Wallet identifier from POST /api/v1/wallets."
}Responses
HTTP 200
Wallet deleted
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Wallet deleted | {"additionalProperties": false} |
| $.success | boolean | Not listed | — |
Exact media definition
{
"schema": {
"description": "Wallet deleted",
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
},
"additionalProperties": false
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 404
Not Found - wallet not found or access denied
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Not Found - wallet not found or access denied | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - wallet service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - wallet service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 503
Service Unavailable - wallet service temporarily unreachable
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Service Unavailable - wallet service temporarily unreachable | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Wallet Transfers.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
blockchain (query)
Required: No. Filter transfers by blockchain.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]} |
Exact parameter definition
{
"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."
}token (query)
Required: No. Filter transfers by token.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["usdt", "xaut", "usat", "btc"]} |
Exact parameter definition
{
"schema": {
"type": "string",
"enum": [
"usdt",
"xaut",
"usat",
"btc"
]
},
"in": "query",
"name": "token",
"required": false,
"description": "Filter transfers by token."
}type (query)
Required: No. Filter by transfer direction relative to the wallet.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["sent", "received"]} |
Exact parameter definition
{
"schema": {
"type": "string",
"enum": [
"sent",
"received"
]
},
"in": "query",
"name": "type",
"required": false,
"description": "Filter by transfer direction relative to the wallet."
}from (query)
Required: No. Start of the time range - timestamp in milliseconds or ISO 8601 date.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | oneOf | — | — | |
| $ (oneOf 1) | integer | — | {"minimum": 0} | |
| $ (oneOf 2) | string | — | {"format": "date-time"} |
Exact parameter definition
{
"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."
}to (query)
Required: No. End of the time range - timestamp in milliseconds or ISO 8601 date.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | oneOf | — | — | |
| $ (oneOf 1) | integer | — | {"minimum": 0} | |
| $ (oneOf 2) | string | — | {"format": "date-time"} |
Exact parameter definition
{
"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."
}limit (query)
Required: No. Maximum number of transfers to return.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | integer | — | {"minimum": 1, "maximum": 100, "default": 10} |
Exact parameter definition
{
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 10
},
"in": "query",
"name": "limit",
"required": false,
"description": "Maximum number of transfers to return."
}skip (query)
Required: No. Number of matching transfers to skip (pagination offset).
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | integer | — | {"minimum": 0, "default": 0} |
Exact parameter definition
{
"schema": {
"type": "integer",
"minimum": 0,
"default": 0
},
"in": "query",
"name": "skip",
"required": false,
"description": "Number of matching transfers to skip (pagination offset)."
}sort (query)
Required: No. Sort order by timestamp.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["asc", "desc"], "default": "desc"} |
Exact parameter definition
{
"schema": {
"type": "string",
"enum": [
"asc",
"desc"
],
"default": "desc"
},
"in": "query",
"name": "sort",
"required": false,
"description": "Sort order by timestamp."
}walletId (path)
Required: Yes. Wallet identifier from POST /api/v1/wallets.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"minLength": 1} |
Exact parameter definition
{
"schema": {
"type": "string",
"minLength": 1
},
"in": "path",
"name": "walletId",
"required": true,
"description": "Wallet identifier from POST /api/v1/wallets."
}Responses
HTTP 200
Raw transfer log entries for registered wallets
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Raw transfer log entries for registered wallets | {"additionalProperties": false} |
| $.transfers | array | Not listed | List of transfers sorted by timestamp. | — |
| $.transfers[] | object | — | {"additionalProperties": false} | |
| $.transfers[].walletId | string | Not listed | Wallet the transfer belongs to. | — |
| $.transfers[].blockchain | string | Not listed | Blockchain where the transfer occurred. | — |
| $.transfers[].token | string | Not listed | Token identifier. | — |
| $.transfers[].transactionHash | string | Not listed | Hash of the transaction. | — |
| $.transfers[].transferIndex | integer | Not listed | Index of the transfer within the transaction. | — |
| $.transfers[].blockNumber | integer | Not listed | Block number containing the transfer. | — |
| $.transfers[].amount | string | Not listed | Transfer amount as a decimal string. | — |
| $.transfers[].from | oneOf | Not listed | Sender address. | — |
| $.transfers[].from (oneOf 1) | string | — | — | |
| $.transfers[].from (oneOf 2) | null | — | — | |
| $.transfers[].to | oneOf | Not listed | Recipient address. | — |
| $.transfers[].to (oneOf 1) | string | — | — | |
| $.transfers[].to (oneOf 2) | null | — | — | |
| $.transfers[].ts | integer | Not listed | Block timestamp in milliseconds since Unix epoch. | — |
| $.transfers[].transactionIndex | oneOf | Not listed | Position of the transaction within the block. | — |
| $.transfers[].transactionIndex (oneOf 1) | integer | — | — | |
| $.transfers[].transactionIndex (oneOf 2) | null | — | — | |
| $.transfers[].logIndex | oneOf | Not listed | Event log index for EVM chains. null for non-EVM chains. | — |
| $.transfers[].logIndex (oneOf 1) | integer | — | — | |
| $.transfers[].logIndex (oneOf 2) | null | — | — | |
| $.transfers[].label | string | Not listed | A label associated with the transfer, if any. | — |
| $.transfers[].type | string | Not listed | Direction of the transfer relative to the wallet. | {"enum": ["sent", "received"]} |
Exact media definition
{
"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
}
}HTTP 400
Bad Request - invalid parameters, address format, or blockchain
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, or blockchain | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 404
Not Found - wallet not found or access denied
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Not Found - wallet not found or access denied | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - wallet service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - wallet service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 503
Service Unavailable - wallet service temporarily unreachable
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Service Unavailable - wallet service temporarily unreachable | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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.
Tags: Wallet Transfers.
Authentication
Required header: X-API-KEY. Security scheme: ApiKeyAuth.
Exact security scheme
{
"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."
}Parameters
blockchain (query)
Required: No. Filter transfers by blockchain.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]} |
Exact parameter definition
{
"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."
}token (query)
Required: No. Filter transfers by token.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["usdt", "xaut", "usat", "btc"]} |
Exact parameter definition
{
"schema": {
"type": "string",
"enum": [
"usdt",
"xaut",
"usat",
"btc"
]
},
"in": "query",
"name": "token",
"required": false,
"description": "Filter transfers by token."
}type (query)
Required: No. Filter by transfer direction relative to the wallet.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["sent", "received"]} |
Exact parameter definition
{
"schema": {
"type": "string",
"enum": [
"sent",
"received"
]
},
"in": "query",
"name": "type",
"required": false,
"description": "Filter by transfer direction relative to the wallet."
}from (query)
Required: No. Start of the time range - timestamp in milliseconds or ISO 8601 date.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | oneOf | — | — | |
| $ (oneOf 1) | integer | — | {"minimum": 0} | |
| $ (oneOf 2) | string | — | {"format": "date-time"} |
Exact parameter definition
{
"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."
}to (query)
Required: No. End of the time range - timestamp in milliseconds or ISO 8601 date.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | oneOf | — | — | |
| $ (oneOf 1) | integer | — | {"minimum": 0} | |
| $ (oneOf 2) | string | — | {"format": "date-time"} |
Exact parameter definition
{
"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."
}limit (query)
Required: No. Maximum number of transfers to return.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | integer | — | {"minimum": 1, "maximum": 100, "default": 10} |
Exact parameter definition
{
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 10
},
"in": "query",
"name": "limit",
"required": false,
"description": "Maximum number of transfers to return."
}skip (query)
Required: No. Number of matching transfers to skip (pagination offset).
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | integer | — | {"minimum": 0, "default": 0} |
Exact parameter definition
{
"schema": {
"type": "integer",
"minimum": 0,
"default": 0
},
"in": "query",
"name": "skip",
"required": false,
"description": "Number of matching transfers to skip (pagination offset)."
}sort (query)
Required: No. Sort order by timestamp.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | string | — | {"enum": ["asc", "desc"], "default": "desc"} |
Exact parameter definition
{
"schema": {
"type": "string",
"enum": [
"asc",
"desc"
],
"default": "desc"
},
"in": "query",
"name": "sort",
"required": false,
"description": "Sort order by timestamp."
}Responses
HTTP 200
Raw transfer log entries for registered wallets
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Raw transfer log entries for registered wallets | {"additionalProperties": false} |
| $.transfers | array | Not listed | List of transfers sorted by timestamp. | — |
| $.transfers[] | object | — | {"additionalProperties": false} | |
| $.transfers[].walletId | string | Not listed | Wallet the transfer belongs to. | — |
| $.transfers[].blockchain | string | Not listed | Blockchain where the transfer occurred. | — |
| $.transfers[].token | string | Not listed | Token identifier. | — |
| $.transfers[].transactionHash | string | Not listed | Hash of the transaction. | — |
| $.transfers[].transferIndex | integer | Not listed | Index of the transfer within the transaction. | — |
| $.transfers[].blockNumber | integer | Not listed | Block number containing the transfer. | — |
| $.transfers[].amount | string | Not listed | Transfer amount as a decimal string. | — |
| $.transfers[].from | oneOf | Not listed | Sender address. | — |
| $.transfers[].from (oneOf 1) | string | — | — | |
| $.transfers[].from (oneOf 2) | null | — | — | |
| $.transfers[].to | oneOf | Not listed | Recipient address. | — |
| $.transfers[].to (oneOf 1) | string | — | — | |
| $.transfers[].to (oneOf 2) | null | — | — | |
| $.transfers[].ts | integer | Not listed | Block timestamp in milliseconds since Unix epoch. | — |
| $.transfers[].transactionIndex | oneOf | Not listed | Position of the transaction within the block. | — |
| $.transfers[].transactionIndex (oneOf 1) | integer | — | — | |
| $.transfers[].transactionIndex (oneOf 2) | null | — | — | |
| $.transfers[].logIndex | oneOf | Not listed | Event log index for EVM chains. null for non-EVM chains. | — |
| $.transfers[].logIndex (oneOf 1) | integer | — | — | |
| $.transfers[].logIndex (oneOf 2) | null | — | — | |
| $.transfers[].label | string | Not listed | A label associated with the transfer, if any. | — |
| $.transfers[].type | string | Not listed | Direction of the transfer relative to the wallet. | {"enum": ["sent", "received"]} |
Exact media definition
{
"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
}
}HTTP 400
Bad Request - invalid parameters, address format, or blockchain
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Bad Request - invalid parameters, address format, or blockchain | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 401
Unauthorized - expired API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Unauthorized - expired API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 403
Forbidden - missing or invalid API key
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Forbidden - missing or invalid API key | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 429
Too Many Requests - rate limit exceeded
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Too Many Requests - rate limit exceeded | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 500
Internal Server Error - wallet service unavailable or unexpected failure
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Internal Server Error - wallet service unavailable or unexpected failure | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}HTTP 503
Service Unavailable - wallet service temporarily unreachable
Media type: application/json.
| Field | Type | Listed in local required | Description | Constraints |
|---|---|---|---|---|
| $ | object | — | Service Unavailable - wallet service temporarily unreachable | {"additionalProperties": false} |
| $.error | string | Not listed | Error type | — |
| $.message | string | Not listed | Human-readable error description | — |
| $.status | number | Not listed | HTTP status code | — |
Exact media definition
{
"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
}
}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
- Get Started with an API key and your first request.
- Use the JavaScript SDK to call the API from Node.js or Bare.