---
title: "Search Images"
method: POST
path: "/search/images"
tags: ["search"]
---

# Search Images

`POST /search/images`

## 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/search/images`
- Auth: none declared

Search for diagrams, figures, and tables in 3GPP specifications by natural language query.

Finds protocol architecture diagrams, procedure flow charts, network topology figures, message sequence charts, and other visual content embedded in 3GPP specs.

**When to use:** When the user asks about a diagram or figure, or when a visual would help explain a concept (e.g. "show me the handover procedure", "NR user plane protocol stack diagram").

**Results:** Each result includes the figure caption, surrounding text context (context_before/context_after), and the section it appears in. Use the context to understand what the figure depicts.

**Prefer text search** (`search_text`) for most queries. Use image search specifically when diagrams/figures are needed.

**Dates:** each result's `provenance` gives the 3GPP archive upload time and approving TSG plenary of its version; `available_before` keeps only versions uploaded before a date.

## Request body

- ImageSearchRequest: Request body for image search.
  - `query` string, required: Natural language query describing the diagram, figure, or table you're looking for. E.g. 'protocol stack architecture', 'random access procedure flow chart'.
  - `match_count` integer: Number of image results to return.
  - `match_threshold` number: Minimum similarity score. Default 0.3 filters low-quality matches.
  - `deduplicate` boolean: Collapse near-duplicate image results from different releases/versions (same doc_number, section_number, and caption). Keeps the highest-similarity result (the newest release when similarities tie) and annotates 'also_in' with each collapsed match's release, version, and similarity. Ignored when filter_release is set.
  - `filter_release` string, nullable: Restrict to a specific 3GPP release. Examples: 'Rel-15', 'Rel-17', 'Rel-20'. Omit for all indexed releases (Rel-15 through Rel-20).
  - `filter_doc_number` string, nullable: Restrict to a specific document, e.g. '38.300', '23.501'. Numeric format only.
  - `filter_series` string, nullable: Restrict by series: '38' = NR/5G, '23' = system architecture, '36' = LTE, '33' = security.
  - `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

- ImageSearchResponse: Response from image search.
  - `query` string, required
  - `results` ImageResult[], required
    - `id` integer, required
    - `doc_number` string, required
    - `doc_type` string, required
    - `version` string, required
    - `release` string, required
    - `section_number` string, nullable
    - `caption` string, nullable
    - `context_before` string, nullable
    - `context_after` string, nullable
    - `image_path` string, nullable
    - `similarity` number, required
    - `also_in` AlsoIn[], nullable
      - `release` string, required
      - `version` string, required
      - `relevance_score` number, nullable
      - `similarity` number, nullable
      - `archive_uploaded_at` string, nullable: When this version was uploaded to the 3GPP archive (ISO 8601, UTC); null when unknown.
    - `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.
  - `total` integer, required
  - `elapsed_ms` number, required

## 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)
