---
title: "Register wallets for automatic transaction syncing"
method: POST
path: "/api/v1/wallets"
tags: ["Wallets"]
---

# Register wallets for automatic transaction syncing

`POST /api/v1/wallets`

## Request

- Base URL: `https://wdk-api.tether.io` (the document declares no server; this is the origin it was published from)
- URL: `https://wdk-api.tether.io/api/v1/wallets`
- Auth: API key in header `X-API-KEY`
- TypeScript: <https://skmtc.dev/tether/apis/wdk-indexer-api/docs/api/v1/wallets/post.ts> (a function with typed inputs; its response is checked against the schema)

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.

## Request body

- object[]: Array of wallets to register. Maximum 10 items.
  - `type` 'client_wallet', required: Wallet type. Must be the type this gateway registers.
  - `name` string: Optional display name for the wallet.
  - `addresses` object, required: Addresses to register, keyed by blockchain (e.g. {"ethereum": "0x...", "bitcoin": "bc1..."}). Use GET /api/v1/chains for supported blockchains.
  - `meta` object: Optional wallet metadata. Required when registering a spark address.
    - `spark` object
      - `sparkDepositAddress` string, required
      - `sparkIdentityKey` string, required

## Response `200`

Per-wallet registration results in request order

- object: Per-wallet registration results in request order
  - `wallets` object[]
    - `status` number: Per-item status code: 201 created, 400 invalid, 429 wallet limit exceeded.
    - `id` string: Wallet identifier (present when created).
    - `name` string: Wallet display name.
    - `type` string: Wallet type assigned at registration.
    - `enabled` boolean: Whether the wallet is active for transaction syncing.
    - `addresses` object: Registered addresses keyed by blockchain.
    - `meta` object: Optional wallet metadata. Required when registering a spark address.
      - `spark` object
        - `sparkDepositAddress` string, required
        - `sparkIdentityKey` string, required
    - `error` string: Error code when the item was rejected.
    - `limit` number: Wallet limit that was exceeded (present on 429).
    - `currentCount` number: Current wallet count (present on 429).

## Other responses

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

---

[API](https://skmtc.dev/tether/apis/wdk-indexer-api.md) - [All operations](https://skmtc.dev/tether/apis/wdk-indexer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/tether/apis/wdk-indexer-api/revisions/fb8b84e0bb98?raw)
