Sandbox version
For experimental use only. Proceed with caution.
mptokens
Batch resolve MPT issuances by ID
post
/mpt/issuances/batch
operationId: mpt-issuancesBatch

Batch version of /mpt/issuance/{issuanceId}. Body: { "issuanceIds": ["…", "…"] } (max 100). Returns each matched issuance as a raw row; unmatched IDs are silently omitted. Prefer this over N parallel calls when resolving issuance references from a list response.

Unlock protected endpoints

Enter your Bearer token once to enable every protected route in this API reference.

HTTP bearer

Saved for this browser tab only. The credential is never sent until you test an endpoint.

Authorizations
NameLocationDetails
BearerAuthAuthorization header · bearerJWT issued by the Honeycluster auth service for the `indexer` audience. Present as `Authorization: Bearer <token>`.
Request Body
application/json
required
FieldTypeDescription
issuanceIds
required
string[]
MPT issuance IDs to resolve (max 100 hex strings). Unmatched IDs are silently omitted.
metadata
boolean
When `true` (default), include the curated metadata block (`metadata.token` per XLS-89: name, ticker, description, icon, asset_class, urls, …) and `metadata.issuer` (issuer attribution, kyc, domain). Pass `metadata=false` to drop the block.
metrics
boolean
When `true`, include the live supply / holder metrics block (current_supply, max_supply, holders, transfer_fee_bps, asset_scale, flags). Defaults to `false` — opt in explicitly.
Example
Json
{
  "issuanceIds": [
    "string"
  ],
  "metadata": false,
  "metrics": false
}
Responses
200
application/json
Successful response
FieldTypeDescription
items
object[]
Resolved issuances in the canonical `mptDetail` shape. One entry per matched ID; unmatched IDs are silently omitted. Subject to the same `metadata` / `metrics` inclusion flags as `/mpt/list`.
items[].id
string
MPTokenIssuance ID (same as `issuance_id`). Top-level alias for shape parity with token / NFT detail.
items[].issuance_id
string
On-chain MPTokenIssuance ID (hex string).
items[].issuer
string
XRPL classic address of the issuer.
items[].created_at_ledger
integer
Ledger sequence where the issuance was created.
items[].destroyed_at_ledger
object
Ledger sequence where the issuance was destroyed; `null` while active.
items[].burned
boolean
True once `destroyed_at_ledger` is set.
items[].metadata
object
Curated metadata about the MPT asset and its issuer. Present when `metadata=true` (the default); omitted entirely when the caller passes `metadata=false`.
items[].metadata.token
object
items[].metadata.token.name
object
Display name of the MPT asset (XLS-89 `n`).
items[].metadata.token.ticker
object
Uppercase ticker symbol — ≤6 chars, A-Z 0-9 (XLS-89 `t`). `null` when the metadata didn't declare one.
items[].metadata.token.desc
object
Asset purpose / description (XLS-89 `d`).
items[].metadata.token.icon
object
URL to the asset logo (XLS-89 `i`). HTTPS or `ipfs://…`.
items[].metadata.token.asset_class
object
XLS-89 `ac`: top-level asset classification (`rwa` / `memes` / `wrapped` / `gaming` / `defi` / `other`).
items[].metadata.token.asset_subclass
object
XLS-89 `as`: narrower sub-category. Required by the spec when `asset_class = "rwa"`; free-text otherwise.
items[].metadata.token.issuer_name
object
Issuer display name as declared in the metadata (XLS-89 `in`).
items[].metadata.token.urls
object[]
Categorized external links published by the issuer (XLS-89 `us`). Empty array when none declared.
items[].metadata.token.additional_info
object
Free-form supplementary metadata (XLS-89 `ai`) — typically rate / term / settlement details for RWAs. Schema is issuer-defined.
items[].metadata.token.metadata_uri
object
Raw on-chain MPTokenMetadata field — hex-encoded VL bytes exactly as the ledger emits them. Hex-decodes to either a URL (`ipfs://…`, `https://…`, `ar://…`) or an inline JSON literal (`{…}`) when the metadata fits inside the on-chain field. The ledger value is preserved verbatim so callers can verify on-chain bytes against the live ledger; the decoded form is served via the resolver-mirrored copy on `metadata_url` when the URI was external.
items[].metadata.token.metadata_url
object
CDN URL of the mirrored metadata.json. Populated when the resolver hex-decodes `metadata_uri` to an external URL (http/https/ipfs/ar), fetches the bytes, and uploads them to `assets/mpt/<issuance_id>/metadata.json`. `null` when the on-chain URI was inline JSON (nothing to mirror) or when the resolver has not processed this row yet.
items[].metadata.issuer
object
items[].metadata.issuer.address
string
XRPL classic address of the issuer.
items[].metadata.issuer.name
object
Issuer display name from `account_metadata` / TOML / curator.
items[].metadata.issuer.domain
object
Verified domain associated with the issuer account.
items[].metadata.issuer.kyc
object
True when the issuer has completed third-party KYC.
items[].metrics
object
Live supply / holder metrics + flags. Present when `metrics=true`; omitted when the caller leaves it at the default `false`.
items[].metrics.trustlines
null
Always `null` for MPTs — MPTs do not use trustlines. Field present for shape parity with `/token/list`.
items[].metrics.holders
integer
Current count of holders with a positive balance.
items[].metrics.supply
string
Total outstanding supply (decimal string in token base units).
items[].metrics.circulating_supply
string
Supply minus issuer-held balance, computed at request time from `mpt_holders` for the (issuance_id, issuer_account) pair. Equals `supply` when the issuer holds none of its own MPT (the common case).
items[].metrics.price
object
Latest observed XRP-denominated price (decimal string). `null` when the MPT has no XRP-paired trade history.
items[].metrics.market_cap
object
Computed at request time: `price × supply`. `null` when price is unknown.
items[].metrics.fdv
object
Fully-diluted valuation: `price × max_supply`. `null` when price or `max_supply` is unknown.
items[].metrics.tvl
null
Always `null` for MPTs — MPTs are not yet supported by the AMM module. Field present for shape parity.
items[].metrics.vesting
null
Always `null` for MPTs — escrow vesting is an IOU concept. Field present for shape parity.
items[].metrics.price_change
object
Rolling price change per window. All windows source from `mpt_metrics_v`, which reads `ohlcv_5m` (5m / 1h windows) and `ohlcv_1h` (6h / 24h / 7d). NULL when the MPT has no XRP-paired trade pair or no buckets materialised in the window.
items[].metrics.price_change.last_5m
object
items[].metrics.price_change.last_1h
object
items[].metrics.price_change.last_6h
object
items[].metrics.price_change.last_24h
object
items[].metrics.price_change.last_7d
object
items[].metrics.volume
object
Rolling volume windows + lifetime total + XRPL dominance.
items[].metrics.volume.last_5m
object
items[].metrics.volume.last_1h
object
items[].metrics.volume.last_6h
object
items[].metrics.volume.last_24h
object
items[].metrics.volume.last_7d
object
Trailing 7d XRP-denominated volume (decimal string).
items[].metrics.volume.total
object
Cumulative lifetime XRP volume. `null` until denormalized.
items[].metrics.volume.dominance
object
items[].metrics.txn
object
Rolling trade-count windows per same-length bucket.
items[].metrics.txn.last_5m
object
items[].metrics.txn.last_1h
object
items[].metrics.txn.last_6h
object
items[].metrics.txn.last_24h
object
items[].metrics.txn.last_7d
object
Trade count over the last 7d.
items[].metrics.takers_24h
integer
Distinct taker addresses over the last 24h, sourced from the HLL union over `ohlcv_1h`. Returns 0 when the MPT has no XRP-paired trade history.
items[].metrics.takers_7d
integer
Distinct taker addresses over the last 7d, sourced from the HLL union over `ohlcv_1h`. Returns 0 when the MPT has no XRP-paired trade history.
items[].metrics.buy_sell_24h
object
Buy/sell breakdown over the last 24h, inferred from the taker's XRP balance delta sign on each trade. All sub-fields default to 0 when the MPT had no trades in the window.
items[].metrics.buy_sell_24h.buys
object
items[].metrics.buy_sell_24h.sells
object
items[].metrics.quality_score
string
Composite 0–100 quality score. Rubric (additive, capped at 100): +20 issuer verified, +15 issuer renounced, +15 metadata present (name + icon), +10 holders ≥ 100, +10 recent activity (≥10 trades in 24h), +10 has XRP-paired trade pair.
items[].metrics.max_supply
object
Hard cap on supply, decimal string. `null` when uncapped.
items[].metrics.transfer_fee_bps
integer
Transfer fee in basis points (0–50_000; 50_000 = 50%).
items[].metrics.asset_scale
integer
Decimal places for display (0–15). `raw_amount / 10^asset_scale` = human-readable value.
items[].metrics.flags
object
Decoded MPT issuance flag bits.
items[].metrics.flags.require_auth
boolean
Holders must be authorized by the issuer.
items[].metrics.flags.can_lock
boolean
Issuer can lock holder balances.
items[].metrics.flags.can_clawback
boolean
Issuer can claw back tokens.
items[].metrics.last_trade_at
object
Unix-seconds timestamp of the most recent trade across any pair this MPT trades on.
Example
Json
{
  "items": [
    {
      "id": "00000064F0E2A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8",
      "issuance_id": "00000064F0E2A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8",
      "issuer": "rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY",
      "created_at_ledger": 91656571,
      "destroyed_at_ledger": null,
      "burned": false,
      "metadata": {
        "token": {
          "name": "Pepper Treasury Bill",
          "ticker": "PEPPS",
          "desc": "Tokenized short-duration treasuries with daily NAV.",
          "icon": "https://cdn.pepper.fund/icon.png",
          "asset_class": "rwa",
          "asset_subclass": "short-duration-treasury",
          "issuer_name": "Pepper Treasury",
          "urls": [
            {
              "u": "https://pepper.fund",
              "c": "website",
              "t": "Pepper Fund"
            },
            {
              "u": "https://x.com/pepperfund",
              "c": "social",
              "t": "Twitter"
            }
          ],
          "additional_info": {
            "settlement_currency": "USD",
            "daily_rate_pct": "4.85"
          },
          "metadata_uri": "68747470733A2F2F70657070657266756E642F2E77656C6C2D6B6E6F776E2F6D70742D6D657461646174612E6A736F6E",
          "metadata_url": "https://cdn.honeycluster.io/assets/mpt/00000064F0E2A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8/metadata.json"
        },
        "issuer": {
          "address": "rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY",
          "name": "Pepper Treasury",
          "domain": "pepper.fund",
          "kyc": true
        }
      },
      "metrics": {
        "trustlines": null,
        "holders": 142,
        "supply": "5000000.000000",
        "circulating_supply": "5000000.000000",
        "price": "1.0023",
        "market_cap": "5011500.00",
        "fdv": "10023000.00",
        "tvl": null,
        "vesting": null,
        "price_change": {
          "last_5m": {
            "absolute": null,
            "percent": null
          },
          "last_1h": {
            "absolute": null,
            "percent": null
          },
          "last_6h": {
            "absolute": null,
            "percent": null
          },
          "last_24h": {
            "absolute": "0.0034",
            "percent": "0.34",
            "since_inception": false
          },
          "last_7d": {
            "absolute": null,
            "percent": null,
            "since_inception": false
          }
        },
        "volume": {
          "last_5m": {
            "value": null,
            "change_absolute": null,
            "change_percent": null
          },
          "last_1h": {
            "value": null,
            "change_absolute": null,
            "change_percent": null
          },
          "last_6h": {
            "value": null,
            "change_absolute": null,
            "change_percent": null
          },
          "last_24h": {
            "value": "85432.55",
            "change_absolute": null,
            "change_percent": null
          },
          "last_7d": "612900.10",
          "total": null,
          "dominance": {
            "last_24h": null
          }
        },
        "txn": {
          "last_5m": {
            "value": null,
            "change_absolute": null,
            "change_percent": null
          },
          "last_1h": {
            "value": null,
            "change_absolute": null,
            "change_percent": null
          },
          "last_6h": {
            "value": null,
            "change_absolute": null,
            "change_percent": null
          },
          "last_24h": {
            "value": 47,
            "change_absolute": null,
            "change_percent": null
          },
          "last_7d": null
        },
        "takers_24h": 31,
        "takers_7d": 184,
        "buy_sell_24h": {
          "buys": {
            "txns": 28,
            "traders": 19,
            "xrp": "4520.5"
          },
          "sells": {
            "txns": 19,
            "traders": 14,
            "xrp": "3105.2"
          }
        },
        "quality_score": "60",
        "max_supply": "10000000.000000",
        "transfer_fee_bps": 25,
        "asset_scale": 6,
        "flags": {
          "require_auth": false,
          "can_lock": true,
          "can_clawback": true
        },
        "last_trade_at": 1745798300
      }
    }
  ]
}
400
application/json
Invalid input data
FieldTypeDescription
message
string
The error message
code
string
The error code
issues
object[]
An array of issues that were responsible for the error
issues[].message
string
Example
Json
{
  "code": "BAD_REQUEST",
  "message": "Invalid input data",
  "issues": []
}
401
application/json
Authorization not provided
FieldTypeDescription
message
string
The error message
code
string
The error code
issues
object[]
An array of issues that were responsible for the error
issues[].message
string
Example
Json
{
  "code": "UNAUTHORIZED",
  "message": "Authorization not provided",
  "issues": []
}
403
application/json
Insufficient access
FieldTypeDescription
message
string
The error message
code
string
The error code
issues
object[]
An array of issues that were responsible for the error
issues[].message
string
Example
Json
{
  "code": "FORBIDDEN",
  "message": "Insufficient access",
  "issues": []
}
500
application/json
Internal server error
FieldTypeDescription
message
string
The error message
code
string
The error code
issues
object[]
An array of issues that were responsible for the error
issues[].message
string
Example
Json
{
  "code": "INTERNAL_SERVER_ERROR",
  "message": "Internal server error",
  "issues": []
}