Changelog

Captain

August 2026

Zero-Downtime Overwrites & Stable Document IDs
  • 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 same document_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 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
  • YouTube service improvements

March 2026

Odyssey Dataset & OCR

  • Odyssey private market intelligence launched - companies, investors, people, deals, funds, LPs, service providers, patents, credit analysis
  • Author field for article dataset search
  • URIs returned in deterministic query results
  • OCR functionality for image-based documents
  • YouTube video indexing
  • Bounding box data in query results
  • Cancel and rollback endpoints for indexing jobs

February 2026

Multi-Cloud Indexing & Environment Migration

  • Azure Blob Storage indexing - full container, single file, and directory
  • Cloudflare R2 indexing support
  • URL indexing endpoint
  • Reranker support for queries
  • Page numbers returned in search results
  • Document deletion fixes for grouped file sets
  • Environment migration endpoint - promote collections from dev → prod without reindexing
  • Job failure count fixes and atomic operations

January 2026

Billing, Directories & Performance

  • Billing information in indexing job responses (cost, credits used, processing type)
  • Two new directory-scoped indexing endpoints for S3 and GCS
  • Massive RDS connection pooling improvements
  • Structured SSE streaming with id, event, and data fields

December 2025

V2 API Launch

  • V2 API overhaul - new RESTful endpoint structure (/v2/collections/...)
  • Namespace management for collections
  • Metadata filtering on queries
  • Custom top_k and custom prompting support
  • Skip existing files during re-indexing
  • Supported file types expansion
  • Groq LLM integration

November 2025

Streaming & Tool Calling

  • SSE streaming improvements for responses
  • PostHog analytics integration
  • Tool calling support - OpenAI-compatible function calling with client-side execution
  • Response formatting improvements for AI output readability
  • Docs site launched with Fern

October 2025

Infinite Responses & SDK Compatibility

  • OpenAI SDK-compatible chat completions endpoint (/v1/chat/completions)
  • Vercel AI SDK support added
  • Telemetry support for chat completions
  • System prompt management for large context processing
© 2026 Captain