---
title: "Espace Attraction pour développeurs"
description: "Le point de départ pour intégrer les données produit d'Attraction dans vos outils et agents avec notre API ou PromoStandards."
locale: "fr-ca"
canonical: "https://www.attraction.com/developers/"
markdown: "https://www.attraction.com/developers.md"
last_updated: "2026-09-11"
---

# Espace Attraction pour développeurs

Le point de départ pour intégrer les données produit d'Attraction dans vos outils et agents avec notre API ou PromoStandards.

<a id="start-here"></a>

## Intégrations et accès

<a id="authentication"></a>

- **[API Attraction](/api/) (REST/JSON).** Les données produit publiques sont accessibles sans clé. Les prix nets du compte demandent une clé API. Consultez la [référence API](/api/), son [authentification](/api/#authentication) et la [description OpenAPI](https://api.attraction.com/openapi.json).

- **[PromoStandards](/promo/promostandards/) (SOAP/XML, promotionnel).** Connectez les logiciels compatibles aux services de produits, d'inventaire, de médias et de prix. Les identifiants PromoStandards sont distincts des clés REST.

<a id="errors"></a>

## Erreurs et reprise

<a id="rest-errors"></a>

### API Attraction (REST/JSON)

Les erreurs REST suivent la [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) et sont servies en `application/problem+json`. Le code identifie la cause; les indications ci-dessous précisent comment corriger la requête ou quand réessayer.

Chaque `code` conserve son URI `type` : `https://www.attraction.com/developers/#error-<code>`.

```json
{
  "type": "https://www.attraction.com/developers/#error-product_not_found",
  "title": "Product not found",
  "status": 404,
  "detail": "No product matches SKU NOPE-NOT-A-SKU.",
  "instance": "/v1/products/nope-not-a-sku",
  "code": "product_not_found"
}
```

<a id="error-route_not_found"></a>

#### route_not_found (HTTP 404)

Aucune route ne correspond au chemin demandé.

**Action.** Vérifiez le chemin dans la [référence API](/api/). Corrigez l'URL avant de réessayer.

<a id="error-method_not_allowed"></a>

#### method_not_allowed (HTTP 405)

La route existe mais pas pour cette méthode HTTP. La réponse porte `Allow: GET, HEAD, OPTIONS`.

**Action.** Utilisez une méthode annoncée dans `Allow`. Corrigez la requête avant de réessayer.

<a id="error-invalid_request"></a>

#### invalid_request (HTTP 400)

La requête ne correspond pas à ce qu'attend la route, par exemple un paramètre de requête malformé.

**Action.** Corrigez le paramètre indiqué dans `detail` en consultant la [référence API](/api/).

<a id="error-unsupported_locale"></a>

#### unsupported_locale (HTTP 400)

`locale` doit être `en-CA`, `en-US` ou `fr-CA`.

**Action.** Utilisez une des trois valeurs canoniques acceptées : `en-CA`, `en-US` ou `fr-CA`.

<a id="error-invalid_sku"></a>

#### invalid_sku (HTTP 400)

Le paramètre de chemin `sku` n'est pas un SKU valide.

**Action.** Vérifiez le SKU dans la [liste des produits](/api/#list-products), puis corrigez le paramètre de chemin.

<a id="error-unauthorized"></a>

#### unauthorized (HTTP 401)

Réservé aux routes privées `/v1/sync/*`; les points d'accès produits publics ne retournent jamais cette erreur.

**Action.** Ce code concerne une intégration privée. Faites vérifier ses autorisations par son responsable.

<a id="error-key_required"></a>

#### key_required (HTTP 401)

`GET /v1/products/{sku}/pricing` ou `GET /v1/products/pricing` a été appelé sans authentification. Cette route tarife un compte précis; elle n'a donc aucun repli public, contrairement aux points d'accès produits, qui répondent anonymement avec le prix de détail suggéré. La réponse porte `WWW-Authenticate: Bearer realm="api.attraction.com"`, sans paramètre `error` : rien n'a été présenté à rejeter.

**Action.** Ajoutez une clé de compte selon les [instructions d'authentification](/api/#authentication), puis réessayez.

<a id="error-invalid_key"></a>

#### invalid_key (HTTP 401)

L'en-tête `Authorization: Bearer` porte une clé que l'API ne reconnaît pas. Le champ `detail` précise laquelle : **non reconnue** (souvent copiée de façon incomplète), ou **malformée**, c'est-à-dire qu'elle ne respecte pas la forme `attr_sk_<16 caractères hexadécimaux>_<43 caractères>`. Dans les deux cas, créez-en une nouvelle sur la [page des clés API](/api/keys/). La réponse porte `WWW-Authenticate: Bearer realm="api.attraction.com", error="invalid_token"`.

**Action.** Vérifiez la copie complète de la clé. Remplacez-la si nécessaire avant de réessayer; n'enlevez pas l'authentification pour contourner l'erreur.

<a id="error-key_revoked"></a>

#### key_revoked (HTTP 401)

La clé API n'est plus active : elle a été révoquée, ou le compte derrière elle n'a plus de prix distributeur (fermé, désactivé, ou sans palier de prix). La clé et le compte peuvent être vérifiés sur la [page des clés API](/api/keys/). Un changement de palier ne cause jamais cette erreur. Une clé suit le palier en vigueur de son compte.

**Action.** Vérifiez l'accès distributeur du compte et créez une nouvelle clé si l'ancienne a été révoquée. Répéter la même requête ne réactive pas une clé.

<a id="error-product_not_found"></a>

#### product_not_found (HTTP 404)

Aucun produit ne correspond au SKU fourni.

**Action.** Consultez la [liste des produits](/api/#list-products) et choisissez un SKU existant avant de réessayer.

<a id="error-rate_limited"></a>

#### rate_limited (HTTP 429)

Le client dépasse la [politique de limite de débit](#rate-limits). La réponse porte `Retry-After` et les en-têtes `RateLimit`/`RateLimit-Policy`.

**Action.** Attendez le délai `Retry-After`, puis réduisez la fréquence des appels.

<a id="error-upstream_unavailable"></a>

#### upstream_unavailable (HTTP 503)

L'API produits publique ne peut pas accéder à sa source de catalogue ou vérifier les clés API. La réponse porte `Retry-After: 30`.

**Action.** Attendez le délai indiqué par `Retry-After` avant de réessayer. Si l'erreur persiste, contactez le soutien.

<a id="error-internal_error"></a>

#### internal_error (HTTP 500)

Une erreur serveur inattendue, sans trace d'exécution ni détail interne dans la réponse.

**Action.** Vérifiez le [statut de l'API](https://api.attraction.com/v1/health). Si l'erreur persiste, signalez l'opération et le moment du problème au soutien.

<a id="promostandards-errors"></a>

### PromoStandards (SOAP/XML)

Vérifiez d'abord le statut HTTP : un refus temporaire peut retourner `429` ou `503` sans réponse SOAP. Les erreurs applicatives PromoStandards sont portées par le XML avec HTTP 200. Vérifiez le contenu de la réponse, même si le transport a réussi. Les enveloppes invalides et les opérations inconnues produisent des SOAP Faults. La [référence PromoStandards](/promo/promostandards/) décrit les requêtes et les schémas.

<a id="promostandards-common-errors"></a>

#### Accès et requêtes PromoStandards

Ces codes peuvent être retournés par les quatre services dans une réponse XML avec un statut HTTP `200`. Vérifiez le contenu de la réponse avant de la considérer comme un succès. Les identifiants PromoStandards sont distincts des clés de l’API REST.

<a id="promostandards-error-common-104"></a>

##### 104

Compte PromoStandards inactif.

**Action.** Communiquez avec Attraction pour rétablir l’accès avant de reprendre les appels.

<a id="promostandards-error-common-105"></a>

##### 105

Échec de l’authentification.

**Action.** Vérifiez la paire `id` et `password` de votre accès PromoStandards. Corrigez les identifiants avant de réessayer.

<a id="promostandards-error-common-110"></a>

##### 110

Mot de passe absent.

**Action.** Ajoutez `password` dans le corps de la requête SOAP.

<a id="promostandards-error-common-115"></a>

##### 115

Version du service non reconnue.

**Action.** Faites correspondre `wsVersion` à la version du service appelé et utilisez son WSDL.

<a id="promostandards-error-common-120"></a>

##### 120

Champ obligatoire absent, ou `changeTimeStamp` non valide dans une requête de modifications.

**Action.** Complétez les champs indiqués dans `description`. Pour `changeTimeStamp`, fournissez une date et une heure valides au format XML `dateTime`.

<a id="promostandards-error-common-999"></a>

##### 999

Erreur générale du service.

**Action.** Communiquez avec Attraction en indiquant le service, l’opération, l’heure de l’appel et le code reçu. Retirez le mot de passe de tout exemple transmis.

<a id="promostandards-product-data-errors"></a>

#### Product Data 2.0.0

Les erreurs se trouvent dans `ServiceMessageArray.ServiceMessage`, avec `code`, `description` et `severity: Error`. Une liste de produits vide, notamment pour `GetProductCloseOutRequest`, peut être une réponse valide.

<a id="promostandards-error-product-data-125"></a>

##### 125

Pays ou langue non pris en charge.

**Action.** Utilisez `localizationCountry: CA` ou `US`, avec `localizationLanguage: en`.

<a id="promostandards-error-product-data-130"></a>

##### 130

Produit introuvable, retiré du catalogue ou indisponible pour le marché demandé.

**Action.** Vérifiez `productId` dans les produits vendables du marché demandé avec `GetProductSellableRequest`.

<a id="promostandards-error-product-data-140"></a>

##### 140

Variante `partId` introuvable pour ce produit.

**Action.** Consultez le produit sans filtre `partId`, puis utilisez un identifiant de variante retourné.

<a id="promostandards-error-product-data-145"></a>

##### 145

Aucune variante ne correspond à `colorName` après application du filtre `partId`, s’il est présent.

**Action.** Vérifiez `colorName` et sa compatibilité avec `partId` dans une réponse produit sans filtres.

<a id="promostandards-error-product-data-150"></a>

##### 150

Aucune variante ne correspond aux tailles demandées après application des autres filtres.

**Action.** Utilisez les valeurs `labelSize` du produit et vérifiez la combinaison des filtres de variante, de couleur et de taille.

<a id="promostandards-inventory-errors"></a>

#### Inventory 2.0.0

Les erreurs se trouvent dans `ServiceMessageArray.ServiceMessage`, avec `code`, `description` et `severity: Error`. Un filtre sans correspondance retourne une liste vide, sans erreur `600`.

<a id="promostandards-error-inventory-600"></a>

##### 600

Produit introuvable ou retiré du catalogue.

**Action.** Vérifiez `productId` avec Product Data avant de reprendre la synchronisation de l’inventaire.

<a id="promostandards-media-content-errors"></a>

#### Media Content 1.1.0

Les erreurs se trouvent dans l’élément singulier `errorMessage`, avec `code` et `description`. Ce service ne retourne pas de `ServiceMessageArray` ni de champ `severity`. L’absence de média correspondant aux filtres peut simplement produire une réponse vide valide.

<a id="promostandards-error-media-content-125"></a>

##### 125

Culture ou type de média non pris en charge.

**Action.** Utilisez `cultureName: en-CA` ou `en-US`. Les valeurs de `mediaType` sont `Image`, `Video`, `Audio` et `Document`.

<a id="promostandards-error-media-content-130"></a>

##### 130

Produit introuvable ou retiré du catalogue, ou `partId` introuvable pour ce produit.

**Action.** Vérifiez `productId` et, s’il est fourni, `partId` dans les réponses Product Data.

<a id="promostandards-ppc-errors"></a>

#### Product Pricing and Configuration 1.0.0

Les erreurs se trouvent dans l’élément singulier `ErrorMessage`, avec `code` et `description`, sans `severity`. Les opérations de lieux de décoration, de frais et de couleurs de décoration retournent des réponses vides valides pour un produit reconnu.

<a id="promostandards-error-ppc-400"></a>

##### 400

Produit introuvable ou retiré du catalogue, ou `partId` introuvable pour ce produit.

**Action.** Vérifiez `productId` et, s’il est fourni, `partId` dans les réponses Product Data.

<a id="promostandards-error-ppc-401"></a>

##### 401

Devise non publiée pour ce produit.

**Action.** Consultez les devises retournées par `GetFobPointsRequest` pour ce produit et utilisez l’une d’elles.

<a id="promostandards-error-ppc-402"></a>

##### 402

Type de prix non pris en charge, ou grille nette absente pour le produit demandé.

**Action.** Utilisez `priceType: List` pour les prix publics ou `Net` lorsqu’une grille nette standard est publiée. `Customer` n’est pas pris en charge. Un prix `List` ne remplace pas un prix `Net` manquant.

<a id="promostandards-error-ppc-403"></a>

##### 403

Point d’expédition `fobId` non reconnu.

**Action.** Utilisez le `fobId` retourné par `GetFobPointsRequest` pour ce produit.

<a id="promostandards-error-ppc-404"></a>

##### 404

Pays non pris en charge.

**Action.** Utilisez `localizationCountry: CA` ou `US`. Ce code XML n’est pas un statut HTTP 404.

<a id="promostandards-error-ppc-405"></a>

##### 405

Langue non prise en charge.

**Action.** Utilisez `localizationLanguage: en`.

<a id="promostandards-error-ppc-406"></a>

##### 406

Configuration non prise en charge.

**Action.** Utilisez `configurationType: Blank`. Les prix de décoration ne sont pas publiés par ce service.

<a id="promostandards-transport-errors"></a>

#### Limites et disponibilité de l’authentification

Le contrôle d’accès peut interrompre une requête avant son traitement. Ces réponses HTTP sont en `text/plain`; elles ne portent ni code d’erreur XML ni SOAP `Fault`. Vérifiez le statut HTTP et le type de contenu avant de décoder le XML.

<a id="promostandards-error-transport-429"></a>

##### HTTP 429

Limite temporaire de vérification des identifiants atteinte. Le corps indique `Temporarily rate limited`.

**Action.** Attendez le délai fourni dans `Retry-After` avant de reprendre et réduisez la fréquence des appels. Changer de service SOAP ne remet pas ces limites à zéro.

<a id="promostandards-error-transport-503"></a>

##### HTTP 503

La vérification de l’accès est temporairement indisponible. Le corps indique `Authentication temporarily unavailable`.

**Action.** Réessayez plus tard et communiquez avec Attraction si le problème persiste. Cette réponse n’indique pas que vos identifiants sont invalides et ne fournit pas de délai `Retry-After`.

<a id="promostandards-soap-faults"></a>

#### Erreurs d’enveloppe et d’opération SOAP

Une enveloppe impossible à traiter ou une opération inconnue retourne HTTP `500` avec un élément SOAP `Fault` et `faultcode: soapenv:Client`. Corrigez la requête avant de la renvoyer.

<a id="promostandards-error-soap-envelope"></a>

##### soapenv:Client

Corps vide, XML mal formé, `Envelope` ou `Body` absent, ou plusieurs opérations dans `Body`.

**Action.** Envoyez une enveloppe SOAP 1.1 valide avec `Content-Type: text/xml` et une seule opération dans `Body`. Consultez `faultstring` pour la cause précise.

<a id="promostandards-error-soap-operation"></a>

##### soapenv:Client

L’élément de requête ne correspond à aucune opération du service appelé.

**Action.** Vérifiez le nom de l’élément de requête, sa casse et l’URL du service à partir du WSDL correspondant.

<a id="rate-limits"></a>

## Limites d'appel

### API Attraction (REST/JSON)

La liste `/v1/products`, même avec une clé, et les requêtes anonymes utilisent `default` : 600 requêtes par minute par IP cliente. Sur les routes de détail et de prix, une clé vérifiée utilise `keyed` : 1200 requêtes par minute par clé. Une première vérification de clé, ou une vérification après expiration de son cache, passe aussi le contrôle par IP. Les en-têtes annoncent `keyed` après une vérification réussie, sinon `default`. Ces compteurs sont indicatifs et suivis par instance, sans garantie de dimensionnement. Un dépassement de ces quotas applicatifs reçoit `429` et `Retry-After`; respectez ce délai avant de reprendre. Les en-têtes suivent [draft-ietf-httpapi-ratelimit-headers](https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/). L'infrastructure impose aussi un plafond global de 100 requêtes par seconde, avec une rafale de 200; un refus à ce niveau ne garantit pas les mêmes en-têtes.

- `RateLimit-Policy: "default";q=600;w=60`
- `RateLimit-Policy: "keyed";q=1200;w=60`
- `RateLimit: "default";r=<remaining>;t=<seconds>`

### PromoStandards (SOAP/XML)

Les services PromoStandards partagent un plafond de 20 requêtes par seconde, avec une rafale de 40, sans garantie de capacité par intégration. La vérification des identifiants applique aussi des limites de protection; des échecs répétés peuvent limiter les appels provenant d'une même IP. Un refus de cette vérification retourne HTTP `429` avec `Retry-After` : attendez le délai reçu et réduisez la fréquence des appels. Le plafond d'infrastructure peut refuser un appel sans les mêmes en-têtes. Pour dimensionner une synchronisation SOAP, précisez les services et la fréquence souhaitée lors de votre demande d'accès.

<a id="versioning-and-deprecation"></a>

## Versions et dépréciation

### API Attraction (REST/JSON)

L'API REST est versionnée dans l'URL : les points d'accès actuels sont sous `/v1`. Les changements non rétrocompatibles sont publiés sous `/v2`; les ajouts de champs ou de paramètres optionnels ne changent pas la version.

Quand une version REST est dépréciée, l'annonce se fait au moins trois mois à l'avance. Les réponses portent les en-têtes `Deprecation` ([RFC 9745](https://www.rfc-editor.org/rfc/rfc9745)) et `Sunset` ([RFC 8594](https://www.rfc-editor.org/rfc/rfc8594)) indiquant la dépréciation et la date de retrait.

### PromoStandards (SOAP/XML)

Chaque service PromoStandards utilise la version de son WSDL. Vérifiez les [services et versions disponibles](/promo/promostandards/#services). Le préavis REST ci-dessus concerne l'API REST; il ne constitue pas une politique de retrait des versions SOAP.

<a id="status-and-support"></a>

## Statut et soutien

[`/v1/health`](https://api.attraction.com/v1/health) indique le statut de l'API REST. Pour cette API ou PromoStandards, écrivez à [promo@attraction.com](mailto:promo@attraction.com) en précisant le service, l'opération, le code d'erreur et le moment du problème. Ne transmettez ni clé API ni mot de passe.

<a id="agent-resources"></a>

[Index des ressources publiques](/llms.txt)

<a id="changelog"></a>

## Journal des changements

Changements des interfaces publiques et actions à prévoir pour les intégrations. Les dates ci-dessous sont celles des publications concernées.

- **2026-09-11 — PromoStandards**. PPC 1.0.0 accepte maintenant `priceType=Net` pour les prix nets standards du palier A3 lorsque le produit possède une grille nette publiée. `List` continue de renvoyer les prix publics; `Customer` n'est pas pris en charge. Product Data 2.0.0 ajoute `ColorArray` à chaque variante. Media Content ne publie plus les archives d'images haute résolution ni leur classification `High`/`2001`. Consultez la [portée des prix PromoStandards](/promo/promostandards/#data-scope).

- **2026-08-31 — API REST**. Prix nets via l'API : une clé API de compte, créée et révoquée sur la [page des clés API](/api/keys/), ajoute les prix nets de votre compte à `/v1/products/{sku}` et à deux nouveaux points d'accès de prix, `/v1/products/{sku}/pricing` (un produit) et `/v1/products/pricing` (tout le catalogue). Les clés sont des jetons Bearer qui suivent le palier de prix en vigueur du compte, et apportent les codes d'erreur [`invalid_key`](#error-invalid_key) et [`key_revoked`](#error-key_revoked) ainsi que la politique de limite de débit `keyed`. Matériaux par couleur : les couleurs du détail produit portent maintenant `material` (la `composition`, un libellé `weight` formaté selon la locale, le `gsm` numérique et, pour les produits Jameo, le `name` du tissu). L'ancien tableau `materials` du produit et la chaîne `weight` par couleur sont retirés.

- **2026-08-25 — API REST**. Fraîcheur des produits : chaque produit rapporte maintenant `updatedAt`, mis à jour seulement quand son contenu de catalogue change réellement (les mouvements d'inventaire n'y jouent pas), et la liste rapporte `catalogUpdatedAt` quand un produit s'ajoute ou se retire.

- **2026-08-24 — API REST**. Publication de cet espace développeurs. Les réponses d'erreur passent au format `application/problem+json` de la RFC 9457; ajout des en-têtes de limite de débit et d'une politique de versions et de dépréciation.

- **2026-06-26 — API REST**. Lancement officiel : l'API produits publique en lecture seule sur api.attraction.com (liste et détail sous `/v1`, sans clé) avec sa description OpenAPI et sa documentation interactive.

## Sitemap

- [Plan du site XML complet](https://www.attraction.com/sitemap.xml)
- [Index des pages pour agents](https://www.attraction.com/llms.txt)
