Skip to main content
Use POST /api/v1/products/bulk-import to queue a CSV bulk product import for your organization. The API accepts either a CSV file upload (multipart/form-data) or a JSON payload with inline csvText / documentId. It returns a bulk_... job ID that you poll with GET /api/v1/jobs/{jobId}. Interactive reference: API docs

Authentication

Send an OmniCommerce API key or OAuth client token with the catalog:write scope:
API keys and OAuth tokens are bound to a single organization, so you do not need to send organizationId in the request body or multipart form fields. Session-authenticated requests (browser cookie) must include organizationId in the request body or multipart form fields.

1. Upload a CSV file

CSV uploads must be .csv files up to 2MB.

2. Or send JSON programmatically

For session-authenticated calls, add "organizationId": "org_1" to the JSON body or multipart form. You can also pass documentId instead of csvText when the CSV is already stored in the organization’s document library.

Accepted response

3. Poll job status

The data payload includes row counts (pending, enriching, applied, failed, skipped), progress fields, and the underlying import status.

4. Cancel an in-flight import (optional)

Rows already applied remain in the catalog. Remaining queued rows are skipped.

Multipart form fields

Job ID format

Developer bulk imports return IDs with the bulk_ prefix, for example bulk_7f4f5f0d-2f0a-4f0a-9a2f-8d2f0a7f4f5f. Use the same job polling and cancellation endpoints as single-product prod_... jobs and Look look_... jobs.

Errors

  • 400 - invalid JSON, missing CSV source, invalid field mapping, or CSV validation failure
  • 401 - missing or invalid Bearer token
  • 403 - token missing catalog:write or wrong organization
  • 413 - multipart body or CSV file too large