Skip to content
Current State: ALPHA - Use at your own risk / Work in Progress

ERP Integration

Eryxon MES supports two-way data synchronization with external ERP systems like SAP, NetSuite, Odoo, and others.

┌─────────────────┐ ┌─────────────────┐
│ Your ERP │◄───────►│ Eryxon MES │
│ (SAP, etc.) │ │ │
└────────┬────────┘ └────────┬────────┘
│ │
│ REST API / Webhooks │
│ │
▼ ▼
┌─────────────────────────────────────────────┐
│ Sync Layer │
│ • external_id tracking │
│ • Upsert operations │
│ • Change detection (sync_hash) │
│ • Soft delete support │
└─────────────────────────────────────────────┘

Best for: Webhook-driven updates, event-based sync, real-time integration.

MethodEndpointUse Case
PUT/api-{entity}/syncUpsert single record
POST/api-{entity}/bulk-syncBatch upsert (up to 1000)
DELETE/api-{entity}?id={uuid}Hard delete

Best for: Initial data migration, periodic bulk updates, manual imports.

Navigate to Admin → Data Import in the web UI.

ERP ConceptEryxon EntitySync Endpoint
Sales OrderJob/api-jobs/sync
Work Order / Line ItemPart/api-parts/sync
Routing StepOperation/api-operations/sync
Work CenterCell/api-cells/sync
Equipment / ToolingResource/api-resources/sync

Every synced record should include:

{
"external_id": "SO-12345", // Your ERP's unique identifier
"external_source": "SAP", // Source system name
...other fields
}

The combination of (tenant_id, external_source, external_id) forms a unique constraint for upsert operations.

Eryxon automatically generates a SHA-256 hash of the payload for change detection. On subsequent syncs, unchanged records can be skipped.

Timestamp of the last successful sync, useful for incremental updates.

  • CSV Import - Step-by-step CSV import instructions
  • REST API Overview - Endpoints and auth
  • Swagger/OpenAPI - Available in the app at /api-docs

The sync infrastructure adds these columns to core tables:

-- Added to jobs, parts, operations, resources, cells
external_id TEXT, -- ERP identifier
external_source TEXT, -- Source system name
synced_at TIMESTAMPTZ, -- Last sync timestamp
sync_hash TEXT, -- Payload hash for change detection
-- Soft delete support
deleted_at TIMESTAMPTZ, -- NULL = active
deleted_by UUID -- User who deleted
  1. Always include external_id - Required for upsert operations
  2. Sync dependencies first - Sync cells before operations that reference them
  3. Use bulk-sync for batches - More efficient than individual requests
  4. Implement webhooks - Receive real-time updates back to your ERP
  5. Handle errors gracefully - Bulk responses include per-record errors