API Documentation
Node API


It is available as @searchkit/api on npm.

npm install @searchkit/api@latest

Then import it in your project:

import Client from "@searchkit/api";


Node client handles incoming instantsearch requests, transforms them into Elasticsearch queries. With the response, it transforms it into a format that instantsearch can understand.

The client is built in a way to simplify the integration with multiple node server frameworks.

Read more on how to configure Searchkit on Searchkit API docs.

import Client from "@searchkit/api";
// SearchkitConfig is the configuration object that is used to configure the client
const client = Client({
  connection: {
    host: "",
    apiKey: "a2Rha1VJTUJMcGU4ajA3Tm9fZ0Y6MjAzX2pLbURTXy1hNm9SUGZGRlhJdw==", // optional apiKey
    headers: { // optional headers sent to Elasticsearch. Useful for basic auth
      "Authorization", 'Basic ' + Buffer.from(username + ":" + password).toString('base64'),
      "my-custom-header": "my-custom-value"
  search_settings: {
    highlight_attributes: ["title", "actors"],
    search_attributes: ["title", "actors"],
    result_attributes: ["title", "actors", "poster", "year"],
    facet_attributes: [
      { attribute: "actors", field: "actors.keyword" },
      { attribute: "imdbrating", type: "numeric" },
      { attribute: "metascore", type: "numeric" },

HandleRequest function

The handleRequest method is used to handle incoming REST requests from the browser. It takes in multiple instantsearch SearchRequest objects and returns multiple instantsearch SearchResponse objects.


// function to handle the incoming request
export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  // invokes handleRequest passing in the request body
  // containing the search requests
  const results = await client.handleRequest(req.body, {
    // optional functions to adjust the Elasticsearch query
    // see Request Options below
    // example of modifying the query that performs the organic match query
    getQuery(query, search_attributes, config) {
      return {
        combined_fields: {
          query: query,
          fields: => (typeof attr === 'string' ? attr : attr.field))
    // example of adding a base filter to the query
    getBaseFilters: () => {
      return [
          bool: {
            must: {
              term: {
                status: {
                  value: "published",
  // returning back the results to the browser


The handleRequest function takes in the following parameters:

  • body - The request body containing the search requests.
  • RequestOptions - Optional. Request Options object thats used to change the request & response before it is sent to Elasticsearch. You can read more about these options in the Searchkit API docs.

Debug mode

The client can be run in debug mode to help with debugging the Elasticsearch query. To run the client in debug mode, set the debug flag to true in the Client function.

This is helpful when you're overriding the query via getQuery or providing base filters via getBaseFilters and want to see the Elasticsearch query that is executed to Elasticsearch.

const client = Client({
  // search_settings configuration
  connection: {
    // ...
  search_settings: {
    search_attributes: ["title", "plot"],
    // ...
}, { debug: true });

When the client is run in debug mode, the Elasticsearch query is logged to the console.

Apache 2.0 2024 © Joseph McElroy.
Need help? Join discord