Skip to main content
Event Types

NFT Events

XRNotify tracks the full lifecycle of Non-Fungible Tokens on the XRPL. Five event types cover every stage — from minting to burning, and the entire offer marketplace. Use nft.* to subscribe to all of them with a single wildcard.

nft.mintednft.burnednft.offer_creatednft.offer_acceptednft.offer_cancelled

nft.minted

NFTokenMint

Fires when an NFTokenMint transaction is validated. This includes mints by the token owner as well as authorized mints where an issuer delegates minting to another account.

Payload schema

FieldTypeDescription
nft_idstringUnique 64-character hex identifier for this NFT on the ledger
issuerstringAccount address of the NFT issuer
ownerstringCurrent owner of the NFT (may differ from issuer on authorized mints)
uristring | nullHex-encoded metadata URI as stored on-chain
uri_decodedstring | nullHuman-readable decoded URI (e.g. ipfs://...), null if not set
flagsnumberBitmask of NFToken flags (transferable, burnable, etc.)
taxonnumberCollection identifier chosen by the issuer
transfer_feenumberRoyalty fee in basis points (0–50000, i.e. 0%–50%)
sequencenumberSequence number embedded in the NFT ID
ledger_indexnumberLedger in which the mint was validated
tx_hashstringTransaction hash of the mint transaction

Example payload

{
  "event_id": "xrpl:89550100:D1E2F3A4B5C6:nft.minted",
  "event_type": "nft.minted",
  "ledger_index": 89550100,
  "timestamp": "2024-01-15T11:00:00Z",
  "network": "mainnet",
  "payload": {
    "nft_id": "000813882AF7E9CF50D5B231EF2C804F1EB3E26EA2D18AB4000000000000001E",
    "issuer": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe",
    "owner": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe",
    "uri": "697066733A2F2F516D61626364656667",
    "uri_decoded": "ipfs://Qmabcdefghijklmnopqrstuvwxyz1234",
    "flags": 8,
    "taxon": 1000,
    "transfer_fee": 500,
    "sequence": 30,
    "ledger_index": 89550100,
    "tx_hash": "D1E2F3A4B5C6D1E2F3A4B5C6D1E2F3A4B5C6D1E2F3A4B5C6D1E2F3A4B5C6D1E2"
  }
}

nft.burned

NFTokenBurn

Fires when an NFTokenBurn transaction permanently destroys an NFT. After burning, the NFT ID is invalid and cannot be reused.

Payload schema

FieldTypeDescription
nft_idstringNFT identifier that was burned
ownerstringAccount address that held and burned the NFT
ledger_indexnumberLedger in which the burn was validated
tx_hashstringTransaction hash of the burn transaction

nft.offer_created

NFTokenCreateOffer

Fires when an NFTokenCreateOffer transaction creates either a sell offer (owner offering to sell) or a buy offer (buyer offering to purchase). Both types generate the same event.

Payload schema

FieldTypeDescription
offer_idstringUnique ledger object ID for this offer
nft_idstringNFT this offer is for
ownerstringAccount address that created the offer
destinationstring | nullIf set, only this account can accept the offer (private offer)
amountstring | objectPrice — a drops string for XRP, or {currency, value, issuer} for issued tokens
is_sell_offerbooleanTrue if the offer owner is selling; false if they are buying
expirationstring | nullISO 8601 timestamp after which the offer expires, or null for no expiry
ledger_indexnumberLedger in which the offer was created
tx_hashstringTransaction hash

nft.offer_accepted

NFTokenAcceptOffer

Fires when an NFTokenAcceptOffer transaction completes a sale. This is the definitive "NFT sold" event — ownership has transferred and payment has settled.

Payload schema

FieldTypeDescription
offer_idstringID of the offer that was accepted
nft_idstringNFT that changed hands
buyerstringAccount address of the new NFT owner
sellerstringAccount address of the previous NFT owner
pricestring | objectSale price — drops string for XRP or {currency, value, issuer} for tokens
brokerstring | nullBroker account address if a third-party facilitated the sale, otherwise null
ledger_indexnumberLedger in which the acceptance was validated
tx_hashstringTransaction hash

Example payload

{
  "event_id": "xrpl:89552000:F4A3B2C1D0E9:nft.offer_accepted",
  "event_type": "nft.offer_accepted",
  "ledger_index": 89552000,
  "timestamp": "2024-01-15T12:15:30Z",
  "network": "mainnet",
  "payload": {
    "offer_id": "B2C3D4E5F6A7B2C3D4E5F6A7B2C3D4E5F6A7B2C3D4E5F6A7B2C3D4E5F6A7B2C3",
    "nft_id": "000813882AF7E9CF50D5B231EF2C804F1EB3E26EA2D18AB4000000000000001E",
    "buyer": "rN7n3473SaZBCG4dFL83w7PB2bBdDiAkzN",
    "seller": "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe",
    "price": "50000000",
    "broker": null,
    "ledger_index": 89552000,
    "tx_hash": "F4A3B2C1D0E9F4A3B2C1D0E9F4A3B2C1D0E9F4A3B2C1D0E9F4A3B2C1D0E9F4A3"
  }
}

nft.offer_cancelled

NFTokenCancelOffer

Fires when one or more NFT offers are cancelled via NFTokenCancelOffer. A single transaction can cancel multiple offers at once — the offer_id field is an array to accommodate this.

Payload schema

FieldTypeDescription
offer_idstring[]Array of cancelled offer IDs — may contain one or more entries
nft_idstringNFT the cancelled offer(s) were for
accountstringAccount that submitted the cancellation
ledger_indexnumberLedger in which the cancellation was validated
tx_hashstringTransaction hash

Related event types