---
title: "Bulk export manifest — NOT self-serve, licensed tiers only"
method: GET
path: "/us-law/export"
---

# Bulk export manifest — NOT self-serve, licensed tiers only

`GET /us-law/export`

## Request

- Base URL: `https://ai-law-tracker.com/api/v1`
- URL: `https://ai-law-tracker.com/api/v1/us-law/export`
- Auth: one of:
  - none
  - API key in header `X-API-Key`
  - HTTP bearer

Plans a bulk export of any slice /us-law can filter and returns a MANIFEST: the exact row count, what it will cost against your record allowance, and one SIGNED, short-lived download URL per part (NDJSON | CSV | JSON). The bytes come from the signed part URLs; this call serves no records and charges nothing.

NOT SOLD SELF-SERVE AT ANY PRICE. Taking the whole corpus as a file is a licensing conversation, not a checkout — every self-serve plan keeps full API access to the same data and pages it instead. A below-tier caller gets 403 `tier_upgrade_required` naming the tier it opens at.

Part URLs carry a signed token rather than your API key, so a link can be handed to a loader without handing over your credential; every download is still metered against the key that created it.

PRODUCT SCOPE: this endpoint belongs to the US Law Platform. A key licensed only for AI Law Tracker (`product: ai_law`) is NOT refused here — it is served at the PUBLIC (keyless) capability level, the same few records any anonymous caller gets. The response headers say so explicitly: `X-ALT-Product` (what your key holds), `X-ALT-Product-Surface` (`us_law`) and `X-ALT-Product-Scope` (`in_product` | `out_of_product`). Your request rate and daily/monthly quota are NEVER degraded — those are metered per key wherever you call. What degrades is capability: page size, pagination depth, field envelope and the record budget.

## Query parameters

- `format` 'ndjson' | 'csv' | 'json'
- `fields` 'full' | 'basic'
- `jurisdiction` string
- `instrument_type` string
- `branch` string
- `domain` string
- `in_force` boolean

## Response `200`

Export manifest with signed part URLs.

- object
  - `api_version` string
  - `export` object
    - `job_id` string
    - `format` string
    - `content_type` string
    - `fields` string
    - `records` integer
    - `corpus_records` integer
    - `parts` integer
    - `part_size` integer
    - `expires_at` string, date-time
    - `record_cost` integer: What downloading every part will charge.
    - `export_max_rows` integer
  - `parts` object[]
    - `part` integer
    - `records` integer
    - `url` string
    - `expires_at` string, date-time
  - `attribution` string

## Other responses

- `400`: `export_too_large` — narrow the filter, or an invalid format.
- `403`: `tier_upgrade_required` — bulk export is not included on this tier.
- `429`: `record_budget_insufficient` — refused up front rather than failing part-way and leaving a truncated file.
- `503`: `export_unavailable` — download signing not configured.

---

[API](https://skmtc.dev/ai-law-tracker/apis/ai-law-tracker-public-laws-api.md) · [All operations](https://skmtc.dev/ai-law-tracker/apis/ai-law-tracker-public-laws-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ai-law-tracker/apis/ai-law-tracker-public-laws-api/revisions/25403268a853?raw)
