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).
OnchainIntegrationDetail):
Managing integrations
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.OnchainIntegrationTransferIngestResponse):
EVM normalization details
Both the integration-ingest path and the directPOST /v1/evidence/onchain path call normalizeEvmTransfer, which:
- Lowercases
txHash,fromAddress,toAddress, andtokenAddressvia hex normalization. - Produces a
FlowLegwithtype: 'onchain_transfer',phase: 'transfer'. - Builds
FlowLegReferences fortx_hash(from the normalizedtxHash) andexternal_reference(fromexternalReference), merged with any explicitreferencesyou pass. - Stamps
metadata.chainFamily: 'evm'always, andmetadata.networkId(from the integrationβs configurednetworkId) for integration-ingest β plus whatever custommetadatayou provide.
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/onchainpath for one-off submissions. - Bridge Integration β Bridge webhooks can also produce
onchain_transferlegs forethereum/polygonrails. - Ingestion Flows β how on-chain evidence flows into the matching engine and
ReconciliationCaseupdates.
