inite-ai Search API

Reading memory (scope `brain:read`): hybrid search, chained multi-hop search, and cited synthesis over the same retrieval stack. All three share the per-credential `expensive` throttle bucket (10 req/min).

Operations 3

POST /v1/search Search the knowledge graph #
POST /v1/search/multi-hop Chained multi-hop search #
POST /v1/synthesize Answer a question from memory, with citations #

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-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

inite-ai-search-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 Search 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: 'Reading memory (scope `brain:read`): hybrid search, chained multi-hop search, and cited synthesis over the same retrieval stack. All three share the per-credential `expensive` throttle bucket (10 req/min).'
  name: Search
paths:
  /v1/search:
    post:
      description: 'The headline read. Hybrid retrieval by default (vector + BM25 fused by reciprocal rank), router-boosted, listwise-reranked, then backfilled with each hit entity’s facts. Default semantics is Datomic-style "actual now" — only facts whose validity window contains the query moment; `asOf` slices world-time and `includeStale` reverts to the audit shape. `userId` widens the fence from tenant-global memory to tenant-global PLUS that user''s personal rows (fail-closed: omitted means global only). Facts whose predicate requires a scope the caller lacks never enter the result. Fans out to the shared embedding / LLM budget, so it sits in the per-credential `expensive` throttle bucket — 10 requests/min, not the 120/min default. Source: src/search/search.controller.ts.


        Required scope: `brain:read`.'
      operationId: searchKnowledge
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponse'
          description: Scored entity hits with their facts.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Search the knowledge graph
      tags:
      - Search
  /v1/search/multi-hop:
    post:
      description: 'A planner LLM decomposes the query into at most `maxHops` anchored sub-queries; each later hop is scoped to the running entity set, so the engine never spends compute on candidates already disqualified. Answers questions that join evidence across turns or entities. `supportingFactIds` is the evidence chain (HotpotQA-style) — the caller can audit exactly which facts drove the answer. `synthesize: true` adds a grounded answer with citations alongside the per-hop trace. Fans out to the shared embedding / LLM budget, so it sits in the per-credential `expensive` throttle bucket — 10 requests/min, not the 120/min default. Source: src/multi-hop/multi-hop.controller.ts.


        Required scope: `brain:read`.'
      operationId: searchMultiHop
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultiHopRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiHopResponse'
          description: The hop trace and the final entity set.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Chained multi-hop search
      tags:
      - Search
  /v1/synthesize:
    post:
      description: 'Corrective RAG over the same retrieval stack as /v1/search: generate an answer, then verify each claim against the facts it cites. The pipeline ABSTAINS rather than guess — `answer` is null and `reason` names the gate that fired (no results, thin coverage, ungrounded support, a failed verifier…). `synthesisGuardrails` picks the policy: `strict` closes to null on a partial verdict, `lenient` returns the answer with the verdict attached, `off` skips the verifier. Cited facts are always the caller’s own visible memory. Fans out to the shared embedding / LLM budget, so it sits in the per-credential `expensive` throttle bucket — 10 requests/min, not the 120/min default. Source: src/synthesize/synthesize.controller.ts.


        Required scope: `brain:read`.'
      operationId: synthesizeAnswer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SynthesizeRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SynthesizeResponse'
          description: The answer (or a reasoned abstention).
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Answer a question from memory, with citations
      tags:
      - Search
components:
  responses:
    TooManyRequests:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      description: Per-credential throttle exceeded.
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      description: Validation failed.
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      description: Missing or unknown bearer key.
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
      description: The key lacks the required scope.
  schemas:
    HopOutcome:
      additionalProperties: false
      properties:
        hits:
          items:
            $ref: '#/components/schemas/SearchHit'
          type: array
        hop:
          $ref: '#/components/schemas/HopPlan'
        hopEntityIds:
          items:
            type: string
          type: array
        runningEntityIds:
          items:
            type: string
          type: array
        supportingFactIds:
          items:
            type: string
          type: array
      required:
      - hop
      - hopEntityIds
      - runningEntityIds
      - hits
      - supportingFactIds
      type: object
    SearchHit:
      additionalProperties: false
      properties:
        canonicalName:
          type: string
        entityId:
          type: string
        entityType:
          type: string
        externalRefs:
          additionalProperties:
            type: string
          propertyNames:
            type: string
          type: object
        facts:
          items:
            $ref: '#/components/schemas/SearchFact'
          type: array
        relations:
          items:
            additionalProperties: false
            properties:
              direction:
                enum:
                - out
                - in
                type: string
              edgeId:
                type: string
              kind:
                type: string
              peer:
                type: string
              peerId:
                type: string
              peerType:
                type: string
              validFrom:
                type: string
              validUntil:
                type: string
            required:
            - kind
            - peer
            - peerType
            type: object
          type: array
        score:
          type: number
      required:
      - entityId
      - entityType
      - canonicalName
      - externalRefs
      - facts
      - score
      type: object
    SearchResponse:
      additionalProperties: false
      properties:
        degraded:
          items:
            enum:
            - vector_leg
            type: string
          type: array
        linked:
          items:
            additionalProperties: false
            properties:
              connectionId:
                type: string
              connector:
                type: string
              hits:
                items:
                  additionalProperties: false
                  properties:
                    externalId:
                      type: string
                    modifiedAt:
                      type: string
                    originUri:
                      type: string
                    score:
                      type: number
                    snippet:
                      type: string
                    title:
                      type: string
                  required:
                  - externalId
                  - title
                  type: object
                type: array
              observationRef:
                type: string
            required:
            - connectionId
            - connector
            - observationRef
            - hits
            type: object
          type: array
        results:
          items:
            $ref: '#/components/schemas/SearchHit'
          type: array
      required:
      - results
      type: object
    ScoreBreakdown:
      additionalProperties: {}
      propertyNames:
        type: string
      type: object
    MultiHopResponse:
      additionalProperties: false
      properties:
        finalEntityIds:
          items:
            type: string
          type: array
        finalHits:
          items:
            $ref: '#/components/schemas/SearchHit'
          type: array
        hops:
          items:
            $ref: '#/components/schemas/HopOutcome'
          type: array
        isMultiHop:
          type: boolean
        supportingFactIds:
          items:
            type: string
          type: array
        synthesis:
          additionalProperties: false
          properties:
            answer:
              type:
              - string
              - 'null'
            citations:
              items:
                $ref: '#/components/schemas/Citation'
              type: array
            reason:
              $ref: '#/components/schemas/SynthesisReason'
            tokenUsage:
              $ref: '#/components/schemas/TokenUsage'
          required:
          - answer
          - citations
          type: object
      required:
      - isMultiHop
      - hops
      - finalEntityIds
      - finalHits
      - supportingFactIds
      type: object
    SynthesisReason:
      enum:
      - no_results
      - no_grounded_evidence
      - low_coverage
      - evidence_capability_unmet
      - ungrounded_evidence
      - verifier_failed
      - verifier_partial
      - generator_error
      - harness_mode
      - verifier_error
      type: string
    Citation:
      additionalProperties: false
      properties:
        canonicalName:
          type: string
        entityId:
          type: string
        factId:
          type: string
        object:
          type: string
        predicate:
          type: string
        slot:
          type: string
        sourceKey:
          type: string
        validFrom:
          type: string
      required:
      - factId
      - entityId
      - canonicalName
      - predicate
      - slot
      - object
      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
    DecisionLogEntry:
      additionalProperties: {}
      propertyNames:
        type: string
      type: object
    TokenUsage:
      additionalProperties: false
      properties:
        completionTokens:
          type: number
        promptTokens:
          type: number
      required:
      - promptTokens
      - completionTokens
      type: object
    SearchRequest:
      additionalProperties: false
      properties:
        asOf:
          type: string
        confidenceFloor:
          maximum: 1
          minimum: 0
          type: number
        disableLangFilter:
          type: boolean
        entityIds:
          items:
            type: string
          type: array
        entityTypes:
          items:
            type: string
          type: array
        includeContested:
          type: boolean
        includeRetracted:
          type: boolean
        includeStale:
          type: boolean
        limit:
          maximum: 100
          minimum: 1
          type: number
        minConfidence:
          maximum: 1
          minimum: 0
          type: number
        outputShape:
          enum:
          - full
          - compact
          - ids
          type: string
        predicates:
          items:
            type: string
          type: array
        query:
          maxLength: 8000
          type: string
        queryLang:
          type: string
        requireProvenance:
          type: boolean
        searchMode:
          enum:
          - vector
          - lexical
          - hybrid
          type: string
        tokenBudget:
          maximum: 50000
          minimum: 50
          type: number
        userId:
          maxLength: 200
          type: string
      required:
      - query
      type: object
    EvidenceCitation:
      additionalProperties: false
      properties:
        assetId:
          type: string
        beliefId:
          type: string
        capability:
          enum:
          - text
          - visual
          - audio
          - document_region
          type: string
        conversationId:
          type: string
        episodeId:
          type: string
        excerpt:
          type: string
        fragmentId:
          type: string
        occurredAt:
          type: string
        sceneId:
          type: string
        span:
          additionalProperties: false
          properties:
            end:
              type: number
            exact:
              type: string
            start:
              type: number
          required:
          - start
          - end
          - exact
          type: object
      type: object
    HopPlan:
      additionalProperties: false
      properties:
        asOf:
          type:
          - string
          - 'null'
        combination:
          enum:
          - seed
          - subset_of_previous
          - intersect
          - union
          type: string
        predicates:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
        rationale:
          type:
          - string
          - 'null'
        subQuery:
          type: string
      required:
      - subQuery
      - combination
      type: object
    SynthesizeRequest:
      additionalProperties: false
      properties:
        answerLang:
          type: string
        asOf:
          type: string
        confidenceFloor:
          maximum: 1
          minimum: 0
          type: number
        disableLangFilter:
          type: boolean
        entityIds:
          items:
            type: string
          type: array
        entityTypes:
          items:
            type: string
          type: array
        explain:
          type: boolean
        includeContested:
          type: boolean
        includeRetracted:
          type: boolean
        includeStale:
          type: boolean
        limit:
          maximum: 100
          minimum: 1
          type: number
        minConfidence:
          maximum: 1
          minimum: 0
          type: number
        outputShape:
          enum:
          - full
          - compact
          - ids
          type: string
        predicates:
          items:
            type: string
          type: array
        query:
          maxLength: 8000
          type: string
        queryLang:
          type: string
        requireProvenance:
          type: boolean
        searchMode:
          enum:
          - vector
          - lexical
          - hybrid
          type: string
        synthesisGuardrails:
          enum:
          - strict
          - lenient
          - 'off'
          - answer
          type: string
        synthesisModel:
          type: string
        tokenBudget:
          maximum: 50000
          minimum: 50
          type: number
        userId:
          maxLength: 200
          type: string
      required:
      - query
      type: object
    MultiHopRequest:
      additionalProperties: false
      properties:
        asOf:
          type: string
        confidenceFloor:
          maximum: 1
          minimum: 0
          type: number
        disableLangFilter:
          type: boolean
        entityIds:
          items:
            type: string
          type: array
        entityTypes:
          items:
            type: string
          type: array
        includeContested:
          type: boolean
        includeRetracted:
          type: boolean
        includeStale:
          type: boolean
        limit:
          maximum: 100
          minimum: 1
          type: number
        maxHops:
          maximum: 5
          minimum: 1
          type: integer
        minConfidence:
          maximum: 1
          minimum: 0
          type: number
        outputShape:
          enum:
          - full
          - compact
          - ids
          type: string
        predicates:
          items:
            type: string
          type: array
        query:
          maxLength: 8000
          type: string
        queryLang:
          type: string
        requireProvenance:
          type: boolean
        searchMode:
          enum:
          - vector
          - lexical
          - hybrid
          type: string
        synthesisGuardrails:
          enum:
          - strict
          - lenient
          - 'off'
          - answer
          type: string
        synthesisModel:
          type: string
        synthesize:
          type: boolean
        tokenBudget:
          maximum: 50000
          minimum: 50
          type: number
        userId:
          maxLength: 200
          type: string
      required:
      - query
      type: object
    SearchFact:
      additionalProperties: false
      properties:
        breakdown:
          $ref: '#/components/schemas/ScoreBreakdown'
        confidence:
          type: number
        date:
          type: string
        expectedUntil:
          type: string
        factId:
          type: string
        highlight:
          type: string
        mentionedAt:
          type: string
        object:
          type: string
        predicate:
          type: string
        predicateAlias:
          type: string
        scene:
          type: string
        score:
          type: number
        sourceKey:
          type: string
        status:
          type: string
        validFrom:
          type: string
        validUntil:
          type: string
      required:
      - factId
      - predicate
      - object
      - confidence
      - validFrom
      - status
      - score
      type: object
    SynthesizeResponse:
      additionalProperties: false
      properties:
        answer:
          type:
          - string
          - 'null'
        cached:
          type: boolean
        citations:
          items:
            $ref: '#/components/schemas/Citation'
          type: array
        decisionLog:
          items:
            $ref: '#/components/schemas/DecisionLogEntry'
          type: array
        evidenceCitations:
          items:
            $ref: '#/components/schemas/EvidenceCitation'
          type: array
        reason:
          $ref: '#/components/schemas/SynthesisReason'
        results:
          items:
            $ref: '#/components/schemas/SearchHit'
          type: array
        tokenUsage:
          $ref: '#/components/schemas/TokenUsage'
      required:
      - answer
      - citations
      - results
      type: object
  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