Skip to main content
GET
Retrieve a document

Authorizations

Authorization
string
header
required

User session JWT or instance API key (iak_*). Send as Authorization: Bearer <token>.

Path Parameters

knowledgeBaseId
string
required

Knowledge base id. Legacy physical prefix vs_ (the kb_ rename is deferred).

Maximum string length: 128
Pattern: ^vs_[A-Za-z0-9-]+$
documentId
string
required

Document id. Legacy physical prefix vsf_ (the doc_ rename is deferred).

Maximum string length: 128
Pattern: ^vsf_[A-Za-z0-9-]+$

Response

The document.

Association between a source and a knowledge base - the only membership model (no files registry). The server computes source_key and dedups on (knowledge_base_id, source_key).

fetch_url is intentionally ABSENT from this schema: it is write-only at the API boundary (may embed credentials). For source_type: uploaded_file no fetch URL is stored at all - storage mints a fresh short-lived one (as a privileged workspace) whenever the crawler needs bytes, so expired-token failures are structurally impossible for uploaded files.

id
string
required
Maximum string length: 128
Pattern: ^vsf_[A-Za-z0-9-]+$
object
enum<string>
required
Available options:
knowledge_base.document
knowledge_base_id
string
required
Pattern: ^vs_[A-Za-z0-9-]+$
source_type
enum<string>
required

Discriminator. uploaded_file for platform-native files (attached by native_file_id); remote_file for document bytes at an arbitrary URL; web_page for HTML pages (single URL or crawl-discovered); connector_document for sources owned by a third-party connector.

Available options:
uploaded_file,
remote_file,
web_page,
connector_document
source_key
string
required
read-only

Server-computed canonical source URI; the dedup key, UNIQUE with knowledge_base_id. prisme-file://{workspace_id}/{native_file_id} for uploaded files (stable across renames - never the rebuilt native URL); web://{normalized_url} otherwise. Normalization is conservative (strip fragment, lowercase scheme + host, normalize percent-encoding, strip default ports - query params untouched) and shared with the crawler's canonicalization.

Maximum string length: 2048
source_url
string<uri>
required

User-facing provenance URL - citations, UI links, audit logs. Stable by construction for connector documents (e.g. SharePoint webUrl) and web pages (the page URL). For uploaded files, a display URL (caller-overridable at attach time); downloadable links are minted lazily via GET /documents/{document_id}/source_url.

origin
enum<string>
required

Provenance, set at row creation and never overwritten by seed adoption. Seed deletion cascades only over origin: web_source rows - a manually attached page later discovered by a seed keeps origin: user and survives the seed's deletion (losing only its web_source_id).

Available options:
user,
web_source
status
enum<string>
required

Authoritative indexing status. Transitions are guarded by index_generation - stale or duplicate callbacks are ignored. fetch_expired is connector-facing: the stored ephemeral fetch_url no longer works and the owning connector must refresh it via the upsert (POST /documents with the same source_url); it is never a user-actionable error and never occurs for uploaded_file sources. rejected means an external hook (before_file_ingest / after_file_parse) blocked the content - see rejection_reason / rejected_by.

Available options:
queued,
in_progress,
completed,
failed,
fetch_expired,
rejected
created_at
integer
required
native_file_id
string | null

Platform-native file id when source_type: uploaded_file.

native_file_workspace_id
string | null

Workspace owning the native file. Defaults to the caller's workspace.

web_source_id
string | null

Primary producing/adopting seed (origin-of-record), when any. Multi-attribution (a page reachable from several seeds) is carried by parent_web_source_ids.

Pattern: ^seed_[A-Za-z0-9-]+$
parent_web_source_ids
string[]
read-only

All seeds whose crawl scope covers this page (multi-attribution, §F-5). Backs per-seed page counts and seed cascade-delete: deleting a seed removes it from this array and drops the row only when the array empties AND origin: web_source. Empty/absent ⇒ unattributed (counted in the /web_sources summary residual).

Pattern: ^seed_[A-Za-z0-9-]+$
crawler_document_id
string | null

Crawler-side document id, set once the crawler has seen this source.

index_generation
integer
read-only

Monotonically increasing per document; incremented on every (re)index. Search reads only the latest committed generation; a reindex swaps the new generation in only on success, so the previous good vectors remain searchable on failure.

Required range: x >= 1
filename
string | null
Maximum string length: 255
mime_type
string | null
bytes
integer | null
Required range: x >= 0
parser
string | null

Parser used at last successful parse.

parsed_at
integer | null
page_count
integer | null
Required range: x >= 0
char_count
integer | null
Required range: x >= 0
chunking_strategy
object | null

Per-document override of the store default.

scope
enum<string>
default:knowledge
Available options:
knowledge,
conversation
conversation_id
string | null
expires_at
integer | null

Unix seconds. TTL for conversation-scope documents.

tags
object

Caller-supplied tags. Editable via PATCH. Filterable on list.

metadata
object

Connector-supplied structured context (e.g. connector, site_id, drive_item_id, version). Editable via PATCH.

chunks_count
integer | null
Required range: x >= 0
vectors_count
integer | null
Required range: x >= 0
last_error
object | null

Most recent failure context. Cleared when a new indexing attempt transitions to in_progress. code: SOURCE_UNAVAILABLE signals a dangling reference (e.g. the native file was deleted out-of-band - native files emit no lifecycle events, so this surfaces at the next fetch).

errors
object[] | null
read-only

Bounded retry/failure history (the most recent failure is also in last_error). For debugging repeated index failures.

message
string | null

Human-readable narrative status, distinct from last_error (e.g. a partial-success or skipped note).

failed_at
integer | null

Unix seconds of the most recent failure.

rejection_reason
string | null

Set when status: rejected. Why an external hook blocked the content. Surfaced to the user only when the resolved hook config sets expose_reason: true.

rejected_by
string | null

Identifier of the hook that produced the rejection.

indexed_at
integer | null

Unix seconds. Set when the document reaches completed.

updated_at
integer