3GPT API
Semantic search over 3GPP technical specifications — 3,200+ documents across multiple releases, with full text and image search powered by state-of-the-art embeddings and reranking.
The 3GPT API lets you search across the full text of 3GPP specifications using natural language. Your query is semantically matched against indexed content, reranked for precision, and returned with the matching text along with full section context.
All endpoints are read-only and require an API key for access.
Base URL
https://api.3gppscout.comAll endpoints are relative to this base URL. The API is served over HTTPS only.
Quick Start
Search for anything in the 3GPP spec corpus with a single request:
curl -X POST https://api.3gppscout.com/search/text \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "How does RRC connection setup work in NR?",
"rerank_top_k": 5
}'{
"query": "How does RRC connection setup work in NR?",
"results": [
{
"id": 42,
"doc_number": "38.331",
"doc_type": "TS",
"version": "19.1.0",
"release": "Rel-19",
"section_number": "5.3.3",
"section_title": "RRC connection establishment",
"content": "The purpose of this procedure is to establish an RRC connection...",
"similarity": 0.8234,
"relevance_score": 0.9512,
"section_text": "...full section text..."
}
],
"total": 5,
"reranked": true,
"elapsed_ms": 420.3
}That's it. The API handles search, content retrieval, and reranking in a single call.
Authentication
All API requests require a valid API key passed as a Bearer token in the Authorization header.
Authorization: Bearer YOUR_API_KEYGetting an API Key
Sign in to the 3GPP Scout Dashboard and navigate to API Keys to create and manage your keys.
Error Responses
| Status | Meaning |
|---|---|
401 | Missing, malformed, or invalid API key |
401 | API key has been deactivated |
The /health, /docs, and /images endpoints do not require authentication.
Text Search
Semantic search over text chunks. Your query is embedded and matched against all indexed text content. Results are optionally reranked for higher precision.
Request Body
| Parameter | Type | Description |
|---|---|---|
| query required | string | Natural language search query |
| match_count | int | Candidate matches to retrieve before reranking. Default 50 |
| match_threshold | float | Minimum cosine similarity (0–1). Default 0.0 |
| rerank | bool | Rerank results with Voyage rerank-2. Default true |
| rerank_top_k | int | Results to keep after reranking. Default 10 |
| include_section_text | bool | Include parent section full text. Default true |
| filter_release | string | Filter by release, e.g. "Rel-19" |
| filter_doc_type | string | Filter by doc type: "TS", "TR" |
| filter_doc_number | string | Filter by document, e.g. "38.331" |
| filter_series | string | Filter by series, e.g. "38" |
| filter_section_number | string | Filter by section, e.g. "5.4" |
Response
| Field | Type | Description |
|---|---|---|
| query | string | Echo of the search query |
| results | TextResult[] | Matching text chunks with metadata |
| total | int | Number of results returned |
| reranked | bool | Whether reranking was applied |
| elapsed_ms | float | Server-side processing time in ms |
Example
curl -X POST https://api.3gppscout.com/search/text \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "HARQ process for downlink in NR",
"filter_series": "38",
"rerank_top_k": 5
}'Image Search
Semantic search over image chunks (diagrams, figures, tables). Your query is embedded and matched against all indexed images.
Request Body
| Parameter | Type | Description |
|---|---|---|
| query required | string | Natural language search query |
| match_count | int | Number of results. Default 10 |
| match_threshold | float | Minimum similarity. Default 0.3 |
| filter_release | string | Filter by release |
| filter_doc_number | string | Filter by document number |
| filter_series | string | Filter by series |
Response
Each result includes an image_path field — a relative URL to fetch the actual image. See Get Image.
| Field | Type | Description |
|---|---|---|
| id | int | Image index within the document |
| doc_number | string | Source document number |
| caption | string | Figure caption extracted from the spec |
| context_before | string | Text immediately before the figure |
| context_after | string | Text immediately after the figure |
| image_path | string | Relative URL to the PNG, e.g. /images/38.300/19.1.0/8 |
| similarity | float | Cosine similarity score |
Example
curl -X POST https://api.3gppscout.com/search/images \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "random access procedure diagram",
"match_count": 5
}'Combined Search
Text + image search in a single request. Queries both indexes simultaneously, reranks text results, and returns both sets.
Request Body
| Parameter | Type | Description |
|---|---|---|
| query required | string | Natural language search query |
| text_match_count | int | Text candidate matches before reranking. Default 50 |
| rerank | bool | Rerank text results. Default true |
| rerank_top_k | int | Text results after reranking. Default 10 |
| include_section_text | bool | Include parent section text. Default true |
| image_match_count | int | Image results to return. Default 5 |
| filter_release | string | Filter both searches by release |
| filter_doc_type | string | Filter text search by doc type |
| filter_doc_number | string | Filter both searches by document |
| filter_series | string | Filter both searches by series |
| filter_section_number | string | Filter text search by section |
Example
curl -X POST https://api.3gppscout.com/search/combined \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "beam management procedure in NR",
"filter_doc_number": "38.214",
"rerank_top_k": 5,
"image_match_count": 3
}'Filtering
All search endpoints support metadata filters that narrow results before similarity matching. Filters are applied server-side for efficient pre-filtering.
| Filter | Example Value | Description |
|---|---|---|
filter_release | "Rel-19" | 3GPP release (Rel-15 and Rel-19 currently indexed) |
filter_doc_type | "TS" | Document type — TS (technical specification) or TR (technical report) |
filter_doc_number | "38.331" | Specific document number |
filter_series | "38" | 3GPP series (e.g. 38 = NR/5G, 23 = system architecture) |
filter_section_number | "5.4" | Exact section number (text search only) |
Filters can be combined. For example, filter_series: "38" + filter_release: "Rel-19" searches only the latest 5G NR specs.
Reranking
Text search results are reranked by default using a cross-encoder reranking model. The flow is:
- Embed query → retrieve
match_countnearest matches (default 50) - Fetch the text content for each match
- Pass query + all candidate texts to the reranker
- Return the top
rerank_top_kresults sorted by relevance score
Reranked results include both similarity (semantic similarity, 0–1) and relevance_score (reranker output, 0–1). The relevance score is generally a better signal for result quality.
Set "rerank": false to skip reranking and return results sorted by similarity only.
List Documents
Returns metadata for available documents. Use filters to check if a specific document is indexed (fast) — without filters returns all ~3,200 documents (slower, cached for 60 minutes).
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| doc_number | string | Filter by document number, e.g. "38.811". Recommended — avoids scanning all documents. |
| release | string | Filter by release, e.g. "Rel-19" |
| series | string | Filter by series, e.g. "38" |
| doc_type | string | Filter by type: "TS" or "TR" |
Examples
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.3gppscout.com/documents?doc_number=38.811"curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.3gppscout.com/documents?doc_type=TR&release=Rel-19"[
{
"id": 1,
"doc_number": "38.811",
"doc_type": "TR",
"version": "15.4.0",
"release": "Rel-15",
"series": "38",
"title": null,
"filename": "38811-f40.zip",
"total_text_chunks": 812,
"total_image_chunks": 45,
"status": "complete"
}
]Get Document
Fetch a single document by its numeric ID (as returned by /documents).
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| document_id required | int | Numeric document ID |
Example
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.3gppscout.com/documents/42Get Sections
Fetch full section text by section number. Section numbers are not unique across documents — always provide doc_number to narrow results.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| section_number required | string | Section to look up, e.g. "5.3.3" |
| doc_number | string | Document number, e.g. "38.331" |
| version | string | Version, e.g. "19.1.0" |
| release | string | Release, e.g. "Rel-19" |
| prefix | bool | Match sub-sections too (e.g. "5.4" matches "5.4.1", "5.4.6"). Default false |
Example
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.3gppscout.com/sections?section_number=5.3.3&doc_number=38.331&release=Rel-19"Table of Contents
Lists all section numbers and titles for a document without full text — useful for browsing a spec's structure.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| doc_number required | string | Document number, e.g. "38.321" |
| version | string | Version, e.g. "19.1.0" |
Example
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.3gppscout.com/sections/toc?doc_number=38.321"Get Image
Serve an extracted figure or diagram as a PNG image. The image_path field from image search results maps directly to this endpoint.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| doc_number required | string | Document number, e.g. "38.300" |
| version required | string | Document version, e.g. "19.1.0" |
| image_index required | int | Image index within the document (from search results) |
Response
Returns the raw PNG bytes with Content-Type: image/png. No JSON wrapper.
| Status | Meaning |
|---|---|
200 | PNG image bytes |
404 | Image not found for this document/version/index |
<img> tags, chat messages, or markdown without needing an API key.
Usage with Image Search
The typical flow is: search for images, then use the image_path from results to fetch the actual PNG.
# 1. Search for images
curl -X POST https://api.3gppscout.com/search/images \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "user plane protocol stack", "filter_doc_number": "38.300"}'
# Response includes: "image_path": "/images/38.300/19.1.0/8"
# 2. Fetch the image (no auth needed)
curl https://api.3gppscout.com/images/38.300/19.1.0/8 --output figure.pngEmbedding in HTML
<img src="https://api.3gppscout.com/images/38.300/19.1.0/8"
alt="User Plane Protocol Stack (TS 38.300)" />MCP Server
The 3GPP Scout API includes an MCP (Model Context Protocol) server, allowing AI agents in Cursor, Claude Desktop, VS Code, and other MCP clients to use the API as a tool directly.
Add to Cursor (one click)
Clicking the button opens Cursor and installs the 3GPP Scout MCP server automatically.
Manual Configuration
For Cursor, add to .cursor/mcp.json in your workspace or user settings:
{
"mcpServers": {
"3gpp-scout": {
"url": "https://api.3gppscout.com/mcp/",
"transport": "streamable-http"
}
}
}For Claude Desktop, add to claude_desktop_config.json:
{
"mcpServers": {
"3gpp-scout": {
"command": "npx",
"args": [
"mcp-remote",
"https://api.3gppscout.com/mcp/"
]
}
}
}Authentication
The MCP server uses OAuth 2.1 — no API key is needed in the config. On first use, your browser will open for you to sign in with your 3GPP Scout account. After approving access, the MCP client handles tokens automatically.
Available Tools
Once connected, your agent has access to all API endpoints as MCP tools:
search_text— semantic search over specification textsearch_images— search diagrams, figures, and tablessearch_combined— text + image search in one calllist_documents/get_document— browse available documentsget_sections/list_sections— fetch section text and table of contentsget_image— fetch extracted figures as PNG images
MCP Resource
The MCP server also provides a scout://skill-guide resource — a comprehensive guide your agent can read to understand the API, recommended workflows, and best practices.
Skill File
For agents that don't support MCP, we provide a Skill File — a standalone markdown document containing everything an LLM agent needs to use the API effectively: endpoints, parameters, workflows, and tips.
Download
https://api.3gppscout.com/skill.md
How to Use
- Download or copy the file from the link above
- Save it as
SKILL.mdin your project (e.g..cursor/skills/3gpp-scout/SKILL.md) - Your agent will read it automatically and know how to call the API
The skill file covers the same information as the MCP resource (scout://skill-guide) but works with any agent framework — just include it in the agent's context.
OpenClaw
The 3GPP Scout skill is published on ClawHub, the skill registry for OpenClaw. If you use an OpenClaw-compatible agent, you can install the skill directly from the registry.
Install
https://clawhub.ai/chriscarrotlabs/3gpp-scout
Configure your API key
Once installed, set your API key as the SCOUT_API_KEY environment variable:
export SCOUT_API_KEY="sk-your-key-here"Or add it to ~/.openclaw/openclaw.json under skills."3gpp-scout".env.SCOUT_API_KEY.
The ClawHub listing has passed OpenClaw's security scan (benign, high confidence) and is updated whenever the skill file here changes.
Models & Embeddings
The API uses three Voyage AI models:
| Model | Purpose | Dimensions |
|---|---|---|
voyage-context-3 | Text query & chunk embedding | 1024 |
voyage-multimodal-3 | Image query & chunk embedding | 1024 |
rerank-2 | Cross-encoder reranking for text results | — |
Text chunks are contextualized embeddings — each chunk is embedded along with metadata about the document and section it belongs to, improving retrieval quality for domain-specific queries.
Architecture
The API is a stateless server backed by cloud infrastructure:
Client Request
│
▼
┌──────────────────────┐
│ 3GPT API │ api.3gppscout.com
└──────────┬───────────┘
│
┌─────────┼──────────┬──────────┐
▼ ▼ ▼ ▼
Embedding Vector Content Image
Model Search Store Store
(text/JSON) (PNGs)
Request flow for text search:
- Embed the query string using the text embedding model
- Run vector similarity search with optional metadata filters
- Resolve matches to their source document and chunk
- Fetch chunk text and section context
- Optionally rerank candidates for higher precision
- Return the final results
Request flow for image serving:
- Image search returns results with
image_path(e.g./images/38.300/19.1.0/8) - Client fetches the image URL directly
- API proxies the PNG from Google Cloud Storage
Corpus Coverage
The current index covers two complete 3GPP releases:
| Release | Documents | Sections |
|---|---|---|
| Rel-15 | 1,493 | 195,216 |
| Rel-19 | 1,789 | 291,478 |
| Total | 3,282 | 486,694 |
Additional releases (Rel-16 through Rel-18, Rel-20) are being processed and will be added incrementally.
Processing Pipeline
Each document goes through a multi-stage pipeline: parsing, semantic chunking, embedding, section extraction, and image extraction. The chunking stage produces optimized chunks of 400–800 tokens for high-quality retrieval. Images are extracted as individual PNGs and served via the /images endpoint.
Health Check
Returns API status and model info. Use this to verify the server is running.
Example
curl https://api.3gppscout.com/health{
"status": "ok",
"version": "0.2.0",
"models": {
"text_embedding": "voyage-context-3",
"image_embedding": "voyage-multimodal-3",
"reranker": "rerank-2"
}
}OpenAPI / Swagger
The auto-generated interactive API docs are available at /swagger (Swagger UI) and /redoc (ReDoc). The raw OpenAPI schema is at /openapi.json.