Exports

Exports let you download your catalog (or a filtered subset) in multiple formats, or push products to a remote platform such as FTP, SFTP, S3, or MinIO.


POST/exports/csv/products

Export to CSV, Excel, JSON, or ZIP

Starts a background export of products or suppliers in the given format. Each combination is its own endpoint:

EndpointContent
POST /exports/csv/productsProducts, CSV
POST /exports/csv/suppliersSuppliers, CSV
POST /exports/excel/productsProducts, Excel (.xlsx, multi-sheet)
POST /exports/excel/suppliersSuppliers, Excel
POST /exports/json/productsProducts, JSON
POST /exports/json/suppliersSuppliers, JSON
POST /exports/zip/productsProducts, ZIP of CSV chunks (for very large catalogs)

Body parameters

  • Name
    filters
    Type
    object
    Description

    Optional filters, e.g. {"is_active": true, "supplier_id": "uuid"}.

  • Name
    include_fields
    Type
    array
    Description
    List of fields to include. Exports all fields if omitted.
  • Name
    exclude_fields
    Type
    array
    Description
    Fields to exclude from the output.
  • Name
    language
    Type
    string
    Description

    ISO 639-1 code of an enabled language (2 lowercase letters). Text fields (title, description…) are resolved in that language; if omitted, the pivot language is used and logged. This is a boutique export: a missing variant silently falls back to the pivot rather than leaving the cell empty.

  • Name
    utf8_bom
    Type
    boolean
    Description
    CSV only. Prepend a UTF-8 BOM for Excel compatibility (default: true).
  • Name
    include_sheets
    Type
    array
    Description
    Excel only. Sheets to include: products, suppliers, categories (default: ["products"]).
  • Name
    formatting
    Type
    boolean
    Description
    Excel only. Apply header formatting and column auto-width (default: true).
  • Name
    include_relations
    Type
    boolean
    Description
    JSON only. Include nested relationships (default: false).
  • Name
    pretty
    Type
    boolean
    Description
    JSON only. Pretty-print the output (default: true).
  • Name
    json_lines
    Type
    boolean
    Description
    JSON only. Output NDJSON, one object per line (default: false).
  • Name
    max_rows_per_file
    Type
    integer
    Description
    ZIP only. Maximum rows per CSV file inside the archive (default: 30000).

Request

POST
/exports/csv/products
curl -X POST https://api.pixeepim.com/api/v1/exports/csv/products \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": {"is_active": true},
    "include_fields": ["ean", "name", "price", "cost_price"],
    "language": "en"
  }'

Response

{
  "task_id": "3f9c9a1e-8b2d-4a55-9e11-2b6a7c0f9d10",
  "status": "pending",
  "message": "CSV export started",
  "check_progress_url": "/exports/progress/3f9c9a1e-8b2d-4a55-9e11-2b6a7c0f9d10"
}

GET/exports/progress/{task_id}

Track and download a format export

Poll progress, then download the file once the task succeeds.

Path parameters

  • Name
    task_id
    Type
    string
    Description
    The Celery task ID returned by a format export request.

Progress response fields

  • Name
    state
    Type
    string
    Description
    PENDING, PROGRESS, SUCCESS, or FAILURE.
  • Name
    current
    Type
    integer
    Description
    Records processed so far.
  • Name
    total
    Type
    integer
    Description
    Total records to process.
  • Name
    percent
    Type
    number
    Description
    Progress percentage.
  • Name
    message
    Type
    string
    Description
    Status message.
  • Name
    result
    Type
    object
    Description
    Final result once state is SUCCESS.

Progress

GET
/exports/progress/{task_id}
curl https://api.pixeepim.com/api/v1/exports/progress/3f9c9a1e-8b2d-4a55-9e11-2b6a7c0f9d10 \
  -H "Authorization: Bearer {api_key}"

Progress response

{ "state": "SUCCESS", "current": 5000, "total": 5000, "percent": 100, "message": "Export complete", "result": { "file": "/data/exports/products_2026-09-15.csv" } }

Download

GET
/exports/download/{task_id}
curl https://api.pixeepim.com/api/v1/exports/download/3f9c9a1e-8b2d-4a55-9e11-2b6a7c0f9d10 \
  -H "Authorization: Bearer {api_key}" \
  -o products.csv

GET/exports/stream/csv/products

Stream products (CSV / JSON)

Synchronous streaming export — no task, no polling. Suited to smaller, on-demand pulls (e.g. a scheduled script).

EndpointContent
GET /exports/stream/csv/productsCSV stream
GET /exports/stream/json/productsJSON stream (or NDJSON with json_lines=true)

Query parameters

  • Name
    limit
    Type
    integer
    Description
    Max records to stream.
  • Name
    offset
    Type
    integer
    Description
    Records to skip.
  • Name
    filters
    Type
    string
    Description
    Filters, JSON-encoded.
  • Name
    include_fields
    Type
    string
    Description
    Comma-separated fields to include.
  • Name
    exclude_fields
    Type
    string
    Description
    Comma-separated fields to exclude.
  • Name
    language
    Type
    string
    Description
    ISO 639-1 code; omitted = pivot language (same policy as above).
  • Name
    include_relations
    Type
    boolean
    Description
    JSON stream only. Include nested relationships.
  • Name
    json_lines
    Type
    boolean
    Description
    JSON stream only. Output NDJSON (default: false).

Request

GET
/exports/stream/csv/products
curl "https://api.pixeepim.com/api/v1/exports/stream/csv/products?limit=500&language=fr" \
  -H "Authorization: Bearer {api_key}" -o products.csv

GET/exports/platforms

Export platforms

A platform is a registered remote destination that completed exports can be pushed to.

EndpointDescription
GET /exports/platformsList platforms (platform_type, is_active, search, skip, limit)
POST /exports/platformsCreate a platform
GET /exports/platforms/{platform_id}Get one platform
PUT /exports/platforms/{platform_id}Update a platform
DELETE /exports/platforms/{platform_id}Delete a platform
POST /exports/platforms/{platform_id}/toggleEnable/disable (body: {"is_active": true})
POST /exports/platforms/{platform_id}/testTest the connection of an existing platform
POST /exports/platforms/testTest unsaved {platform_type, config}, e.g. from a setup wizard, before creating the platform

Body parameters — create (JSON)

  • Name
    name
    Type
    string
    Description
    Descriptive name for the platform.
  • Name
    platform_type
    Type
    string
    Description
    minio, ftp, sftp, or s3 (gdrive → 422 EXPORT_INTEGRATION_ABSENT).
  • Name
    config
    Type
    object
    Description
    Platform-specific credentials and settings (host/bucket/folder, keys…).
  • Name
    field_mappings
    Type
    object
    Description
    Custom field mappings applied when exporting a product to this platform.
  • Name
    is_active
    Type
    boolean
    Description
    Enable the platform (default: false).
  • Name
    rate_limit_per_second
    Type
    integer
    Description
    Outbound rate limit (default: 2).
  • Name
    retry_on_error
    Type
    boolean
    Description
    Retry failed exports automatically (default: true).
  • Name
    max_retries
    Type
    integer
    Description
    Max retry attempts (default: 3).

Create

POST
/exports/platforms
curl -X POST https://api.pixeepim.com/api/v1/exports/platforms \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "SFTP – Exports",
    "platform_type": "sftp",
    "config": { "host": "sftp.example.com", "port": 22, "username": "export_user", "password": "xxxxx", "remote_path": "/exports/" },
    "is_active": true
  }'

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440010",
  "name": "SFTP – Exports",
  "platform_type": "sftp",
  "is_active": true,
  "total_exports": 0,
  "success_rate": null,
  "created_at": "2026-09-15T09:00:00Z"
}

Test unsaved config

POST
/exports/platforms/test
curl -X POST https://api.pixeepim.com/api/v1/exports/platforms/test \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{"platform_type": "sftp", "config": {"host": "sftp.example.com", "username": "user", "password": "***"}}'

Test response

{ "success": true, "error_message": null }

POST/exports/platforms/{platform_id}/export

Export a product to a platform

Push one or more products to a registered platform, or preview the transformation without sending anything.

EndpointDescription
POST /exports/platforms/{platform_id}/exportExport a single product
POST /exports/platforms/{platform_id}/bulk-exportExport multiple products (creates one platform export job, see below)
POST /exports/platforms/{platform_id}/previewPreview the transformed payload for a product, without exporting it

Body parameters

  • Name
    product_id
    Type
    string
    Description
    Product UUID (single export / preview).
  • Name
    product_ids
    Type
    array
    Description
    Array of product UUIDs (bulk export).
  • Name
    job_metadata
    Type
    object
    Description
    Optional metadata attached to the resulting job (bulk export).

Bulk export

POST
/exports/platforms/{platform_id}/bulk-export
curl -X POST https://api.pixeepim.com/api/v1/exports/platforms/550e8400-e29b-41d4-a716-446655440010/bulk-export \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{"product_ids": ["7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d", "8b9c0d1e-2f3a-4b5c-6d7e-8f9a0b1c2d3e"]}'

Response

{
  "id": "9a9a9a9a-0000-0000-0000-000000000001",
  "platform_id": "550e8400-e29b-41d4-a716-446655440010",
  "job_type": "bulk",
  "status": "pending",
  "total_items": 2,
  "success_items": 0,
  "failed_items": 0,
  "created_at": "2026-09-15T09:00:00Z"
}

Preview

POST
/exports/platforms/{platform_id}/preview
curl -X POST https://api.pixeepim.com/api/v1/exports/platforms/550e8400-e29b-41d4-a716-446655440010/preview \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{"product_id": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"}'

GET/exports/jobs

Platform export jobs

Jobs created by exporting to a platform.

EndpointDescription
GET /exports/jobsList jobs (platform_id, status, skip, limit)
GET /exports/jobs/statsCounts by status (pending, running, completed, failed, cancelled) and overall success_rate
GET /exports/jobs/{job_id}Get one job
DELETE /exports/jobs/{job_id}Delete a job record
POST /exports/jobs/{job_id}/retryRe-queue a failed job
GET /exports/jobs/{job_id}/itemsPer-product results of a bulk job (skip, limit)

List jobs

GET
/exports/jobs
curl "https://api.pixeepim.com/api/v1/exports/jobs?platform_id=550e8400-e29b-41d4-a716-446655440010&status=failed" \
  -H "Authorization: Bearer {api_key}"

Job response

{
  "id": "9a9a9a9a-0000-0000-0000-000000000001",
  "platform_id": "550e8400-e29b-41d4-a716-446655440010",
  "platform_name": "SFTP – Exports",
  "platform_type": "sftp",
  "job_type": "bulk",
  "status": "failed",
  "total_items": 2,
  "success_items": 1,
  "failed_items": 1,
  "error_details": { "7a8b9c0d-...": "Timeout uploading file" },
  "started_at": "2026-09-15T09:00:05Z",
  "completed_at": "2026-09-15T09:00:40Z",
  "created_at": "2026-09-15T09:00:00Z"
}

Job items

GET
/exports/jobs/{job_id}/items
[
  {
    "id": "aaaaaaaa-0000-0000-0000-000000000001",
    "job_id": "9a9a9a9a-0000-0000-0000-000000000001",
    "product_id": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
    "product_name": "Widget Pro",
    "status": "success",
    "external_id": "/exports/widget-pro.csv",
    "retry_count": 0
  }
]

GET/exports/schedules

Export schedules (retired)

Retired in v6.41. Export schedules were never run; they have been removed from the app. The six operations below are kept in the spec as deprecated and answer 410 Gone with error_code: "EXPORT_SCHEDULES_RETIRED" — nothing is read or written, with the same permissions as before (401/403 first). They will be removed once no call has reached them for 30 days.

EndpointAnswer
GET /exports/schedules410 EXPORT_SCHEDULES_RETIRED
POST /exports/schedules410 EXPORT_SCHEDULES_RETIRED
GET /exports/schedules/{schedule_id}410 EXPORT_SCHEDULES_RETIRED
PUT /exports/schedules/{schedule_id}410 EXPORT_SCHEDULES_RETIRED
DELETE /exports/schedules/{schedule_id}410 EXPORT_SCHEDULES_RETIRED
POST /exports/schedules/{schedule_id}/toggle410 EXPORT_SCHEDULES_RETIRED

To send products at a set time, use the schedules of a shop's sync profiles. The ExportSchedule* schemas are gone from the spec, and so is the export_schedule rate-limit tier.

Request

GET
/exports/schedules
curl https://api.pixeepim.com/api/v1/exports/schedules \
  -H "Authorization: Bearer {api_key}"

Response — 410

{
  "error": {
    "code": 410,
    "error_code": "EXPORT_SCHEDULES_RETIRED",
    "type": "http_error",
    "message": "Export schedules have been removed from the application: they were never run. To send your products at a set time, create a schedule in a sync profile of your shop (Connectors). Nothing was changed.",
    "details": null,
    "path": "/api/v1/exports/schedules",
    "request_id": "abc-123",
    "timestamp": "2026-11-03T10:30:00Z"
  }
}

POST/exports/create

Generic export jobs (legacy)

An older, generic job model kept for backward compatibility, independent of both systems above.

EndpointDescription
POST /exports/createCreate a generic export job (export_type: products, suppliers, imports, orders, or customers; format default csv)
GET /exports/{export_id}Get one generic export job
DELETE /exports/{export_id}Delete it
GET /exportsList generic export jobs (status, export_type, limit, offset) — reads the same jobs table as the platform export jobs, so a job created by POST /exports/create and the entries listed here don't always line up one-to-one
GET /exports/productsReal product export: returns matching rows inline for small result sets, or a Celery task_id (poll via progress/download) once the estimated count exceeds 1,000

Create

POST
/exports/create
curl -X POST https://api.pixeepim.com/api/v1/exports/create \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{"export_type": "products", "format": "csv", "filters": {"is_active": true}}'

Response

{
  "id": "bbbbbbbb-0000-0000-0000-000000000001",
  "export_type": "products",
  "format": "csv",
  "status": "pending",
  "created_at": "2026-09-15T09:00:00Z",
  "file_url": null,
  "total_records": null
}

Real product export

GET
/exports/products
curl "https://api.pixeepim.com/api/v1/exports/products?format=csv&supplier_code=SUPPLIER_A&limit=500" \
  -H "Authorization: Bearer {api_key}"

Was this page helpful?