API Reference
Base URL
https://api.travila.ai
Request Format
All endpoints are accessed through the KrakenD API gateway using REST-style paths:
POST /api/v1/<domain>/<service>/<method>
Content-Type: application/json
For example:
curl -X POST https://api.travila.ai/api/v1/llm/gateway/send-message \
-H "X-API-Key: sk_your_key_here" \
-H "X-On-Behalf-Of: user_123" \
-H "Content-Type: application/json" \
-d '{
"conversation_key": "conv_abc",
"user_message": {
"role": "ROLE_USER",
"content": [{ "type": "CONTENT_PART_TYPE_TEXT", "content": "Hello" }]
}
}'
Request and response bodies use protojson encoding (JSON representation of Protocol Buffer messages).
Authentication
Every request must include one of:
| Method | Header | Use Case |
|---|---|---|
| Secret key | X-API-Key: sk_... + X-On-Behalf-Of: <user-id> | Backend-to-backend |
| Publishable key + JWT | X-API-Key: pk_... + Authorization: Bearer <user-jwt> | Client apps |
A dashboard sign-in JWT is an account-administration credential, not an API credential — don't authenticate an application with one.
User impersonation
| Header | Required | Description |
|---|---|---|
X-On-Behalf-Of: <user-id> | Required when a backend secret key (sk_*) acts on behalf of a specific user, including on create-thread | Scope users:impersonate must be granted to the key |
See Authentication & API Keys for methods, scopes, rotation, and code examples.
API Services
| API | Base Path | RPCs | Description |
|---|---|---|---|
| LLM APIs | /api/v1/llm/gateway/ | 31 | Threads, messages, message feedback, MCP tools, memories, voice sessions (in progress) |
| Storage APIs | /api/v1/storage/gateway/ | 15 | Per-user file storage, upload/download URLs |
| End User APIs | /api/v1/enduser/ | 5 | End-user profile self-service — location, locale, default generation config, metadata |
| Notification APIs | /api/v1/notifications/ | 46 | Push, inbox, preferences, send, topics, subscribers, workflows, providers |
| Scheduler APIs | /api/v1/scheduler/ | 10 | Scheduled jobs — cron, one-shot, and recurring-interval schedules; execution history |
| Webhook APIs | /api/v1/webhooks/ | 9 | Outbound webhooks — endpoints, subscriptions, delivery history and retries |
Total: 116 RPCs across 6 services.
Postman collection
Every endpoint above, ready to import:
- Collection — one folder per API, 122 requests
- Environment —
baseUrl,apiKey,jwt,onBehalfOf
Import both, select the Travila Platform environment, and set apiKey. Auth is configured
once on the collection, so every request inherits it — set jwt as well when using a
publishable (pk_*) key, and onBehalfOf when a secret key acts for a specific user.
Both headers are only attached when their variable is non-empty.
Request bodies are generated from the same OpenAPI specs that produce this reference, so
every field is present with a typed placeholder ("<string>", "<integer>") rather than a
real value. The shape is correct; replace the contents before sending, and drop optional
fields you don't need. For enum fields the placeholder doesn't name the allowed values —
check the endpoint page here for the accepted set.
The collection is regenerated from the specs on every docs build, so it can't drift from this reference. It is not hand-maintained — an endpoint appears here and in Postman at the same time.