# Units and Typed IDs

## Units

| Field type | Unit |
|  --- | --- |
| Money | Minor currency units. For USD, `1250` means `$12.50`. |
| Rates | Basis points. `500` means `5.00%`. |
| Timestamps | ISO 8601 date-time strings. |
| Currency | Lowercase `usd` in API responses. Some ingestion inputs accept `USD` or `usd`. |


Do not send decimal currency values. Do not infer currency from locale. Use the explicit `currency` field.

## Typed IDs

Percents ids use a stable prefix plus a UUID. The prefix identifies the entity type without another lookup.

| Prefix | Meaning |
|  --- | --- |
| `chg_` | Cardholder group. |
| `ch_` | Cardholder. |
| `card_` | Card. |
| `mp_` | Merchant partner. |
| `mpo_` | Merchant partner offer. |
| `auth_` | Card authorization event record. |
| `txn_` | Settled transaction event record. |
| `brevt_` | Branded balance or cashback event. |
| `rg_` | RewardGrant bucket for branded balance. |
| `evt_` | Webhook event. |
| `tok_` | API token id. |
| `api_` | API credential or token-management id where exposed by the integration surface. |
| `err_` | Public error instance id. |


Treat typed ids as opaque strings. The UUID portion is not a sequence, and callers should not derive ownership or authorization from an id alone.

## Idempotency

For transaction ingestion, the issuer-provided transaction `id` is the stable input id. Replaying the same event with the same id should be safe. For webhooks, use `webhookId` as the idempotency key for processing and replay handling.