Server-verifiable on-chain burn, symmetric with /settlements: HMAC-signed body, single-use actionId (idempotent), bound to an action-authorization debit limit, with an optional signed `reason` slug (the grouping key) and free-form `metadata`. Verifies the supplied `txHash` is an ERC-20 transfer of exactly `amount` Project Tokens from a linked wallet to the signed `burnAddress` sink, and records it. A transfer to the dead address (0x...dead) is a real supply burn; any other sink is the app-chosen destination. `txHash` is required - burns are on-chain only.
Server-verifiable on-chain burn, symmetric with /settlements: HMAC-signed body, single-use actionId (idempotent), bound to an action-authorization debit limit, with an optional signed reason slug (the grouping key) and free-form metadata. Verifies the supplied txHash is an ERC-20 transfer of exactly amount Project Tokens from a linked wallet to the signed burnAddress sink, and records it. A transfer to the dead address (0x...dead) is a real supply burn; any other sink is the app-chosen destination. txHash is required - burns are on-chain only.
Unix timestamp in seconds when the request was created
Range1 <= value
reason?string
Optional stable lowercase slug (a-z, 0-9, _) Forest groups and aggregates burns by (e.g. "activation_fee"). Signed as part of the body, so it cannot be client-forged.
Match^[a-z0-9_]{1,64}$
metadata?
Optional free-form developer context, signed as part of the body and stored/echoed as-is (not Forest-interpreted). Capped at 4 KB serialized.
txHash*string
Hash of the on-chain ERC-20 transfer of amount Project Tokens from the player wallet to the signed burnAddress sink. The transfer is verified (recipient = burnAddress, sender = a linked wallet, token = project token, value = amount exactly) and recorded. A transfer to the dead address (0x…dead) is a real supply burn; any other sink is the app-chosen destination. Required: burns are on-chain only.
burnAddress*string
Burn destination address the transfer must have been sent to (e.g. the dead address 0x…dead). Signed as part of the body (so it cannot be client-forged). Required — the dev backend is the single source of truth for the destination, which lets it change without an API release.