---
title: "Search and page through public artifacts."
method: GET
path: "/api/artifacts"
tags: ["Artifacts"]
deprecated: true
---

# Search and page through public artifacts.

`GET /api/artifacts`

## Request

- Base URL: `https://huggingbay.xyz`
- URL: `https://huggingbay.xyz/api/artifacts`
- Auth: none declared

> **Deprecated.**

Alias of /api/v1/search (recorded; identical handler). Prefer the recorded path: this one already answers with Deprecation and Sunset headers.

**Inputs.** Path, query and header fields are listed below. No request body is required.

**Outputs.** See each status below for its media type, schema and headers. A missing record or unavailable capability is not a successful empty result.

**Errors.** API JSON failures use the documented response schema. Read code, message and next; retry only when the response allows it. Auth, invalid input and missing records need a caller change.

**Rate limits.** Public read budgets apply by client IP and route group. This operation can have a smaller route-specific budget. Read Retry-After on 429 or retryable 503 responses.

## Query parameters

- `summary` '1'
- `q` string
- `explain` '1'
- `semantic` '1'
- `type` string
- `license` string
- `task` string
- `size` 'small' | 'medium' | 'large'
- `format` string
- `worksWith` 'ollama' | 'lm-studio' | 'comfyui' | 'transformers' | 'llama.cpp'
- `owner` string
- `source` string
- `hosting` string
- `reviewStatus` 'first-review' | 'needs-evidence' | 'reviewed' | 'benchmark'
- `facets` '1'
- `sort` 'best' | 'ready' | 'mirrorable' | 'trust' | 'rating' | 'updated' | 'downloads' | 'stars' | 'demand' | 'name' | 'size' | 'license'
- `limit` integer
- `cursor` string
- `compat` 'containment'

## Response `200`

Artifact page

- ArtifactPage
  - `rows` ArtifactSummary[], required (unresolved $ref)
  - `unknownSizeExcluded` integer: Matching records excluded by the size filter because the default download has no complete recorded byte size. Counted before pagination with the other query filters applied.
  - `total` number, required
  - `limit` number, required
  - `cursor` string, required
  - `nextCursor` string, nullable, required
  - `facets` FacetCounts (unresolved $ref)
  - `facetsApproximate` boolean: True when facet counts cover a bounded search candidate set or returned page rather than the complete matching catalog.
  - `facetsScope` 'bounded-search-candidates' | 'returned-search-page' | 'degraded-fallback-results' | 'no-match'
  - `facetsPartial` boolean: True when facets cover only the returned page because complete matching-catalog facet counts were unavailable within the bounded search deadline.
  - `facetsUnavailable` boolean: True when no facet counts could be derived because the bounded result page was empty and no complete cached facet result was available.
  - `facetsGeneratedAt` string, date-time: Timestamp for the returned complete or page-scoped facet result.
  - `estimatedTotal` boolean: True when total is bounded or estimated and must not be treated as the complete matching catalog count. Within one query the total is stable across every cursor page.
  - `degraded` boolean: True only when the response came from a degraded, stale, or fallback catalog read after a backend error. A well-formed query with no matches is degraded:false, partial:false, total:0 with reason:"no_match".
  - `partial` boolean: True when returned rows may omit matching catalog entries because of a backend error; zero rows or totals are then not authoritative. Never set on a clean no-match page.
  - `reason` 'no_match' | 'cursor_past_end': Why a healthy response carries zero rows: no_match (nothing matched; total is 0) or cursor_past_end (the cursor is beyond the stable total; nextCursor is null).
  - `retryable` boolean: True when retrying may recover a more complete catalog response.
  - `retryAfterSeconds` integer: Suggested minimum delay before retrying a degraded catalog response.
  - `warning` string
  - `fastPath` string
  - `recommendation` object
    - `action` string, required
    - `filters` string[], required
    - `message` string, required
  - `explain` object
    - `query` string, required
    - `tokens` string[], required
    - `expandedTokenGroups` array[], required
      - string[]
    - `mode` string, required
    - `note` string
    - `semantic` object
  - `generatedAt` string, required

## Other responses

- `400`: Error envelope (see components.schemas.ErrorEnvelope).

---

[API](https://skmtc.dev/huggingbay/apis/hugging-bay-public-api.md) · [All operations](https://skmtc.dev/huggingbay/apis/hugging-bay-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/huggingbay/apis/hugging-bay-public-api/revisions/63c474bf0fe4?raw)
