# Attest a Default Wallet

The wallet a purchase of that family uses when it names no address, in one environment.

## Overview

- Your signed call is your statement that the wallet serves that end user: the user signs nothing.
- The wallet it replaces stays attested, no longer the default. The same address again answers `changed: false`; a new label is kept.
- A mixed-case EVM address must carry a valid checksum; the zero address is refused (`400` `CARD_ONRAMP_ADDRESS_INVALID`).

## Endpoint

### `PUT /v1/ramp/card/customers/{externalId}/wallets/{family}`

Authentication: signed by the tenant's server — headers `x-tenant-api-key`, `x-timestamp`, `x-signature` (see Authentication → Tenant signature). No user token.

Attests the default wallet of one family.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `externalId` | string | yes | Your own id of the end user, 1 to 100 characters: letters, digits, dot, underscore, colon, at sign or hyphen |
| `family` | string | yes | evm (every EVM pair) or solana |

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `address` | string | yes | The wallet address |
| `isTestnet` | boolean | no | true for the sandbox |
| `label` | string | no | Your name for the wallet, at most 100 characters |

**Responses**

`200` Attested

```json
{
  "wallet": {
    "environment": "sandbox",
    "family": "evm",
    "address": "0x2f8C1e4d6B3A9E0F7C5D2B1A8E6f4c3d0b9A7E51",
    "isDefault": true,
    "label": "Main wallet",
    "attestedAt": "2026-09-25T01:46:56.620Z"
  },
  "changed": true
}
```

---

Web version: https://docs.aureahub.com/#card-wallets-wallet-put
