# GET /v1/xrpl/token/{asset}

Issuer data for an issued asset: flags, domain, transfer fee and total issued.

## Purpose

Returns the issuer data for an issued asset `CODE.issuer`: issuer flags (`global_freeze`, `no_freeze`, `require_auth`, `default_ripple`), the issuer `domain` decoded to text when set, `transfer_rate` (1000000000 = no fee) and `transfer_fee_pct`, and `obligations`, the total issued of that currency as a decimal string (`"0"` when the issuer has not issued it). When the node cannot report obligations, the response is still 200 with `obligations: null` and `obligations_status: "unavailable"`. Holder counts are not returned.

## When to use

Before accepting or sending an issued token: check that the issuer exists, is not frozen, whether holders need authorization, and the transfer fee charged on every transfer between non-issuer accounts.

## When not to use

For XRP (not an issued asset; 400), for one account's own balances use `/v1/xrpl/account/{address}/lines`, and for prices use `/v1/xrpl/orderbook` or `/v1/xrpl/amm/{a}/{b}`.

## Parameters

| Name | In | Required | Description | Constraints | Example |
|---|---|---|---|---|---|
| `asset` | path | yes | Issued asset as `CODE.issuer`, split on the first dot. | `CODE` is 3 characters (not `XRP`, case-insensitive) or 40 hex; `issuer` is a valid classic XRPL address | `USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh` |

## Request example

```sh
curl -s "https://api.criptonlabs.com/v1/xrpl/token/USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
```

## Response example (200)

```json
{
  "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
  "currency": "USD",
  "global_freeze": false,
  "no_freeze": false,
  "require_auth": false,
  "default_ripple": true,
  "domain": "example.com",
  "transfer_rate": 1002000000,
  "transfer_fee_pct": "0.2",
  "obligations": "1250000.5",
  "obligations_status": "ok",
  "meta": {
    "ledger_index": 100234566,
    "as_of": "2026-10-06T12:00:03.000Z",
    "age_seconds": 12,
    "cache": "hit",
    "stale": false
  }
}
```

## Errors

- 400 [invalid-parameters](https://api.criptonlabs.com/errors/invalid-parameters.md)
- 400 [bad-request](https://api.criptonlabs.com/errors/bad-request.md)
- 404 [not-found](https://api.criptonlabs.com/errors/not-found.md)
- 429 [rate-limited](https://api.criptonlabs.com/errors/rate-limited.md)
- 503 [upstream-unavailable](https://api.criptonlabs.com/errors/upstream-unavailable.md)

## Caching

Fresh for 10 seconds; on upstream failure the last good value is served for up to 120 seconds (`meta.stale` is `true`), then the service answers 503. See the [freshness guide](https://api.criptonlabs.com/docs/guides/freshness.md).

## Rate limit

Tier `expensive`. See the [rate-limits guide](https://api.criptonlabs.com/docs/guides/rate-limits.md).

## MCP tool

The MCP tool `xrpl_token` returns the same data. See the [MCP quickstart](https://api.criptonlabs.com/docs/guides/mcp-quickstart.md).
