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).
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).
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/inite-ai:inite-ai-search-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 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