Attraction Product API

Bring public Attraction product data into your catalog, product search, or assistant workflow.

Open OpenAPI JSON

Quick start

Run this request from a terminal to fetch public product summaries.

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

List products

Fetch product summaries for catalogs, listing pages, search, and filters.

Query parameter

ParameterRequiredValuesDefault
localeNoen-CA, en-US, fr-CAen-CA

Public request

GET/v1/products
curl "https://api.attraction.com/v1/products?locale=en-CA"
Response
{
  "locale": "en-CA",
  "products": [
    {
      "sku": "100386U",
      "slug": "100386u",
      "productName": "Crewneck T-shirt",
      "brand": "Ethica",
      "descriptions": {
        "short": "A soft unisex crewneck T-shirt made for branded programs."
      },
      "links": {
        "product": "https://www.attraction.com/en-ca/products/100386u/",
        "studio": "https://studio.jameo.com/home?lang=en"
      },
      "pricing": {
        "currency": "CAD",
        "msrp": [
          { "minQuantity": 36, "maxQuantity": 99, "price": 28 },
          { "minQuantity": 100, "maxQuantity": 299, "price": 26 },
          ...
        ]
      },
      "colors": [
        {
          "id": "0001",
          "name": "White",
          "swatches": ["#FFFFFF"]
        },
        ...
      ],
      "inventory": [
        { "colorId": "0001", "size": "XS", "quantity": 149 },
        ...
      ],
      ...
    },
    ...
  ],
  "categories": [
    {
      "name": "T-shirts",
      "order": 10
    },
    ...
  ],
  "brands": [
    {
      "name": "Ethica",
      "description": "Timeless classics, made in Canada with sustainable fibres."
    },
    ...
  ]
}

Get product details

Fetch one product for a product page, catalog sync, inventory check, or asset lookup.

Path parameter

ParameterDescription
skuProduct SKU, for example 100386U.

Query parameter

ParameterRequiredValuesDefault
localeNoen-CA, en-US, fr-CAen-CA

Public request

Fetch product detail, MSRP pricing, inventory, media, and resource links without authentication.

GET/v1/products/{sku}
curl "https://api.attraction.com/v1/products/100386U?locale=en-CA"
Response
{
  "sku": "100386U",
  "slug": "100386u",
  "locale": "en-CA",
  "productName": "Crewneck T-shirt",
  "descriptions": {
    "tagline": "A dependable crewneck for everyday branded apparel.",
    "short": "A soft unisex crewneck T-shirt made for branded programs.",
    "long": "A dependable unisex crewneck T-shirt designed for branded apparel programs that need comfort, consistency, and decoration flexibility."
  },
  "keywords": ["t shirt","custom t shirt","ethica","made in canada"],
  "brand": {
    "name": "Ethica",
    "url": "https://www.attraction.com/en-ca/products/ethica/",
    "description": "Timeless classics, made in Canada with sustainable fibres."
  },
  "catalog": {
    "inspiration": ["Promotional"],
    "category": "T-shirts",
    "for": "Unisex"
  },
  "links": {
    "product": "https://www.attraction.com/en-ca/products/100386u/",
    "brand": "https://www.attraction.com/en-ca/products/ethica/",
    "category": "https://www.attraction.com/en-ca/products/?cat=t-shirts",
    "studio": "https://studio.jameo.com/home?lang=en"
  },
  "tag": "Best seller",
  "minimumOrder": {
    "quantity": 36,
    "description": "Minimum 36 decorated units. No minimum undecorated."
  },
  "customization": {
    "colorBlocks": false,
    "decorations": [],
    "options": []
  },
  "pricing": {
    "currency": "CAD",
    "msrp": [
      { "minQuantity": 36, "maxQuantity": 99, "price": 28 },
      { "minQuantity": 100, "maxQuantity": 299, "price": 26 },
      ...
    ]
  },
  "assets": {
    "images": [
      {
        "url": "https://www.attraction.com/assets/products/100386u/100386u-primary.webp",
        "alt": "White Ethica crewneck T-shirt"
      },
      ...
    ],
    "resources": [
      {
        "type": "sizeChart",
        "label": "Size chart",
        "url": "https://attraction.com/assets/products/100386u/100386u.pdf"
      },
      ...
    ]
  },
  "colors": [
    {
      "id": "0001",
      "name": "White",
      "swatches": ["#FFFFFF"],
      "colorFamilies": []
    },
    ...
  ],
  "inventory": [
    { "colorId": "0001", "size": "XS", "quantity": 149 },
    ...
  ]
}

Net pricing through the API

Public endpoints return product content, MSRP pricing, inventory, media, and resources. Authenticated API access for account-specific net pricing is coming later.

Error responses

Errors use the same status, code, and message fields. Missing authentication does not error because product data is public.

unsupported_locale

400 when locale is not one of en-CA, en-US, or fr-CA.

json
{
  "status": 400,
  "code": "unsupported_locale",
  "message": "Supported locales are en-CA, en-US, and fr-CA."
}

product_not_found

404 for /v1/products/{sku} when the SKU does not exist.

json
{
  "status": 404,
  "code": "product_not_found",
  "message": "Product not found."
}

rate_limited

429 when the request exceeds the v1 rate limit.

json
{
  "status": 429,
  "code": "rate_limited",
  "message": "Too many requests. Please retry later."
}