For AI agents: this page is also available as Markdown at /docs/collections.md. Every docs page is: add .md to its URL. llms.txt lists them all.

Collections

A collection is a named set of documents with a schema. You search one collection at a time (with SQL you name it in FROM), and you create, size and delete data per collection. Collections are isolated: no query can reach another organization's data or even another collection you have no role on.

Names

A collection name starts with a lowercase letter and then uses only lowercase letters, digits and underscores: ^[a-z][a-z0-9_]*$.

Valid Invalid
books Books (uppercase)
beir_scifact beir-scifact (hyphen)
logs2026 2026_logs (starts with a digit)

Names are unique within an organization. A name that breaks the rule is rejected with 400 invalid_collection_name; creating one that already exists answers 409 already_exists.

Create a collection

Creating a collection needs the admin role. How many collections you can have depends on your plan: past it you get 403 limit_exceeded. See Pricing and Limits and errors.

curl -X PUT https://api.warpsearch.io/v1/collections/books \
  -H "Authorization: Bearer $WARPSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Book catalog",
    "class": "search",
    "labels": {"team": "catalog", "env": "prod"},
    "metadata": {"team": "catalog"},
    "mappings": {
      "properties": {
        "title":     {"type": "text"},
        "genre":     {"type": "keyword"},
        "year":      {"type": "integer"},
        "embedding": {"type": "dense_vector", "dims": 384, "similarity": "cosine"}
      }
    }
  }'

The body is optional, and so is every key in it:

Key Meaning
description Free text, up to 2000 characters.
class What the collection is for: search (the default), knowledge, stream or archive. See Collection classes. Fixed at creation.
labels Up to 64 string key/value pairs, such as {"env": "prod"}. Keys are up to 63 letters, digits, -, _ or ., optionally with a DNS-style prefix and /. Keys starting warpsearch.io/ are reserved.
metadata A JSON object of your own, up to 16 KB. Use it for owner, environment or anything you want to find later.
mappings Field definitions in Elasticsearch mapping format. A bare {"properties": ...} also works. See Schemas and field types.
settings Elasticsearch-style index settings. Only analysis (custom analyzers and normalizers) is used; the rest is ignored with a warning.

You can also create collections in the management console under Collections, with the MCP create_collection tool, or implicitly through the Elasticsearch-compatible _bulk API when your key may create collections. Plain POST to /v1/collections/{c}/documents does not create a collection; it answers 404 for one that does not exist.

Collection classes

A class tells WarpSearch what the collection is for, so it can pick storage and lifecycle defaults, most visibly how long the collection stays warm. It does not change the price per request or per GB. An unknown class answers 400 invalid_class.

Class For Warmth
search Catalog, site and app search, records Released after 15 minutes idle; keep-warm offered
knowledge RAG chunks, embeddings, hybrid search Released after 15 minutes idle; keep-warm offered
stream Logs, events, SIEM, metrics Only recent partitions stay on NVMe; older ones load on demand when a query's time range reaches them
archive Compliance, legal hold, rarely queried history Never warm; a cold launch is slow

A new collection can be written to straight away. Define the fields you care about up front: you can add fields later, but changing an existing field does not rewrite documents already stored. See Schemas and field types.

List and describe

curl https://api.warpsearch.io/v1/collections \
  -H "Authorization: Bearer $WARPSEARCH_API_KEY"

curl https://api.warpsearch.io/v1/collections/books \
  -H "Authorization: Bearer $WARPSEARCH_API_KEY"

The first call lists the collections your key can see. A collection you hold no role on is not in the list, and asking for it answers 404, exactly as for a name that does not exist. The second returns one collection:

Field Meaning
name, class, description, labels, metadata What you set at creation (labels and metadata can change).
engine_version Present when WarpSearch pins the collection to an engine version.
fields Each field's name, type and whether it is multi-valued.
doc_count, size_bytes, stats_at Size figures. They are refreshed about once a minute, so they can lag a recent write.
created_at, created_by When and by whom (a user or an API key).
time_field, message_field, default_fields, id_field Defaults the query languages use, for example which fields a bare Lucene term searches.

The console shows the same figures on each collection's page, and GET /v1/usage shows organization totals against your plan's limits.

Change description, metadata and fields

PATCH changes the description, metadata and labels. Metadata and labels merge key by key, and setting a key to null removes it:

curl -X PATCH https://api.warpsearch.io/v1/collections/books \
  -H "Authorization: Bearer $WARPSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"metadata": {"team": null, "owner": "search"}}'

To add fields, PUT /v1/collections/{c}/mapping takes a mapping with the new properties. Both calls need the admin role.

Delete a collection

curl -X DELETE https://api.warpsearch.io/v1/collections/books \
  -H "Authorization: Bearer $WARPSEARCH_API_KEY"

This deletes the collection and every document in it, and there is no undo. You can then create a collection with the same name from scratch. Deleting needs the admin role.

Coming soon: opening and closing a collection at runtime, to pause a collection without deleting it.

Idle collections and cold starts

WarpSearch does not keep compute attached to a collection nobody is using. After a period without requests the collection is unloaded to durable storage, and the next request loads it again.

While it loads, the request can answer 503 with code warming_up and a Retry-After header. Nothing is wrong and nothing is billed for the wait. Retry after the number of seconds in the header:

curl -i https://api.warpsearch.io/v1/collections/books/search \
  -H "Authorization: Bearer $WARPSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"language": "lucene", "query": "title:dune"}'
# HTTP/1.1 503 Service Unavailable
# Retry-After: 5
# {"code":"warming_up","detail":"the collection is loading; retry shortly", ...}

Small collections are ready within moments; large ones take longer. Build retry-with-backoff into any client that talks to a collection that may be idle, and see Pricing for keep-warm, which holds a collection ready. Free accounts do not include keep-warm.

A free collection that is not queried or written for 30 days is deleted, and its mapping is kept so you can create it again; see Pricing.

Roles on collections

Your API key's role decides what you can do with a collection:

Action Role needed
List and describe viewer
Search, count, translate, get by id viewer
Index, replace and delete documents editor
Create, change mapping or delete admin

A role that is too low answers 403 forbidden with a message naming the role you need. More in API keys, roles and rate limits.

Gotchas

View this page as Markdown