Skip to main content

Content Intake

Medusa has two content intake systems that share the ContentIntake model as their entry point. Each ContentIntake record has a type enum — either onix or import — which determines which processing pipeline handles its data. Both systems ultimately send content to Farfalla for ingestion.

The ONIX Intake system receives content from distribution partners via SFTP/S3 using the industry-standard ONIX XML format. The Content Import system provides a browser-based dashboard where tenants upload spreadsheets and content files directly. Despite their different input methods, they share infrastructure, status patterns, and the same goal: getting content into Farfalla.

System Comparison

AspectONIX IntakeContent Import
SourceSFTP/S3 from distribution partnersBrowser upload by tenant admins
Content formatONIX XML standardSpreadsheets (XLSX/XLS/CSV) + files
File deliveryPartners push to monitored locationsAdmins upload via presigned S3 URLs
Processing modelEvent-driven (file detected → parse → process)User-initiated (upload → validate → batch)
API endpointInternal-only Farfalla endpointsPublic /api/v3/content/bulk
Update trackingYes — detects inserts vs updatesNo — always creates new records
Automation levelFully automated (continuous monitoring)Manual (user triggers each import)
DashboardNova admin interfaceLivewire tenant-facing dashboard
Error granularityOnixIssue with multiple ignore reasonsImportRecord with ignore_reason enum
Multi-tenant publishingCan publish to multiple tenants / marketplaceSingle tenant per import

Model Equivalences

ONIX IntakeContent ImportRole
OnixFileImportTop-level processing unit (file or session)
OnixEventImportRecordIndividual content item to process (processing log)
OnixIssueImportProductUnique product entity, one per external_id per team
(N/A)ImportFileUploaded content file tracking (Import only)

Shared Status Lifecycle

Both systems use the same status progression for their processing units:

draft → discovered → on-queue → done
↘ failed
  • draft: Initial state — files being uploaded or metadata being prepared (Content Import only)
  • discovered: Record parsed and ready for processing
  • on-queue: Dispatched to the queue for API submission
  • done: Successfully ingested by Farfalla
  • failed: Processing failed (with categorized error reason)

The ImportStatus enum uses these values directly. The ONIX system uses equivalent status constants on its models. ONIX skips draft since file discovery is automated.

Shared Infrastructure

ComponentHow It's Shared
ContentIntake modelBoth systems create records with their respective type value
S3 bucketSame intake-s3 disk; different key prefixes per system
Farfalla API credentialsStored on ContentIntake and used by both processing pipelines
Cache-based retryBoth use Laravel Cache for tracking retry attempts on server errors
Loggable traitBoth Import and ONIX models use the same logging trait for traceability
Team scopingBoth filter all queries by team_id for multi-tenant isolation

Further Reading

X

Graph View