API Reference
Complete reference for TirraMind's HTTP API. Every tier provides deterministic signal intelligence — no predictions, no LLM hallucinations, just the math.
Quickstart
Get your first API call working in under a minute:
- Subscribe to a tier at /pricing
- Retrieve your API key at /welcome after payment
- Use the key with any endpoint below
Your first request (Brief tier):
Production base URL:
https://api.tirramind.com
Authentication
Sending your key
Use the X-Brief-Key header (recommended):
Passing the key in the query string is rejected:
Query strings are written to access logs and leak via Referer
headers, so a key passed that way is a key you have to rotate. Use the header.
Key format and safety
Your key is a long random string starting with tirra_. Treat it like a password:
- Do not commit it to version control
- Do not pass it in URLs (use the header instead)
- Store it in an environment variable or secrets manager
- If compromised, rotate it immediately via
POST /api/v1/rotate-key
Tiers and gates
The API is tiered by price. Higher tiers unlock everything below them — the ladder is monotonic:
Entry rung. Unlocks:
/brief,/brief.json,/brief.md/api/v1/usagePOST /api/v1/rotate-key
Adds pipeline visibility. Unlocks everything above plus:
/api/v1/dag/runs
Adds deterministic entity and relationship extraction. Unlocks everything above plus:
/api/v1/entity-graph/entities/api/v1/entity-graph/entity/api/v1/entity-graph/links/evidence/graph,/evidence/stats,/evidence/analytics,/evidence/graph/export,/evidence/graph/centrality
Full infrastructure access. Unlocks everything above plus:
/api/v1/sources/api/v1/data
Endpoints
No tier required (unauthenticated — no key needed yet)
Example
Parameters
| Name | Type | Notes |
|---|---|---|
txn |
string | required Transaction ID from Paddle confirmation email |
Response (200 - claimed)
Response (202 - pending)
Provisioning is still in progress. Retry after the specified delay.
Errors
No tier required (unauthenticated)
Example
Response (200)
latest is null when no brief has been delivered yet. total_deliveries is the cumulative count.
Brief
Example
Response (200)
Errors
Brief
Example
Response (200)
Markdown-rendered brief. Same structure as JSON.
Brief+
Example
Parameters
| Name | Type | Notes |
|---|---|---|
since |
float (optional) | Unix epoch seconds. Only count requests after this time. |
Response (200)
/api/v1/data.Data Platform
Example
Response (200)
/api/v1/sources first to discover available sources.Data Platform
Example
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
source |
string | required | Must be in the allowlist from /api/v1/sources |
limit |
int | 100 | Clamped to 1–1000 |
since |
float | none | Unix epoch seconds. Only rows fetched after this time. |
until |
float | none | Unix epoch seconds. Only rows fetched before this time. |
Response (200)
Errors
/api/v1/sources for valid names.Scheduler+
Example
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
dag_name |
string | none | Filter by DAG name (exact match). Omit to see all. |
limit |
int | 20 | Clamped to 1–1000 |
Response (200)
Entity Graph+
Example
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
type |
string | none | Filter by entity_type (optional) |
limit |
int | 100 | Clamped to 1–1000 |
offset |
int | 0 | Pagination: skip this many results |
Response (200)
Entity Graph+
Example
Parameters
| Name | Type | Notes |
|---|---|---|
id |
string | required |
limit |
int | Max links to return. Default 100, clamped to 1–1000. |
Response (200)
Errors
id parameter.Entity Graph+
Example
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
link_type |
string | none | Filter by link type (optional) |
min_confidence |
float | 0.0 | Only links with confidence ≥ this value |
limit |
int | 100 | Clamped to 1–1000 |
offset |
int | 0 | Pagination: skip this many results |
Response (200)
Entity Graph+
Example
Parameters
| Name | Type | Notes |
|---|---|---|
q |
string | required Entity string to search for |
Response (200)
Entity Graph+
Example
Response (200)
Entity Graph+
Example
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
q |
string | none | Entity string. If omitted, returns overall co-occurrences. |
min_docs |
int | 2 | Only pairs appearing in this many documents |
Response (200)
Entity Graph+
Example
Response (200)
Complete graph structure with all entities, mentions, and relationships.
Entity Graph+
Example
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
q |
string | none | Entity to analyze. If omitted, returns global top entities. |
top |
int | 10 | Number of top entities to return (not clamped) |
Response (200)
Brief+
Example
Response (200)
Important: Save the new key immediately. You will not be shown it again. The old key is revoked instantly.
Errors
No tier required (public endpoint)
Example
Request body
| Field | Type | Notes |
|---|---|---|
name |
string | required Max 300 chars |
email |
string | required Max 300 chars |
subject |
string | required Max 300 chars |
message |
string | required Max 8000 chars |
Response (200)
Errors
Error codes
400 Bad Request
Malformed request. Check your parameters:
- Invalid or missing required parameters
- Unparseable JSON in request body
- Query string key disabled (set
TIRRA_REJECT_QUERY_KEYS=1in production)
403 Forbidden
Authentication or authorization failed:
- No API key provided
- API key is invalid or inactive
- Tier gate: your subscription doesn't include this endpoint
Response is always text/plain. Subscribe at /pricing or upgrade your tier.
404 Not Found
Resource or endpoint not found:
- Entity doesn't exist
- No brief has been delivered yet
- Route doesn't exist
429 Too Many Requests
Rate limit exceeded. Response includes a Retry-After header:
Wait the specified number of seconds before retrying.
500 Internal Server Error
Unexpected server error. These should be rare. If you see this consistently, contact us.
502 Bad Gateway
Upstream service unavailable. This usually indicates a temporary issue with Paddle (payment verification).
Rate limits and quotas
Global limits
These limits apply to all endpoints unless noted otherwise:
- Per-request timeout: No hard timeout, but requests must complete within reasonable time.
- Concurrent connections: Server supports up to 20 concurrent requests by default.
- Response size: No hard limit on response size. Large queries may take longer.
Endpoint-specific limits
Per transaction: 8 requests / 10 minutes
Per source IP: 20 requests / 1 hour
Per source IP: 5 requests / 1 hour
Metering and usage tracking
The following endpoints are metered — your usage counts toward any future quota system:
/brief,/brief.json,/brief.md/api/v1/sources/api/v1/data/api/v1/dag/runs/api/v1/usage(metering is skipped for this endpoint itself)/evidence/*(all evidence endpoints)/api/v1/entity-graph/*(all entity graph endpoints)
Query your usage at any time with GET /api/v1/usage.