---
title: "List Documents"
method: GET
path: "/documents"
tags: ["documents"]
---

# List Documents

`GET /documents`

## Request

- Base URL: `https://api.3gppscout.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.3gppscout.com/documents`
- Auth: none declared

List 3GPP documents available in the search index with metadata (doc_number, title, release, series, chunk counts).

Without filters, returns all ~3,200 documents. Use doc_number to check if a specific document is indexed (fast: only fetches 1-2 status files instead of scanning all).

Each version carries `provenance`: when it was uploaded to the 3GPP archive (UTC) and the TSG plenary it was approved at, with sources. With doc_number and available_before, this answers which indexed versions of a spec were in the 3GPP archive before a date.

## Query parameters

- `doc_number` string, nullable: Filter by document number, e.g. '38.811'. Returns only versions of that document.
- `release` string, nullable: Filter by 3GPP release, e.g. 'Rel-19'.
- `series` string, nullable: Filter by series, e.g. '38'.
- `doc_type` string, nullable: Filter by document type: 'TS' or 'TR'.
- `available_before` string, date, nullable: Only versions uploaded to the 3GPP archive before this date (YYYY-MM-DD; before 00:00 UTC, so the day itself is excluded), e.g. a patent application's priority date. A version whose upload time is unknown is left out. Usually one version per release of each spec is indexed (the newest in that release, Rel-15 onward), so a release appears only if that version predates the cutoff; older versions are in the 3GPP archive but not searchable here.

## Response `200`

Successful Response

- DocumentInfo[]
  - `id` integer, required
  - `doc_number` string, required
  - `doc_type` string, required
  - `version` string, required
  - `release` string, required
  - `series` string, required
  - `title` string, nullable
  - `filename` string, required
  - `total_text_chunks` integer, nullable
  - `total_image_chunks` integer, nullable
  - `status` string, required
  - `created_at` string, nullable: When Scout indexed this version, not a 3GPP date; see provenance for those.
  - `provenance` SpecProvenance: When this spec version reached the public 3GPP archive, and the TSG plenary it came from. Every value comes from the 3GPP FTP server: archive and dated plenary folder listings, 3GPP's lists of specifications arising from each TSG round, and the 3GPP change request database. Unknown values stay null.
    - `statement` string, nullable: The known facts as plain sentences, ready to quote, e.g. 'Uploaded to the 3GPP archive on 2026-09-24 at 16:47 UTC. Approved at TSG SA #113 (2026-09-15 to 2026-09-18).' It says 'uploaded to the 3GPP archive' and 'approved at', never 'published': no source states a publication date.
    - `archive_uploaded_at` string, nullable: When this version's zip was uploaded to the 3GPP archive (ISO 8601, UTC), as the 3GPP FTP folder listing at archive_url shows it. If 3GPP re-uploaded the file, the earliest time seen. Null when not found; see unknown_reasons.
    - `archive_url` string, nullable: The zip on the 3GPP FTP server whose folder listing gives archive_uploaded_at; open its folder to verify the time.
    - `archive_date_source` string, nullable: 'ftp_archive_listing' (the spec's folder under /ftp/Specs/archive/) or 'ftp_plenary_folder_listing' (a dated plenary folder that showed an earlier time).
    - `plenary_batch` string, nullable: YYYY-MM of the plenary round whose batch of specifications includes this version (3GPP's dated folders, /ftp/Specs/YYYY-MM/).
    - `plenary_batch_source` string, nullable: 'tsg_spec_list' (stated in 3GPP's list of specifications arising from that TSG round), 'tsg_meeting_start' (the month the plenary in tsg_meeting started) or 'ftp_plenary_folder' (the earliest dated folder holding the zip).
    - `tsg_meeting` string, nullable: Plenary meeting ID: 'SP-113' (TSG SA #113), 'RP-109' (TSG RAN), 'CP-110' (TSG CT); a trailing '-e' marks an electronic meeting.
    - `tsg_meeting_name` string, nullable: The meeting as 3GPP names it, e.g. 'TSG SA #113'.
    - `tsg_meeting_relation` string, nullable: 'approved': change requests approved at this meeting created this version (3GPP CR database). 'arising_from': 3GPP lists this version among the specifications arising from this meeting. 'presented': a draft (below version 3.0.0) presented to this meeting.
    - `tsg_meeting_start` string, date, nullable: First day of the plenary meeting.
    - `tsg_meeting_end` string, date, nullable: Last day of the plenary meeting.
    - `tsg_meeting_source` string, nullable: 'cr_database' (3GPP change request database export) or 'tsg_spec_list' (3GPP's list of specifications arising from that TSG round).
    - `tsg_meeting_source_url` string, nullable: The 3GPP file that names the meeting.
    - `unknown_reasons` object, nullable: Why a field is null, by field name. archive_uploaded_at: 'not_in_archive_listing'. tsg_meeting: 'before_tsg_lists_no_approved_cr' (uploaded before March 2023, when 3GPP's per-round spec lists start, and created by no approved change request, e.g. a release upgrade), 'draft_not_listed', or 'not_in_cr_database_or_tsg_lists'. Nothing is guessed.
    - `notes` string, nullable: Anything a reviewer should know, e.g. the file was re-uploaded or two sources name different meetings.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/3gppscout/apis/3gpp-scout-api.md) · [All operations](https://skmtc.dev/3gppscout/apis/3gpp-scout-api/llms.txt) · [OpenAPI document](https://skmtc.dev/3gppscout/apis/3gpp-scout-api/revisions/60bd6896e5b9?raw)
