---
title: "Every filter value with its live count."
method: GET
path: "/v1/meta/facets"
tags: ["meta"]
---

# Every filter value with its live count.

`GET /v1/meta/facets`

## Request

- Base URL: `https://api.jobopportunitiesapi.org`
- URL: `https://api.jobopportunitiesapi.org/v1/meta/facets`
- Auth: HTTP bearer

Facet keys: `family`, `country`, `city`, `remote`, `employment`,
`seniority`, `source_type`, `remote_source`, `provider`, `field`, and
the legacy `source`.

`remote_source` counts the provenance split itself — how much of the
ledger's remote status is stated and how much is our inference.
`provider` is every source name `?provider=` accepts, with its live row
count. `field` is how many live rows carry each field as `published`
rather than inferred — the population `require_fields` selects from.

## Response `200`

Facet counts.

- object
  - `data` object
  - `generated_at` string, date-time: When these counts were computed. The whole table is rebuilt in one transaction, so this describes all of it. Without it, a facet total that differs from /public/coverage by a few thousand rows is indistinguishable from a real disagreement — the ledger moves by thousands an hour.

## Other responses

- `401`: Missing, unknown, revoked or expired key. All four are reported identically.
- `429`: Over your plan's per-minute or per-day limit. `Retry-After` says how long (seconds to the next minute boundary, or to UTC midnight on a daily breach). The body says exactly when the limit resets (`resets_at`, `resets_at_text`) and, when a higher plan exists, links a same-key upgrade (`upgrade_url`).

---

[API](https://skmtc.dev/jobopportunitiesapi/apis/job-opportunities-api.md) · [All operations](https://skmtc.dev/jobopportunitiesapi/apis/job-opportunities-api/llms.txt) · [OpenAPI document](https://skmtc.dev/jobopportunitiesapi/apis/job-opportunities-api/revisions/b5ef9709a0c9?raw)
