---
title: "Returns NLRB (National Labor Relations Board) case filings: unfair- labor-practice charges and union representation/election petitions"
method: GET
path: "/v1/nlrb-cases"
---

# Returns NLRB (National Labor Relations Board) case filings: unfair- labor-practice charges and union representation/election petitions

`GET /v1/nlrb-cases`

## Request

- Base URL: `https://api.keyvex.com`
- URL: `https://api.keyvex.com/v1/nlrb-cases`
- Auth: API key in header `x-api-key`

Returns NLRB (National Labor Relations Board) case filings: unfair- labor-practice charges and union representation/election petitions. Use this when the user asks about: union organizing at a company, labor disputes or ULP charges, union election petitions and outcomes, decertification efforts, or a company's labor-relations record.  Case numbers follow {region}-{type}-{sequence}, e.g. '03-CA-390171' (NLRB Region 03, CA charge). The middle code determines the case family: C-cases are ULP CHARGES against an employer (CA) or a union (CB, CC, CD, CE, CG, CP) — allegations of unlawful labor practices. R-cases are REPRESENTATION petitions — RC (union seeks certification), RD (employees seek decertification), RM (employer-filed), plus UD/UC/AC unit matters. Each record carries case_type ('ULP' or 'representation') and case_subtype (the raw code).  The `name` field is the named party on the filing — usually the employer, but on CB/CC-type charges it is the union being charged. employer_name matches against it as a substring. Representation cases carry eligible_voters, certified_representative (filled after a won election), and unit_sought (the bargaining-unit description).  FRESHNESS CAVEAT: cases mutate after filing — status flips Open→Closed and date_closed / reason_closed / certified_representative fill in later. The daily sync re-pulls a trailing 180-day date_filed window, so those fields on cases FILED MORE THAN ~180 DAYS AGO may lag the source until a periodic full re-pull; the source_url case page is always current.  Filter combinations note: server-side indexes support ONE of state / case_type combined with the date_filed sort + since/until. Other filters (employer_name substring, case_subtype, status, region, state+case_type together) post-filter client-side over a widened fetch window.  Pure-publisher posture: NLRB's public case rows as published — no outcome scoring. Each record's source_url links to the nlrb.gov public case page (which also carries docket activity and related documents not in this dataset).

## Query parameters

- `case_number` string
- `employer_name` string
- `state` string
- `case_type` 'ULP' | 'representation'
- `case_subtype` string
- `status` 'Open' | 'Closed'
- `region` string
- `since` string
- `until` string
- `sort_by` 'date_filed'
- `sort_order` 'asc' | 'desc'
- `limit` integer

## Response `200`

JSON envelope: { results: [...], count, has_more }.

## Other responses

- `400`: Invalid parameter.
- `401`: Missing or invalid API key.
- `402`: This tool requires a higher plan (upgrade_required). Retrying will not help.
- `429`: Tier rate/quota limit reached (rate_limited). Retry-After points at the reset.

---

[API](https://skmtc.dev/keyvex/apis/keyvex-api.md) · [All operations](https://skmtc.dev/keyvex/apis/keyvex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/keyvex/apis/keyvex-api/revisions/01c0210c19cd?raw)
