API produits Attraction
Intégrez les données produits d'Attraction avec des requêtes REST/JSON. L'API couvre actuellement les produits promotionnels, avec les prix de détail suggérés publics et les prix nets du compte accessibles par clé API.
Démarrage rapide
Exécutez cette requête depuis un terminal pour récupérer des résumés produits publics.
curl --compressed "https://api.attraction.com/v1/products?locale=fr-CA"Les réponses de catalogue prennent en charge gzip. L'option --compressed demande une réponse compressée et laisse cURL la décompresser automatiquement.
Lister les produits
Récupère des résumés produits pour les catalogues, les pages de liste, la recherche, les filtres et l'exploration des couleurs.
Requête publique
curl --compressed "https://api.attraction.com/v1/products?locale=fr-CA"{
"locale": "fr-CA",
"products": [
{
"sku": "100386U",
"slug": "100386u",
"productName": "T-shirt col rond",
"descriptions": {
"tagline": "T-shirt col rond, notre meilleur vendeur. Ethica fabriquée au Canada.",
"short": "T-shirt col rond en jersey en coton biologique et polyester recyclé ou 100 % coton biologique selon la couleur, notre meilleur vendeur, grande variété de couleurs. Ethica fabriquée au Canada."
},
"brand": "Ethica",
"customization": {
"colorBlocks": false
},
"catalog": {
"inspiration": ["Promotionnel"],
"category": "T-shirts",
"for": "Unisexe"
},
"keywords": ["t-shirt","t-shirt personnalisé","col rond","ethica","fabriqué au canada"],
"tag": "Meilleur vendeur",
"minimumOrder": {
"quantity": 36,
"description": "Minimum de 36 unités décorées. Aucun minimum sans décoration."
},
"studio": {
"available": true
},
"pricing": {
"currency": "CAD",
"msrp": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 30.5 },
{ "minQuantity": 24, "maxQuantity": 99, "price": 28 }
]
},
"images": [
{
"url": "https://www.attraction.com/assets/products/100386u/100386u-primary.webp",
"alt": "T-shirt col rond"
}
],
"colors": [
{
"id": "0001",
"pms": "White",
"name": "Blanc",
"swatches": ["#FFFFFF"],
"colorFamilies": [
{
"name": "Blanc",
"hex": "#F8F8F2"
}
],
"images": [
"https://www.attraction.com/assets/products/100386u/100386u-white.webp"
]
}
]
}
],
"categories": [
{
"name": "T-shirts",
"order": 10
}
],
"brands": {
"Ethica": {
"name": "Ethica",
"url": "https://www.attraction.com/products/ethica/",
"description": "Des classiques intemporels, fabriqués au Canada avec des fibres durables."
}
}
}Obtenir le détail d'un produit
Récupère un produit pour une page produit, une synchronisation de catalogue, une vérification d'inventaire, une consultation des médias et ressources ou une compatibilité de décoration.
Requête publique
Détail produit, prix de détail suggérés, tailles disponibles et leurs suppléments, inventaire, métadonnées de couleur, matières, médias, liens de ressources et méthodes de décoration compatibles, sans authentification.
curl "https://api.attraction.com/v1/products/100386U?locale=fr-CA"{
"sku": "100386U",
"slug": "100386u",
"locale": "fr-CA",
"productName": "T-shirt col rond",
"descriptions": {
"tagline": "T-shirt col rond, notre meilleur vendeur. Ethica fabriquée au Canada.",
"short": "T-shirt col rond en jersey en coton biologique et polyester recyclé ou 100 % coton biologique selon la couleur, notre meilleur vendeur, grande variété de couleurs. Ethica fabriquée au Canada.",
"long": "T-shirt col rond. Matière : jersey en coton biologique et polyester recyclé ou 100 % coton biologique selon la couleur. Particularités : notre meilleur vendeur, grande variété de couleurs."
},
"keywords": ["t-shirt","t-shirt personnalisé","col rond","ethica","fabriqué au canada"],
"note": "Pour les femmes, optez pour une taille inférieure à celle que vous auriez sélectionnée (M=P), puisqu'il s'agit d'un style unisexe.",
"brand": {
"name": "Ethica",
"url": "https://www.attraction.com/products/ethica/",
"description": "Des classiques intemporels, fabriqués au Canada avec des fibres durables."
},
"insufficientInventoryMessage": "Inventaire insuffisant pour votre projet? Les styles Ethica peuvent généralement être produits rapidement. Contactez-nous et nous confirmerons les délais.",
"catalog": {
"inspiration": ["Promotionnel"],
"category": "T-shirts",
"for": "Unisexe"
},
"links": {
"studio": "https://studio.jameo.com/home?lang=fr"
},
"tag": "Meilleur vendeur",
"minimumOrder": {
"quantity": 36,
"description": "Minimum de 36 unités décorées. Aucun minimum sans décoration."
},
"customization": {
"colorBlocks": false,
"decorations": [
{
"name": "Impression numérique (DTG)",
"note": "",
"icon": "https://www.attraction.com/assets/icons/digital-printing.svg",
"link": "https://www.attraction.com/decoration/#digital-printing"
}
]
},
"studio": {
"available": true
},
"pricing": {
"currency": "CAD",
"msrp": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 30.5 },
{ "minQuantity": 24, "maxQuantity": 99, "price": 28 }
],
"sizes": [
{ "name": "TP" },
{ "name": "2XL", "surcharge": { "msrp": 4.5 } }
]
},
"images": [
{
"url": "https://www.attraction.com/assets/products/100386u/100386u-primary.webp",
"alt": "T-shirt col rond"
}
],
"assets": {
"images": [
{
"url": "https://www.attraction.com/assets/products/100386u/100386u-primary.webp",
"alt": "T-shirt col rond"
}
],
"resources": [
{
"type": "sizeChart",
"label": "Charte des tailles",
"url": "https://www.attraction.com/assets/products/100386u/100386u.pdf"
}
]
},
"colors": [
{
"id": "0001",
"pms": "White",
"name": "Blanc",
"material": {
"composition": "50 % coton biologique, 50 % polyester recyclé",
"weight": "7,4 oz/vg lin. (150 gsm)",
"gsm": 150
},
"swatches": ["#FFFFFF"],
"colorFamilies": [
{
"name": "Blanc",
"hex": "#F8F8F2"
}
],
"images": [
"https://www.attraction.com/assets/products/100386u/100386u-white.webp"
]
}
],
"inventory": [
{ "colorId": "0001", "size": "TP", "quantity": 124 }
]
}Prix réduits
Dans chaque palier, price est le prix courant. regularPrice n'apparaît que si ce prix est réduit (un rabais) et indique alors le prix régulier d'origine. La même convention s'applique à pricing.msrp et pricing.net.
{
"pricing": {
"msrp": [
{ "minQuantity": 1, "maxQuantity": 23, "regularPrice": 30, "price": 25 }
],
"net": [
{ "minQuantity": 1, "maxQuantity": 23, "regularPrice": 18, "price": 15 }
]
}
}Prix nets via API
En ajoutant une clé API associée à un compte, la réponse retournera aussi le prix net pricing.net du compte.
Le détail produit indique le palier du compte dans pricing.priceTier; les points d'accès réservés aux prix retournent priceTier à la racine. Une clé suit le palier de son compte. Un changement de palier peut prendre jusqu'à 60 secondes à apparaître dans les réponses de l'API.
La liste de produits, /v1/products, reste au prix de détail suggéré seulement, avec ou sans clé. Le point d'accès de prix en lot ci-dessous permet de tarifer tout un catalogue.
Requête authentifiée
curl -H "Authorization: Bearer $ATTRACTION_API_KEY" \
"https://api.attraction.com/v1/products/100386U?locale=fr-CA"{
"sku": "100386U",
"locale": "fr-CA",
"pricing": {
"currency": "CAD",
"priceTier": "A2",
"msrp": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 30.5 }
],
"net": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 22.75 }
],
"sizes": [
{ "name": "TP" },
{ "name": "2XL", "surcharge": { "msrp": 4.5, "net": 3.4 } }
]
}
}Prix pour un seul produit
GET /v1/products/{sku}/pricing retourne les mêmes données de prix que le détail produit, sans le reste du produit, illustrée dans la réponse ci-contre. Il n'a aucune représentation publique : une clé API est toujours requise, et un appel sans authentification reçoit 401 key_required plutôt qu'une réponse anonyme au prix de détail suggéré.
curl -H "Authorization: Bearer $ATTRACTION_API_KEY" \
"https://api.attraction.com/v1/products/100386U/pricing?locale=fr-CA"{
"sku": "100386U",
"currency": "CAD",
"priceTier": "A2",
"msrp": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 30.5 }
],
"net": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 22.75 }
],
"sizes": [
{ "name": "TP" },
{ "name": "2XL", "surcharge": { "msrp": 4.5, "net": 3.4 } }
]
}Prix pour tout le catalogue
GET /v1/products/pricing retourne ces mêmes données de prix pour tous les produits de la locale demandée, en une seule réponse dont les entrées sont triées par sku. Ce point d'accès permet de mettre à jour les prix d'un catalogue déjà stocké. Comme la route à un seul produit, il exige toujours une clé API.
curl -H "Authorization: Bearer $ATTRACTION_API_KEY" \
"https://api.attraction.com/v1/products/pricing?locale=fr-CA"{
"currency": "CAD",
"priceTier": "A2",
"products": [
{
"sku": "100222U",
"msrp": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 42 }
],
"net": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 31.5 }
],
"sizes": [
{ "name": "2XL", "surcharge": { "msrp": 5, "net": 3.75 } }
]
},
{
"sku": "100386U",
"msrp": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 30.5 }
],
"net": [
{ "minQuantity": 1, "maxQuantity": 23, "price": 22.75 }
],
"sizes": [
{ "name": "TP" },
{ "name": "2XL", "surcharge": { "msrp": 4.5, "net": 3.4 } }
]
}
]
}Authentification
Pour lire les prix nets de votre compte, envoyez sa clé API dans l'en-tête Authorization: Bearer attr_sk_... de chaque requête concernée.
Les clés sont en lecture seule, n'expirent jamais et se révoquent en tout temps; un compte en détient au plus 10 actives. Sur les points d'accès au détail produit et aux prix, une clé inutilisable reçoit un 401 (invalid_key ou key_revoked) plutôt qu'un repli silencieux vers le prix de détail suggéré.
La révocation d'une clé peut prendre jusqu'à 60 secondes à s'appliquer aux réponses de l'API, le temps que sa vérification en cache expire.
Les comptes Studio Attraction sont réservés aux distributeurs. Un compte déjà rattaché à un distributeur Attraction donne automatiquement accès à Studio, à son palier de prix et à la création de clés API. Pour les autres distributeurs, ces accès sont activés après l'approbation de notre équipe.
Limites de débit
Les quotas de requêtes, les en-têtes de réponse et les délais avant une nouvelle tentative sont documentés dans la politique de limites d'appel de l'API REST.
Versions et dépréciation
Consultez la politique de compatibilité de l'API REST et le journal des intégrations pour les avis de dépréciation et les migrations nécessaires.
Réponses d'erreur
Les erreurs sont des objets conformes à la RFC 9457, servis en application/problem+json. Les exemples ci-dessous montrent la structure des réponses; chaque code mène à sa cause et aux actions correctives. Les requêtes de produits publics fonctionnent sans identifiants, mais les deux points d'accès aux prix exigent une clé API.
code est l’une des valeurs suivantes : route_not_found, method_not_allowed, invalid_request, unsupported_locale, invalid_sku, unauthorized, key_required, invalid_key, key_revoked, product_not_found, rate_limited, upstream_unavailable, internal_error.
unsupported_locale
400 quand locale n'est pas en-CA, en-US ou fr-CA.
{
"type": "https://www.attraction.com/developers/#error-unsupported_locale",
"title": "Unsupported locale",
"status": 400,
"detail": "Supported locales are en-CA, en-US, and fr-CA.",
"instance": "/v1/products",
"code": "unsupported_locale"
}key_revoked
401 lorsque la clé API a été révoquée, ou que le compte Attraction derrière elle n'a plus de prix distributeur.
{
"type": "https://www.attraction.com/developers/#error-key_revoked",
"title": "API key revoked",
"status": 401,
"detail": "This API key is no longer active: it was revoked, or the Attraction account behind it no longer holds distributor pricing. Check the key and the account at https://www.attraction.com/api/keys/.",
"instance": "/v1/products/100386u",
"code": "key_revoked"
}product_not_found
404 pour /v1/products/{sku} lorsque le SKU n'existe pas.
{
"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"
}rate_limited
429 lorsque la requête dépasse la limite de débit de v1.
{
"type": "https://www.attraction.com/developers/#error-rate_limited",
"title": "Too many requests",
"status": 429,
"detail": "The default rate limit is 600 requests per minute per client IP. Retry after the window resets.",
"instance": "/v1/products",
"code": "rate_limited"
}