---
title: "Search the public print catalogue"
method: GET
path: "/api/prints"
tags: ["Product discovery"]
---

# Search the public print catalogue

`GET /api/prints`

## Request

- Base URL: `https://api.createprints.ai`
- URL: `https://api.createprints.ai/api/prints`
- Auth: none required

Searches every published print by free text and by any combination of attributes. Values within one attribute are OR-ed and attributes are AND-ed together, so `colour=Blue&colour=Green&room=Bedroom` means (blue or green) and bedroom. Each attribute accepts repeated parameters or a comma-separated list, and matches case-insensitively with dashes, underscores and spaces treated alike, so `red-orange` and `Red Orange` are the same value. Set `facets=1` to receive the remaining attribute values with the count of prints each would yield, which is the reliable way to narrow a search without guessing at vocabulary. Use the returned `id` with the checkout and print-option endpoints.

## Query parameters

- `q` string
- `colour` string
- `room` string
- `trait` string
- `impact` string
- `keyword` string
- `palette` string
- `featured` '1' | 'true'
- `similarTo` string, uuid
- `sort` 'relevance' | 'newest' | 'oldest' | 'featured' | 'similar'
- `limit` integer
- `offset` integer
- `page` integer
- `facets` '1' | 'true'

## Response `200`

Matching prints, the total match count, and optionally the facet counts.

- PrintSearchResult
  - `prints` CataloguePrint[], required
    - `id` string, uuid, required: Use this as `jobId` when creating a checkout.
    - `title` string, nullable
    - `description` string, nullable
    - `imagePaths` string[], required
    - `colorCategory` string, nullable
    - `recommendedRoom` string[]
    - `colorPsychologyPrimaryTrait` string, nullable
    - `colorPsychologyImpactLevel` string, nullable
    - `keywords` string[]
    - `paletteColors` string[]: Named colours extracted from the artwork. The `palette` filter also matches on colorCategory, so it can match a print whose list here is empty.
    - `createdAt` string, date-time, nullable
    - `width` integer, nullable
    - `height` integer, nullable
    - `aspectRatio` number, nullable
    - `orientation` 'portrait' | 'landscape' | 'square' | 'null', nullable
  - `total` integer, required: Full match count, so a pager needs no second request.
  - `limit` integer, required
  - `offset` integer, required
  - `hasMore` boolean, required
  - `sort` 'relevance' | 'newest' | 'oldest' | 'featured' | 'similar', required
  - `q` string, nullable
  - `appliedFilters` object
  - `facets` PrintSearchFacets: Available values per attribute. A facet's counts ignore that facet's own selection, so a second value can always be added to widen the search.
    - `colour` FacetOption[]
      - `value` string, required: Pass this back as the filter value.
      - `slug` string, required
      - `count` integer, required: Prints this value would yield alongside the other filters already applied. Zero means the combination is empty.
      - `selected` boolean, required
    - `room` FacetOption[]
      - `value` string, required: Pass this back as the filter value.
      - `slug` string, required
      - `count` integer, required: Prints this value would yield alongside the other filters already applied. Zero means the combination is empty.
      - `selected` boolean, required
    - `trait` FacetOption[]
      - `value` string, required: Pass this back as the filter value.
      - `slug` string, required
      - `count` integer, required: Prints this value would yield alongside the other filters already applied. Zero means the combination is empty.
      - `selected` boolean, required
    - `impact` FacetOption[]
      - `value` string, required: Pass this back as the filter value.
      - `slug` string, required
      - `count` integer, required: Prints this value would yield alongside the other filters already applied. Zero means the combination is empty.
      - `selected` boolean, required
    - `keyword` FacetOption[]
      - `value` string, required: Pass this back as the filter value.
      - `slug` string, required
      - `count` integer, required: Prints this value would yield alongside the other filters already applied. Zero means the combination is empty.
      - `selected` boolean, required
    - `palette` FacetOption[]
      - `value` string, required: Pass this back as the filter value.
      - `slug` string, required
      - `count` integer, required: Prints this value would yield alongside the other filters already applied. Zero means the combination is empty.
      - `selected` boolean, required
  - `truncated` boolean: Present only when the catalogue outgrew the search index and the answer is partial.

## Other responses

- `503`: The catalogue is temporarily unavailable.

---

[API](https://skmtc.dev/createprints/apis/create-prints-api.md) · [All operations](https://skmtc.dev/createprints/apis/create-prints-api/llms.txt) · [OpenAPI document](https://skmtc.dev/createprints/apis/create-prints-api/revisions/05c57f496d51?raw)
