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
| Path | When to use it |
|---|---|
On-chain integration (POST /v1/onchain-integrations + .../ingest) | You run (or operate) an indexer that watches specific addresses on a specific network, and want ReconLayer to track sync state (lastTransferSyncedAt) per integration. |
Direct evidence submission (POST /v1/evidence/onchain) | A one-off or ad-hoc submission β e.g. from your own backend after observing a transaction β without registering a persistent integration. See Inbound Webhooks. |
ingestEvidence pipeline described in Ingestion Flows.
Creating an on-chain integration
Display name.
Your indexer/RPC provider name, e.g.
"alchemy", "infura", "custom".Currently must be
"evm".Network/chain identifier as a string, e.g.
"1" (Ethereum) or "137" (Polygon). Stored as networkId and stamped into ingested leg metadata.Credential for your indexer/provider. Never returned β responses only include
hasApiKey: true.Pattern
^[a-z0-9:_-]+$ (case-insensitive). Auto-generated if omitted.Whether ReconLayer (or your poller) can call
.../ingest with source: "poll".Whether
.../ingest accepts source: "push" calls (e.g. from a webhook-driven indexer).Addresses this integration is responsible for monitoring.
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").
"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).Transaction hash. Lowercased during normalization.
Either
sourceRef or txHash is required, for deduplication.Numeric chain ID, e.g.
137 for Polygon.Sender address (lowercased).
Recipient address (lowercased).
Token contract address (lowercased), if applicable.
Matched against
PaymentIntent.externalReference.pending, confirmed, failed, reversed, or missing.{ "amount": string, "currency": string }.Link directly to a known
PaymentIntent.Additional
{ type, value } FlowLegReference entries, merged with the auto-generated tx_hash/external_reference references.Arbitrary metadata, merged with
chainFamily: "evm" and networkId (from the integration).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.
