WDK logoWDK documentation

API Reference

Complete reference for the WDK Indexer REST API

Base URL

https://wdk-api.tether.io

API 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

MethodPathSummary
GET/api/v1/healthDeep health check endpoint
GET/api/v1/chainsGet supported blockchains and tokens
GET/api/v1/{blockchain}/{token}/{address}/token-transfersGet token transfers for an address
GET/api/v1/{blockchain}/{token}/{address}/token-balancesGet token balance for an address
GET/api/v1/blockchains/{blockchain}/{token}/token-transfers/{transactionHash}Get transfers for a transaction
POST/api/v1/batch/token-transfersGet token transfers for multiple addresses
POST/api/v1/batch/token-balancesGet token balances for multiple addresses
POST/api/v1/walletsRegister wallets for automatic transaction syncing
GET/api/v1/walletsList 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}/transfersGet synced transfers for a wallet
GET/api/v1/transfersGet 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.

FieldTypeListed in local requiredDescriptionConstraints
$object——
$.statusstringNot listed{"enum": ["healthy", "degraded", "unhealthy"], "example": "healthy"}
$.timestampstringNot listed{"format": "date-time"}
$.deployEnvironmentstringNot listed{"example": "production"}
$.deployedVersionstringNot listed{"example": "1.1.2"}
$.summaryobjectNot listed—
$.summary.healthyintegerNot listed{"example": 10}
$.summary.unhealthyintegerNot listed{"example": 2}
$.summary.totalintegerNot listed{"example": 12}
$.checksobjectNot listed—
$.checks.dependenciesobjectNot listed—
$.checks.dependencies.statusstringNot listed{"enum": ["healthy", "unhealthy"], "example": "healthy"}
$.checks.indexersobjectNot listed—
$.checks.indexers.*object——
$.checks.indexers.*.statusstringNot listed{"enum": ["healthy", "unhealthy"], "example": "healthy"}
$.checks.indexers.*.rpcLatencyMsnumberNot listed{"example": 45}
$.checks.indexers.*.lagnumberNot listed{"example": 3}
$.checks.indexers.*.dependenciesobjectNot listed—
$.checks.indexers.*.dependencies.statusstringNot 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.

FieldTypeListed in local requiredDescriptionConstraints
$object——
$.statusstringNot listed{"enum": ["healthy", "degraded", "unhealthy"], "example": "healthy"}
$.timestampstringNot listed{"format": "date-time"}
$.deployEnvironmentstringNot listed{"example": "production"}
$.deployedVersionstringNot listed{"example": "1.1.2"}
$.summaryobjectNot listed—
$.summary.healthyintegerNot listed{"example": 10}
$.summary.unhealthyintegerNot listed{"example": 2}
$.summary.totalintegerNot listed{"example": 12}
$.checksobjectNot listed—
$.checks.dependenciesobjectNot listed—
$.checks.dependencies.statusstringNot listed{"enum": ["healthy", "unhealthy"], "example": "healthy"}
$.checks.indexersobjectNot listed—
$.checks.indexers.*object——
$.checks.indexers.*.statusstringNot listed{"enum": ["healthy", "unhealthy"], "example": "healthy"}
$.checks.indexers.*.rpcLatencyMsnumberNot listed{"example": 45}
$.checks.indexers.*.lagnumberNot listed{"example": 3}
$.checks.indexers.*.dependenciesobjectNot listed—
$.checks.indexers.*.dependencies.statusstringNot 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—List of supported blockchains with their tokens and case sensitivity rules{"additionalProperties": false}
$.chainsarrayNot listedAll supported blockchains.—
$.chains[]object—{"required": ["name", "tokens"], "additionalProperties": false}
$.chains[].namestringYesBlockchain identifier used as the {blockchain} path parameter in other endpoints.—
$.chains[].tokensarrayYesToken identifiers available on this blockchain, used as the {token} path parameter.—
$.chains[].tokens[]string——
$.chains[].caseSensitiveobjectNot listedCase sensitivity rules. If present, addresses are preserved as-is (case-sensitive). If absent, addresses are automatically lowercased.{"additionalProperties": false}
$.chains[].caseSensitive.addressoneOfNot listedIndicates 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.txbooleanNot listedtrue = transaction hashes are case-sensitive.—
$.chains[].caseSensitive.blockbooleanNot listedtrue = 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - indexer service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedError details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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).

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Token transfer history for the queried address{"additionalProperties": false}
$.transfersarrayNot listedList of token transfers sorted by block number.—
$.transfers[]object—{"additionalProperties": true}
$.transfers[].blockchainstringNot listedBlockchain where the transfer occurred.—
$.transfers[].blockNumberintegerNot listedBlock number containing the transfer.—
$.transfers[].transactionHashstringNot listedHash of the transaction.—
$.transfers[].transferIndexintegerNot listedIndex of the transfer within the transaction.—
$.transfers[].tokenstringNot listedToken identifier.—
$.transfers[].amountstringNot listedTransfer amount as a decimal string.—
$.transfers[].timestampintegerNot listedBlock timestamp in milliseconds since Unix epoch.—
$.transfers[].transactionIndexoneOfNot listedPosition of the transaction within the block.—
$.transfers[].transactionIndex (oneOf 1)integer——
$.transfers[].transactionIndex (oneOf 2)null——
$.transfers[].logIndexoneOfNot listedEvent log index for EVM chains. null for non-EVM chains like Bitcoin.—
$.transfers[].logIndex (oneOf 1)integer——
$.transfers[].logIndex (oneOf 2)null——
$.transfers[].fromoneOfNot listedSender wallet address.—
$.transfers[].from (oneOf 1)string——
$.transfers[].from (oneOf 2)null——
$.transfers[].tooneOfNot listedThe recipient's address—
$.transfers[].to (oneOf 1)string——
$.transfers[].to (oneOf 2)null——
$.transfers[].labelstringNot listedA label associated with the transfer, if any—
$.transfers[].metadataoneOfNot listedChain-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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, blockchain, or token{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedAuthentication error type—
$.messagestringNot listedAuthentication error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedAuthorization error type—
$.messagestringNot listedAuthorization error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedRate limit error type—
$.messagestringNot listedRate limit error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - indexer service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedError details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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).

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Current token balance for the queried address{"additionalProperties": false}
$.tokenBalanceobjectNot listedBalance information.{"additionalProperties": false}
$.tokenBalance.blockchainstringNot listedBlockchain queried.—
$.tokenBalance.tokenstringNot listedToken queried.—
$.tokenBalance.amountstringNot listedCurrent 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, blockchain, or token{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedAuthentication error type—
$.messagestringNot listedAuthentication error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedAuthorization error type—
$.messagestringNot listedAuthorization error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedRate limit error type—
$.messagestringNot listedRate limit error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - indexer service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedError details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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).

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Transfer records for the queried transaction{"additionalProperties": false}
$.transfersarrayNot listedAll transfers recorded under this transaction for the requested token.—
$.transfers[]object—{"additionalProperties": true}
$.transfers[].blockchainstringNot listedBlockchain where the transfer occurred.—
$.transfers[].blockNumberintegerNot listedBlock number containing the transfer.—
$.transfers[].transactionHashstringNot listedHash of the transaction.—
$.transfers[].transferIndexintegerNot listedIndex of the transfer within the transaction.—
$.transfers[].tokenstringNot listedToken identifier.—
$.transfers[].amountstringNot listedTransfer amount as a decimal string.—
$.transfers[].timestampintegerNot listedBlock timestamp in milliseconds since Unix epoch.—
$.transfers[].transactionIndexoneOfNot listedPosition of the transaction within the block.—
$.transfers[].transactionIndex (oneOf 1)integer——
$.transfers[].transactionIndex (oneOf 2)null——
$.transfers[].logIndexoneOfNot listedEvent log index for EVM chains. null for non-EVM chains like Bitcoin.—
$.transfers[].logIndex (oneOf 1)integer——
$.transfers[].logIndex (oneOf 2)null——
$.transfers[].fromoneOfNot listedSender wallet address.—
$.transfers[].from (oneOf 1)string——
$.transfers[].from (oneOf 2)null——
$.transfers[].tooneOfNot listedThe recipient's address—
$.transfers[].to (oneOf 1)string——
$.transfers[].to (oneOf 2)null——
$.transfers[].labelstringNot listedA label associated with the transfer, if any—
$.transfers[].metadataoneOfNot listedChain-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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, blockchain, or token{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedAuthentication error type—
$.messagestringNot listedAuthentication error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedAuthorization error type—
$.messagestringNot listedAuthorization error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Not Found - the transaction has no transfers of the requested token{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedError details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedRate limit error type—
$.messagestringNot listedRate limit error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - indexer service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedError details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$array—Array of transfer query objects. Maximum 10 items.{"minItems": 1, "maxItems": 10}
$[]object—{"required": ["blockchain", "token", "address"], "additionalProperties": false}
$[].blockchainstringYesBlockchain network identifier.{"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]}
$[].tokenstringYesToken identifier.{"enum": ["usdt", "xaut", "usat", "btc"]}
$[].addressstringYesWallet address to query.{"minLength": 1}
$[].limitintegerNot listedMaximum number of transfers to return for this address.{"minimum": 1, "maximum": 1000, "default": 10}
$[].fromTsintegerNot listedStart timestamp in milliseconds (inclusive).{"minimum": 0, "default": 0}
$[].toTsintegerNot listedEnd 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.

FieldTypeListed in local requiredDescriptionConstraints
$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).transfersarrayNot listedList of token transfers sorted by block number.—
$[] (oneOf 1).transfers[]object—{"additionalProperties": true}
$[] (oneOf 1).transfers[].blockchainstringNot listedBlockchain where the transfer occurred.—
$[] (oneOf 1).transfers[].blockNumberintegerNot listedBlock number containing the transfer.—
$[] (oneOf 1).transfers[].transactionHashstringNot listedHash of the transaction.—
$[] (oneOf 1).transfers[].transferIndexintegerNot listedIndex of the transfer within the transaction.—
$[] (oneOf 1).transfers[].tokenstringNot listedToken identifier.—
$[] (oneOf 1).transfers[].amountstringNot listedTransfer amount as a decimal string.—
$[] (oneOf 1).transfers[].timestampintegerNot listedBlock timestamp in milliseconds since Unix epoch.—
$[] (oneOf 1).transfers[].transactionIndexoneOfNot listedPosition of the transaction within the block.—
$[] (oneOf 1).transfers[].transactionIndex (oneOf 1)integer——
$[] (oneOf 1).transfers[].transactionIndex (oneOf 2)null——
$[] (oneOf 1).transfers[].logIndexoneOfNot listedEvent 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[].fromoneOfNot listedSender wallet address.—
$[] (oneOf 1).transfers[].from (oneOf 1)string——
$[] (oneOf 1).transfers[].from (oneOf 2)null——
$[] (oneOf 1).transfers[].tooneOfNot listedThe recipient's address—
$[] (oneOf 1).transfers[].to (oneOf 1)string——
$[] (oneOf 1).transfers[].to (oneOf 2)null——
$[] (oneOf 1).transfers[].labelstringNot listedA label associated with the transfer, if any—
$[] (oneOf 1).transfers[].metadataoneOfNot listedChain-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).errorstringNot listed—
$[] (oneOf 2).messagestringNot listed—
$[] (oneOf 2).statusnumberNot 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, blockchain, or token{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedAuthentication error type—
$.messagestringNot listedAuthentication error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedAuthorization error type—
$.messagestringNot listedAuthorization error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedRate limit error type—
$.messagestringNot listedRate limit error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - indexer service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedError details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$array—Array of balance query objects. Maximum 10 items.{"minItems": 1, "maxItems": 10}
$[]object—{"required": ["blockchain", "token", "address"], "additionalProperties": false}
$[].blockchainstringYesBlockchain network identifier.{"enum": ["ethereum", "arbitrum", "avalanche", "polygon", "plasma", "sepolia", "tron", "ton", "bitcoin", "spark"]}
$[].tokenstringYesToken identifier.{"enum": ["usdt", "xaut", "usat", "btc"]}
$[].addressstringYesWallet 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.

FieldTypeListed in local requiredDescriptionConstraints
$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).tokenBalanceobjectNot listedBalance information.{"additionalProperties": false}
$[] (oneOf 1).tokenBalance.blockchainstringNot listedBlockchain queried.—
$[] (oneOf 1).tokenBalance.tokenstringNot listedToken queried.—
$[] (oneOf 1).tokenBalance.amountstringNot listedCurrent balance as a decimal string.—
$[] (oneOf 2)object—{"additionalProperties": false}
$[] (oneOf 2).errorstringNot listed—
$[] (oneOf 2).messagestringNot listed—
$[] (oneOf 2).statusnumberNot 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, blockchain, or token{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedAuthentication error type—
$.messagestringNot listedAuthentication error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedAuthorization error type—
$.messagestringNot listedAuthorization error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedRate limit error type—
$.messagestringNot listedRate limit error details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - indexer service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedError details—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$array—Array of wallets to register. Maximum 10 items.{"minItems": 1, "maxItems": 10}
$[]object—{"required": ["type", "addresses"], "additionalProperties": false}
$[].typestringYesWallet type. Must be the type this gateway registers.{"enum": ["client_wallet"]}
$[].namestringNot listedOptional display name for the wallet.{"minLength": 1, "maxLength": 100}
$[].addressesobjectYesAddresses 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}
$[].metaobjectNot listedOptional wallet metadata. Required when registering a spark address.{"additionalProperties": false}
$[].meta.sparkobjectNot listed{"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false}
$[].meta.spark.sparkDepositAddressstringYes{"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"}
$[].meta.spark.sparkIdentityKeystringYes{"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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Per-wallet registration results in request order{"additionalProperties": false}
$.walletsarrayNot listed—
$.wallets[]object—Per-wallet registration result{"additionalProperties": false}
$.wallets[].statusnumberNot listedPer-item status code: 201 created, 400 invalid, 429 wallet limit exceeded.—
$.wallets[].idstringNot listedWallet identifier (present when created).—
$.wallets[].namestringNot listedWallet display name.—
$.wallets[].typestringNot listedWallet type assigned at registration.—
$.wallets[].enabledbooleanNot listedWhether the wallet is active for transaction syncing.—
$.wallets[].addressesobjectNot listedRegistered addresses keyed by blockchain.—
$.wallets[].addresses.*string——
$.wallets[].metaobjectNot listedOptional wallet metadata. Required when registering a spark address.{"additionalProperties": false}
$.wallets[].meta.sparkobjectNot listed{"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false}
$.wallets[].meta.spark.sparkDepositAddressstringYes{"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"}
$.wallets[].meta.spark.sparkIdentityKeystringYes{"minLength": 1}
$.wallets[].errorstringNot listedError code when the item was rejected.—
$.wallets[].limitnumberNot listedWallet limit that was exceeded (present on 429).—
$.wallets[].currentCountnumberNot listedCurrent 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, or blockchain{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Conflict - address already registered{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - wallet service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Service Unavailable - wallet service temporarily unreachable{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Registered wallets{"additionalProperties": false}
$.walletsarrayNot listed—
$.wallets[]object—A registered wallet{"additionalProperties": false}
$.wallets[].idstringNot listedWallet identifier.—
$.wallets[].namestringNot listedOptional wallet display name.—
$.wallets[].typestringNot listedWallet type assigned at registration.—
$.wallets[].enabledbooleanNot listedWhether the wallet is active for transaction syncing.—
$.wallets[].addressesobjectNot listedRegistered addresses keyed by blockchain.—
$.wallets[].addresses.*string——
$.wallets[].metaobjectNot listedOptional wallet metadata. Required when registering a spark address.{"additionalProperties": false}
$.wallets[].meta.sparkobjectNot listed{"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false}
$.wallets[].meta.spark.sparkDepositAddressstringYes{"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"}
$.wallets[].meta.spark.sparkIdentityKeystringYes{"minLength": 1}
$.wallets[].createdAtnumberNot listedCreation timestamp in milliseconds.—
$.wallets[].updatedAtnumberNot listedLast 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - wallet service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Service Unavailable - wallet service temporarily unreachable{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$object—A registered wallet{"additionalProperties": false}
$.idstringNot listedWallet identifier.—
$.namestringNot listedOptional wallet display name.—
$.typestringNot listedWallet type assigned at registration.—
$.enabledbooleanNot listedWhether the wallet is active for transaction syncing.—
$.addressesobjectNot listedRegistered addresses keyed by blockchain.—
$.addresses.*string——
$.metaobjectNot listedOptional wallet metadata. Required when registering a spark address.{"additionalProperties": false}
$.meta.sparkobjectNot listed{"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false}
$.meta.spark.sparkDepositAddressstringYes{"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"}
$.meta.spark.sparkIdentityKeystringYes{"minLength": 1}
$.createdAtnumberNot listedCreation timestamp in milliseconds.—
$.updatedAtnumberNot listedLast 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Not Found - wallet not found or access denied{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - wallet service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Service Unavailable - wallet service temporarily unreachable{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$object—{"minProperties": 1, "additionalProperties": false}
$.namestringNot listedNew display name for the wallet.{"minLength": 1, "maxLength": 100}
$.enabledbooleanNot listedWhether 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—A registered wallet{"additionalProperties": false}
$.idstringNot listedWallet identifier.—
$.namestringNot listedOptional wallet display name.—
$.typestringNot listedWallet type assigned at registration.—
$.enabledbooleanNot listedWhether the wallet is active for transaction syncing.—
$.addressesobjectNot listedRegistered addresses keyed by blockchain.—
$.addresses.*string——
$.metaobjectNot listedOptional wallet metadata. Required when registering a spark address.{"additionalProperties": false}
$.meta.sparkobjectNot listed{"required": ["sparkDepositAddress", "sparkIdentityKey"], "additionalProperties": false}
$.meta.spark.sparkDepositAddressstringYes{"minLength": 1, "pattern": "^([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[a-z0-9]{39,59})$"}
$.meta.spark.sparkIdentityKeystringYes{"minLength": 1}
$.createdAtnumberNot listedCreation timestamp in milliseconds.—
$.updatedAtnumberNot listedLast 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, or blockchain{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Not Found - wallet not found or access denied{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - wallet service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Service Unavailable - wallet service temporarily unreachable{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Wallet deleted{"additionalProperties": false}
$.successbooleanNot 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Not Found - wallet not found or access denied{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - wallet service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Service Unavailable - wallet service temporarily unreachable{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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).

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Raw transfer log entries for registered wallets{"additionalProperties": false}
$.transfersarrayNot listedList of transfers sorted by timestamp.—
$.transfers[]object—{"additionalProperties": false}
$.transfers[].walletIdstringNot listedWallet the transfer belongs to.—
$.transfers[].blockchainstringNot listedBlockchain where the transfer occurred.—
$.transfers[].tokenstringNot listedToken identifier.—
$.transfers[].transactionHashstringNot listedHash of the transaction.—
$.transfers[].transferIndexintegerNot listedIndex of the transfer within the transaction.—
$.transfers[].blockNumberintegerNot listedBlock number containing the transfer.—
$.transfers[].amountstringNot listedTransfer amount as a decimal string.—
$.transfers[].fromoneOfNot listedSender address.—
$.transfers[].from (oneOf 1)string——
$.transfers[].from (oneOf 2)null——
$.transfers[].tooneOfNot listedRecipient address.—
$.transfers[].to (oneOf 1)string——
$.transfers[].to (oneOf 2)null——
$.transfers[].tsintegerNot listedBlock timestamp in milliseconds since Unix epoch.—
$.transfers[].transactionIndexoneOfNot listedPosition of the transaction within the block.—
$.transfers[].transactionIndex (oneOf 1)integer——
$.transfers[].transactionIndex (oneOf 2)null——
$.transfers[].logIndexoneOfNot listedEvent log index for EVM chains. null for non-EVM chains.—
$.transfers[].logIndex (oneOf 1)integer——
$.transfers[].logIndex (oneOf 2)null——
$.transfers[].labelstringNot listedA label associated with the transfer, if any.—
$.transfers[].typestringNot listedDirection 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, or blockchain{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Not Found - wallet not found or access denied{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - wallet service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Service Unavailable - wallet service temporarily unreachable{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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).

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Raw transfer log entries for registered wallets{"additionalProperties": false}
$.transfersarrayNot listedList of transfers sorted by timestamp.—
$.transfers[]object—{"additionalProperties": false}
$.transfers[].walletIdstringNot listedWallet the transfer belongs to.—
$.transfers[].blockchainstringNot listedBlockchain where the transfer occurred.—
$.transfers[].tokenstringNot listedToken identifier.—
$.transfers[].transactionHashstringNot listedHash of the transaction.—
$.transfers[].transferIndexintegerNot listedIndex of the transfer within the transaction.—
$.transfers[].blockNumberintegerNot listedBlock number containing the transfer.—
$.transfers[].amountstringNot listedTransfer amount as a decimal string.—
$.transfers[].fromoneOfNot listedSender address.—
$.transfers[].from (oneOf 1)string——
$.transfers[].from (oneOf 2)null——
$.transfers[].tooneOfNot listedRecipient address.—
$.transfers[].to (oneOf 1)string——
$.transfers[].to (oneOf 2)null——
$.transfers[].tsintegerNot listedBlock timestamp in milliseconds since Unix epoch.—
$.transfers[].transactionIndexoneOfNot listedPosition of the transaction within the block.—
$.transfers[].transactionIndex (oneOf 1)integer——
$.transfers[].transactionIndex (oneOf 2)null——
$.transfers[].logIndexoneOfNot listedEvent log index for EVM chains. null for non-EVM chains.—
$.transfers[].logIndex (oneOf 1)integer——
$.transfers[].logIndex (oneOf 2)null——
$.transfers[].labelstringNot listedA label associated with the transfer, if any.—
$.transfers[].typestringNot listedDirection 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Bad Request - invalid parameters, address format, or blockchain{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Unauthorized - expired API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Forbidden - missing or invalid API key{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Too Many Requests - rate limit exceeded{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Internal Server Error - wallet service unavailable or unexpected failure{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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.

FieldTypeListed in local requiredDescriptionConstraints
$object—Service Unavailable - wallet service temporarily unreachable{"additionalProperties": false}
$.errorstringNot listedError type—
$.messagestringNot listedHuman-readable error description—
$.statusnumberNot listedHTTP 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


Need Help?

On this page

Base URLAPI contractAuthenticationAPI EndpointsGET /api/v1/healthAuthenticationParametersResponsesHTTP 200HTTP 503GET /api/v1/chainsAuthenticationParametersResponsesHTTP 200HTTP 500GET /api/v1/{blockchain}/{token}/{address}/token-transfersAuthenticationParameterslimit (query)fromTs (query)toTs (query)blockchain (path)token (path)address (path)ResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 429HTTP 500GET /api/v1/{blockchain}/{token}/{address}/token-balancesAuthenticationParametersblockchain (path)token (path)address (path)ResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 429HTTP 500GET /api/v1/blockchains/{blockchain}/{token}/token-transfers/{transactionHash}AuthenticationParametersblockchain (path)token (path)transactionHash (path)ResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 404HTTP 429HTTP 500POST /api/v1/batch/token-transfersAuthenticationParametersRequest bodyResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 429HTTP 500POST /api/v1/batch/token-balancesAuthenticationParametersRequest bodyResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 429HTTP 500POST /api/v1/walletsAuthenticationParametersRequest bodyResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 409HTTP 429HTTP 500HTTP 503GET /api/v1/walletsAuthenticationParametersResponsesHTTP 200HTTP 401HTTP 403HTTP 429HTTP 500HTTP 503GET /api/v1/wallets/{walletId}AuthenticationParameterswalletId (path)ResponsesHTTP 200HTTP 401HTTP 403HTTP 404HTTP 429HTTP 500HTTP 503PATCH /api/v1/wallets/{walletId}AuthenticationParameterswalletId (path)Request bodyResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 404HTTP 429HTTP 500HTTP 503DELETE /api/v1/wallets/{walletId}AuthenticationParameterswalletId (path)ResponsesHTTP 200HTTP 401HTTP 403HTTP 404HTTP 429HTTP 500HTTP 503GET /api/v1/wallets/{walletId}/transfersAuthenticationParametersblockchain (query)token (query)type (query)from (query)to (query)limit (query)skip (query)sort (query)walletId (path)ResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 404HTTP 429HTTP 500HTTP 503GET /api/v1/transfersAuthenticationParametersblockchain (query)token (query)type (query)from (query)to (query)limit (query)skip (query)sort (query)ResponsesHTTP 200HTTP 400HTTP 401HTTP 403HTTP 429HTTP 500HTTP 503Rate LimitingError HandlingError Response FormatNext StepsNeed Help?