---
title: "Fetch Tdoc Endpoint"
method: POST
path: "/tdocs/{tdoc_id}/fetch"
tags: ["tdocs"]
---

# Fetch Tdoc Endpoint

`POST /tdocs/{tdoc_id}/fetch`

## 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/tdocs/{tdoc_id}/fetch`
- Auth: none declared

Fetch and parse a TDoc on demand, for a TDoc that is not parsed yet or not in the catalog.

Downloads the TDoc ZIP from the 3GPP server and extracts its text with page or paragraph anchors and
numbered Proposal and Observation units, usually within 60 seconds. Returns the same shape as
`GET /tdocs/{tdoc_id}` plus a `fetch` block (status, timings, how the meeting was located).

Idempotent: when the TDoc is already parsed, returns it at once. When a fetch for the same TDoc is
already running and does not finish in time, returns 202 with `code = tdoc_fetch_in_progress` and
`retry_after` seconds.

If the file cannot be read on demand (for example a legacy .ppt), `content.status` is `unavailable`
with a `reason`; the TDoc is queued for the full pipeline. That outcome is remembered for a few hours
(30 minutes when no file was found) and returned without a new download unless `force=true`.
Errors: 404 `tdoc_not_found`, 410 `tdoc_withdrawn`.

## Path parameters

- `tdoc_id` string, required

## Query parameters

- `include` string, nullable: Same as GET /tdocs/{tdoc_id}: units, text, revisions.
- `text_offset` integer: First text block to return when include has 'text'.
- `max_text_chars` integer: Character budget for text blocks.
- `force` boolean: Try again even if a recent on-demand attempt found no file or could not read it.

## Response `200`

Successful Response

- unknown

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