Connectors
Connectors sync your Pixee PIM catalog with e-commerce platforms, marketplaces, and headless commerce engines.
Supported platforms (15): Shopify, BigCommerce, Salesforce Commerce Cloud (SFCC), SAP Commerce, Wizishop, Cdiscount, Fnac, Sylius, Squarespace, Google Merchant Center, Mirakl, Medusa, Shopware 6, Saleor, Amazon SP-API.
WooCommerce, Magento 2, Dolibarr, Sage X3, PrestaShop, and Odoo are not part of this public REST API — they have dedicated sync modules covered on docs.pixeepim.com. Only their inbound webhook/push endpoints and, since v6.37, their sync profiles are exposed here (see Inbound webhooks). Their import mappings — including the named mappings, their copy to another shop and the mapping templates added in v6.38–v6.39 — are managed in the app and are not part of this public reference.
All mutating connector endpoints require the MANAGE_SETTINGS permission. External URLs are validated against an SSRF allowlist. Credentials are stored Fernet-encrypted.
Platform catalog
Before creating a connector, browse the static platform registry to discover a platform's id, required credentials, and field mapping.
List platforms
Returns all 15 supported platforms with their tier, auth type, and capabilities.
Query parameters
- Name
tier- Type
- integer
- Description
Filter by tier:
1(high),2(medium),3(FR market),4(extra).
- Name
category- Type
- string
- Description
Filter by category:
e-commerce,marketplace, orenterprise.
Request
curl "https://api.pixeepim.com/api/v1/connectors/platforms?tier=1" \
-H "X-API-Key: {api_key}"
Response
[
{
"id": "shopify",
"name": "Shopify",
"tier": 1,
"auth_type": "api_key",
"capabilities": [
"push_products", "pull_products", "push_stock", "pull_stock",
"push_prices", "push_images", "push_categories", "receive_webhook"
],
"description": "Plateforme e-commerce hébergée. Auth via Private App Access Token.",
"logo_path": "/static/logos/shopify.svg",
"webhook_path": "/api/v1/connectors/shopify/webhook",
"is_marketplace": false,
"category": "e-commerce"
}
]
Get a platform
Returns the full definition of a single platform, including its config_schema (the credential fields required to create a connector for it).
Path parameters
- Name
platform_id- Type
- string
- Description
Platform identifier (e.g.
shopify,amazon_sp_api,google_merchant_center).
Request
curl https://api.pixeepim.com/api/v1/connectors/platforms/shopify \
-H "X-API-Key: {api_key}"
Platform field map
Returns the default field mapping between Pixee PIM fields and the platform's own field names (e.g. title → variants[0].barcode for Shopify's EAN).
Path parameters
- Name
platform_id- Type
- string
- Description
Platform identifier.
Request
curl https://api.pixeepim.com/api/v1/connectors/platforms/shopify/field-map \
-H "X-API-Key: {api_key}"
Platform guide
Returns the platform's integration guide (setup steps, where to find API credentials).
Path parameters
- Name
platform_id- Type
- string
- Description
Platform identifier.
Query parameters
- Name
format- Type
- string
- Description
Response format, e.g.
markdown.
Request
curl "https://api.pixeepim.com/api/v1/connectors/platforms/shopify/guide?format=markdown" \
-H "X-API-Key: {api_key}"
Sync status (dashboard)
Returns an aggregated sync status for your active connectors — a compact feed suited to a dashboard widget.
Query parameters
- Name
limit- Type
- integer
- Description
Maximum number of connectors to return.
Request
curl "https://api.pixeepim.com/api/v1/connectors/sync-status?limit=10" \
-H "X-API-Key: {api_key}"
Response
[
{
"id": "550e8400-e29b-41d4-a716-000000000010",
"platform_id": "shopify",
"name": "My Shopify Store",
"is_active": true,
"status": "active",
"last_sync_at": "2026-09-14T08:00:00Z",
"last_job": {
"job_type": "push_products",
"status": "completed",
"pushed": 1250,
"errors": 0
}
}
]
Connectors
List connectors
Returns all connectors configured on your account, as a plain array (not paginated).
The trailing slash is required — redirect_slashes=False is active on this router.
Request
curl https://api.pixeepim.com/api/v1/connectors/ \
-H "X-API-Key: {api_key}"
Response
[
{
"id": "550e8400-e29b-41d4-a716-000000000010",
"platform_id": "shopify",
"name": "My Shopify Store",
"description": "EU storefront",
"is_active": true,
"status": "active",
"status_message": null,
"last_tested_at": "2026-09-14T07:55:00Z",
"last_sync_at": "2026-09-14T08:00:00Z",
"created_at": "2026-01-15T00:00:00Z"
}
]
Create a connector
Creates a connector instance for a platform. credentials follows the config_schema returned by Get a platform.
Body parameters
- Name
platform_id- Type
- string
- Description
Platform identifier (see List platforms).
- Name
name- Type
- string
- Description
Descriptive name for this connector instance.
- Name
description- Type
- string
- Description
Optional free-text description.
- Name
credentials- Type
- object
- Description
Platform-specific credentials (API key, shop domain, OAuth tokens, etc.). Stored Fernet-encrypted.
- Name
sync_options- Type
- object
- Description
Platform-specific sync options (default:
{}).
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/ \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{
"platform_id": "shopify",
"name": "My Shopify Store",
"credentials": {
"shop_domain": "my-store.myshopify.com",
"access_token": "shpat_..."
}
}'
Response
{
"id": "550e8400-e29b-41d4-a716-000000000010",
"platform_id": "shopify",
"name": "My Shopify Store",
"is_active": true,
"status": "pending",
"created_at": "2026-09-17T10:00:00Z"
}
Get a connector
Returns a specific connector and its current status.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Request
curl https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010 \
-H "X-API-Key: {api_key}"
Response
{
"id": "550e8400-e29b-41d4-a716-000000000010",
"platform_id": "shopify",
"name": "My Shopify Store",
"description": "EU storefront",
"is_active": true,
"status": "active",
"status_message": null,
"last_tested_at": "2026-09-14T07:55:00Z",
"last_sync_at": "2026-09-14T08:00:00Z",
"created_at": "2026-01-15T00:00:00Z"
}
Update a connector
Updates a connector's name, description, credentials, sync options, or active flag. All fields are optional — only supplied fields are changed.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Body parameters
- Name
name- Type
- string
- Description
Updated name.
- Name
description- Type
- string
- Description
Updated description.
- Name
credentials- Type
- object
- Description
Replaces the stored credentials object.
- Name
sync_options- Type
- object
- Description
Replaces the stored sync options object.
- Name
is_active- Type
- boolean
- Description
Enable or disable the connector.
Request
curl -X PATCH https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010 \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{"is_active": false}'
Delete a connector
Removes a connector. Past sync job history is retained.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Request
curl -X DELETE https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010 \
-H "X-API-Key: {api_key}"
Test a connector
Tests the connection to the platform (authentication, reachability). Does not sync any data.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010/test \
-H "X-API-Key: {api_key}"
Response
{
"success": true,
"status": "ok",
"message": "Connection successful"
}
Sync job history
Returns the recent sync job history for a connector.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Query parameters
- Name
limit- Type
- integer
- Description
Maximum number of jobs to return.
Request
curl "https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010/jobs?limit=20" \
-H "X-API-Key: {api_key}"
Response
[
{
"id": "550e8400-e29b-41d4-a716-000000000011",
"job_type": "push_products",
"status": "completed",
"trigger": "manual",
"pushed": 2,
"pulled": 0,
"updated": 1,
"errors": 0,
"skipped": 0
}
]
Sync operations
Each sync direction is a separate endpoint. All four enqueue a Celery task on the connectors queue and return an acknowledgement immediately; track progress via Sync job history or Get a sync job status.
Push products
Pushes catalog data from Pixee PIM to the connected platform. Products are sent in chunks of 100.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Body parameters
- Name
product_ids- Type
- array
- Description
Optional list of product UUIDs to push. Pushes the entire catalog if omitted.
- Name
since_timestamp- Type
- string
- Description
Optional ISO 8601 datetime — pushes only products modified since this timestamp.
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010/sync/push-products \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{
"product_ids": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
]
}'
Response
{
"success": true,
"status": "processing",
"message": "Push products queued"
}
Pull products
Pulls product data from the connected platform into Pixee PIM. Existing products are matched by external ID or EAN and updated; new products are created.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Body parameters
- Name
since_timestamp- Type
- string
- Description
Optional ISO 8601 datetime — pulls only items modified since this timestamp.
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010/sync/pull-products \
-H "X-API-Key: {api_key}"
Response
{
"success": true,
"status": "processing",
"message": "Pull products queued"
}
Push stock
Pushes current stock levels from Pixee PIM to the connected platform. This is a lightweight operation — only stock quantities are transmitted.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010/sync/push-stock \
-H "X-API-Key: {api_key}"
Response
{
"success": true,
"status": "processing",
"message": "Push stock queued"
}
Push prices
Pushes pricing data to the connected platform. The connector uses the matching price list for the platform's channel if one is configured; otherwise it falls back to the product's base price.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010/sync/push-prices \
-H "X-API-Key: {api_key}"
Response
{
"success": true,
"status": "processing",
"message": "Push prices queued"
}
Get a sync job status
Returns the current status of a specific sync job triggered by one of the endpoints above.
Path parameters
- Name
connector_id- Type
- string
- Description
The connector ID.
- Name
job_id- Type
- string
- Description
The sync job ID.
Request
curl https://api.pixeepim.com/api/v1/connectors/550e8400-e29b-41d4-a716-000000000010/sync/jobs/550e8400-e29b-41d4-a716-000000000011 \
-H "X-API-Key: {api_key}"
Response
{
"id": "550e8400-e29b-41d4-a716-000000000011",
"job_type": "push_products",
"status": "completed",
"pushed": 2,
"errors": 0
}
Sync profiles
A sync profile says what a synchronization of a shop or ERP connection carries — stock only, stock and prices, SEO texts… — so that a schedule or a manual launch can send or fetch only that. Profiles exist for the six connections of the common sync engine: prestashop, woocommerce, magento, dolibarr, sage and odoo (the plateforme parameter). The connections themselves are configured in the app; only their profiles are exposed here.
- One profile = one connection, one direction.
sensisexport(send to the shop or ERP) orimport(fetch from it) — never both: make two profiles. Names are unique per connection, case ignored. - Contents (
contenus) come from a closed list:stocks,prix,textes,seo,fiche(the whole product record),categoriesand, since v6.41,medias(the product's image gallery) andmarques(the brand). They translate into job units (unites):stocks→stocks,prix→prix,textes/seo/fiche/medias/marques→produits,categories→categories(on import, categories come with the product record:produits). - “Par défaut” is computed, never stored. Each connection always has two “Par défaut” profiles (export and import):
id: null,par_defaut: true,modifiable: false, all contents (on import: all butmediasandmarques, which only a send runs), and the connection's own settings. A schedule without a profile runs “Par défaut” — exactly what it did before profiles existed. - Neutral profiles. A profile is
neutrewhen it changes nothing to how data is sent compared with the connection settings: nosurcharges, no named mapping, and the product record goes whole (or is not touched). Attaching a neutral profile to a validated schedule keeps its validation. - What runs (since v6.38). A profile runs exactly as it announces, or not at all. Its
surchargesare applied by the synchronization (they replace the connection's options for that run only). An export profile withtextesand/orseobut withoutfichesends only those texts (textes: title, description, short description;seo: meta title, meta description, keywords, URL key) on PrestaShop and WooCommerce: it updates products already linked in the shop, never creates one (unlinked products are skipped and counted), and sends no images, variations or combinations. Since v6.41, on PrestaShop such a texts / SEO profile no longer sets the product features nor the GPSR records (manufacturer, EU responsible person) either; a full send (“Par défaut”,fiche) sets them as before. - Media and brand only (since v6.41). An export profile with
mediasand/ormarquesbut withoutfichesends only the image gallery and/or the brand (by its validated brand correspondence, otherwise by name, like a full send) to PrestaShop, WooCommerce or Magento: existing products only (a product absent from the shop is skipped and counted, never created); texts, prices and stocks are untouched, and the connection settings still decide (images, PrestaShop manufacturers, WooCommerce_ean/_brandfields, Magento brand attribute). - What is still refused. Launching or scheduling answers
409 SYNC_PROFIL_NON_EXECUTABLEwithdetails.raison:inactif;surcharge_non_appliquee— an override the synchronization does not apply, or that no unit of the profile reads (details.surcharges_non_appliqueeslists them);contenu_partiel_non_pris_en_charge— a partial product record the platform or direction does not support: texts / SEO outside PrestaShop and WooCommerce, media / brand outside PrestaShop, WooCommerce and Magento, any partial record on import; since v6.41 the refusal lists the unsupported contents indetails.contenus_non_pris_en_charge(e.g.["medias"]on a Dolibarr export). Such a profile can still be saved and read;executableandraison_non_executabletell you in advance. - Named mapping (import, since v6.39). An import profile may carry
mapping_id: one of the named import mappings of the same connection (managed in the app, Import › Mapping step), ornullfor the connection's “Par défaut” mapping. The mapping is applied when the profile is launched or runs on a schedule, and the import guards (preview required when the import creates products with a mapping that is not validated) are judged with that mapping. An export profile never takes one. - Preview.
apercuispar_passage(a preview at every run, default) orvalide_une_fois(validated once). There is no “no preview” option.
Reading profiles needs the READ_IMPORTS permission; creating, changing, deleting them and attaching a schedule need MANAGE_SETTINGS; launching an existing profile needs LAUNCH_SYNC_PROFILES (managers) or MANAGE_SETTINGS. When sending to shops and ERPs is disabled for the instance, creating, changing or launching an export profile — or attaching a running export schedule — answers 409 EXPORTS_INSTANCE_INTERDITS; import profiles and deletion stay allowed.
The profile object
- Name
id- Type
- string | null
- Description
Profile ID (UUID);
nullfor a computed “Par défaut”.
- Name
plateforme- Type
- string
- Description
prestashop,woocommerce,magento,dolibarr,sageorodoo.
- Name
configuration_id- Type
- string | null
- Description
The connection this profile belongs to.
- Name
nom- Type
- string
- Description
1 to 120 characters, unique per connection (case ignored). “Par défaut” is reserved.
- Name
par_defaut- Type
- boolean
- Description
truefor the computed “Par défaut” profiles.
- Name
modifiable- Type
- boolean
- Description
falsefor “Par défaut”.
- Name
sens- Type
- string
- Description
exportorimport.
- Name
contenus- Type
- string[]
- Description
Among
stocks,prix,textes,seo,fiche,categories,medias,marques(the last two since v6.41), returned in that order.
- Name
unites- Type
- string[]
- Description
Job units the profile runs (
produits,stocks,prix,categories), computed fromsensandcontenus.
- Name
surcharges- Type
- object
- Description
Connection options replaced for this profile only — a short allow-list per direction: export
textes_envoyes,categories_mise_a_jour,envoyer_prix; importecraser_textes,import_seo_enseigne,rapatrier_stocks,rapatrier_prix,rapatrier_prix_achat,rapatrier_prix_enseigne(only those the platform knows). Everything else (tax, warehouse, languages…) stays set on the connection.
- Name
perimetre_defaut- Type
- object | null
- Description
Scope proposed by the profile; when set, a launch cannot change it.
- Name
apercu- Type
- string
- Description
par_passage(default) orvalide_une_fois.
- Name
mapping_id- Type
- string | null
- Description
Import profiles only: the named import mapping of the same connection that the profile applies (UUID), or
nullfor “Par défaut”. Alwaysnullon export profiles.
- Name
actif- Type
- boolean
- Description
An inactive profile cannot be launched.
- Name
neutre- Type
- boolean
- Description
The profile changes nothing to what is sent compared with the connection settings.
- Name
executable- Type
- boolean
- Description
Whether it can be launched or attached to a schedule now.
- Name
raison_non_executable- Type
- string | null
- Description
inactif,surcharge_non_appliqueeorcontenu_partiel_non_pris_en_charge(see What is still refused);nullwhen executable. The v6.37 valuessurcharges_au_lot_suivant,contenu_partiel_au_lot_suivantandmapping_au_lot_suivantare no longer returned.
- Name
empreinte- Type
- string | null
- Description
SHA-256 of what decides the profile (direction, contents, overrides, scope, preview, mapping) — neither the name nor
actif.
- Name
cree_par / cree_le / modifie_par / modifie_le- Type
- string | null
- Description
Author and ISO 8601 timestamps.
List a connection's profiles
Returns the two computed “Par défaut” profiles (export, then import), then the saved profiles of the connection, by direction and name.
Query parameters
- Name
plateforme- Type
- string
- Description
prestashop,woocommerce,magento,dolibarr,sageorodoo. Anything else answers422 SYNC_PROFIL_INVALIDE.
- Name
configuration_id- Type
- string
- Description
The connection (UUID); absent = the platform's default connection.
Request
curl "https://api.pixeepim.com/api/v1/sync-profils?plateforme=prestashop" \
-H "X-API-Key: {api_key}"
Response
{
"plateforme": "prestashop",
"configuration_id": "550e8400-e29b-41d4-a716-000000000020",
"items": [
{
"id": null,
"plateforme": "prestashop",
"configuration_id": "550e8400-e29b-41d4-a716-000000000020",
"nom": "Par défaut",
"par_defaut": true,
"modifiable": false,
"sens": "export",
"contenus": ["stocks", "prix", "textes", "seo", "fiche", "categories"],
"unites": ["produits", "stocks", "prix", "categories"],
"surcharges": {},
"perimetre_defaut": null,
"apercu": "par_passage",
"mapping_id": null,
"actif": true,
"neutre": true,
"executable": true,
"raison_non_executable": null,
"empreinte": null
},
{ "id": null, "nom": "Par défaut", "sens": "import", "par_defaut": true },
{
"id": "550e8400-e29b-41d4-a716-000000000021",
"nom": "Stock + prix",
"par_defaut": false,
"modifiable": true,
"sens": "export",
"contenus": ["stocks", "prix"],
"unites": ["stocks", "prix"],
"surcharges": {},
"apercu": "par_passage",
"actif": true,
"neutre": true,
"executable": true,
"raison_non_executable": null
}
]
}
Create a profile
Creates a profile on a connection. The body is a closed list: an unknown key is refused (422), never ignored. Values are checked against the platform's options; a refused value answers 422 SYNC_PROFIL_INVALIDE with details.raison and details.champ. A name already used on the connection answers 409 SYNC_PROFIL_NOM_PRIS. Nothing is saved on a refusal.
Query parameters
- Name
plateforme- Type
- string
- Description
The platform.
- Name
configuration_id- Type
- string
- Description
The connection; absent = the default one.
Body parameters
- Name
nom- Type
- string
- Description
Profile name (spaces trimmed, 1–120 characters).
- Name
sens- Type
- string
- Description
exportorimport.
- Name
contenus- Type
- string[]
- Description
Non-empty, among
stocks,prix,textes,seo,fiche,categories,medias,marques. A profile whose contents the platform or direction cannot run (e.g.mediason import) is saved but not executable (contenu_partiel_non_pris_en_charge).
- Name
surcharges- Type
- object
- Description
Allow-listed options for this direction (see the profile object). Their values are checked against the connection's options merged as at run time: a value that would make them unreadable is refused (
422 SYNC_PROFIL_INVALIDE,details.raison: surcharge_non_permise).
- Name
perimetre_defaut- Type
- object
- Description
Proposed scope, validated for the direction.
- Name
apercu- Type
- string
- Description
par_passage(default) orvalide_une_fois.
- Name
actif- Type
- boolean
- Description
Default
true.
- Name
mapping_id- Type
- string | null
- Description
Import only: a named import mapping of the same connection, or
null(“Par défaut”). Refused with422 SYNC_PROFIL_INVALIDEanddetails.raison:mapping_envoi_interdit(export profile),mapping_inconnu(unknown, or another connection's mapping),mapping_incompatible(the mapping, merged with the connection's options, would make them unreadable).
Request
curl -X POST "https://api.pixeepim.com/api/v1/sync-profils?plateforme=woocommerce" \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{
"nom": "Stock nightly",
"sens": "export",
"contenus": ["stocks"]
}'
Request (import with a named mapping)
curl -X POST "https://api.pixeepim.com/api/v1/sync-profils?plateforme=prestashop" \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{
"nom": "Reprise SEO",
"sens": "import",
"contenus": ["fiche"],
"mapping_id": "550e8400-e29b-41d4-a716-000000000060"
}'
Response (201)
{
"id": "550e8400-e29b-41d4-a716-000000000022",
"plateforme": "woocommerce",
"configuration_id": "550e8400-e29b-41d4-a716-000000000030",
"nom": "Stock nightly",
"par_defaut": false,
"modifiable": true,
"sens": "export",
"contenus": ["stocks"],
"unites": ["stocks"],
"surcharges": {},
"perimetre_defaut": null,
"apercu": "par_passage",
"mapping_id": null,
"actif": true,
"neutre": true,
"executable": true,
"raison_non_executable": null,
"empreinte": "9f2c…",
"cree_le": "2026-11-01T10:00:00+00:00"
}
Get a profile
Returns one saved profile (profile object). Unknown ID: 404 SYNC_PROFIL_INTROUVABLE.
Request
curl https://api.pixeepim.com/api/v1/sync-profils/550e8400-e29b-41d4-a716-000000000022 \
-H "X-API-Key: {api_key}"
Update a profile
Same body as Create a profile; keys left out keep their value. While schedules use the profile, neither its direction nor its units may change (409 SYNC_PROFIL_UTILISE, details.plannings), and it must stay executable; its new fingerprint re-checks the validation of each of those schedules.
Request
curl -X PUT https://api.pixeepim.com/api/v1/sync-profils/550e8400-e29b-41d4-a716-000000000022 \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{ "nom": "Stock — every night", "apercu": "valide_une_fois" }'
Delete a profile
Deletes a profile that no schedule uses; otherwise 409 SYNC_PROFIL_UTILISE (attach those schedules to another profile first). Allowed even when sending is disabled for the instance.
Request
curl -X DELETE https://api.pixeepim.com/api/v1/sync-profils/550e8400-e29b-41d4-a716-000000000022 \
-H "X-API-Key: {api_key}"
Response
{ "id": "550e8400-e29b-41d4-a716-000000000022", "supprime": true }
List profile types
The catalogue of suggested profiles: Stock (stocks), Stock + prix (stocks, prix), SEO (seo), SEO + contenus (textes, seo) and, since v6.41, Médias (medias) and Fiche + médias (fiche, medias). “Complete” is not one of them: it is “Par défaut”.
Query parameters
- Name
langue- Type
- string
- Description
Language of the names:
fr(default) oren.
Request
curl "https://api.pixeepim.com/api/v1/sync-profils/types?langue=en" \
-H "X-API-Key: {api_key}"
Response
{
"items": [
{ "cle": "stock", "nom": "Stock", "contenus": ["stocks"] },
{ "cle": "stock_prix", "nom": "Stock + prices", "contenus": ["stocks", "prix"] },
{ "cle": "seo", "nom": "SEO", "contenus": ["seo"] },
{ "cle": "seo_contenus", "nom": "SEO + content", "contenus": ["textes", "seo"] },
{ "cle": "medias", "nom": "Media", "contenus": ["medias"] },
{ "cle": "fiche_medias", "nom": "Product page + media", "contenus": ["fiche", "medias"] }
]
}
Create the profile types
Creates, on one connection and for one direction, the profile types that are missing (same name, case ignored) — calling it again creates nothing more. “Stock” and “Stock + prix” have no override. Since v6.38, on export to a platform that has the texts-sending option (PrestaShop, WooCommerce), the two SEO types are created with the override textes_envoyes = their text groups, sent toujours (always) — without it, the connection's default (“on creation only”) would hold back all their texts on update. Since v6.41, only the types executable in that direction on that platform are created: on import, neither “SEO”, “SEO + contenus” nor “Médias”; to Dolibarr, Sage or Odoo, neither the SEO types nor “Médias”; to Magento, no SEO type (they used to be created, then refused at launch). Types skipped this way appear neither in crees nor in existants.
Query parameters
- Name
plateforme- Type
- string
- Description
The platform.
- Name
configuration_id- Type
- string
- Description
The connection; absent = the default one.
Body parameters
- Name
sens- Type
- string
- Description
exportorimport.
- Name
langue- Type
- string
- Description
Language of the created names:
fr(default) oren.
Request
curl -X POST "https://api.pixeepim.com/api/v1/sync-profils/types?plateforme=prestashop" \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{ "sens": "export", "langue": "fr" }'
Response
{
"crees": [
{ "id": "550e8400-e29b-41d4-a716-000000000023", "nom": "Stock", "contenus": ["stocks"], "executable": true },
{
"id": "550e8400-e29b-41d4-a716-000000000024",
"nom": "SEO",
"contenus": ["seo"],
"surcharges": { "textes_envoyes": { "quand": "toujours", "groupes": ["seo"] } },
"executable": true
},
{
"id": "550e8400-e29b-41d4-a716-000000000025",
"nom": "SEO + contenus",
"contenus": ["textes", "seo"],
"surcharges": { "textes_envoyes": { "quand": "toujours", "groupes": ["titre", "description", "description_courte", "seo"] } },
"executable": true
}
],
"existants": ["Stock + prix"]
}
Attach a profile to a schedule
Sets the profile a sync schedule runs; profil_id: null puts it back on “Par défaut”. The profile must belong to the same connection, have the same direction (a schedule running both directions takes no profile) and the same units as the schedule — otherwise 422 SYNC_PROFIL_INCOMPATIBLE (details.raison: autre_connexion, autre_sens, autres_types). A profile that is not executable is refused with 409 SYNC_PROFIL_NON_EXECUTABLE. The schedule's validation is re-checked and returned: a neutral profile keeps it (validation.invalide appears when it no longer holds).
Path parameters
- Name
plateforme- Type
- string
- Description
The platform.
- Name
schedule_id- Type
- string
- Description
The schedule (UUID); unknown →
404 CONNECTOR_SYNC_SCHEDULE_NOT_FOUND.
Body parameters
- Name
profil_id- Type
- string | null
- Description
The profile, or
nullfor “Par défaut”.
Request
curl -X PUT https://api.pixeepim.com/api/v1/sync-profils/plannings/prestashop/550e8400-e29b-41d4-a716-000000000040 \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{ "profil_id": "550e8400-e29b-41d4-a716-000000000023" }'
Response
{
"schedule_id": "550e8400-e29b-41d4-a716-000000000040",
"profil_id": "550e8400-e29b-41d4-a716-000000000023",
"validation": {
"mode": "par_passage",
"par": null,
"le": null,
"unites": [],
"apercus": {},
"seuils": null
}
}
Launch a profile
“Launch with profile X”. One job per unit of the profile — all units, or nothing: if one unit is already running, 409 SYNC_UNIT_ALREADY_RUNNING and nothing is created. Every job carries the profile (job_metadata.profil: id, name, fingerprint).
- Export profile: nothing is sent yet. Each unit that requires it (products, stock, prices) gets a preview to validate;
apercusmaps each unit to its preview job, and the data leaves only when that preview is validated and sent, as for any other export. A unit without preview (categories) runs as a job. - What the profile changes travels with the run: on export, the text filter and the applied overrides are part of the preview's parameters (and of its fingerprint), hence of the job sent when it is validated; on import, the launch overrides (
ecraser_textes) go to the job'simport_options. - Import profile: one import job per unit, with the profile's named mapping (
mapping_id) and overrides. The usual guards are judged with that mapping: a preview is required when the import creates products and that mapping is not validated — pass itsapercu_job_id, or first launch the preview with{"apercu": true}. - A profile that does not run as it announces (see What is still refused) is refused:
409 SYNC_PROFIL_NON_EXECUTABLE,details.raison(anddetails.surcharges_non_appliquees). Nothing is launched.
Body parameters (optional)
- Name
perimetre- Type
- object
- Description
Scope of this launch — accepted only when the profile proposes none (
perimetre_defaut); otherwise422 SYNC_PROFIL_INVALIDE.
- Name
apercu_job_id- Type
- string
- Description
Import that creates products without a validated mapping: the import preview to use.
- Name
apercu- Type
- boolean
- Description
Since v6.39, import profiles only:
truelaunches only the import preview of products (unitproduits), with the profile's mapping and overrides — same fingerprint as the import that will follow;apercus.produitsgives its job. A mapping that is incomplete is refused before anything is created (409, named). On an export profile, or one without theproduitsunit:422 SYNC_PROFIL_INVALIDE,details.raison: apercu_import_seulement.
Request
curl -X POST https://api.pixeepim.com/api/v1/sync-profils/550e8400-e29b-41d4-a716-000000000021/lancer \
-H "X-API-Key: {api_key}"
Response (export profile, abridged)
{
"profil_id": "550e8400-e29b-41d4-a716-000000000021",
"jobs": [
{
"id": "550e8400-e29b-41d4-a716-000000000050",
"name": "Aperçu : Stock + prix",
"sync_direction": "export",
"unite": "stocks",
"status": "pending",
"job_metadata": { "profil": { "id": "550e8400-e29b-41d4-a716-000000000021", "nom": "Stock + prix", "empreinte": "9f2c…" } }
},
{ "id": "550e8400-e29b-41d4-a716-000000000051", "name": "Aperçu : Stock + prix", "unite": "prix", "status": "pending" }
],
"apercus": {
"stocks": "550e8400-e29b-41d4-a716-000000000050",
"prix": "550e8400-e29b-41d4-a716-000000000051"
}
}
Request (import preview)
curl -X POST https://api.pixeepim.com/api/v1/sync-profils/550e8400-e29b-41d4-a716-000000000022/lancer \
-H "X-API-Key: {api_key}" \
-H "Content-Type: application/json" \
-d '{ "apercu": true }'
Response (import preview, abridged)
{
"profil_id": "550e8400-e29b-41d4-a716-000000000022",
"jobs": [
{
"id": "550e8400-e29b-41d4-a716-000000000052",
"name": "Aperçu : Reprise SEO",
"sync_direction": "import",
"unite": "produits",
"status": "pending"
}
],
"apercus": { "produits": "550e8400-e29b-41d4-a716-000000000052" }
}
Error (409)
{
"error": {
"code": 409,
"error_code": "SYNC_PROFIL_NON_EXECUTABLE",
"type": "conflict",
"message": "This profile cannot be launched: it is disabled, or it requires a setting the synchronisation does not apply for this shop (…). Nothing was launched.",
"details": { "raison": "contenu_partiel_non_pris_en_charge", "profil_id": "550e8400-e29b-41d4-a716-000000000024" }
}
}
Inbound webhooks
Some platforms push data or events into Pixee PIM instead of (or in addition to) being pulled. These endpoints are called by the platform itself, not by your integration.
Shopify
Receives Shopify webhook events (order/product changes). Verified via X-Shopify-Hmac-Sha256 against the connector's stored webhook secret.
Headers
- Name
x-shopify-hmac-sha256- Type
- string
- Description
HMAC-SHA256 signature of the raw request body, base64-encoded.
- Name
x-shopify-topic- Type
- string
- Description
Event topic (e.g.
products/update).
- Name
x-shopify-webhook-id- Type
- string
- Description
Shopify's delivery ID — used for replay protection (24h Redis dedup).
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/shopify/webhook \
-H "X-Shopify-Hmac-Sha256: {signature}" \
-H "X-Shopify-Topic: products/update" \
-H "X-Shopify-Webhook-Id: {delivery_id}" \
-H "Content-Type: application/json" \
-d '{ "id": 123456789, "title": "Updated product" }'
WooCommerce
Receives WooCommerce webhook events. Verified via X-WC-Webhook-Signature.
Headers
- Name
x-wc-webhook-signature- Type
- string
- Description
HMAC-SHA256 signature, base64-encoded.
- Name
x-wc-webhook-topic- Type
- string
- Description
Event topic (e.g.
product.updated).
- Name
x-wc-webhook-delivery-id- Type
- string
- Description
Delivery ID — used for replay protection (24h Redis dedup).
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/woocommerce/webhook \
-H "X-WC-Webhook-Signature: {signature}" \
-H "X-WC-Webhook-Topic: product.updated" \
-H "Content-Type: application/json" \
-d '{ "id": 42, "name": "Updated product" }'
BigCommerce
Receives BigCommerce webhook events. Verified via a shared X-Webhook-Token.
Headers
- Name
X-Webhook-Token- Type
- string
- Description
Shared token configured on the connector.
- Name
X-BC-Webhook-Id- Type
- string
- Description
BigCommerce's webhook ID — used for replay protection (24h Redis dedup).
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/bigcommerce/webhook \
-H "X-Webhook-Token: {token}" \
-H "X-BC-Webhook-Id: {webhook_id}" \
-H "Content-Type: application/json" \
-d '{ "scope": "store/product/updated", "data": { "id": 42 } }'
Magento 2
Receives push notifications from a Magento 2 instance, authenticated with Basic Auth.
Magento 2 has its own dedicated sync module (/api/v1/magento/) for full catalog sync, documented on docs.pixeepim.com. This endpoint only covers the inbound push notification.
Headers
- Name
authorization- Type
- string
- Description
Basiccredentials configured on the connector.
- Name
x-magento-webhook-id- Type
- string
- Description
Delivery ID — used for replay protection (24h Redis dedup).
Request
curl -X POST https://api.pixeepim.com/api/v1/connectors/magento/push \
-H "Authorization: Basic {base64_credentials}" \
-H "X-Magento-Webhook-Id: {delivery_id}" \
-H "Content-Type: application/json" \
-d '{ "sku": "ART-001", "qty": 42 }'