---
name: 1stauthor-uk_eu_law
description: The 1stAuthor uk_eu_law domain.
---

# 1stAuthor UK & EU Law

50.0k UK and EU legal instruments: 42.3k EU (EUR-Lex — 16.7k REG, 12.6k REG_IMPL, 11.2k DEC, 1,683 DIR) plus 7.7k UK (legislation.gov.uk — nisr / ukpga / asp / asc / ssi / nia / ukla). Norm types (the same closed set as us_law), regulated parties, penalties, defined terms, deadlines, cross-references and bilingual summaries are model-extracted. No vectors: structured filters plus bilingual full-text search in Postgres.

Base URL `https://api.1stauthor.com`. Every call takes `Authorization: Bearer $FA_API_KEY`; the free samples named below work without a key. Free sample id: `eu:32016R0679`, free sample query: `data protection`.

## Three verbs, every domain

```
POST /v1/{domain}/search  {query, filters?, top_k?}      → hits[].id + a card each
GET  /v1/{domain}/read/{id}?level=brief|detail|full      → read as deep as you need
POST /v1/{domain}/ask     {query, effort: low|medium|high} → an answer with real citations
```

`read` also takes `extra=<side>` for another side of the same document and `format=json|md|html`.
At `level=full`, `section=<name>` reads one section and `characters=N` the first N characters.

## Start here

- **Find an EU regulation** — `POST /v1/uk_eu_law/search {"query": "personal data", "filters": {"jurisdiction": "eu", "kind": "REG"}}`
- **UK statutes that carry penalties** — `POST /v1/uk_eu_law/search {"query": "数据保护", "filters": {"jurisdiction": "uk", "norm_types": "penalty"}}`
- **Read one** — `GET /v1/uk_eu_law/read/eu:32016R0679`

## Search filters

| field | type | meaning |
|---|---|---|
| `date` | datetime · range | Date adopted or signed, range |
| `jurisdiction` | keyword · eq any | uk (7,726) or eu (42.3k) |
| `kind` | keyword · eq any | Instrument type. EU: REG / REG_IMPL / DEC / DIR / DIR_IMPL. UK: ukpga (Act of Parliament) / asp (Scotland) / nia (Northern Ireland) / asc (Wales) / nisr / ssi / ukla |
| `norm_types` | keyword · eq any | Norm type (same closed set as us_law): obligation / prohibition / permission_or_authority / definition / procedure / penalty / effective_date_or_transition … (several allowed) |
| `status` | keyword · eq any | repealed means repealed (the title carries '(repealed)'); empty means in force or unknown. **EU instruments carry no status information — always empty** |
| `year` | integer · range | Year, range |

Rarely needed, but valid: `title`.

Filters combine with AND; `_or` / `_not` are available. Ranges are `{"gte": n}` / `{"lte": n}`, full text is `{"text": "…"}`.

## Read

| level | credits | returns |
|---|---|---|
| `brief` | 1 | Card: citation, date, doc_id, jurisdiction, kind, norm_types, status, summary… |
| `detail` (default) | 2 | Every structured field (card plus the source abstract and detail fields) |

## Ask

`POST /v1/uk_eu_law/ask {query, effort}` — Agentic Q&A over this domain: with no vector layer, the model turns the question into structured filters plus bilingual full-text search, reads the hits and answers with [uk_eu_law:<doc_id> <title>] citations; /stream is NDJSON with real token deltas. Costs 50 / 100 / 200 credits by effort. Append `/stream` for NDJSON; the first event is always `billing`.

`sources` is the retrieval set, not the citation list — filter it by the ids that appear in `answer`. `answer_truncated` means the answer is incomplete; say so.

## Also here



## Facets

`GET /v1/uk_eu_law/facets?field=<field>` lists the legal values for `jurisdiction`, `kind`, `status` — free, no key. Use it instead of guessing a spelling.

## Working rules

- **Search first, read second.** A search hit is a card; decide from the card which ids deserve a read.
- **Read in layers.** `detail` answers most questions; go to `full` only when the answer is not in it.
- **Filters are declared.** An undeclared filter field is a 400, never a silent no-op. `GET /v1/{domain}` lists what exists.
- **Cite what you read.** Use the citation format below, and say plainly when the corpus has nothing.
- **Failures are not charged.** A 404 costs nothing; an upstream error is refunded. Quote `meta.request_id` when reporting one.

Citation format: `[CELEX 32016R0679]`.

## What this corpus will and will not tell you

- Division of labour with us_law: us_law holds **US** provisions in force (CFR / USC, clause level); uk_eu_law holds **UK statutes and EU instruments** (whole-instrument level). All three jurisdictions share one closed norm_types set, so 'find every data-protection instrument that carries penalties' is one question across domains.
- **The full text is not in Postgres**: path in level=detail points at the original on NAS, and source_url is the official link (EUR-Lex / legislation.gov.uk). So this domain has no level=full — fetch the text from source_url.
- summary_zh exists for about 92%; the other 8% have only the English summary. Both are model-written — not quotes.
- status is meaningful only for UK law (set when the title carries '(repealed)'); EU instruments are always empty, so do not filter EU material on status — it would exclude everything.
- subjects is an open model-generated label set and is not filterable before normalisation; filter on norm_types instead.
- Display requires attribution (see the attribution field): © European Union for the EU part, Open Government Licence v3.0 for the UK part.
- **Terms are ANDed** (every term must match): "personal data processing consent" returns nothing across EU regulations, while dropping 'consent' surfaces the GDPR. Prefer fewer terms plus filters. No vectors: the query runs as an English tsvector and a Chinese zhparser pass whose results are unioned.
- Model-written fields (summarise, do not quote): cross_references, deadlines, defined_terms, norm_types, penalties, regulated_parties, subjects, summary, summary_zh.
- The field table and enumerations are generated from the store's own self-description (search.field), not hand-written; enumeration counts are as of 2026-10-13.

---

Generated from https://api.1stauthor.com/v1/uk_eu_law on 2026-10-14. Full reference: https://1stauthor.com/docs/uk_eu_law/