Reference · 3 operations
Meta
Discovery and health. No key needed.
Last updated from API version 2026-10-06 at (live spec, refreshed hourly). openapi.json
Check API availability.
/api/v1/health- Scope
- No key needed
- Credits
- Free
- Idempotency-Key
- Not used
Responses
200The API is up. Not enveloped, so load balancers can read it.Show schema
HealthStatus
- statusstringrequired0
- timestampstringrequired0
ISO 8601 server time.
- versionstringrequired0
curl "https://app.owlbound.ai/api/v1/health"This OpenAPI document.
/api/v1/openapi.json- Scope
- No key needed
- Credits
- Free
- Idempotency-Key
- Not used
Responses
200The OpenAPI 3.1 document, not enveloped.Show schema
OpenApiDocument
- openapistringrequired0
- infoobjectrequired0
- pathsobjectrequired0
curl "https://app.owlbound.ai/api/v1/openapi.json"The Owlbound MCP server (Streamable HTTP).
/api/v1/mcp- Scope
- Any valid key
- Credits
- Free
- Idempotency-Key
- none
A remote Model Context Protocol server for AI agents (claude.ai,
Claude Desktop, Claude Code, any MCP client). JSON-RPC 2.0 over
Streamable HTTP with JSON responses: initialize returns an
Mcp-Session-Id, which every later request sends.
Authenticate in Authorization: Bearer with either a v1 API key or
an OAuth 2.1 access token (MCP authorization spec 2025-11-25). In
claude.ai: Settings > Connectors > Add custom connector, URL
https://app.owlbound.ai/api/v1/mcp, then sign in to Owlbound and
pick the workspace and scopes (read, enrich, write, act). Without a
valid credential the answer is 401 with WWW-Authenticate: Bearer resource_metadata="https://app.owlbound.ai/.well-known/oauth-protected-resource/api/v1/mcp",
from which clients discover the authorization server
(/.well-known/oauth-authorization-server: dynamic client
registration at /oauth/register, PKCE with a SHA-256 challenge, /oauth/token,
/oauth/revoke). An OAuth token acts as the member who signed in,
in that workspace, with the granted scopes capped by their role; it
is accepted here only, not by the REST endpoints. Access tokens last
1 hour, refresh tokens 30 days (rotated). Disconnect an app in
Settings > Connected apps.
Tools: one per action of GET /action-types, plus reads of
contacts, companies, tables, credits, events, approvals and action
runs, limited to the key's or the connection's scopes. Every tool
calls this API with that credential, so rate limits, caps,
idempotency and the request log apply. Action tools run as the
agent principal: every call is a dry run unless apply: true
comes with the planId of a dry run of the same session, and send
and external-write actions always wait for a person to approve them
in the app (the tool returns the approval link). No tool approves,
rejects or changes key settings. GET and DELETE are not offered
(405).
Parameters
- Mcp-Session-Idheaderstring
The session id from
initialize(every other request). - MCP-Protocol-Versionheaderstring
The negotiated MCP protocol version.
Request body (required) · application/json
one of
One of
with jsonrpc
- jsonrpc"2.0"required0
- idstring | integer | null0
- methodstring0
- paramsobject0
- resultany0
- errorobject0
array
array of object
Responses
200The JSON-RPC response (not enveloped).Show schema
one of
One of
with jsonrpc
- jsonrpc"2.0"required0
- idstring | integer | null0
- methodstring0
- paramsobject0
- resultany0
- errorobject0
array
array of object
202Notifications only, accepted (no body).Show schema
Errors
400 Not a JSON-RPC message, a missing session id, or an unsupported protocol version · 401 No credential, or an invalid, expired or revoked key or access
token. Carries `WWW-Authenticate: Bearer resource_metadata="...",
scope="read enrich write act"` (with `error="invalid_token"` when
a credential was sent): sign in again or refresh the token.
· 404 Unknown or expired session; initialize again. Every error is {error: {type, code, message, requestId, docUrl}}; see error codes.
curl -X POST "https://app.owlbound.ai/api/v1/mcp" \
-H "Authorization: Bearer $OWLBOUND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0"
}'