> ## Documentation Index
> Fetch the complete documentation index at: https://docs.privy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Register wallets

> Register a user's wallet with WisdomTree so it can buy, hold, and sell fund shares.

WisdomTree only takes orders from wallets that it approved. Use the [register](#register-a-wallet) endpoint for each wallet that trades. One registration covers every WisdomTree fund on one chain.

### Registration flow

1. The wallet belongs to a user: an organization or an individual. WisdomTree must have approved that user's [KYB](https://docs.privy.io/wallets/actions/earn/tokenized-money-market-funds/onboard-businesses) or [KYC](https://docs.privy.io/wallets/actions/earn/tokenized-money-market-funds/onboard-individuals) review in the same environment.
2. The response shows the wallet's registration status. The wallet can trade once the status is `approved`.

Registering a wallet again is safe and returns its current status.

## Register a wallet

To register a wallet, send a `POST` request to:

```bash theme={"system"}
https://api.privy.io/v1/wallets/{wallet_id}/earn/tmmf/register
```

### Parameters

The body names the provider, the chain, and the environment.

**provider** `'wisdomtree'` *required*

The fund provider.

**chain** `string` *required*

The chain to register the wallet on. In the sandbox, use `ethereum_sepolia` with an Ethereum
wallet.

**environment** `'sandbox' | 'production'`

The WisdomTree environment to register the wallet in. WisdomTree must have approved the user in
this environment. Defaults to `production`. Use `sandbox` to test. See [how the sandbox
works](https://docs.privy.io/wallets/actions/earn/tokenized-money-market-funds/sandbox.md#how-the-sandbox-works).

### Returns

The endpoint returns `200` once WisdomTree approves the wallet. It returns `202` while the approval is still open.

**wallet\_id** `string`

The ID of the registered wallet.

**address** `string`

The wallet's address.

**provider** `'wisdomtree'`

The fund provider.

**chain** `string`

The chain the wallet is registered on.

**environment** `'sandbox' | 'production'`

The WisdomTree environment the wallet is registered in.

**status** `'created' | 'approved' | 'rejected' | null`

The wallet's registration status, or `null` when WisdomTree does not report one. The wallet can
trade once `approved`.

**user\_id** `string`

The ID of the user the wallet is registered for. For a business, this is the organization ID.

**created\_at** `number`

Unix timestamp in milliseconds of when the registration was created.

**updated\_at** `number`

Unix timestamp in milliseconds of when the registration was last updated.

### Example

This request registers the wallet on Ethereum Sepolia (testnet).

```bash theme={"system"}
curl -X POST https://api.privy.io/v1/wallets/{wallet_id}/earn/tmmf/register \
  -H "privy-app-id: <your-app-id>" \
  -H "Authorization: Basic <credentials>" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "wisdomtree",
    "chain": "ethereum_sepolia",
    "environment": "sandbox"
  }'
```

```json Example response theme={"system"}
{
  "wallet_id": "<your-wallet-id>",
  "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
  "provider": "wisdomtree",
  "chain": "ethereum_sepolia",
  "environment": "sandbox",
  "status": "approved",
  "user_id": "<organization-id>",
  "created_at": 1761998400000,
  "updated_at": 1761998400000
}
```

### Errors

The endpoint returns these errors.

| Status | Cause |
| - | - |
| `400` | The wallet has no user, WisdomTree has not approved the user, or the wallet type does not match the chain. |
| `403` | WisdomTree rejected the wallet, or the request uses `production` and the app has no production access. |
| `404` | The wallet does not exist, or its user has not onboarded with WisdomTree. |
| `409` | The user has reached the maximum number of registered wallets, or WisdomTree already registered this address for another wallet. |
| `502` | WisdomTree did not answer (`provider_unavailable`), or registered the wallet but has not approved it yet (`needs_manual_intervention`). |

> [!TIP]
>
> After a `202` or a `502` with the code `needs_manual_intervention`, register the wallet again
> later to read its current status. Privy sends the
> [`tmmf.wallet.updated`](https://docs.privy.io/wallets/actions/earn/tokenized-money-market-funds/webhooks) webhook when
> a register request changes the wallet's status.

## Get a user's registrations

This endpoint shows a user's review status and their registered wallets. Send a `GET` request to:

```bash theme={"system"}
https://api.privy.io/v1/users/{user_id}/earn/tmmf
```

For a business, use the organization ID as `user_id`.

### Parameters

All query parameters are optional.

**provider** `'wisdomtree'`

Only return registrations with this provider.

**environment** `'sandbox' | 'production'`

The WisdomTree environment to read. Defaults to `production`.

**wallet\_id** `string`

Only return the registration of this wallet.

**wallets\_limit** `number`

The maximum number of wallet registrations to return.

**wallets\_cursor** `string`

The cursor of the page of wallet registrations to return, from `wallets_next_cursor`.

### Returns

The response lists the review status and a page of wallets.

**user\_id** `string`

The ID of the user, which can be an organization.

**user\_registrations** `object[]`

The user's registrations with fund providers, each with `provider`, `environment`, and `status`:
`pending`, `action_required`, `approved`, `rejected`, or `suspended`.

**wallet\_registrations** `object[]`

A page of the user's registered wallets, each with `wallet_id`, `address`, `chain`, `provider`,
`environment`, and `status`.

**wallets\_next\_cursor** `string | null`

The cursor of the next page of wallet registrations, or `null` on the last page.

```json Example response theme={"system"}
{
  "user_id": "<organization-id>",
  "user_registrations": [
    {"provider": "wisdomtree", "environment": "sandbox", "status": "approved"}
  ],
  "wallet_registrations": [
    {
      "wallet_id": "<your-wallet-id>",
      "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
      "chain": "ethereum_sepolia",
      "provider": "wisdomtree",
      "environment": "sandbox",
      "status": "approved"
    }
  ],
  "wallets_next_cursor": null
}
```

## Next steps

Once WisdomTree approves the wallet, fund it and place an order.

> [card] [Buy fund shares](https://docs.privy.io/wallets/actions/earn/tokenized-money-market-funds/buy.md)
>
> Buy WTGXX with stablecoins from a registered wallet.

> [card] [Webhooks](https://docs.privy.io/wallets/actions/earn/tokenized-money-market-funds/webhooks.md)
>
> Receive `tmmf.wallet.updated` when a wallet's status changes.
