Developer Docs
Last updated: July 15, 2026
Build browser apps over user-owned files, publish reusable skills and services, and route agent requests through the Terminus gateway.
1. Overview
Terminus Intelligence is a marketplace and search engine for AI agent skills and services. Developers publish skills on the platform, and agents or applications discover and run them through the Terminus API.
All API endpoints are served under the /v1 prefix of your Terminus API host. Requests and responses use JSON over HTTPS.
export TERMINUS_API_URL=https://<your-terminus-api-host>2. Authentication
Terminus uses two credential types. User session endpoints (account, dashboard, key management) require a login JWT issued by /v1/auth/login. API runtime endpoints (search, running skills, the chat gateway) require an API key beginning with timi_.
Authorization: Bearer <login-jwt> # session endpoints
Authorization: Bearer timi_... # API runtime endpointsCreate an account with your email, then set a password using the emailed setup token:
curl -s $TERMINUS_API_URL/v1/auth/register \
-H 'content-type: application/json' \
-d '{"email":"you@example.com"}'3. API Keys
Create and revoke API keys from the dashboard, or programmatically with a session token. Store keys securely; they are shown once at creation.
curl -s $TERMINUS_API_URL/v1/api-keys \
-H 'content-type: application/json' \
-H "authorization: Bearer $TERMINUS_SESSION_TOKEN" \
-d '{"name":"Default CLI key"}'Verify a key with POST /v1/api-keys/verify, and review consumption with GET /v1/usage.
4. Searching Skills
Query the skill index with GET /v1/skills/search. Results are ranked by relevance and quality, and include both skills published on Terminus and public skills indexed from GitHub.
curl -s "$TERMINUS_API_URL/v1/skills/search?q=pdf+extraction&limit=20" \
-H "authorization: Bearer $TERMINUS_API_KEY"Individual skills are addressable by id or by canonical address: GET /v1/skills/:id-or-uid or GET /v1/skills/by-address/:handle/:slug.
5. Running Skills
Hosted skills execute on Terminus infrastructure. Invoke them by id or address with a JSON payload of inputs.
curl -s $TERMINUS_API_URL/v1/skills/by-address/acme/summarize/run \
-H 'content-type: application/json' \
-H "authorization: Bearer $TERMINUS_API_KEY" \
-d '{"input":{"text":"..."}}'6. Publishing Skills
Publish a skill with POST /v1/skills using a session token, then manage it from the developer dashboard: GET /v1/dashboard/developer lists your skills, and PATCH /v1/dashboard/developer/skills/:id-or-uid updates metadata, visibility, and assets.
Each published skill receives a canonical address of the form @handle/slug that stays stable across versions.
7. Browser apps
An app is a normal multi-file website with a public marketplace page at terminus.build/apps/{publisher}/{slug}. App publishers are pseudonymous identities or organization names, separate from account usernames; historical publisher handles redirect to the current canonical page.
Execution stays on an isolated *.apps.terminus.build origin. Its durable state is stored as files in the current user's Terminus data directory, so users can replace the interface without surrendering or migrating app-owned database rows.
timi init my-app --kind app --template react # vanilla | react | svelte
cd my-app && npm install
timi dev . # terminal 1: the app runtime (/_timi) + fixture data
npm run dev # terminal 2: hot reload; vite proxies /_timi to timi dev
timi publish . # builds, validates, publishesThe v3 TimiSDK uses same-origin APIs for managed JSON collections, object buckets, queued functions, durable schedules, live events, notifications, logs, private files, collaborative spaces, exact user lookup, and the app's standing service. The browser receives only an HttpOnly installation-scoped session; it never receives the user's Terminus login token.
A timi.json manifest separates capabilities (consent), resources (collections, buckets, channels), workloads (functions, schedules, services), shell contributions (routes, commands, notifications, badges, global search), and lifecycle migrations. Every section is immutable and reviewed at install or upgrade.
timi plan my-app --dir .
timi publish .
timi inspect my-app
timi logs my-app --level error
timi doctor my-app8. Standing app services
An app release can run on demand as a session, or as a standing HTTP service. Standing services remain replaceable compute: immutable app materials are bootstrapped into app/, while user-owned data stays in Terminus and is available only through short-lived request capabilities.
{
"schema_version": 3,
"slug": "team-notes",
"runtime": {
"kind": "service",
"tenancy": "shared",
"command": ["node", "service/server.js"],
"port": 8080,
"public": false,
"memory_mb": 512,
"cpus": 1,
"max_concurrency": 20,
"request_timeout_seconds": 30
},
"workloads": {
"functions": [{ "name": "digest", "path": "functions/digest", "timeout_seconds": 30 }],
"schedules": [{ "name": "daily-digest", "function": "digest", "cron": "0 9 * * *", "timezone": "UTC" }]
},
"shell": { "notifications": true },
"lifecycle": { "data_version": 1, "migrations": [] }
}The process must listen on 127.0.0.1 using PORT. It has no public VM port; timi-agentd maintains an authenticated outbound tunnel. Use GET /v1/apps/:id/manifest to export configuration, POST /manifest/plan to validate and diff, PUT /manifest to apply the draft, and POST /publish to create an immutable release.
The authored process runs without the supervisor's relay secret. Direct egress is denied; HTTPS requests use a platform proxy that permits only domains listed in capabilities.network_domains, plus the Terminus data API.
Start or stop a published service with POST /v1/apps/:id/service/start and /service/stop. GET /v1/apps/:id/platform, /logs, and /diagnostics expose managed resource counts, function output, lifecycle state, and provider-neutral health findings.
During an authenticated app request, the process receives x-timi-user-capability. Pass it as a Bearer token to the TIMI_DATA_API endpoint to list data, or TIMI_DATA_API/object to read and write only the installed release's approved data paths. The capability becomes invalid when that request finishes.
9. Chat Gateway
The Timi gateway exposes an OpenAI-compatible chat completions endpoint that routes to your selected model provider. List available models with GET /v1/timi/models.
curl -s $TERMINUS_API_URL/v1/timi/chat/completions \
-H 'content-type: application/json' \
-H "authorization: Bearer $TERMINUS_API_KEY" \
-d '{"model":"openai:gpt-4.1","messages":[{"role":"user","content":"hello"}]}'10. Support
For developer questions, integration help, or to report an issue, contact us at developers@terminus.com.