Skip to main content
On-chain integrations connect ReconLayer to a blockchain indexer or RPC provider so that confirmed transfers β€” stablecoin payouts, on-chain settlements, treasury movements β€” become FlowLegs of type onchain_transfer and are matched against your PaymentIntents.
EVM is currently the only supported networkFamily. normalizeOnchainEvidenceByFamily and normalizeOnchainIntegrationTransferIngestByFamily switch on chainFamily/networkFamily and throw for any value other than 'evm'.

Two ways to bring on-chain evidence in

Both paths converge on the same EVM normalization and the same ingestEvidence pipeline described in Ingestion Flows.

Creating an on-chain integration

string
required
Display name.
string
required
Your indexer/RPC provider name, e.g. "alchemy", "infura", "custom".
string
default:"evm"
Currently must be "evm".
string
required
Network/chain identifier as a string, e.g. "1" (Ethereum) or "137" (Polygon). Stored as networkId and stamped into ingested leg metadata.
string
required
Credential for your indexer/provider. Never returned β€” responses only include hasApiKey: true.
string
Pattern ^[a-z0-9:_-]+$ (case-insensitive). Auto-generated if omitted.
boolean
default:"true"
Whether ReconLayer (or your poller) can call .../ingest with source: "poll".
boolean
default:"false"
Whether .../ingest accepts source: "push" calls (e.g. from a webhook-driven indexer).
string[]
default:"[]"
required
Addresses this integration is responsible for monitoring.
number
Optional starting block height for backfill/sync purposes (0 to 2^53-1).
At least one of pollingEnabled / pushEnabled must be true β€” creating or updating an integration with both false returns 400 invalid_request (β€œEnable polling or push ingestion before saving the on-chain integration.”).
Response (OnchainIntegrationDetail):
See Create an On-chain Integration.

Managing integrations

See List On-chain Integrations, Get On-chain Integration Detail, Update an On-chain Integration, Enable an On-chain Integration, and Disable an On-chain Integration.

Ingesting a transfer

POST /v1/onchain-integrations/{onchainIntegrationId}/ingest is how your poller or push-based indexer hands a discovered transfer to ReconLayer. The integration must be active, and the requested source mode must be enabled on the integration (pollingEnabled for source: "poll", pushEnabled for source: "push").
string
default:"poll"
"poll" or "push" β€” determines which pollingEnabled/pushEnabled flag is checked, and the actor recorded on audit events (system:onchain_integration_poll or system:onchain_integration_push).
string
Transaction hash. Lowercased during normalization.
string
Either sourceRef or txHash is required, for deduplication.
number
Numeric chain ID, e.g. 137 for Polygon.
string
Sender address (lowercased).
string
Recipient address (lowercased).
string
Token contract address (lowercased), if applicable.
string
Matched against PaymentIntent.externalReference.
string
default:"confirmed"
pending, confirmed, failed, reversed, or missing.
object
required
{ "amount": string, "currency": string }.
string
Link directly to a known PaymentIntent.
array
Additional { type, value } FlowLegReference entries, merged with the auto-generated tx_hash/external_reference references.
object
Arbitrary metadata, merged with chainFamily: "evm" and networkId (from the integration).
object
required
The raw transaction/event payload β€” stored verbatim on the RawRecord.
Response (OnchainIntegrationTransferIngestResponse):
See Ingest On-chain Transfer Evidence.

EVM normalization details

Both the integration-ingest path and the direct POST /v1/evidence/onchain path call normalizeEvmTransfer, which:
  • Lowercases txHash, fromAddress, toAddress, and tokenAddress via hex normalization.
  • Produces a FlowLeg with type: 'onchain_transfer', phase: 'transfer'.
  • Builds FlowLegReferences for tx_hash (from the normalized txHash) and external_reference (from externalReference), merged with any explicit references you pass.
  • Stamps metadata.chainFamily: 'evm' always, and metadata.networkId (from the integration’s configured networkId) for integration-ingest β€” plus whatever custom metadata you provide.
The resulting RawRecord has source: 'api', sourceType: 'onchain_report', normalizedType: 'flow_leg', and normalizedId set to the normalized txHash (falling back to sourceRef if no txHash is present).

Next steps

  • Inbound Webhooks β€” the direct POST /v1/evidence/onchain path for one-off submissions.
  • Bridge Integration β€” Bridge webhooks can also produce onchain_transfer legs for ethereum/polygon rails.
  • Ingestion Flows β€” how on-chain evidence flows into the matching engine and ReconciliationCase updates.