Choose the NFT
This action requires an NFT Transfer (ERC721) trigger. Select Collection and Token id from the event’s fields; defaults use collection_address and token_id.
NFT Transfer is currently preview-only, so you can test this action on examples but should not expect an automatic NFT alert.
Inspect and use metadata
The action returns the fields below under actions.nft_metadata_1. Use that prefix in templates—for example, {{ actions.nft_metadata_1.collection.symbol }}. If this is the second NFT metadata action on the same path, use nft_metadata_2 instead.
The field names below are the output available in Tailflow. Some values may be null, false, or empty even when the lookup succeeds. Copy paths from the Output panel after a test and check the actual token before relying on an optional value.
{{ actions.nft_metadata_1.name }} transferred
{{ actions.nft_metadata_1.image }}
{{ actions.nft_metadata_1.opensea_url }}Test the selection
Test run resolves metadata and displays the actual output. Check the token image and ID before using its fields. A block batch contains several token IDs; the default single-token selection does not describe the whole batch.
Collection information describes the collection; it does not describe a payment for this particular transfer. Read sale_price, sale_currency, and sale_price_usd from the triggering event for recognized sale information.
NFT identity and links
String means text. Token IDs are returned as strings so large IDs retain every digit. Nullable fields use null when no value is available.
| Field · type | Meaning and availability |
|---|---|
namestring | null | Token name. When it has no name, a collection name plus token ID may be used. |
descriptionstring | null | Token description when available; this can fall back to a collection description. |
collection_namestring | null | Collection name, also available as collection.name. |
token_idstring | The NFT’s token ID, such as "44". |
token_type"ERC721" | "ERC1155" | null | The token standard when known. The action currently requires an ERC721 Transfer trigger; this field does not add an ERC1155 trigger. |
token_uristring | null | Location of the token’s metadata document. This is not necessarily an image URL. |
chain_idnumber | Numeric chain identifier, such as 1 for Ethereum. |
chain_titlestring | Readable chain label, such as "ethereum" or "base". |
opensea_urlstring | null | Link to the NFT on OpenSea where supported. A link does not mean the NFT is listed for sale. |
Images and animation
Use image for the usual message or preview. The other fields let you choose a specific format or size. A URL is a link to media, not an attached file; whether it displays inline depends on the destination.
Not every NFT has every image variant. Check for null before choosing a PNG, thumbnail, or animation. content_type describes the returned image and does not identify the animation format.
| Field · type | Meaning and availability |
|---|---|
imagestring | null | Preferred display image. Usually the same as image_cached; a PNG or original image may be used when that version is unavailable. |
image_cachedstring | null | Alternate hosted copy of the image, when available. Useful when you need this particular display URL. |
image_pngstring | null | PNG version of the image, when available. |
image_thumbnailstring | null | Smaller image intended for compact previews. |
image_originalstring | null | Original image location in a usable URL form where possible. The untouched value can also appear inside metadata.image. |
content_typestring | null | Image media type, such as "image/png" or "image/jpeg". |
animation_urlstring | null | Animation or other rich-media URL, when the NFT provides one. It may not render in a messaging client. |
Traits and the original metadata
attributes is the normalized trait list. metadata is the original token metadata document, not the complete response from a metadata service. Its keys are defined by the collection, so there is no universal list of every field inside it.
Use attributes.0.trait_type and attributes.0.value to read the first trait. Array positions start at zero, and trait order can vary between tokens. Use Transform to find a trait by its name rather than assuming a fixed position.
| Field · type | Meaning and availability |
|---|---|
attributesarray | List of traits. Empty when no recognizable traits are available. |
attributes.<index>.trait_typestring | Name of a trait, such as "Background". |
attributes.<index>.valuestring | number | boolean | null | Trait value. Complex values are represented as text in this normalized list. |
metadataobject | null | Original metadata document. It can include name, description, image, animation_url, external_url, attributes, traits, and collection-specific fields. |
metadata.<key>varies | A custom metadata field. Nested values keep their original structure; URLs here can use forms that a messaging client cannot display directly. |
const traits = input.actions.nft_metadata_1.attributes;
return {
background: traits.find(trait => trait.trait_type === "Background")?.value ?? "Not provided"
};Collection details
collection is an object with the fields below. collection.floor_price is a collection-level estimate, not this token’s value or sale price. The output does not include a currency or timestamp for that number, so do not label it USD or ETH, or present it as a current quote, without separately confirming its units and freshness.
verified and is_spam are flags, not guarantees. False can mean no positive flag was available; it does not establish that a collection was reviewed, unverified, or safe.
| Field · type | Meaning and availability |
|---|---|
collectionobject | Collection identity, presentation fields, marketplace information, and flags. |
collection.addressstring | Collection contract address on the event’s chain. |
collection.namestring | null | Collection name; also returned as collection_name. |
collection.symbolstring | null | Collection’s contract symbol. |
collection.slugstring | null | Collection identifier used in a marketplace URL, when known. |
collection.external_urlstring | null | Collection’s external website, when provided. |
collection.imagestring | null | Collection-level image. This is different from the individual NFT’s image. |
collection.floor_pricenumber | null | Reported collection floor. No currency or observation timestamp is supplied alongside this value. |
collection.verifiedboolean | True when a positive marketplace verification flag is available. |
collection.is_spamboolean | True when the collection has been flagged as spam. |
Example metadata output
This fictional example shows all NFT and collection fields, including optional values. The example.com addresses are placeholders, not real NFT media. The separate diagnostic source field is omitted from this example; it is described below.
{
"image": "https://example.com/nft/44/display.png",
"name": "Example #44",
"description": "An illustrated landscape.",
"collection_name": "Example Collection",
"token_uri": "https://example.com/nft/44/metadata.json",
"metadata": {
"name": "Example #44",
"description": "An illustrated landscape.",
"image": "https://example.com/nft/44/original.png",
"attributes": [
{
"trait_type": "Background",
"value": "Blue"
},
{
"trait_type": "Edition",
"value": 44
}
],
"artist": "Example Artist"
},
"image_cached": "https://example.com/nft/44/display.png",
"image_png": "https://example.com/nft/44/converted.png",
"image_thumbnail": "https://example.com/nft/44/thumbnail.png",
"image_original": "https://example.com/nft/44/original.png",
"content_type": "image/png",
"animation_url": null,
"attributes": [
{
"trait_type": "Background",
"value": "Blue"
},
{
"trait_type": "Edition",
"value": 44
}
],
"token_id": "44",
"token_type": "ERC721",
"collection": {
"address": "0x1111111111111111111111111111111111111111",
"name": "Example Collection",
"symbol": "EXAMPLE",
"slug": "example-collection",
"external_url": "https://example.com",
"image": "https://example.com/collection.png",
"floor_price": null,
"verified": false,
"is_spam": false
},
"chain_id": 1,
"chain_title": "ethereum",
"opensea_url": "https://opensea.io/item/ethereum/0x1111111111111111111111111111111111111111/44"
}Use metadata in a message
Place the message after NFT metadata on the same path. These templates combine the NFT’s display fields with sender and recipient fields from the original transfer. A metadata image link is not an attachment; Post to X still supports text only.
{{ actions.nft_metadata_1.name }} transferred
Collection: {{ actions.nft_metadata_1.collection_name }}
Token: {{ actions.nft_metadata_1.token_id }}
From: {{ event.from_address }}
To: {{ event.to_address }}
{{ actions.nft_metadata_1.image }}
{{ actions.nft_metadata_1.opensea_url }}Optional values and output boundaries
A successful lookup does not guarantee a thumbnail, animation, floor price, or every trait. A missing price is null, not zero. Some NFTs provide only basic identity and media fields.
The action does not return a complete ownership history, rarity ranking, live listing, last-sale record, or every field offered by an external metadata service. Collection-specific extras are accessible only when they are present in metadata.
Use the Output panel after Test run to verify exactly what your NFT provides. Historical metadata or mutable NFT artwork may change; this action’s result is not a guarantee that content stays the same forever.
| Field · type | Meaning and availability |
|---|---|
sourcestring | Diagnostic origin label that may appear in the action output. It is not a property of the NFT and should not be used as NFT content or to infer freshness. |