---
title: "List gifts with prices and requirements"
method: GET
path: "/catalog"
tags: ["Catalog"]
---

# List gifts with prices and requirements

`GET /catalog`

## Request

- Base URL: `https://gtmswag.com/api/v1`
- URL: `https://gtmswag.com/api/v1/catalog`
- Auth: none required

Public, no key needed, not rate limited. Includes retired products for history; choose only `retired:false` with `available` not false for new campaigns. Prices are USD cents; `shippingQuoteRequired` means delivery is quoted separately. MCP `search_gifts` ranks gifts for a goal and budget.

## Response `200`

Success: `{"data": [CatalogProduct]}`.

- CatalogProductListResponse: The success body: `{"data": [CatalogProduct]}`.
  - `data` CatalogProduct[], required
    - `id` string, required: Product ID; copy it into productId.
    - `name` string, required
    - `tagline` string, required
    - `description` string, required
    - `category` string, required
    - `priceCents` integer, required: Gift price in USD cents.
    - `shippingCents` integer, required: Shipping in USD cents.
    - `leadDays` string, required
    - `color` string, required
    - `image` string, required: Image path on https://gtmswag.com.
    - `personalization` string[], required
    - `occasion` string, required
    - `message` string, required
    - `verified` boolean, required: False means planning estimates that still need confirmation.
    - `retired` boolean: Kept for history; never choose a retired gift.
    - `available` boolean
    - `featured` boolean
    - `fixedPrice` boolean
    - `estimateIncludesDelivery` boolean
    - `priceQuoteRequired` boolean
    - `shippingQuoteRequired` boolean
    - `requiresArtwork` boolean
    - `requiresPortrait` boolean
    - `fulfillmentKind` 'standard' | 'food' | 'alcohol'
    - `catalogStatus` 'sourced'
    - `giftType` 'desk' | 'treats' | 'surprises' | 'wearables' | 'drinks' | 'carry' | 'comfort'
    - `imageLabel` string
    - `deliveryNote` string
    - `dietaryNote` string
    - `example` object
      - `occasion` string
      - `artwork` string
    - `quoteDetails` object
      - `configuration` string
      - `decoration` string
      - `inputs` string[]
      - `proof` string
    - `personalizationText` object
      - `label` string
      - `maxLength` integer
      - `maxLines` integer
      - `lineMaxLength` integer
      - `firstLineRequired` boolean
      - `allowedCharacters` string
      - `help` string
    - `recipientDetails` object[]: Facts collected for each recipient in recipient.details, keyed by key. Required fields must be filled before approval.
      - `key` string
      - `label` string
      - `help` string
      - `kind` 'text' | 'url'
      - `maxLength` integer
      - `required` boolean

## Other responses

- `default`: Any other refusal or failure, such as 403 CSRF (a cross-origin `Origin` header), 403 HTTPS_REQUIRED or 500 INTERNAL_ERROR, with what to do next.

---

[API](https://skmtc.dev/gtmswag/apis/gtm-swag-api.md) · [All operations](https://skmtc.dev/gtmswag/apis/gtm-swag-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gtmswag/apis/gtm-swag-api/revisions/9ff86fa99afe?raw)
