inite-ai Indexer operations API

Read-only operator view (scope `brain:admin`) over the tenant’s installed indexers and their run health. Dark behind INDEXER_OPERATOR_VIEW_ENABLED (default off).

Operations 2

GET /v1/admin/indexers List the tenant's installed indexers and their run health #
GET /v1/admin/indexers/{packId}/runs Recent runs of one indexer #

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/inite-ai:inite-ai-indexer-operations-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

inite-ai-indexer-operations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Generated from the zod wire contracts (`pnpm openapi:build` — scripts/build-openapi.ts); do not edit by hand. Excluded on purpose: the operator/ops surface (jobs, leases, policy, stats, maintenance, GDPR cascades), which is indexed in docs/api.md, and the MCP transport `ALL /mcp/{companyId}`, which is JSON-RPC over Streamable HTTP rather than REST — MCP clients discover it through `tools/list` (docs/mcp.md). Scopes are plain bearer-key grants, not OAuth flows — each operation states its required scope.'
  license:
    identifier: AGPL-3.0-or-later
    name: AGPL-3.0-or-later
  summary: 'The community-facing platform surface: the memory core (fact ingest, search, multi-hop, synthesize, entity and fact reads), the Domain Pack registry and tenant pack admin, the document pipeline, the external-indexer work protocol, the raw-substrate driver, the evidence substrate, and source reputation reads.'
  title: INITE Brain — Platform Indexer operations API
  version: 2.6.0
servers:
- description: Hosted instance (placeholder — self-hosted deployments serve the same paths on their own origin).
  url: https://brain.inite.ai
security:
- bearerAuth: []
tags:
- description: Read-only operator view (scope `brain:admin`) over the tenant’s installed indexers and their run health. Dark behind INDEXER_OPERATOR_VIEW_ENABLED (default off).
  name: Indexer operations
paths:
  /v1/admin/indexers:
    get:
      description: 'One row per pack that declared an `indexer` descriptor (a pack without one rides the union pass and has no run ledger of its own, so it is absent): execution mode, pack id + installed version, the last run, and run/candidate tallies over a bounded recent window. For `external` packs it also reports publisher liveness — unclaimed backlog and the newest claim, the ledger-derived proxy for "is the publisher still polling". Read-only. Answers `404` until `INDEXER_OPERATOR_VIEW_ENABLED=1`. Source: src/documents/indexer-admin.controller.ts.


        Required scope: `brain:admin`.'
      operationId: listIndexerOperatorView
      parameters:
      - description: Target tenant (platform operators only).
        in: query
        name: tenant
        required: false
        schema:
          type: string
      - description: Window width in days (default 7, max 90).
        in: query
        name: days
        required: false
        schema:
          type: integer
      - description: Runs read per indexer (default 50, max 200).
        in: query
        name: runCap
        required: false
        schema:
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndexerOverviewListResponse'
          description: Installed indexers and run health.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: List the tenant's installed indexers and their run health
      tags:
      - Indexer operations
  /v1/admin/indexers/{packId}/runs:
    get:
      description: 'The `indexer_run` ledger rows of a single declared indexer, newest first, each with its staged-candidate tallies. A pack that is not a declared indexer of this tenant answers 404. Read-only. Answers `404` until `INDEXER_OPERATOR_VIEW_ENABLED=1`. Source: src/documents/indexer-admin.controller.ts.


        Required scope: `brain:admin`.'
      operationId: listIndexerRuns
      parameters:
      - description: The indexer (= pack) id.
        in: path
        name: packId
        required: true
        schema:
          type: string
      - description: Target tenant (platform operators only).
        in: query
        name: tenant
        required: false
        schema:
          type: string
      - description: Window width in days (default 7, max 90).
        in: query
        name: days
        required: false
        schema:
          type: integer
      - description: Max runs to return (default 50, max 200).
        in: query
        name: limit
        required: false
        schema:
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndexerRunListResponse'
          description: Recent runs.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      summary: Recent runs of one indexer
      tags:
      - Indexer operations
components:
  schemas:
    IndexerRunStats:
      additionalProperties: false
      properties:
        chunks:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        durationMs:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        entities:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        facts:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        relations:
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
      - chunks
      - entities
      - facts
      - relations
      - durationMs
      type: object
    IndexerRunSummary:
      additionalProperties: false
      properties:
        candidates:
          $ref: '#/components/schemas/IndexerCandidateTotals'
        documentId:
          type: string
        error:
          type:
          - string
          - 'null'
        external:
          type: boolean
        finishedAt:
          type:
          - string
          - 'null'
        packVersion:
          type: string
        runId:
          type: string
        startedAt:
          type: string
        stats:
          anyOf:
          - $ref: '#/components/schemas/IndexerRunStats'
          - type: 'null'
        status:
          type: string
      required:
      - runId
      - documentId
      - packVersion
      - status
      - external
      - startedAt
      - finishedAt
      - stats
      - error
      - candidates
      type: object
    IndexerCandidateTotals:
      additionalProperties: false
      properties:
        committed:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        duplicate:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        expired:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        merged:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        pending:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        rejected:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        submitted:
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
      - submitted
      - pending
      - committed
      - merged
      - duplicate
      - rejected
      - expired
      type: object
    IndexerOverviewListResponse:
      additionalProperties: false
      properties:
        indexers:
          items:
            $ref: '#/components/schemas/IndexerOverview'
          type: array
        tenant:
          type: string
        window:
          $ref: '#/components/schemas/IndexerWindow'
      required:
      - tenant
      - window
      - indexers
      type: object
    IndexerRunListResponse:
      additionalProperties: false
      properties:
        packId:
          type: string
        runs:
          items:
            $ref: '#/components/schemas/IndexerRunSummary'
          type: array
        tenant:
          type: string
        truncated:
          type: boolean
        window:
          $ref: '#/components/schemas/IndexerWindow'
      required:
      - tenant
      - packId
      - window
      - runs
      - truncated
      type: object
    ErrorResponse:
      description: Standard NestJS error envelope.
      properties:
        error:
          type: string
        message:
          anyOf:
          - type: string
          - items:
              type: string
            type: array
        statusCode:
          type: integer
      required:
      - statusCode
      - message
      type: object
    IndexerOverview:
      additionalProperties: false
      properties:
        candidates:
          $ref: '#/components/schemas/IndexerCandidateTotals'
        description:
          type: string
        external:
          anyOf:
          - $ref: '#/components/schemas/IndexerExternalHealth'
          - type: 'null'
        installedAt:
          type:
          - string
          - 'null'
        lastRun:
          anyOf:
          - $ref: '#/components/schemas/IndexerRunSummary'
          - type: 'null'
        mode:
          enum:
          - virtual
          - dedicated
          - external
          type: string
        packId:
          type: string
        packVersion:
          type: string
        runs:
          $ref: '#/components/schemas/IndexerRunTotals'
        source:
          enum:
          - builtin
          - installed
          type: string
        truncated:
          type: boolean
      required:
      - packId
      - packVersion
      - mode
      - source
      - description
      - installedAt
      - lastRun
      - runs
      - candidates
      - external
      - truncated
      type: object
    IndexerExternalHealth:
      additionalProperties: false
      properties:
        lastClaimAt:
          type:
          - string
          - 'null'
        oldestPendingAt:
          type:
          - string
          - 'null'
        pendingWork:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        polledRecently:
          type: boolean
        polledWithinHours:
          exclusiveMinimum: 0
          maximum: 9007199254740991
          type: integer
        publisher:
          type:
          - string
          - 'null'
      required:
      - publisher
      - pendingWork
      - oldestPendingAt
      - lastClaimAt
      - polledRecently
      - polledWithinHours
      type: object
    IndexerRunTotals:
      additionalProperties: false
      properties:
        failed:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        pending:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        running:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        skipped:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        succeeded:
          maximum: 9007199254740991
          minimum: 0
          type: integer
        total:
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
      - total
      - pending
      - running
      - succeeded
      - failed
      - skipped
      type: object
    IndexerWindow:
      additionalProperties: false
      properties:
        days:
          exclusiveMinimum: 0
          maximum: 9007199254740991
          type: integer
        runCap:
          exclusiveMinimum: 0
          maximum: 9007199254740991
          type: integer
        since:
          type: string
      required:
      - since
      - days
      - runCap
      type: object
  responses:
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      description: The key lacks the required scope.
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      description: Missing or unknown bearer key.
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      description: No such resource in this tenant.
  securitySchemes:
    bearerAuth:
      description: 'API key (`Authorization: Bearer <key>`); its SHA-256 must be registered in BRAIN_API_KEYS. Keys carry scopes (`brain:read`, `brain:write`, `brain:admin`, `brain:read_pii`, `registry:publish`, `registry:curate`, `indexer:write`) — each operation states the scope it requires. Not an OAuth flow.'
      scheme: bearer
      type: http