Instant Quotes • Sample Ordering • Live Stock
Swagg MerchPromotional Gifts

Developers

Swagg Merch Catalogue API.

Put our full range — live stock, trade pricing, colours, branding and templates — straight onto your own website.

1. Your key

Each reseller receives a private key that looks like swg_1a2b3c4d_…. Send it on every request as an X-Api-Key header. Keep it server-side — never expose it in browser JavaScript.

curl -H "X-Api-Key: YOUR_KEY" \
  "https://www.swaggmerch.com/api/public/v1/AUD/products?page=1&limit=50"

2. Currencies

Choose the currency in the URL. Prices exclude tax (GST is added at checkout: 10% AU, 15% NZ).

  • https://www.swaggmerch.com/api/public/v1/AUD/products
  • https://www.swaggmerch.com/api/public/v1/NZD/products
  • https://www.swaggmerch.com/api/public/v1/USD/products

3. Endpoints

EndpointReturnsQuery options
GET /{currency}/productsPaginated catalogue: identity, images, colours, variants, live stock, trade price ladder, branding options and template links.page, limit (max 200), category, search, in_stock=true, updated_since=ISO date, branding=false, format=csv
GET /{currency}/products/{code}One product by Swagg item code (SWG-BAG-6862) or product slug.
GET /{currency}/stockLightweight live stock feed per variant — poll this often instead of the full catalogue.page, limit (max 500)

Add &format=csv to the products endpoint for a spreadsheet/importer-friendly export (one row per product colour).

4. Example response

{
  "currency": "AUD",
  "pagination": { "page": 1, "limit": 50, "total": 4412, "next_page": 2 },
  "products": [
    {
      "code": "SWG-BAG-6862",
      "name": "Tempest Vacuum Travel Backpack",
      "url": "https://www.swaggmerch.com/product/tempest",
      "description": { "short": "...", "full": "..." },
      "material": "600D polyester",
      "moq": 50,
      "measurements": { "size_summary": "30 x 45 x 15 cm", "weight_grams": 620 },
      "packaging": { "units_per_carton": 20, "carton_weight_kg": 13.2 },
      "images": [{ "url": "https://...", "kind": "main", "colour": "Navy" }],
      "colours": [{ "name": "Navy", "hex": "#16213F", "images": ["https://..."], "stock_on_hand": 840 }],
      "sizes": ["S", "M", "L"],
      "variants": [{ "sku": "...", "colour": "Navy", "size": null, "stock_on_hand": 840, "incoming_eta": "2026-09-01" }],
      "stock": { "total_on_hand": 1240, "status": "in_stock" },
      "pricing": {
        "currency": "AUD",
        "tax": "excluding tax",
        "tiers": [{ "quantity": 50, "unit_price": 42.5, "total_price": 2125 }]
      },
      "branding": {
        "template_url": "https://www.swaggmerch.com/branding-template/tempest",
        "options": [{ "method": "Screen print", "position": "Front", "setup_fee": 65, "price_per_unit": 1.2, "max_colours": 4 }]
      }
    }
  ]
}

5. Good practice

  • Sync the full catalogue nightly, then poll /stock hourly for stock changes.
  • Use updated_since for incremental syncs.
  • Cache image URLs for no more than 7 days — they are refreshed regularly.
  • Default rate limit is 120 requests per minute; a 429 response means slow down.
  • Prices are your trade cost. Apply your own retail margin before publishing.

Need a key?

Email hello@swaggmerch.com with your business name, website and the currency you sell in.