Imports

Imports allow you to load large volumes of products into your catalog from CSV, Excel, JSON, or XML files. Jobs are processed asynchronously — poll the status endpoint or use a webhook to know when they complete.


POST/imports/jobs

Create an import

Starts a new import job. Upload a file via multipart/form-data.

Body parameters (multipart/form-data)

  • Name
    file
    Type
    file
    Description

    The import file. Accepted formats: .csv, .xlsx, .json, .xml.

  • Name
    supplier_code
    Type
    string
    Description

    Supplier code to associate with all imported products.

  • Name
    dry_run
    Type
    boolean
    Description

    Validate the file without persisting any changes (default: false).

Supported formats

FormatExtensionNotes
CSV.csvDelimiter ,, encoding UTF-8
Excel.xlsxFirst sheet is used
JSON.jsonArray of objects
XML.xmlFlat structure

Request

POST
/imports/jobs
curl -X POST https://api.pixeepim.com/api/v1/imports/jobs \
  -H "Authorization: Bearer {api_key}" \
  -F "file=@catalog.csv" \
  -F "supplier_code=SUPPLIER_A"

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "analyzing",
  "file_name": "catalog.csv",
  "file_type": "csv"
}

GET/imports/jobs/{id}

Get import status

Returns the current status and progress of an import job.

Path parameters

  • Name
    id
    Type
    string
    Description

    The import job UUID.

Import statuses

StatusDescription
pendingQueued, not yet started
analyzingFile is being parsed and validated
readyDry-run complete, awaiting confirmation
processingCurrently importing rows
completedFinished successfully
failedAborted due to a critical error
cancelledCancelled by the user

Request

GET
/imports/jobs/{id}
curl https://api.pixeepim.com/api/v1/imports/jobs/550e8400-e29b-41d4-a716-446655440000 \
  -H "Authorization: Bearer {api_key}"

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "file_name": "catalog.csv",
  "file_type": "csv",
  "file_size": 1024000,
  "status": "completed",
  "total_rows": 1250,
  "successful_rows": 1245,
  "failed_rows": 5,
  "products_created": 980,
  "products_updated": 265,
  "started_at": "2026-03-15T09:00:00Z",
  "completed_at": "2026-03-15T09:02:34Z",
  "error_summary": "5 rows failed EAN validation"
}

POST/imports/jobs/{id}/cancel

Control a job

You can pause, resume, or cancel a running import job.

EndpointEffect
POST /imports/jobs/{id}/pausePause a running job
POST /imports/jobs/{id}/resumeResume a paused job
POST /imports/jobs/{id}/cancelCancel and discard the job

Request

POST
/imports/jobs/{id}/cancel
curl -X POST https://api.pixeepim.com/api/v1/imports/jobs/550e8400-e29b-41d4-a716-446655440000/cancel \
  -H "Authorization: Bearer {api_key}"

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "cancelled"
}

GET/imports/jobs/{id}/logs

Get import logs

Returns per-row logs for a job, including validation errors and warnings.

Query parameters

  • Name
    level
    Type
    string
    Description

    Filter by severity: error, warning, or info.

  • Name
    skip
    Type
    integer
    Description

    Offset (default: 0).

  • Name
    limit
    Type
    integer
    Description

    Items per page, max 200 (default: 50).

Request

GET
/imports/jobs/{id}/logs
curl "https://api.pixeepim.com/api/v1/imports/jobs/550e8400-e29b-41d4-a716-446655440000/logs?level=error" \
  -H "Authorization: Bearer {api_key}"

Response

{
  "items": [
    {
      "row_number": 42,
      "level": "error",
      "field": "ean",
      "message": "EAN format invalid (expected 13 digits)",
      "value": "123ABC7890",
      "timestamp": "2026-03-15T09:01:30Z"
    }
  ],
  "meta": {
    "total": 5,
    "page": 1,
    "per_page": 50,
    "total_pages": 1,
    "has_next": false,
    "has_previous": false
  }
}

GET/imports/jobs/{id}/preview

Preview import

Returns a sample of parsed rows before the import is committed. Useful to verify column mapping.

Query parameters

  • Name
    limit
    Type
    integer
    Description

    Number of preview rows (default: 10).

Request

GET
/imports/jobs/{id}/preview
curl "https://api.pixeepim.com/api/v1/imports/jobs/550e8400-e29b-41d4-a716-446655440000/preview?limit=5" \
  -H "Authorization: Bearer {api_key}"

Response

{
  "total_rows": 1250,
  "preview": [
    {
      "ean": "3760000000001",
      "name": "Produit exemple",
      "price": 29.99
    }
  ],
  "validation_errors": []
}

POST/imports/automations

Automated imports

Create a recurring import that pulls files from a remote source on a schedule.

Body parameters

  • Name
    name
    Type
    string
    Description

    Descriptive name for the automation.

  • Name
    supplier_code
    Type
    string
    Description

    Supplier code to associate with imported products.

  • Name
    schedule
    Type
    string
    Description

    Cron expression (e.g. 0 2 * * * for daily at 2 AM).

  • Name
    file_source
    Type
    object
    Description

    Source configuration. Supported types: sftp, ftp, http.

  • Name
    mapping
    Type
    object
    Description

    Column mapping: file column → product field.

  • Name
    is_active
    Type
    boolean
    Description

    Enable the schedule immediately (default: true).

Request

POST
/imports/automations
curl -X POST https://api.pixeepim.com/api/v1/imports/automations \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Daily Supplier A Import",
    "supplier_code": "SUPPLIER_A",
    "schedule": "0 2 * * *",
    "file_source": {
      "type": "sftp",
      "host": "sftp.supplier.com",
      "username": "user",
      "path": "/exports/products.csv"
    },
    "mapping": {
      "EAN": "ean",
      "Titre": "name",
      "Prix HT": "price"
    }
  }'

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440001",
  "name": "Daily Supplier A Import",
  "schedule": "0 2 * * *",
  "is_active": true,
  "created_at": "2026-03-15T09:00:00Z"
}

Was this page helpful?