Skip to content

Sibyl API Reference

Sibyl provides a dual-interface API: a 4-tool MCP interface for AI agents and a full REST API for applications and integrations.

Architecture Overview

Sibyl Combined App (Starlette, port 3334)
|-- /api/*    --> FastAPI REST endpoints
|-- /mcp      --> MCP streamable-http (4 tools)
|-- /ws       --> WebSocket for real-time updates
'-- Lifespan  --> Background queue + session management

Base URL

EnvironmentBase URL
Local Developmenthttp://localhost:3334
Productionhttps://api.your-domain.com

API Interfaces

MCP Tools (for AI Agents)

The MCP interface exposes 4 consolidated tools that cover all Sibyl operations:

ToolPurposeDocumentation
searchSemantic search across knowledge graph and documentsmcp-search.md
exploreNavigate and browse graph structuremcp-explore.md
addCreate new knowledge entitiesmcp-add.md
manageLifecycle operations and administrationmcp-manage.md

MCP Endpoint: POST /mcp (streamable-http transport)

REST API (for Applications)

Full CRUD operations with OpenAPI documentation:

CategoryEndpointsDocumentation
Entities/api/entities/*rest-entities.md
Tasks/api/tasks/*rest-tasks.md
Projects/api/entities?entity_type=projectrest-entities.md
Search/api/searchrest-search.md

OpenAPI Spec: Available at /api/docs (Swagger UI) and /api/openapi.json

Authentication & Authorization

Sibyl supports multiple authentication methods and role-based access control:

TopicDescriptionDocumentation
JWT SessionsWeb clients, browser-based appsauth-jwt.md
API KeysProgrammatic access, CI/CDauth-api-keys.md
OAuth (GitHub)Social loginauth-jwt.md
AuthorizationRoles, permissions, RLSauth-authorization.md

Quick Start

For REST API:

bash
# Using JWT token (from login)
curl -H "Authorization: Bearer $ACCESS_TOKEN" \
  https://api.example.com/api/entities

# Using API key
curl -H "Authorization: Bearer sk_live_abc123..." \
  https://api.example.com/api/entities

For MCP:

bash
# API key with mcp scope
curl -X POST https://api.example.com/mcp \
  -H "Authorization: Bearer sk_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"method": "tools/call", "params": {"name": "search", "arguments": {"query": "OAuth patterns"}}}'

Multi-Tenancy

Sibyl is multi-tenant by design. Each organization gets:

  • Isolated FalkorDB graph (named by org UUID)
  • Separate PostgreSQL data (crawled documents, users)
  • Scoped API access

Organization Context:

  • JWT tokens include org claim with organization ID
  • API keys are scoped to specific organizations
  • All queries automatically filter by organization

Rate Limiting

REST endpoints are rate-limited using SlowAPI:

TierLimit
Default100 requests/minute
Search30 requests/minute
Write operations60 requests/minute

Rate limit headers are included in responses:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1704067200

WebSocket Events

Real-time updates are available via WebSocket at /ws:

javascript
const ws = new WebSocket("wss://api.example.com/ws?token=YOUR_TOKEN");

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  // Event types: entity_created, entity_updated, entity_deleted,
  // crawl_started, crawl_progress, crawl_complete, etc.
};

Error Responses

All errors follow a consistent format:

json
{
  "detail": "Human-readable error message"
}
Status CodeMeaning
400Bad Request - Invalid parameters
401Unauthorized - Missing or invalid credentials
403Forbidden - Insufficient permissions
404Not Found - Resource doesn't exist
409Conflict - Resource locked or concurrent update
422Validation Error - Request body validation failed
429Too Many Requests - Rate limit exceeded
500Internal Server Error

Configuration

Required Environment Variables

bash
SIBYL_OPENAI_API_KEY=sk-...       # For embeddings
SIBYL_JWT_SECRET=...              # For authentication

Optional Configuration

bash
SIBYL_LOG_LEVEL=INFO
SIBYL_EMBEDDING_MODEL=text-embedding-3-small
SIBYL_MCP_AUTH_MODE=auto  # auto, on, or off

Next Steps

Released under the MIT License.