Algolia Search API

Core indexing and search API for adding, updating and deleting records and querying them with typo-tolerant, faceted, geo-aware and rule-driven search served from globally distributed search nodes. The largest surface in the estate at 78 operations, and the one carrying the retry strategy, asynchronous-task and API-key ACL semantics the rest of the platform inherits.

Operations 78

GET /{path} Send requests to the Algolia REST API #
POST /{path} Send requests to the Algolia REST API #
PUT /{path} Send requests to the Algolia REST API #
DELETE /{path} Send requests to the Algolia REST API #
POST /1/indexes/{indexName}/query Search an index #
POST /1/indexes/{indexName}/facets/{facetName}/query Search for facet values #
POST /1/indexes/{indexName}/browse Browse for records #
POST /1/indexes/{indexName} Add a new record (with auto-generated object ID) #
DELETE /1/indexes/{indexName} Delete an index #
GET /1/indexes/{indexName}/{objectID} Retrieve a record #
PUT /1/indexes/{indexName}/{objectID} Add or replace a record #
DELETE /1/indexes/{indexName}/{objectID} Delete a record #
POST /1/indexes/{indexName}/deleteByQuery Delete records matching a filter #
POST /1/indexes/{indexName}/clear Delete all records from an index #
POST /1/indexes/{indexName}/{objectID}/partial Add or update attributes #
POST /1/indexes/{indexName}/batch Batch indexing operations on one index #
POST /1/indexes/*/batch Batch indexing operations on multiple indices #
POST /1/indexes/*/objects Retrieve records #
GET /1/indexes/{indexName}/settings Retrieve index settings #
PUT /1/indexes/{indexName}/settings Update index settings #
GET /1/indexes/{indexName}/synonyms/{objectID} Retrieve a synonym #
PUT /1/indexes/{indexName}/synonyms/{objectID} Create or replace a synonym #
DELETE /1/indexes/{indexName}/synonyms/{objectID} Delete a synonym #
POST /1/indexes/{indexName}/synonyms/batch Create or replace synonyms #
POST /1/indexes/{indexName}/synonyms/clear Delete all synonyms #
POST /1/indexes/{indexName}/synonyms/search Search for synonyms #
GET /1/keys List API keys #
POST /1/keys Create an API key #
GET /1/keys/{key} Retrieve API key permissions #
PUT /1/keys/{key} Update an API key #
DELETE /1/keys/{key} Delete an API key #
POST /1/keys/{key}/restore Restore an API key #
GET /1/indexes/{indexName}/rules/{objectID} Retrieve a rule #
PUT /1/indexes/{indexName}/rules/{objectID} Create or replace a rule #
DELETE /1/indexes/{indexName}/rules/{objectID} Delete a rule #
POST /1/indexes/{indexName}/rules/batch Create or update rules #
POST /1/indexes/{indexName}/rules/clear Delete all rules #
POST /1/indexes/{indexName}/rules/search Search for rules #
POST /1/dictionaries/{dictionaryName}/batch Add or delete dictionary entries #
POST /1/dictionaries/{dictionaryName}/search Search dictionary entries #
GET /1/dictionaries/*/settings Retrieve dictionary settings #
PUT /1/dictionaries/*/settings Update dictionary settings #
GET /1/dictionaries/*/languages List available languages #
POST /1/clusters/mapping Assign or move a user ID #
GET /1/clusters/mapping List user IDs #
POST /1/clusters/mapping/batch Assign multiple userIDs #
GET /1/clusters/mapping/top Get top user IDs #
GET /1/clusters/mapping/{userID} Retrieve user ID #
DELETE /1/clusters/mapping/{userID} Delete user ID #
GET /1/clusters List clusters #
POST /1/clusters/mapping/search Search for user IDs #
GET /1/clusters/mapping/pending Get migration and user mapping status #
GET /1/security/sources List allowed sources #
PUT /1/security/sources Replace allowed sources #
POST /1/security/sources/append Add a source #
DELETE /1/security/sources/{source} Delete a source #
GET /1/logs Retrieve log entries #
GET /1/task/{taskID} Check application task status #
GET /1/indexes/{indexName}/task/{taskID} Check task status #
POST /1/indexes/{indexName}/operation Copy or move an index #
GET /1/indexes List indices #
GET /waitForApiKey Wait for an API key operation #
GET /waitForTask Wait for operation to complete #
GET /waitForAppTask Wait for application-level operation to complete #
GET /browseObjects Get all records from an index #
GET /generateSecuredApiKey Create secured API keys #
GET /accountCopyIndex Copies the given `sourceIndexName` records, rules and synonyms to an other Algolia application for the given `destinationIndexName` #
GET /replaceAllObjects Replace all records in an index #
GET /replaceAllObjectsWithTransformation Replace all records in an index #
GET /chunkedBatch Replace all records in an index #
GET /saveObjects Saves the given array of objects in the given index #
GET /saveObjectsWithTransformation Save objects to an Algolia index by leveraging the Transformation pipeline setup using the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-upd #
POST /deleteObjects Deletes every records for the given objectIDs #
POST /partialUpdateObjects Replaces object content of all the given objects according to their respective `objectID` field #
POST /partialUpdateObjectsWithTransformation Save objects to an Algolia index by leveraging the Transformation pipeline setup using the Push connector (https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-upd #
GET /indexExists Check if an index exists or not #
GET /setClientApiKey Switch the API key used to authenticate requests #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/algolia-search-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

algolia-search-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Search API
  summary: The Algolia Search API lets you search, configure, and manage your indices and records
  description: "## Client libraries\n\nUse Algolia's API clients and libraries to reliably integrate Algolia's APIs with your apps.\nThe official API clients are covered by Algolia's [Service Level Agreement](https://www.algolia.com/policies/sla).\n\nFor more information, see [Algolia's ecosystem](https://www.algolia.com/doc/libraries).\n\n## Base URLs\n\nBase URLs for the Search API:\n\n- `https://{APPLICATION_ID}.algolia.net`\n- `https://{APPLICATION_ID}-dsn.algolia.net`.\n  If your subscription includes a [Distributed Search Network](https://dashboard.algolia.com/infra),\n  this ensures that requests are sent to servers closest to users.\n\nBoth URLs provide high availability by distributing requests with load balancing.\n\n**All requests must use HTTPS.**\n\n## Retry strategy\n\nTo guarantee high availability, implement a retry strategy for all API requests using the URLs of your servers as fallbacks:\n\n- `https://{APPLICATION_ID}-1.algolianet.com`\n- `https://{APPLICATION_ID}-2.algolianet.com`\n- `https://{APPLICATION_ID}-3.algolianet.com`\n\nThese URLs use a different DNS provider than the primary URLs.\nRandomize this list to ensure an even load across the three servers.\n\nAll Algolia API clients implement this retry strategy.\n\n## Authentication\n\nAdd these headers to authenticate requests:\n\n- `x-algolia-application-id`. Your Algolia application ID.\n- `x-algolia-api-key`. An API key with the necessary permissions to make the request.\n  The required access control list (ACL) to make a request is listed in each endpoint's reference.\n\nYou can find your application ID and API key in the [Algolia dashboard](https://dashboard.algolia.com/account/api-keys).\n\n## Request format\n\nDepending on the endpoint, request bodies are either JSON objects or arrays of JSON objects.\n\n## Parameters\n\nParameters are passed as query parameters for GET and DELETE requests,\nand in the request body for POST and PUT requests.\n\nQuery parameters must be [URL-encoded](https://developer.mozilla.org/en-US/docs/Glossary/Percent-encoding).\nNon-ASCII characters must be UTF-8 encoded.\nPlus characters (`+`) are interpreted as spaces.\nArrays as query parameters must be one of:\n\n- A comma-separated string: `attributesToRetrieve=title,description`\n- A URL-encoded JSON array: `attributesToRetrieve=%5B%22title%22,%22description%22%D`\n\n## Response status and errors\n\nThe Search API returns JSON responses.\nSince JSON doesn't guarantee any specific ordering, don't rely on the order of attributes in the API response.\n\nSuccessful responses return `2xx` statuses. Client errors return `4xx` statuses. Server errors return `5xx` statuses.\nError responses have a `message` property with more information.\n\n## Request identifiers\n\nEvery response includes a `Correlation-ID` header that identifies the request in Algolia's logs.\nWhen contacting the Algolia support team about a specific request, include this identifier in your ticket.\n\nTo tag requests with your own identifier, send a `Request-ID` header with exactly 11 alphanumeric characters.\nClusters that support it embed the identifier at the end of the `Correlation-ID`,\nso all attempts of a retried operation can be found by searching for those characters.\nHeaders that don't match the expected format are ignored.\n\nDon't use the `Correlation-ID` as a unique key: retried requests may receive the same identifier.\n\n## Version\n\nThe current version of the Search API is version 1, indicated by the `/1/` in each endpoint's URL.\n"
  version: 1.0.0
servers:
- url: https://{appId}.algolia.net
  variables:
    appId:
      default: ALGOLIA_APPLICATION_ID
- url: https://{appId}-1.algolianet.com
  variables:
    appId:
      default: ALGOLIA_APPLICATION_ID
- url: https://{appId}-2.algolianet.com
  variables:
    appId:
      default: ALGOLIA_APPLICATION_ID
- url: https://{appId}-3.algolianet.com
  variables:
    appId:
      default: ALGOLIA_APPLICATION_ID
- url: https://{appId}-dsn.algolia.net
  variables:
    appId:
      default: ALGOLIA_APPLICATION_ID
security:
- appId: []
  apiKey: []
tags:
- name: search
paths:
  /{path}:
    get:
      operationId: customGet
      summary: Send requests to the Algolia REST API
      description: This method lets you send requests to the Algolia REST API.
      parameters:
      - $ref: '#/components/parameters/PathInPath'
      - $ref: '#/components/parameters/Parameters'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
      tags:
      - search
    post:
      operationId: customPost
      requestBody:
        description: Parameters to send with the custom request.
        content:
          application/json:
            schema:
              type: object
      summary: Send requests to the Algolia REST API
      description: This method lets you send requests to the Algolia REST API.
      parameters:
      - $ref: '#/components/parameters/PathInPath'
      - $ref: '#/components/parameters/Parameters'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
      tags:
      - search
    put:
      operationId: customPut
      requestBody:
        description: Parameters to send with the custom request.
        content:
          application/json:
            schema:
              type: object
      summary: Send requests to the Algolia REST API
      description: This method lets you send requests to the Algolia REST API.
      parameters:
      - $ref: '#/components/parameters/PathInPath'
      - $ref: '#/components/parameters/Parameters'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
      tags:
      - search
    delete:
      operationId: customDelete
      summary: Send requests to the Algolia REST API
      description: This method lets you send requests to the Algolia REST API.
      parameters:
      - $ref: '#/components/parameters/PathInPath'
      - $ref: '#/components/parameters/Parameters'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
      tags:
      - search
  /1/indexes/{indexName}/query:
    post:
      tags:
      - search
      operationId: searchSingleIndex
      x-mcp-tool: true
      x-use-read-transporter: true
      x-cacheable: true
      x-acl:
      - search
      summary: Search an index
      description: 'Searches a single index and returns matching search results as hits.


        This method lets you retrieve up to 1,000 hits.

        If you need more, use the [`browse` operation](https://www.algolia.com/doc/rest-api/search/browse) or increase the `paginatedLimitedTo` index setting.

        '
      parameters:
      - $ref: '#/components/parameters/IndexName'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/searchParams'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/searchResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/*/queries:
    post:
      tags:
      - search
      operationId: search
      x-use-read-transporter: true
      x-cacheable: true
      x-legacy-signature: true
      x-acl:
      - search
      summary: Search multiple queries
      description: 'Runs multiple search queries against one or more indices in a single API request.


        Use cases include:


        - Searching different indices, such as products and marketing content.

        - Run multiple queries on the same index with different parameters or filters.


        If you know the expected result type, use the `searchForHits` or `searchForFacets` helper to simplify the response format.

        '
      requestBody:
        required: true
        description: Multi-query search request body. Results are returned in the same order as the requests.
        content:
          application/json:
            schema:
              title: searchMethodParams
              type: object
              additionalProperties: false
              properties:
                requests:
                  type: array
                  items:
                    $ref: '#/components/schemas/SearchQuery'
                strategy:
                  $ref: '#/components/schemas/searchStrategy'
              required:
              - requests
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: searchResponses
                type: object
                additionalProperties: false
                properties:
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/searchResult'
                required:
                - results
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/{indexName}/facets/{facetName}/query:
    post:
      tags:
      - search
      operationId: searchForFacetValues
      x-use-read-transporter: true
      x-cacheable: true
      x-acl:
      - search
      summary: Search for facet values
      description: "Searches for values of a specified facet attribute.\n\n- By default, facet values are sorted by decreasing count.\n  You can adjust this with the `sortFacetValueBy` parameter.\n- Searching for facet values doesn't work if you have **more than 65 searchable facets and searchable attributes combined**.\n"
      parameters:
      - $ref: '#/components/parameters/IndexName'
      - name: facetName
        description: 'Facet attribute in which to search for values.


          This attribute must be included in the `attributesForFaceting` index setting with the `searchable()` modifier.

          '
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              title: searchForFacetValuesRequest
              type: object
              additionalProperties: false
              properties:
                params:
                  $ref: '#/components/schemas/paramsAsString'
                facetQuery:
                  $ref: '#/components/schemas/facetQuery'
                maxFacetHits:
                  $ref: '#/components/schemas/maxFacetHits'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/searchForFacetValuesResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/{indexName}/browse:
    post:
      tags:
      - search
      operationId: browse
      x-use-read-transporter: true
      x-acl:
      - browse
      summary: Browse for records
      description: 'Retrieves records from an index, up to 1,000 per request.


        Searching returns _hits_ (records augmented with highlighting and ranking details).

        Browsing returns matching records only.

        Use browse to export your indices.


        - The Analytics API doesn''t collect data when using `browse`.

        - Records are ranked by attributes and custom ranking.

        - There''s no ranking for typo tolerance, number of matched words, proximity, or geo distance.


        Browse requests automatically apply these settings:


        - `advancedSyntax`: `false`

        - `attributesToHighlight`: `[]`

        - `attributesToSnippet`: `[]`

        - `distinct`: `false`

        - `enablePersonalization`: `false`

        - `enableRules`: `false`

        - `facets`: `[]`

        - `getRankingInfo`: `false`

        - `ignorePlurals`: `false`

        - `optionalFilters`: `[]`

        - `typoTolerance`: `true` or `false` (`min` and `strict` evaluate to `true`)


        If you send these parameters with your browse requests, they''re ignored.

        '
      parameters:
      - $ref: '#/components/parameters/IndexName'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/browseParams'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/browseResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/{indexName}:
    post:
      tags:
      - search
      operationId: saveObject
      x-mcp-tool: true
      x-acl:
      - addObject
      description: 'Adds a record to an index or replaces it.


        - If the record doesn''t have an object ID, a new record with an auto-generated object ID is added to your index.

        - If a record with the specified object ID exists, the existing record is replaced.

        - If a record with the specified object ID doesn''t exist, a new record is added to your index.

        - If you add a record to an index that doesn''t exist yet, a new index is created.


        To update _some_ attributes of a record, use the [`partial` operation](https://www.algolia.com/doc/rest-api/search/partial-update-object).

        To add, update, or replace multiple records, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch).


        This operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia).

        '
      summary: Add a new record (with auto-generated object ID)
      parameters:
      - $ref: '#/components/parameters/IndexName'
      requestBody:
        required: true
        description: The record. A schemaless object with attributes that are useful in the context of search and discovery.
        x-is-generic: true
        content:
          application/json:
            schema:
              type: object
              example:
                objectID: blackTShirt
                name: Black T-shirt
                color: '#000000'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                title: saveObjectResponse
                type: object
                additionalProperties: false
                properties:
                  createdAt:
                    $ref: '#/components/schemas/createdAt'
                  taskID:
                    $ref: '#/components/schemas/taskID'
                  objectID:
                    $ref: '#/components/schemas/objectID'
                required:
                - taskID
                - createdAt
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
    delete:
      tags:
      - search
      operationId: deleteIndex
      x-acl:
      - deleteIndex
      summary: Delete an index
      description: "Deletes an index and all its settings.\n\n- Deleting an index doesn't delete its analytics data.\n- If you try to delete a non-existing index, the operation is ignored without warning.\n- If the index you want to delete has replica indices, the replicas become independent indices.\n- If the index you want to delete is a replica index, you must first unlink it from its primary index before you can delete it.\n  For more information, see [Delete replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/deleting-replicas).\n"
      externalDocs:
        url: https://www.algolia.com/doc/guides/sending-and-managing-data/manage-indices-and-apps/manage-indices/how-to/delete-indices
        description: Delete indices.
      parameters:
      - $ref: '#/components/parameters/IndexName'
      responses:
        '200':
          $ref: '#/components/responses/DeletedAt'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/{indexName}/{objectID}:
    get:
      tags:
      - search
      operationId: getObject
      x-acl:
      - search
      summary: Retrieve a record
      description: 'Retrieves one record by its object ID.


        To retrieve more than one record, use the [`objects` operation](https://www.algolia.com/doc/rest-api/search/get-objects).

        '
      parameters:
      - $ref: '#/components/parameters/IndexName'
      - $ref: '#/components/parameters/ObjectID'
      - name: attributesToRetrieve
        in: query
        description: 'Attributes to include with the records in the response.

          This is useful to reduce the size of the API response.

          By default, all retrievable attributes are returned.


          `objectID` is always retrieved.


          Attributes included in `unretrievableAttributes`

          won''t be retrieved unless the request is authenticated with the admin API key.

          '
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                description: The requested record.
                x-is-generic: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
    put:
      tags:
      - search
      operationId: addOrUpdateObject
      x-acl:
      - addObject
      summary: Add or replace a record
      description: 'If a record with the specified object ID exists, the existing record is replaced.

        Otherwise, a new record is added to the index.


        If you want to use auto-generated object IDs, use the [`saveObject` operation](https://www.algolia.com/doc/rest-api/search/save-object).

        To update _some_ attributes of an existing record, use the [`partial` operation](https://www.algolia.com/doc/rest-api/search/partial-update-object) instead.

        To add, update, or replace multiple records, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch).

        '
      parameters:
      - $ref: '#/components/parameters/IndexName'
      - $ref: '#/components/parameters/ObjectID'
      requestBody:
        required: true
        description: The record. A schemaless object with attributes that are useful in the context of search and discovery.
        x-is-generic: true
        content:
          application/json:
            schema:
              type: object
              example:
                objectID: blackTShirt
                name: Black T-shirt
                color: '#000000'
      responses:
        '200':
          $ref: '#/components/responses/UpdatedAtWithObjectId'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
    delete:
      tags:
      - search
      operationId: deleteObject
      x-acl:
      - deleteObject
      summary: Delete a record
      description: 'Deletes a record by its object ID.


        To delete more than one record, use the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch).

        To delete records matching a query, use the [`deleteBy` operation](https://www.algolia.com/doc/rest-api/search/delete-by).

        '
      parameters:
      - $ref: '#/components/parameters/IndexName'
      - $ref: '#/components/parameters/ObjectID'
      responses:
        '200':
          $ref: '#/components/responses/DeletedAt'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/{indexName}/deleteByQuery:
    post:
      tags:
      - search
      operationId: deleteBy
      x-mcp-tool: true
      x-acl:
      - deleteIndex
      summary: Delete records matching a filter
      description: 'This operation doesn''t accept empty filters.


        This operation is resource-intensive.

        Use it only if you can''t get the object IDs of the records you want to delete.

        It''s more efficient to get a list of object IDs with the [`browse` operation](https://www.algolia.com/doc/rest-api/search/browse),

        and then delete the records using the [`batch` operation](https://www.algolia.com/doc/rest-api/search/batch).


        This operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia).

        '
      externalDocs:
        url: https://support.algolia.com/hc/articles/16385098766353-Should-I-use-the-deleteBy-method-for-deleting-records-that-match-a-query
        description: Should I use the deleteBy method for deleting records.
      parameters:
      - $ref: '#/components/parameters/IndexName'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/deleteByParams'
      responses:
        '200':
          $ref: '#/components/responses/UpdatedAt'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/{indexName}/clear:
    post:
      tags:
      - search
      operationId: clearObjects
      x-acl:
      - deleteIndex
      summary: Delete all records from an index
      description: 'Deletes only the records from an index while keeping settings, synonyms, and rules.

        This operation is resource-intensive and subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia).

        '
      parameters:
      - $ref: '#/components/parameters/IndexName'
      responses:
        '200':
          $ref: '#/components/responses/UpdatedAt'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/{indexName}/{objectID}/partial:
    post:
      tags:
      - search
      operationId: partialUpdateObject
      x-mcp-tool: true
      x-acl:
      - addObject
      summary: Add or update attributes
      x-codegen-request-body-name: attributesToUpdate
      description: "Adds new attributes to a record, or updates existing ones.\n\n- If a record with the specified object ID doesn't exist,\n  a new record is added to the index **if** `createIfNotExists` is true.\n- If the index doesn't exist yet, this method creates a new index.\n- Use first-level attributes only. Nested attributes aren't supported.\n  If you specify a nested attribute, this operation replaces its first-level ancestor.\n\nTo update attributes without replacing the full record, use these built-in operations.\nThese operations are useful when the initial data isn't available.\n\n- `Increment`: increment a numeric attribute.\n- `Decrement`: decrement a numeric attribute.\n- `Add`: append a number or string element to an array attribute.\n- `Remove`: remove all matching number or string elements from an array attribute made of numbers or strings.\n- `AddUnique`: add a number or string element to an array attribute made of numbers or strings only if it's not already present.\n- `IncrementFrom`: increment a numeric integer attribute only if the provided value matches the current value. Otherwise, the update is ignored.\n  Example: If you pass an `IncrementFrom` value of 2 for the `version` attribute but the current value is 1, the API ignores the update.\n  If the object doesn't exist, the API only creates it if you pass an `IncrementFrom` value of 0.\n- `IncrementSet`: increment a numeric integer attribute only if the provided value is greater than the current value. Otherwise, the update is ignored.\n  Example: If you pass an `IncrementSet` value of 2 for the `version` attribute and the current value is 1, the API updates the object.\n  If the object doesn't exist yet, the API only creates it if you pass an `IncrementSet` value greater than 0.\n\nSpecify an operation by providing an object with the attribute to update as the key and its value as an object with these properties:\n\n- `_operation`: the operation to apply on the attribute.\n- `value`: the right-hand side argument to the operation, for example, increment or decrement step, or a value to add or remove.\n\nWhen updating multiple attributes or using multiple operations targeting the same record, use a single partial update for faster processing.\n\nThis operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia).\n"
      parameters:
      - $ref: '#/components/parameters/IndexName'
      - $ref: '#/components/parameters/ObjectID'
      - name: createIfNotExists
        description: Whether to create a new record if it doesn't exist.
        in: query
        schema:
          type: boolean
          default: true
      requestBody:
        required: true
        description: Attributes with their values.
        content:
          application/json:
            schema:
              description: Attributes to update.
              type: object
      responses:
        '200':
          $ref: '#/components/responses/UpdatedAtWithObjectId'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/{indexName}/batch:
    post:
      tags:
      - search
      x-acl:
      - addObject
      operationId: batch
      x-mcp-tool: true
      summary: Batch indexing operations on one index
      description: 'Adds, updates, or deletes records in one index with a single API request.


        Batching index updates reduces latency and increases data integrity.


        - Actions are applied in the order they''re specified.

        - Actions are equivalent to the individual API requests of the same name.


        This operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia).

        '
      parameters:
      - $ref: '#/components/parameters/IndexName'
      x-codegen-request-body-name: batchWriteParams
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/batchWriteParams'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batchResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '402':
          $ref: '#/components/responses/FeatureNotEnabled'
        '403':
          $ref: '#/components/responses/MethodNotAllowed'
        '404':
          $ref: '#/components/responses/IndexNotFound'
  /1/indexes/*/batch:
    post:
      tags:
      - search
      x-acl:
      - addObject
      operationId: multipleBatch
      x-mcp-tool: true
      description: 'Adds, updates, or deletes records in multiple indices with a single API request.


        - Actions are applied in the order they are specified.

        - Actions are equivalent to the individual API requests of the same name.


        This operation is subject to [indexing rate limits](https://support.algolia.com/hc/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia).

        '
      summary: Batch indexing operations on multiple indices
      requestBody:
        required: true
        content:
          application/json:
            schema:
              title: batchParams
              description: Batch parameters.
              type: object
              additionalProperties: false
              properties:
                requests:
                  type: array
                  items:
                    title: multipleBatchRequest
                    type: object
                    additionalProperties: false
                    properties:
                      action:
                        $ref: '#/components/schemas/action'
                      body:
                        type: object
                        description: Operation arguments (varies with specified `action`).
                      indexName:
                        $ref: '#/components/schemas/indexName'
                    required:
                    - action
                    - indexName
              required:
              - requests
            examples:
              batch:
                summary: Batch indexing request to two indices
                value:
                  requests:
                  - action: addObject
                    indexName: contacts
                    body:
                      name: Betty Jane McCamey
                      company: Vita Foods Inc.
                      email: betty@mccamey.com
                  - action: addObject
                    indexName: public_contacts
                    bo

# --- truncated at 32 KB (273 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/algolia/refs/heads/main/openapi/algolia-search-api-openapi.yml