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.

Intégrations et accès

  • API Attraction (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, son authentification et la description OpenAPI.
  • 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.

Erreurs et reprise

API Attraction (REST/JSON)

Les erreurs REST suivent la RFC 9457 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"
}

route_not_found (HTTP 404)

Aucune route ne correspond au chemin demandé.

Action. Vérifiez le chemin dans la référence API. Corrigez l'URL avant de réessayer.

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.

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.

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.

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, puis corrigez le paramètre de chemin.

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.

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, puis réessayez.

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. 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.

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. 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é.

product_not_found (HTTP 404)

Aucun produit ne correspond au SKU fourni.

Action. Consultez la liste des produits et choisissez un SKU existant avant de réessayer.

rate_limited (HTTP 429)

Le client dépasse la politique de limite de débit. 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.

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.

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. Si l'erreur persiste, signalez l'opération et le moment du problème au soutien.

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 décrit les requêtes et les schémas.

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.

104

Compte PromoStandards inactif.

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

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.

110

Mot de passe absent.

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

115

Version du service non reconnue.

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

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.

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.

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.

125

Pays ou langue non pris en charge.

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

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.

140

Variante partId introuvable pour ce produit.

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

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.

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.

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.

600

Produit introuvable ou retiré du catalogue.

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

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.

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.

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.

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.

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.

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.

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.

403

Point d’expédition fobId non reconnu.

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

404

Pays non pris en charge.

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

405

Langue non prise en charge.

Action. Utilisez localizationLanguage: en.

406

Configuration non prise en charge.

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

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.

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.

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.

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.

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.

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.

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. 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.

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) et Sunset (RFC 8594) 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. Le préavis REST ci-dessus concerne l'API REST; il ne constitue pas une politique de retrait des versions SOAP.

Statut et soutien

/v1/health indique le statut de l'API REST. Pour cette API ou PromoStandards, écrivez à 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.

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-11PromoStandards. 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.
  • 2026-08-31API REST. Prix nets via l'API : une clé API de compte, créée et révoquée sur la page des clés API, 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 et 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-25API 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-24API 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-26API 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.