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.
query_id, results, backend, mode, ranking, reranked, pool_size, latency_ms, timing_ms, and credits. Each result includes an asset ID, file URLs, dimensions, source, license information, and attribution. A normal Voyage search reports backend: "voyage" and ranking: "text". The credits object reports what the call cost and what is left: {"charged": 1, "remaining": 499, "plan": "free"}. 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 usesnsfw_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
Search by image and image plus text search are available on paid plans (Starter and above). On the Free plan these requests return
403 with "error": "paid_feature" and an upgrade link. The playground allows 10 free searches per day on every plan, including image search, so you can try it first. See Plans and limits./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:
query for image-only search. For local files, send image_base64 as raw base64 or a data URL instead of image_url:
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. Find similar is a paid plan feature; on the Free plan it returns 403 with "error": "paid_feature". It uses the same credit rule as search.
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 search that uses credits. 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 or find-similar call uses 1 credit per 10 results, rounded up, with a minimum of 1. A search for 10 or fewer results uses 1 credit; a search for 100 results uses 10. Asset lookups (GET /v1/asset/...) are free, and failed searches are not charged. Every plan includes monthly credits, starting with 500 free credits every month on the Free plan. The signed-in playground has a separate allowance of 10 free searches per day. See Plans and limits for plans, credits, request limits, and concurrency limits.