Guides

Create Transaction with Metadata (CIP-20)#

Overview#

Sometimes you want to attach a message, comment, or memo to a Cardano transaction—whether it's a receipt reference, a note for future auditing, or just user-friendly text. CIP-20 standardizes how these messages appear on-chain by using label 674 in transaction metadata. With the Anvil API, you can easily attach messages to your transactions with minimal configuration.

The Anvil API lets you supply a simple message or array of messages. Under the hood, Anvil auto-formats them for CIP-20 compliance:

  • Single string → ["Your message"]
  • Array of strings → ["Line 1", "Line 2"]
  • Long string → Automatically split across multiple array entries if it exceeds 64 bytes

For more information on transactions, please refer to the Transaction Overview.

Key Features#

  • Simple message attachment to transactions
  • Automatic CIP-20 compliance formatting
  • Support for single strings or arrays of strings
  • Automatic handling of messages exceeding 64 bytes

Requirements#

  • A Cardano wallet with sufficient ADA
  • Valid API key for authentication

Full Examples#

Using Bash and cURL#

Bash & cURLUsing Bash & cURL to create a transaction with CIP-20 metadata

Using TS/JS Fetch#

Deno & FetchUsing Deno (or Node) & fetch to create a transaction with CIP-20 metadata


Specifications#

API Endpoint#

POST /transactions/build

Request Structure#

{
  "changeAddress": "<sender_address>",
  "message": "Your message" // String or array of strings
}

CIP-20 Formatting#

The Anvil API automatically formats your messages for CIP-20 compliance:

  • Single string → ["Your message"]
  • Array of strings → ["Line 1", "Line 2"]
  • Long string → Automatically split across multiple array entries if it exceeds 64 bytes

Best Practices#

  • Keep messages concise and relevant
  • Consider privacy implications of on-chain messages
  • Test transactions on testnet before moving to mainnet
  • Remember that all on-chain metadata is publicly visible
  • Keep your API key secure and never expose it in client-side code