Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.ixo.world/llms.txt

Use this file to discover all available pages before exploring further.

Overview

A running QiForge oracle exposes a REST + WebSocket surface. Most routes require a UCAN delegation header; some (/health, /docs, plus anything declared in getAuthExcludedRoutes() or authExcludedRoutes) are public. The Swagger UI at /docs is generated from the running app’s controllers — open it in a browser for the live, deployment-specific reference.

Authentication

Every protected route requires these headers:
HeaderRequiredNotes
x-ucan-delegationYesUCAN envelope authorising the request.
x-didYesThe user’s IXO DID.
x-matrix-access-tokenOptionalMatrix session token (used by Portal/Slack).
x-matrix-homeserverOptionalMatrix homeserver URL.
x-timezoneOptionalPropagates to rtCtx.user.timezone.
x-request-idOptionalCorrelation ID; echoed back as X-Request-Id.
Public routes ignore auth headers and don’t validate them.

CORS

CORS_ORIGIN controls allowed origins (wildcard * is the default; specific origins enable credentials). Allowed request headers:
Content-Type, Authorization,
x-ucan-delegation, x-matrix-access-token, x-matrix-homeserver,
x-did, x-request-id, x-timezone
Allowed methods: GET, POST, PUT, DELETE, PATCH, OPTIONS. Exposed response headers: X-Request-Id.

Public routes

RouteMethodAuthPurpose
/healthGETPublicLiveness probe.
/docsGETPublicSwagger UI.
/docs/(.*)GETPublicSwagger static assets.
Plus any route returned by a plugin’s getAuthExcludedRoutes() or by createOracleApp({ authExcludedRoutes }).

Protected routes (overview)

The runtime ships these modules:
  • SessionsModule — manage chat sessions (/sessions).
  • MessagesModule — send and stream messages (/messages).
  • WsModule — WebSocket gateway for event streaming.
  • SubscriptionModule — credit/subscription gating middleware (active when credits plugin is loaded).
Plugins can contribute additional routes via getNestModules(). Bundled examples:
  • SlackModule — Slack webhook endpoints (when slack plugin is loaded).
  • UserPreferencesController/user-preferences CRUD (when user-preferences plugin is loaded).
  • ClaimProcessingModule — claim cron endpoints (when credits plugin is fully configured).
For the authoritative route list and request/response schemas of your deployment, hit GET /docs. The shape is generated from your app’s controllers — including plugin and host routes — so it’s always in sync.

WebSocket events

Plugins emit typed events via rtCtx.emit. The framework forwards them over the active WebSocket connection to the client.
EventWhen it fires
toolCallA tool is being invoked (or has returned).
actionCallAn action (e.g. AG-UI action) is being invoked.
renderComponentA render component result is ready for the client.
reasoningThe agent emits intermediate reasoning.
browserToolCallA browser-side tool is being invoked on the user’s Portal.
routerRouting decision between agents/sub-agents.
messageCacheInvalidationA message cache entry should be invalidated.
Payload types are currently Record<string, unknown> and may be tightened in future runtime versions. The @ixo/oracles-client-sdk React SDK parses these and renders them.

Client SDK

For frontend integration, use @ixo/oracles-client-sdk — it handles the SSE / WebSocket protocol, UCAN delegation, and event parsing. See Client SDK.