For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Overwrites no longer take documents offline: overwrite_existing: true now builds the new version alongside the live one and atomically swaps it in the moment it completes. The previous version keeps serving search results through the entire rebuild, and a failed rebuild leaves the previous version untouched instead of losing the document. This applies to every indexing endpoint and to sync’s automatic re-indexing. The API is unchanged: same endpoints, same flag.
Document IDs are now stable across re-ingestion: re-indexing the same bucket object, or re-uploading a file with the same filename via text/file upload, updates the samedocument_id instead of minting a new one. IDs you have stored keep working; deleting a document and re-indexing the same source restores the same ID.
Rebuilds are observable: document listings now include a status field: ready, updating (a rebuild is running; the previous version is still being served), or failed (indexing failed; the previous version is still being served if one exists).
Syncs
Keep a collection aligned with a cloud-storage bucket: a sync binds an S3-compatible bucket to a collection once, runs an initial backfill, then keeps the collection current as objects are added, changed, and removed. Create one with Set Up Sync; each store has its own create endpoint (S3, R2, Supabase, Backblaze).
Two ways to stay current: scheduled reconciliation (sync_interval_minutes, minimum 5) and optional real-time event webhooks for sub-minute propagation. Reconciliation is the backstop for any dropped event, and you can trigger one on demand with Reconcile.
Deletion propagation: deletion_policy controls what happens when an object leaves the bucket, mirror (remove from the collection), archive (retain but mark), or ignore.
S3 auth, two ways: cross-account assume-role (recommended, no long-lived keys leave your account) or an access key. S3-compatible stores (R2, Supabase, Backblaze) use access-key auth.
Manage syncs: list, get, update (scope, schedule, deletion policy, pause/resume), and delete (soft-delete that retains indexed documents), provider-agnostic once a sync exists.
Available from the MCP server: 10 new sync tools ship in the hosted Captain MCP server (captain_create_s3_sync / _r2_sync / _supabase_sync / _backblaze_sync, plus list/get/update/delete/reconcile/subscribe-webhook).
PII Redaction at Index Time
Mask PII before it’s embedded or stored: set mask_pii: true on any indexing request and Captain detects and masks personally identifiable information in the parsed content after parsing, before embedding. Nothing unmasked reaches the search index, the chunk text, the returned regions, or the stored figure crops. It’s opt-in and per-job; the flag defaults to false, so existing indexing is unchanged. See PII Masking.
Text: detected PII is replaced with entity tags: <PERSON>, <EMAIL_ADDRESS>, <US_SSN>, <PHONE_NUMBER>, <CREDIT_CARD>, and other high-value identifiers. Dates and generic numbers are intentionally left alone.
Images: for standalone image files and images embedded in PDFs, PII text visible in the pixels is covered with solid boxes, so both the stored, retrievable image and its visual embedding are redacted.
Regions: when you query with include.regions, the per-region text is masked too, so the layout view carries no raw PII either.
Works on every indexing endpoint: S3, GCS, Azure, R2, Supabase, Backblaze, Dropbox, Google Drive, SharePoint, OneDrive, URL, YouTube, and text/file upload, across the bucket, directory, and single-file variants.
Visual Citations
Figure crops on query results: v3 query responses now return a presigned image_url on each region, pointing at a cropped image of the figure it came from. PDF figures are cropped at index time and served with a 15-minute presigned URL, so you can show the exact chart or table a chunk was pulled from. Available on the document endpoints as well. See Advanced Search & Relations.
Faster Queries
Lower v3 query latency: search responses no longer echo the stored embedding vector for each result. The vector was never useful to callers and made every response heavier to serialize and transfer; dropping it cuts latency with zero change to ranking or the rest of the payload.
Reranking Is Now Optional on Multimodal Collections
rerank=false is honoured everywhere: multimodal collections previously forced reranking on and ignored the flag. They now rerank by default but respect an explicit rerank=false. The response carries a warnings entry noting that cross-modal ranking quality is reduced, since results from different modalities are then ordered by their own pipeline scores. Reranking costs roughly 200 ms, so this is a real lever for latency-sensitive workloads such as voice assistants. Text-only collections are unchanged. See Multimodal Search.
New rerank.reason value: v3 query responses report default_for_multimodal when a multimodal collection reranks without the caller asking. required_for_multimodal remains valid in the schema for pinned clients but is no longer returned, and a disabled rerank now reports disabled on every collection type.
July 2026
Filterable Chunk Metadata
Chunk metadata now works in query filters: metadata set with the chunk metadata endpoints is written to the search index, so filter matches it the same way as metadata set at upload time. Previously it was returned in responses but could not be filtered on.
Clearer filter errors: a filter that references an unknown field or uses an unsupported shape now returns a 400 with the underlying error message instead of a 500. Filter keys are top-level field names, for example {"userId": {"$eq": "..."}}; see Advanced Search & Relations.
Reserved field protection: internal field names such as file_id and content are rejected as custom metadata keys with a 400.
Headless Cloud Drive Indexing
Google Drive indexing: index a single file, a folder (recursively), or a user’s entire Drive with no per-user OAuth. Your Workspace admin authorizes one service account once; native Docs/Sheets/Slides export automatically. Shared Drives included.
SharePoint indexing: index a site’s document library, a folder, or a single file via an Entra ID app your admin consents once. Supports least-privilege Sites.Selected so Captain can read one site and nothing else.
OneDrive indexing: index any user’s OneDrive for Business by email, same app-only auth.
Backblaze B2 indexing: bucket, directory, and single-file endpoints with a read-only application key.
Improved Job Status Monitoring
Per-file results: job status reports each file’s real outcome from persisted records, including an accurate chunk_count per file. One failed file no longer decides the batch, and failing jobs surface as FAILED instead of hanging.
June 2026
V3 Query API
Query - v3: new File Search query endpoint for retrieved source chunks with results[].text, document context, metadata, regions, relations, related chunks, and explicit rerank status.
Cleaner request controls: use filter for metadata and custom metadata constraints, include to opt into extra response context, and relation parameters to retrieve graph context with search results.
Multimodal Search
Multimodal queries no longer require rerank=true: multimodal collections always rerank, and the rerank flag is ignored for them. Querying a multimodal collection with rerank=false now returns results with a warnings entry instead of failing. Text-only collections are unchanged.
May 2026
Odyssey Live Feeds & Webhook Alerts
Odyssey feeds: stream company events and entity-linked articles, newest first, with cursor pagination
Publication feed with entity resolution: articles arrive with enriched: bool and detail_url. Call the article detail endpoint to get companies_mentioned with resolved Odyssey entity IDs.
Title-only polling with fields=ids for cheap, frequent checks; call the article endpoint for the items you want to enrich
Webhook alerts: subscribe a watchlist of domains and receive an HMAC-signed watchlist.match POST when a company appears in either feed
Documents & Layout
v3 Get Document endpoint: GET /v3/collections/{name}/documents/{document_id} returns a document’s chunks, text, and per-chunk metadata
Opt-in regions: pass include_regions=true on v3 get-document requests to get element-level layout and extracted region data for PDF/DOCX
Video Transcripts
Per-segment transcripts: video indexing now extracts speech per segment, so the words spoken in each clip are indexed alongside the visual description
Transcripts in search: transcript text is surfaced through multimodal search, cross-modal reranking, and the generated response - query a video by what was said, not just what was shown
Reliability & Operations
Document IDs in job status: GET /v2/jobs/{job_id} now surfaces document_id on indexed and completed files, so you can map a finished job straight to its documents
Google Drive video uploads: fixed large-video handling with per-file size limits and streaming
April 2026
Multimodal Search & Agent-Friendly Docs
Multimodal search: Search across video (≤120s clips), audio (≤80s clips), and images alongside text in a single query
Gemini Flash cross-modal reranker alongside Voyage text reranker
Multi-query paraphrase retrieval with cross-pipeline deduplication
ARN-based indexing for S3
Agent-friendly documentation: llms.txt, structured API reference for LLMs