Skip to main content

Search with natural language

Default photo search is live on Voyage: voyage-multimodal-3.5 embeds each indexed image together with its caption into a 1,024-dimensional vector. At query time, semantic retrieval and caption keyword matching select candidates, then rerank-3 ranks their text for the query. The launch index contains 1,852,370 captioned images, including stock photography and specialist sources. Describe what matters for your use: subject, recognizable names, visible text, era, aesthetic, mood, lighting, composition, or space for a headline. Captions improve retrieval but can contain mistakes; inspect the image and its source when exact identification matters.
The response includes query_id, results, backend, mode, ranking, reranked, pool_size, latency_ms, and timing_ms. Each result includes an asset ID, file URLs, dimensions, source, license information, and attribution. A normal Voyage search reports backend: "voyage" and ranking: "text". Use the API reference for field shapes. Search latency excludes downloading and rendering result images. Provider and network conditions vary; there is no fixed latency guarantee.

Modes

All search modes use the same Voyage index. Old mode:visual requests are accepted as auto; rerank_text is retained for compatibility but no longer changes the backend. Graphics-related queries search the current captioned collection, without switching to the old index.

Request controls

The playground exposes the same modes, but may choose a larger result/rerank count for its grid. /v1/health reports API defaults. Start with defaults; increase candidate counts only when useful for your queries.

Defaults you get without asking

Three filters are applied whenever you leave them out, because most callers want them and forgetting them produced the worst results in our own evaluations: To opt out of a default, send the key with null: {"filters": {"ai_generated": null}} removes the AI-generation restriction; it does not add assets outside the current index. Every result carries ai_generated so you can badge it. Results are also de-duplicated: when the same file is indexed under two sources (a Flickr photo also collected by a second Flickr crawl, or a CC0 stock image mirrored on two stock sites) only the highest-ranked copy is shown.

Filters

Filters constrain retrieval before ranking. Omitted default filters still apply as described above. The playground lists the 17 sources present in the current captioned index. Its “Any size” selection explicitly removes the width minimum, and unchecking “Commercial use only” includes noncommercial licenses. The explicit-content control uses nsfw_max:0.2; turning it off sends null. Unknown scores remain eligible. Color treatment uses measured metadata; records without that metadata are excluded when a specific treatment is selected. Format matching accepts case and extension aliases such as JPEG, jpeg, and jpg. Image format refers to the indexed original, not necessarily the thumbnail format.

Search with an image

Use the same /v1/search endpoint for image-only or image-plus-text search. Supply at least text or one image. Uploaded/reference images are query inputs; they are not added to the searchable collection. Public image URL plus text:
Omit query for image-only search. For local files, send image_base64 as raw base64 or a data URL instead of image_url:
JPEG, PNG and WebP still images are supported, up to 5 MiB decoded and 20 megapixels. Images are oriented, resized to a maximum 1024-pixel edge, stripped of metadata, and sent to Voyage. URLs must use public HTTPS on port 443, with no embedded credentials; private addresses are blocked and redirects are checked. Invalid inputs return 422; oversized request bodies return 413. Failed searches are not charged. Successful image searches have the same $0.02 price as text searches. The playground’s image attachment button accepts local files, previews the reference, and allows optional text. Clear the text for image-only search. Images MCP accepts the same image_base64 and image_url fields through search_images; reconnect clients to refresh tool schemas. Responses identify query_type as text, image, or image_text. In auto mode, image-only returns ranking:image without text reranking. Image-plus-text returns ranking:multimodal: reciprocal-rank fusion gives joint-embedding similarity 65% weight and caption text ranking 35%. These are rank scores, not probabilities. Added text steers retrieval; this does not edit or generate an image, or guarantee exact constraints. mode:text forces text ranking, and mode:none skips reranking. A reranker failure returns an explicitly degraded response. Raw query images and source URLs are not persisted in search logs. Search logs retain the query text, query type and a fingerprint of the normalized image; query embeddings may be cached for up to one hour.

Similar images

Use /v1/similar for an existing indexed asset ID. Use /v1/search above for a new image upload:
For a Voyage-indexed seed, similarity uses its saved joint image-and-caption vector and excludes the seed from the results. Similar results are returned in retrieval order. Seeds outside the current index, removed assets and unavailable assets return 404; no legacy search fallback is used.

Files and rights

GET /v1/asset/{asset_id} returns metadata and file URLs. Use the returned thumb or file URL to fetch an image; delivery is separate from the search request. URLs include the query ID so downloads can be attributed to their search. Existing legacy asset links remain supported. Licenses and permission flags come from source metadata. A caption is not proof of identity, permission, or a model/property release. See Rights answers.

Readiness and errors

Default Voyage photo search does not start a Lightdrift GPU. GET /v1/warm reports the selected backend, configuration readiness, and recent provider successes; key presence is not proof that a fresh provider request will succeed. GET /v1/health?deep=true checks database/index connectivity. Actual searches are the end-to-end availability check. Search no longer uses the legacy GPU service. Temporary Voyage provider failures return an availability error; retry according to Retry-After. A successful response can include degraded: "reranker unavailable; lane-order results". It contains retrieval-order results, with null rerank scores, and is still a successful billed search. Inspect this field if reranked ordering is essential. Send a stable Idempotency-Key for retries of the same logical request to avoid duplicate search charges. Do not reuse it for different queries.

Billing and limits

Each successful API or MCP search/similar call costs $0.02 in account credit. The signed-in playground has its separate daily free allowance. See Plans and limits for current tiers, request limits, and concurrency limits. Authentication, billing, and key management are unchanged by the Voyage migration.