Skip to content

Architecture Overview

EZY Integrations connects source systems (such as an ERP or e-commerce store) to target systems (such as EZY Portal or a flat file) by routing data through a shared, neutral format called the canonical entity. This design means you can add a new source or target connector without rewriting every existing mapping — all connectors speak the same intermediate language.

Every integration is configured as a job that links a source connection profile to a target connection profile using one or more mapping configurations. When a job runs, data travels through five pipeline stages: ingest, normalize, transform, execute, and finalize.

flowchart LR
    A[Source System] -->|Extractor reads data| B[Raw Records]
    B -->|Normalizer converts| C[Canonical Entity]
    C -->|Transformer shapes| D[Target Payload]
    D -->|Connector writes| E[Target System]
    E -. optional writeback .-> A

The canonical entity is the pivot point of this design. It is a neutral record format that every connector understands. The source connector extracts raw data and converts it to a canonical entity; the target connector reads that canonical entity and produces the payload the target system expects. No source talks directly to any target.

Each record passes through five stages in order. If a stage fails, the record is retried automatically. After all retries are exhausted, the record moves to the Dead Letter Queue for manual review.

StageWhat happens
IngestThe job reads records from the source system using the connection profile credentials and the extraction rules in the mapping config.
NormalizeRaw source data is converted into a canonical entity. This stage applies type coercions and required-field validation.
TransformThe canonical entity is shaped into the exact payload the target system expects, applying field mappings, value transformers, and static fields from the mapping config.
ExecuteThe transformed payload is sent to the target system. The connector handles create-vs-update reconciliation.
FinalizeThe run outcome is recorded. Sync cursors are updated so the next run picks up only new or changed records.

See Pipeline Stages for a full breakdown of each stage and what to do when a stage fails.

Most source connectors support incremental sync: instead of re-reading every record on each run, the system tracks a cursor — typically a last-modified timestamp — and only fetches records that changed since the previous run. The cursor value is saved at the end of each successful finalization stage and read at the start of the next ingest stage.

The cursor column is configured in the extraction block of your mapping configuration. See Mapping Configuration for details.

Building blockWhat it is
Connection profileSaved credentials for one system (source or target).
Mapping configurationJSON document that controls extraction, normalization, and transformation rules for one entity type.
Job (instance)Links a source profile to a target profile and holds one or more mapping configurations.
RunOne execution of a job — produces a result of success, partial success, or failure.
Entity typeThe kind of record being moved: item, business partner, order, and so on.
Canonical entityThe neutral intermediate format all connectors share.
Dead Letter QueueHolds records that failed all automatic retries, ready for manual replay.
  • Pipeline Stages — Detailed breakdown of each stage, failure behavior, and retry logic.
  • Entity Types — Full list of supported entity types and which connectors handle them.
  • Mapping Configuration — How to author the JSON document that controls extraction, normalization, and transformation.