API produits Attraction

Intégrez les données produits publiques d'Attraction à votre catalogue, votre recherche ou vos assistants.

Ouvrir l'OpenAPI JSON

Démarrage rapide

Exécutez cette requête depuis un terminal pour récupérer des résumés produits publics.

bash
curl "https://api.attraction.com/v1/products?locale=fr-CA"

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.

Paramètre de requête

ParamètreRequisValeursValeur par défaut
localeNonen-CA, en-US, fr-CAfr-CA

Requête publique

GET/v1/products
curl "https://api.attraction.com/v1/products?locale=fr-CA"
Réponse
{
  "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, "regularPrice": 30.5, "price": 30.5 },
          { "minQuantity": 24, "maxQuantity": 99, "regularPrice": 28, "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.

Paramètre de chemin

ParamètreDescription
skuSKU du produit, par exemple 100386U.

Paramètre de requête

ParamètreRequisValeursValeur par défaut
localeNonen-CA, en-US, fr-CAfr-CA

Requête publique

Récupérez le détail produit, les prix de détail suggérés, les tailles disponibles et leurs suppléments, l'inventaire, les métadonnées de couleur, les matières, les médias, les liens de ressources et les méthodes de décoration compatibles sans authentification.

GET/v1/products/{sku}
curl "https://api.attraction.com/v1/products/100386U?locale=fr-CA"
Réponse
{
  "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",
  "materials": [
    {
      "code": "JERSEY",
      "label": "Jersey"
    }
  ],
  "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, "regularPrice": 30.5, "price": 30.5 },
      { "minQuantity": 24, "maxQuantity": 99, "regularPrice": 28, "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",
      "weight": "7,4 oz/vg lin. (150 gsm)",
      "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 et regularPrice le prix régulier avant rabais; si price < regularPrice, le palier est réduit, sinon il ne l’est pas. La même convention s’applique à pricing.msrp et pricing.net.

Réponse
{
  "pricing": {
    "msrp": [
      { "minQuantity": 1, "maxQuantity": 23, "regularPrice": 30, "price": 25 }
    ],
    "net": [
      { "minQuantity": 1, "maxQuantity": 23, "regularPrice": 18, "price": 15 }
    ]
  }
}

Prix nets via API

Les points d'accès publics retournent les contenus produits, les prix de détail suggérés, les tailles disponibles, les suppléments PDSF par taille, l'inventaire, les métadonnées de couleur, les médias, les ressources et les décorations dans le détail produit. L'authentification par jeton Bearer/API pour les prix nets propres au compte n'est pas encore disponible.

Authentification

Les données produit publiques ne demandent ni clé ni compte connecté : listes de produits, détail produit, couleurs, tailles, inventaire en temps réel, prix de détail suggéré, images et compatibilité de décoration sont toutes en lecture libre. Les clés API de compte pour les prix nets distributeurs ne sont pas encore offertes; la page des clés API reste masquée jusqu'à ce lancement.

Limites de débit

Chaque réponse sous /v1/products porte des en-têtes de limite de débit pour une politique nommée "default" : 600 requêtes par minute par IP cliente. Ce chiffre est indicatif et suivi par instance de l'API, pas par un compteur global unique — ne dimensionnez pas une intégration en vous fiant strictement à 600/min. L'infrastructure applique aussi un plafond strict de 100 requêtes par seconde (rafale de 200), indépendamment du compteur indicatif. RateLimit-Policy: "default";q=600;w=60 et RateLimit: "default";r=<remaining>;t=<seconds> suivent draft-ietf-httpapi-ratelimit-headers. Une requête au-delà de la limite reçoit un 429 avec Retry-After — respectez-le toujours. Les points d'accès de catalogue servent aussi le gzip : envoyez Accept-Encoding: gzip; la liste de produits d'environ 274 Ko se compresse à environ 24 Ko.

Versions et dépréciation

L'API 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 plutôt que de modifier /v1 en place; les changements additifs, comme un nouveau champ ou un nouveau paramètre optionnel, ne changent jamais la version. Les dépréciations sont annoncées au moins trois mois à l'avance, avec des en-têtes Deprecation (RFC 9745) et Sunset (RFC 8594) indiquant la date de retrait.

Réponses d'erreur

Les erreurs sont des objets problem+json conformes à la RFC 9457, servis en application/problem+json, avec les champs type, title, status, detail, instance et code. L'absence d'authentification ne retourne pas d'erreur, puisque les données produits sont publiques. Chaque code a sa propre URI type dans la référence complète des erreurs, sur /developers/#errors.

code est l’une des valeurs suivantes : route_not_found, method_not_allowed, invalid_request, unsupported_locale, invalid_sku, unauthorized, product_not_found, rate_limited, upstream_unavailable, internal_error.

unsupported_locale

400 quand locale n'est pas en-CA, en-US ou fr-CA.

json
{
  "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"
}

product_not_found

404 pour /v1/products/{sku} lorsque le SKU n'existe pas.

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"
}

rate_limited

429 lorsque la requête dépasse la limite de débit de v1.

json
{
  "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"
}