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.
openapi: 3.2.0
info:
title: Kaiva Bridge Management Documents API
version: 1.0.0
summary: Create, read and publish managed MCP servers from an OpenAPI spec, a GraphQL API, a database, documents or a remote MCP server.
description: 'The REST API behind the Kaiva Bridge console and the @kaiva/bridge CLI. It creates managed MCP servers from an OpenAPI or Swagger spec, a GraphQL endpoint, a PostgreSQL, MySQL, MariaDB or SQL Server database, uploaded documents or a remote MCP server, chooses which tools are exposed, publishes the server and creates the keys AI clients use.
Every request carries a management key: `Authorization: Bearer kv_mgmt_...`. An owner or admin creates one in the console under Keys & access (type Management), or `npx @kaiva/bridge login` approves a machine and saves one. A management key acts on its own workspace only, and it cannot create another management key. Gateway keys (`kv_live_...`) are for calling an MCP server and are refused here.
A published server is an MCP endpoint (Streamable HTTP) at `https://api.kaiv.ai/api/bridge/mcp/`. AI clients call it with MCP, not with this API. Claude, ChatGPT, Cursor, VS Code and Claude Code can sign in to it with OAuth 2.1 instead of a key.
Limits: 120 requests a minute per address; 60 document uploads a minute and 12 credential tests a minute per workspace.
The CLI''s source is public: https://github.com/ai-kaiva/bridge'
contact:
name: Kaiva support
email: support@kaiv.ai
url: https://kaiv.ai/bridge/docs
termsOfService: https://kaiv.ai/terms
servers:
- url: https://api.kaiv.ai/api/bridge/v1
description: Production
security:
- managementKey: []
tags:
- name: Documents
description: A server that makes uploaded documents searchable.
paths:
/documents/servers:
post:
tags:
- Documents
operationId: createDocumentsServer
summary: Create a documents server
description: It goes live with its first document that is read.
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
responses:
'201':
description: The documents server.
content:
application/json:
schema:
type: object
properties:
server:
$ref: '#/components/schemas/Server'
'401':
$ref: '#/components/responses/Unauthorized'
/documents/servers/{id}:
parameters:
- $ref: '#/components/parameters/ServerId'
get:
tags:
- Documents
operationId: listDocuments
summary: List a documents server's files and how each is getting on
description: Each document is queued, being read (page n of m), ready or failed.
responses:
'200':
description: The server's documents.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/documents/servers/{id}/documents:
parameters:
- $ref: '#/components/parameters/ServerId'
post:
tags:
- Documents
operationId: uploadDocument
summary: Upload one document
description: A PDF, Word (.docx), PNG, JPEG, text or Markdown file, up to 25 MB. A file with the same name replaces that document once the new version is read.
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- file
properties:
file:
type: string
format: binary
responses:
'202':
description: Accepted; it is read in the background.
content:
application/json:
schema:
type: object
properties:
document:
type: object
additionalProperties: true
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'413':
description: The file is larger than 25 MB.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
$ref: '#/components/responses/RateLimited'
components:
schemas:
Error:
type: object
properties:
error:
type: string
description: A short code, or a sentence for errors in your request.
message:
type: string
Server:
type: object
description: An MCP server. A published server's MCP address is https://api.kaiv.ai/api/bridge/mcp/<slug>.
properties:
id:
type: string
name:
type: string
slug:
type: string
source_type:
type: string
enum:
- openapi
- graphql
- postgres
- mysql
- sqlserver
- mcp
- dataset
- documents
state:
type: string
description: draft, live and so on.
additionalProperties: true
responses:
RateLimited:
description: Too many requests; wait a minute.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: No key, an unknown key, or a gateway key (kv_live_) where a management key is needed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: The request is missing something or has a value Bridge cannot use; the answer says which.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: No such item in this workspace.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
ServerId:
name: id
in: path
required: true
description: The server's id.
schema:
type: string
securitySchemes:
managementKey:
type: http
scheme: bearer
bearerFormat: kv_mgmt_
description: A management key (kv_mgmt_...). Create one in the console under Keys & access, or run `npx @kaiva/bridge login`.
externalDocs:
description: Kaiva Bridge docs
url: https://kaiv.ai/bridge/docs