Docs/Objects/Action objects

Action objects

The exact signed issuance and redemption payloads brands create before submission.

SignedOperation#

FieldTypeRequiredMeaning
idstringyesCursor ID and operation identifier.
kindissuance | redemptionyesWhich contract function this action targets.
statuspending | submitted | mined | rejected | cancelledyesWire status. The UI labels pending as Created and mined as Completed.
verifyingContractaddressyesFactory address to submit.
issueraddressyesBrand signer.
holderaddressyesRecipient for issuance or holder for redemption.
deadlineuint256 stringyesExecution deadline copied into the contract call. 0 means no deadline.
metadataMetadata | nullyesPresent on issuance operations, null on redemptions.
signaturehex bytesyesBrand signature for the exact action fields.
relayTxHashbytes32 | nullyesSet after a relayer submits the transaction.
SignedOperationjson
{
  "id": "128",
  "kind": "issuance",
  "status": "pending",
  "chainId": "8453",
  "verifyingContract": "0x3333333333333333333333333333333333333333",
  "issuer": "0x1111111111111111111111111111111111111111",
  "holder": "0x2222222222222222222222222222222222222222",
  "loyaltyId": "0x4242424242424242424242424242424242424242424242424242424242424242",
  "amount": "1000",
  "expiresAt": "0",
  "deadline": "0",
  "nonce": "0x7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a",
  "operationHash": "0x9999999999999999999999999999999999999999999999999999999999999999",
  "signature": "0xababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab",
  "data": "0x",
  "metadata": {
    "loyaltyId": "0x4242424242424242424242424242424242424242424242424242424242424242",
    "name": "Bloom Coffee Rewards",
    "symbol": "BLOOM",
    "media": "ipfs://bafy.../bloom.png",
    "description": "Rewards for Bloom Coffee customers.",
    "contractURI": "",
    "tokenURI": ""
  },
  "relayTxHash": null,
  "createdAt": "2026-06-20T10:15:00.000Z"
}

IssuanceAction#

FieldTypeRequiredMeaning
issueraddressyesBrand wallet that signs the action.
toaddressyesCustomer wallet receiving the tokenized loyalty balance.
loyaltyIdbytes32yesBrand-scoped program ID.
amountuint256 stringyesAmount of offchain loyalty value to tokenize. Must be greater than zero.
expiresAtuint256 stringyesUse 0 for no expiry, or a Unix timestamp for an expiring bucket.
deadlineuint256 stringyesLast Unix timestamp when the issuance can be submitted. Use 0 for no execution deadline.
noncebytes32yesUnique per issuer. Replays are rejected.
chainIduint256 stringyesExpected chain ID. Production uses Base mainnet 8453; non-production uses Base Sepolia 84532.
verifyingContractaddressyesThe Loyfin factory that will execute the action.
operationHashbytes32optionalBrand reference hash for correlating this action with an internal database row. Defaults to zero bytes when omitted.
metadataMetadatayesProgram metadata. Required for issuance because the first issuance can create the program.
datahex bytesoptionalBrand-defined data. Defaults to 0x. Max 2048 bytes.

RedemptionAction#

FieldTypeRequiredMeaning
issueraddressyesBrand wallet that signs the redemption.
fromaddressyesCustomer wallet whose tokenized loyalty balance is redeemed.
loyaltyIdbytes32yesBrand-scoped program ID.
amountuint256 stringyesTokenized loyalty amount to redeem. Must be greater than zero.
expiresAtuint256 stringyesThe exact bucket to redeem. Use 0 for non-expiring rewards.
deadlineuint256 stringyesLast Unix timestamp when the redemption can be submitted. Use 0 for no execution deadline.
noncebytes32yesUnique per issuer. Replays are rejected.
chainIduint256 stringyesExpected chain ID. Production uses Base mainnet 8453; non-production uses Base Sepolia 84532.
verifyingContractaddressyesThe Loyfin factory that will execute the action.
operationHashbytes32optionalBrand reference hash for correlating this action with an internal database row. Defaults to zero bytes when omitted.
datahex bytesoptionalBrand-defined fulfillment data. Defaults to 0x. Max 2048 bytes.

Metadata#

FieldTypeRequiredMeaning
loyaltyIdbytes32yesMust match the action loyaltyId.
namestringyesCustomer-facing program name. Max 96 UTF-8 bytes.
symbolstringyesShort program ticker or label. Max 24 UTF-8 bytes.
mediastringyesDefault artwork URL. Max 512 UTF-8 bytes.
descriptionstringoptionalProgram description. Empty string is allowed. Max 1024 UTF-8 bytes.
contractURIstringoptionalCollection-level metadata override. Empty string uses generated metadata. Max 512 UTF-8 bytes.
tokenURIstringoptionalToken metadata override. Empty string uses generated metadata. Max 512 UTF-8 bytes.