Product

What Bolt Search does.

A hosted full-text search service. Send documents over a REST API or sync them from PostgreSQL, search them with an Elasticsearch-compatible API, and manage it all from a web console.

01

Indexes and field mappings

What it does
An index is a collection of documents with a schema. You declare each field’s type when you create the index, and set optional stored, indexed and fast flags.
How you use it
PUT /v1/{index} with a mappings object, or Create Index in the web console. Without mappings, a PostgreSQL sync job creates the index and infers the types. Mappings cannot be changed afterwards: to change them, create a new index and reindex.
What you see
GET /v1/{index} returns the mappings and the document count, and GET /v1/{index}/_mapping returns the mappings alone. The console’s Indices page lists each index with its health and document count.
TypeAliasesHow it is stored and searchedTypical use
text—Full-text search with BM25 scoring (tokenized).Titles, descriptions, article bodies
keywordstringExact match and aggregations; not tokenized. Set "fast": true to aggregate.Categories, tags, status codes
integerlong, i6464-bit signed integer.Counts, years, quantities
floatdouble, f6464-bit floating point.Prices, ratings
booleanboolTrue or false; range queries work on it too.Flags such as in_stock
datedatetimeRFC 3339 timestamp, for example 2026-01-15T10:30:00Z.Created and updated times
02

Documents and bulk indexing

What it does
Store JSON documents under an id of your choice. Indexing an existing id replaces the whole document; there is no partial update, so send the complete document each time.
How you use it
PUT /v1/{index}/_doc/{id} for one document; POST /v1/_bulk with NDJSON for many index and delete actions at once; POST /v1/{index}/_delete_by_query to remove everything that matches a query.
What you see
Index responses carry result and _version. A bulk response lists the status of every action and an errors flag.
{"index":{"_index":"movies","_id":"1"}}
{"title":"The Matrix","year":1999,"genre":"sci-fi"}
{"delete":{"_index":"movies","_id":"3"}}
04

PostgreSQL sync

What it does
Keeps an index in step with a PostgreSQL table, or with a SELECT you write. A job polls for rows past a saved cursor and indexes them. A scheduled full resync can rebuild the index and swap it in.
How you use it
Connect a database from Connections: paste a postgres:// URL, pick tables, and the console suggests the id and cursor columns and creates the syncs. Nothing is installed in your database; the job only runs SELECT statements.
What you see
Each sync’s page shows its status, last cursor, documents synced, error count, live log and resync history.
Sync articlesRunning

public.articles → articles

Total synced
12,500
Last cursor
2026-01-01T00:00:00Z
Errors
0

07:00:01 [info] polled public.articles, batch of 1000 rows

07:00:01 [info] bulk indexed 1000 documents into articles

07:00:02 [info] full batch returned, polling again

07:00:03 [info] cursor saved

Sample job. How change tracking works.

05

Web console

What it does
Everything above from a browser: indexes, documents, connections, syncs, analytics, API keys, webhooks, members, allowed origins and billing, for the project you pick in the project switcher.
How you use it
Sign in to the app. The sidebar has Overview; Data: Indices and Connections; Search: Explorer and Analytics; Developers: API keys and Webhooks; and Project: Settings, where Billing is a tab. You can choose a light, dark or system theme.
What you see
The screens below show sample data.
Sample project/Indices
IndicesCreate index
NameHealthDocs
moviesGreen5
articlesGreen12,500
draftsYellow21

Create index asks for a name and optional field mappings: text, keyword, integer, float, boolean or date.

Create
A name and optional field mappings. Without mappings, a sync job creates the index.
List
Name, health and document count.
Types
text, keyword, integer, float, boolean, date.
Sample project/Explorer
Explorer
Index
movies
Search query
Search

Showing 1–3 of 3 results in 1 ms

IDScoreSource
12.3112{"title":"The Matrix","year":1999,"genre":"sci-fi"}
21.7405{"title":"The Matrix Reloaded","year":2003,"genre":"sci-fi"}
31.7405{"title":"The Matrix Revolutions","year":2003,"genre":"sci-fi"}
Input
Plain text or a JSON query clause such as {"match":{"title":"hello"}}, not a full request body.
Blank
match_all: browse every document.
Columns
ID, Score and Source, plus how many results and how long the search took.
Metering
Every search is a query attempt that uses credits, including one with no results.
Sample project/Connections
ConnectionsConnect database
app on db.example.comdb.example.com:5432/app
Sync articlespublic.articles → articlesRunning
Sync eventspublic.events → eventsStopped

The connection is tested before it is saved. The password is never shown again.

Connect
Paste a postgres:// URL or fill in the fields; the connection is tested before it is saved.
Tables
Pick tables; each gets a suggested index name, id column and cursor column.
Passwords
Never returned by the API.
Sample project/Connections/Sync articles
Sync articles
Sync articlesRunning

public.articles → articles

Total synced
12,500
Last cursor
2026-01-01T00:00:00Z
Errors
0

07:00:01 [info] polled public.articles, batch of 1000 rows

07:00:01 [info] bulk indexed 1000 documents into articles

07:00:02 [info] full batch returned, polling again

07:00:03 [info] cursor saved

Actions
Start, stop, reset cursor and full resync.
Live log
Each sync’s page shows its log as it runs.
Resyncs
History of each full resync with its outcome.
Sample project/Analytics
Analytics
movies
24h7d30d
Top queriesZero resultsLow CTR
QueryCountAvg results
matrix423
{"term":{"genre":"sci-fi"}}3112
inception181
dark knight92
Scope
One index and a time range: 24 hours, 7 days or 30 days.
Tabs
Top Queries, Zero Results and Low CTR.
Sample project/API keys
API keys
Backend servicebsk_a1b2c3…editorActive
Search widgetbsk_d4e5f6…viewerActive
Old CI keybsk_0a9b8c…editorRevoked

New keys are shown only once. Copy and store them securely.

API keys
One project and a role, editor or viewer. The full key is shown once; the list shows prefixes.
Settings
General, Members, Allowed origins and Billing tabs.
06

Projects, API keys and roles

What it does
A project is the unit of isolation: its own indexes, data sources, sync jobs, members, API keys and credit balance. Signing up creates your account and a project you own.
How you use it
Create keys in Settings, API Keys: give the key a name and a role, editor or viewer, and copy it when it is shown, because it is shown only once. Settings also has Members and Allowed Origins, which controls which websites may call the project from a browser.
What you see
Keys are listed by prefix, such as bsk_a1b2c3, with their role and status. A revoked key stops working at once.
What it allowsviewereditorowner
Search, get documents and indexes, list indexesYesYesYes
View data sources and sync jobsYesYesYes
Index and delete documents, create and delete indexes, bulk—YesYes
Manage data sources and sync jobs—YesYes
Manage project members, API keys and settings——Yes
07

Search analytics

What it does
Shows what people search for in an index: the most frequent queries, the queries that returned nothing, and the queries with a low click-through rate.
How you use it
Open Analytics in the console, choose an index and a range of 24 hours, 7 days or 30 days. The same data is available as GET /v1/{index}/_analytics/…. Report a click with POST /v1/{index}/_track to feed click-through rates.
What you see
Three tabs: Top Queries, Zero Results and Low CTR. Each search records its text, result count and latency. See Security for how long this data is kept.
08

Usage and credits

What it does
You pay for what you search. Authorized search, count and scroll requests are metered at 10 attempts per credit, and an _msearch request counts one attempt per contained search; writes, indexing, PostgreSQL sync and analytics are free. Credits are prepaid, in packs, and never expire.
How you use it
Open Billing in the project, see the available credits and the month’s usage, and buy a pack. The pricing page has an estimator.
What you see
A project with no credits gets HTTP 402 on metered requests until you add credits. The TypeScript SDK raises it as a BoltSearchError with statusCode 402.

Create a project, make an API key and send your first search.

Get startedSee pricing