API Endpoints Reference

API endpoints for querying agents, managing data sources, and retrieving analytics.

Base URL

https://api.twig.so

Protocol: HTTPS only (HTTP requests redirect to HTTPS)

API Version: v1 (included in path: /api/v1/... or legacy /api/...)

Authentication

Include API key in Authorization header:

curl -H "Authorization: Bearer twigsk_live_abc123..." \
     https://api.twig.so/api/agents

Key format: twigsk_live_... (production) or twigsk_test_... (test)

Generate key: Settings → API Keys → Generate New Key

See Authentication for key management.

Rate Limits

Enforced per API key:

Scope
Requests/Minute
Burst Allowance

Execute (queries)

100

120

Write (create/update)

10

15

Read (list/get)

200

250

Admin (org settings)

50

60

Headers in response:

When exceeded: 429 Too Many Requests with reset timestamp

See Rate Limits for optimization strategies.

API Endpoints

Chat & Completion

POST /api/v1/query

Generate agent response. Replaces legacy /api/chat.

Request:

Required fields: agent_id, query

Optional fields:

  • session_id: For multi-turn conversations (creates new if omitted)

  • stream: Boolean, SSE streaming (default: false)

  • temperature: 0-2 (default: agent config value)

  • max_tokens: Response length limit (default: agent config value)

Response (200 OK):

Error responses:

  • 400: Missing required field, invalid agent_id format

  • 401: Invalid API key

  • 403: API key lacks Execute scope

  • 404: Agent not found

  • 429: Rate limit exceeded

  • 500: Internal error

Latency: 1-5s depending on RAG strategy

POST /api/v1/semantic-search

Retrieve chunks without LLM generation.

Request:

Required: query, org_id

Response (200 OK):

Agents

GET /api/v1/agents

List agents. Requires Read scope.

Query params:

  • limit: Max results (default: 50, max: 200)

  • offset: Pagination (default: 0)

Response (200):

POST /api/v1/agents

Create agent. Requires Write scope.

Request:

Required: name, data_source_ids

Response (201): Agent object with generated id

GET /api/v1/agents/:id

Get agent details. Requires Read scope.

PUT /api/v1/agents/:id

Update agent. Requires Write scope.

Request: Same fields as POST, all optional

Response (200): Updated agent object

DELETE /api/v1/agents/:id

Delete agent. Requires Write scope.

Response (204): No content

Data Sources

GET /api/v1/data-sources

List data sources. Requires Read scope.

Query params: limit, offset, status (active/processing/failed)

POST /api/v1/data-sources

Create data source. Requires Write scope.

Request:

Types: website, file, confluence, slack, google_drive, sharepoint

Sync frequency: hourly, daily, weekly, manual

Response (201): Data source object with ID, status "pending"

POST /api/v1/data-sources/:id/sync

Trigger sync. Requires Write scope.

Response (202): Sync job queued

GET /api/v1/data-sources/:id/status

Check processing status.

Response:

Interactions

GET /api/v1/interactions

List query history. Requires Read scope.

Query params:

  • limit, offset: Pagination

  • agent_id: Filter by agent

  • start_date, end_date: Date range (YYYY-MM-DD)

  • feedback: Filter by positive/negative/null

Response:

POST /api/v1/interactions/:id/feedback

Submit feedback. Requires Execute scope.

Request:

feedback values: positive, negative

Analytics

GET /api/v1/analytics

Get metrics. Requires Admin scope.

Query params:

  • start_date, end_date: Date range (required, YYYY-MM-DD)

  • agent_id: Filter by agent (optional)

  • granularity: hour, day, week, month (default: day)

Response:

Users

GET /api/v1/users

List users. Requires Admin scope.

POST /api/v1/users

Create user. Requires Admin scope.

Request:

Roles: readonly, train, configure, admin

Knowledge Base

GET /api/v1/kb

List KB articles. Requires Read scope.

Query params: status (draft/published), limit, offset

POST /api/v1/kb

Create KB article. Requires Write scope.

Request:

PUT /api/v1/kb/:id

Update article. Creates new version. Requires Write scope.

Error Responses

Standard format:

request_id: Include when contacting support

Error Codes

HTTP Status
Code
Description
Action

400

invalid_request

Missing required field, invalid format

Check request body against docs

401

unauthorized

Invalid/missing API key

Verify key format, regenerate if needed

403

forbidden

Insufficient scope

Check key permissions (Settings → API Keys)

404

not_found

Resource doesn't exist

Verify ID, check resource wasn't deleted

429

rate_limit_exceeded

Too many requests

Wait for reset (check X-RateLimit-Reset header)

500

internal_error

Server error

Retry with exponential backoff, contact support if persists

503

service_unavailable

Maintenance or overload

Retry after 5-10 minutes

Retry logic: Use exponential backoff for 429, 500, 503 errors. Do NOT retry 400, 401, 403, 404.

Webhooks

Receive event notifications via HTTP POST to your endpoint.

Configure: Settings → Webhooks → Add Endpoint

Events:

  • interaction.completed: Query processed, response generated

  • data_source.synced: Data source sync finished

  • agent.updated: Agent configuration changed

  • eval.completed: Evaluation run finished

Payload example:

Security: Webhook signature in X-Twig-Signature header (HMAC-SHA256)

See Webhooks Guide for verification and retry logic.

SDKs

TypeScript/JavaScript:

Python:

Usage example (TypeScript):

See SDK Documentation for full API reference.

Next Steps

Last updated