The route is public; catalog rows are not currently published.
The JSONL route returns publication-policy status only. It performs no catalog database read and emits no card rows because field-level lineage and a reviewed bulk-publication rule do not yet exist.
One request returns exactly two JSONL records: a manifest and a footer. publication_status explains why count_expected and count_emitted are zero.
Run this
curl -H 'Accept-Encoding: gzip' \ https://cambridgetcg.com/data/catalog.jsonl \ > catalog.jsonl
Expected response shape
Line 1: { "@kind": "catalog_manifest", "publication_status": "paused_pending_field_level_rights", "count_expected": 0, ... }
Line 2: { "@kind": "catalog_footer", "publication_status": "paused_pending_field_level_rights", "count_emitted": 0, "complete": false, "catalog_complete": false }What to do with it
Treat zero rows as an intentional publication boundary, not an empty catalog or a transient ingest outage.
Search by a concrete identifier, then request one universal-card document. Preserve the response's NOASSERTION and source tiers; do not walk keyed endpoints to recreate a bulk dump.
Run this
curl 'https://cambridgetcg.com/api/v1/search/cards?q=OP01-001'
What to do with it
Choose a returned SKU and fetch /api/v1/universal/card/[sku] only for the user's requested card.
Bulk rows reopen only after field-level lineage and an upstream-aware publication rule ship. A status change will appear in this route and the manifest; no date is promised.
What to do with it
Use /api/v1/feedback to describe the exact fields and permitted purpose you need. That evidence can inform the future rights review.
A warning to downstream users cannot create Cambridge's own right to publish upstream bytes. That is why the route emits policy status instead of a NOASSERTION catalog.
Parse the manifest and footer as two separate JSON objects, one per line.
Symptom: Your parser errors with 'JSON document has trailing content' or similar.
Fix: In Node: `body.split('\n').filter(Boolean).map(JSON.parse)`. In Python: `[json.loads(line) for line in response.iter_lines() if line]`.
Walking single-card endpoints to reconstruct the paused catalog would bypass the stated purpose and rate limits.
Next guide
A keyed lookup with an explicit source-rights boundary.