Overview
Every Streams webhook delivers a JSON payload containing the on-chain events that match your stream configuration. A single payload may include:- Native transactions
- Internal transactions
- ERC-20 transfers and approvals
- NFT transfers and approvals
- Smart contract event logs
Top-Level Payload Structure
All webhook payloads share the same top-level fields:Key Fields
| Field | Description |
|---|---|
confirmed | Whether the block is finalized |
chainId | Chain the event occurred on |
streamId | Unique stream identifier |
tag | Optional stream tag |
retries | Number of delivery attempts |
block | Block metadata |
logs | Raw smart contract logs |
txs | Native transactions |
txsInternal | Internal (contract) transactions |
Confirmed vs Unconfirmed Events
Streams sends two webhook payloads per event:- Unconfirmed (
confirmed: false)
Sent as soon as the block is mined. - Confirmed (
confirmed: true)
Sent once finality is reached.
- React instantly to on-chain activity
- Safely update state once finality is guaranteed
For chain-specific confirmation rules, see Supported Chains.For how reorgs are handled, see Re-org Handling.
Verifying Webhook Authenticity
Every webhook includes anx-signature header.
You must verify this signature to ensure the payload originated from Moralis.
Signature verification is covered in detail here:
Basic flow:
- Read the raw request body
- Hash it together with your Streams secret
- Compare against
x-signature
Native Transactions (txs)
Included when includeNativeTxs is enabled.
Native transactions include:
- Sender and recipient
- Value transferred
- Gas usage and receipt fields
- Wallet balance tracking
- Payment monitoring
- Base-layer activity analysis
Contract Logs (logs)
Included when includeContractLogs is enabled.
Logs contain:
- Raw topics and data
- Emitting contract address
- Transaction hash and log index
ERC-20 Transfers
ERC-20 transfers are automatically decoded from logs and included at no additional cost. Each transfer includes:from,to,value- Token metadata (
name,symbol,decimals) - Human-readable
valueWithDecimals
ERC-20 Approvals
ERC-20 approvals are also automatically decoded and include:- Owner and spender
- Approved amount
- Token metadata
NFT Transfers
NFT transfers are automatically decoded for both ERC-721 and ERC-1155 tokens. Each NFT transfer includes:tokenName: the name of the NFTtokenSymbol: the symbol of the NFT (only for ERC721)tokenContractType: the type of the NFT (either ERC721 or ERC1155)to: the receiver address of the NFT transferfrom: the sender address of the NFT transferamount: the amount of NFT transferred in the transaction (1for ERC721)transactionHash: the transaction hash of the NFT transfer on the blockchaintokenId: the token ID of the NFT transferredoperator: a third party address that has been approved to manage NFTs owned byfromaddress. You can read more about operator in the EIP1155 standard.contract: the contract address of the NFT transferred
NFT Approvals
Approval events for ERC-721 and ERC-1155 tokens are grouped undernftApprovals and decoded automatically.
Smart Contract Events Only
If you configure a stream to listen only to specific contract events:- Only
logswill be populated - ABI decoding is applied using the ABI you provide
- No token or transaction arrays are included unless explicitly enabled
Internal Transactions (txsInternal)
Internal transactions represent value transfers occurring inside contract execution.
Included when includeInternalTxs is enabled.
Useful for:
- DeFi protocol tracing
- Understanding internal fund movement
- Advanced analytics
Retry Metadata
If a webhook delivery fails:retriesincrements- The event is retried automatically
- Failed deliveries are retained for replay (plan-dependent)
Common Next Steps
Depending on what you’re building:- Need cleaner decoded data? Explore Parsed Data
- Need fine-grained filtering? Explore Filters
- Need on-chain lookups inside webhooks? Explore Triggers
- Handling high throughput? Explore Rate Limits

