# Customer addresses

## Request fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `customer_id` | String | Yes | Stable identifier, 1–128 characters |
| `webhook_url` | String | No | Your callback URL; keep it stable for this customer |

No invoice amount or order ID is required. Repeating the same customer ID under the same merchant returns the saved addresses and payment link. Changing its saved callback URL can produce an `IDEMPOTENCY_CONFLICT`.

## cURL example

```bash
curl -X POST https://api.niripay.com/api/v1/merchant/crypto/addresses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "customer-42",
    "webhook_url": "https://merchant.example/webhooks/crypto"
  }'
```

## JavaScript example

```js
const instructions = await niripayJson("/api/v1/merchant/crypto/addresses", {
  customer_id: "customer-42",
  webhook_url: "https://merchant.example/webhooks/crypto"
});
```

## Response fields

The standard `status` / `data` envelope contains these instruction fields:

| Field | Meaning |
| --- | --- |
| `currency` / `network` | `USDT` / `TRON` |
| `payment_type` | `static_wallet` |
| `payment_link` | Reusable hosted payment instructions |
| `addresses` | Saved address or null, keyed by provider |
| `enabled` / `providers` | Merchant activation and provider availability |
| `ready` | Crypto is enabled and at least one enabled wallet has an address |
| `customer_id` / `purpose` | Customer association and address purpose |
| `provisioning_error` | Provisioning issue, or null |
| `cutoff` / `fee_bps` | Configured fee-policy values; receipt pricing remains authoritative |

## Handle partial provisioning

If an address is missing, retry this authenticated request with the same customer and callback details. Refreshing the checkout page only reads saved instructions; it does not provision missing addresses. Payments to saved addresses continue to be recognized.

Use the exact API identifiers when integrating. Dashboard presentation labels are not replacements for provider keys or transaction IDs.
