API Reference
The Tellagen API lets you manage incidents, services, teams, and custom fields programmatically.
Base URL
https://{company}.api.tellagen.com/api/v1/Replace {company} with your company subdomain.
Content type
All requests and responses use application/json.
Rate limits
API requests are rate-limited per token. If you exceed the limit, the API returns 429 Too Many Requests with a Retry-After header.
Authentication
Authenticate by including an API token in the Authorization header.
curl 'https://acme.api.tellagen.com/api/v1/incidents' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'Create API tokens in Settings > API Keys. Tokens start with the tllg_ prefix and are only shown once at creation time.
Scopes
Each API token is granted one or more scopes. A request will return 403 Forbidden if the token lacks the required scope.
| Scope | Description |
|---|---|
incidents:read | List and retrieve incidents |
incidents:write | Create and update incidents and timeline events |
services:read | List and retrieve services |
services:write | Create, update, and archive services |
teams:read | List and retrieve teams and members |
teams:write | Create, update, and archive teams; manage members |
custom_fields:read | List and retrieve custom field definitions and values |
custom_fields:write | Create, update, and archive custom fields; set incident field values |
Errors
Errors return a JSON object with a message field.
{
"message": "service name is required"
}| Status | Meaning |
|---|---|
400 | Bad Request — invalid input or missing required fields |
401 | Unauthorized — missing or invalid token |
403 | Forbidden — token lacks the required scope |
404 | Not Found — resource does not exist |
409 | Conflict — duplicate resource (e.g. team slug) |
429 | Too Many Requests — rate limit exceeded |
500 | Internal Server Error |
Incidents
Create, list, retrieve, and update incidents.
/api/v1/incidentsList incidentsReturns all incidents for the company.
incidents:readResponse 200
Array of incidents
{
"incidents": [
{
"id": 1,
"human_id": "INC-2025-001",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "open",
"status_changed_at": "2025-01-30T12:05:00Z",
"issue_type": "incident",
"impact_summary": "Payment processing delayed for EU customers",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 300,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 3,
"incident_manager": "[email protected]",
"last_event_at": "2025-01-30T12:05:00Z",
"last_event_summary": "Investigating root cause",
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {}
}
]
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/incidents' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/incidentsCreate incidentCreates a new incident. If Slack is configured and create_slack_channel is true, a Slack channel is automatically created.
incidents:writeRequest body
| Field | Type | Required | Description |
|---|---|---|---|
service | string | No | Service name (max 128 chars) |
regions | string[] | No | Affected regions |
severity | string | No | Severity key. Values are configurable per company (defaults: sev1–sev4). Uses company default if omitted. |
short_title | string | No | Short summary (max 12 chars, auto-slugified). Required if company setting short_title_required is true. |
doc_url | string | No | Document URL (e.g. a runbook or postmortem doc) |
team_id | integer | No | Owning team ID. Auto-assigned from service if omitted. |
create_slack_channel | boolean | No | Create a Slack channel for the incident |
invite_usergroups | string[] | No | Slack user group handles to invite |
{
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev2",
"short_title": "timeout",
"doc_url": "https://docs.google.com/d/1abc",
"create_slack_channel": true
}Response 201
The created incident
{
"incident": {
"id": 1,
"human_id": "INC-2025-001",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev2",
"slack_channel_id": "C08ABC123",
"meet_url": "",
"doc_url": "https://docs.google.com/d/1abc",
"status": "open",
"status_changed_at": "2025-01-30T12:00:00Z",
"issue_type": "",
"impact_summary": "",
"impact_started_at": null,
"first_reported_at": null,
"first_responded_at": null,
"recovered_at": null,
"duration_seconds": 0,
"duration_anchor": "created_at",
"team_id": 42,
"event_count": 0,
"incident_manager": "",
"last_event_at": null,
"last_event_summary": "",
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {}
}
}Example
curl -X POST \
'https://{company}.api.tellagen.com/api/v1/incidents' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev2",
"short_title": "timeout",
"doc_url": "https://docs.google.com/d/1abc",
"create_slack_channel": true
}'/api/v1/incidents/{id}Get incidentReturns a single incident by ID.
incidents:readPath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Incident ID |
Response 200
The incident
{
"incident": {
"id": 1,
"human_id": "INC-2025-001",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev2",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "active",
"status_changed_at": "2025-01-30T12:05:00Z",
"issue_type": "incident",
"impact_summary": "Payment processing delayed for EU customers",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": null,
"duration_seconds": 600,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 5,
"incident_manager": "[email protected]",
"last_event_at": "2025-01-30T12:10:00Z",
"last_event_summary": "Investigating root cause",
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {}
}
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/incidents/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/incidents/{id}Update incidentUpdates incident fields. Changes are tracked in the changelog.
incidents:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Incident ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
service | string | No | Service name |
regions | string[] | No | Affected regions |
severity | string | No | Severity key. Values are configurable per company (defaults: sev1–sev4). |
slack_channel_id | string | No | Slack channel ID |
meet_url | string | No | Meeting URL |
doc_url | string | No | Document URL (e.g. a runbook or postmortem doc) |
status | string | No | Incident status. Values are configurable per company (defaults: open, active, on-hold, monitoring, resolved, closed). |
issue_type | string | No | Classification type (e.g. incident, ticket, alert) |
impact_summary | string | No | Summary of the incident's impact |
impact_started_at | string (ISO 8601) | No | When the impact began |
first_reported_at | string (ISO 8601) | No | When the incident was first reported |
first_responded_at | string (ISO 8601) | No | When the first response occurred |
recovered_at | string (ISO 8601) | No | When the incident was recovered |
{
"severity": "sev1",
"status": "resolved",
"issue_type": "incident",
"impact_summary": "Full payment outage in EU region",
"impact_started_at": "2025-01-30T11:55:00Z",
"recovered_at": "2025-01-30T13:30:00Z"
}Response 200
The updated incident
{
"incident": {
"id": 1,
"human_id": "INC-2025-001",
"service": "payments",
"regions": [
"us-east-1"
],
"severity": "sev1",
"slack_channel_id": "C08ABC123",
"meet_url": "https://meet.google.com/abc-defg-hij",
"doc_url": "https://docs.google.com/d/1abc",
"status": "resolved",
"status_changed_at": "2025-01-30T13:30:00Z",
"issue_type": "incident",
"impact_summary": "Full payment outage in EU region",
"impact_started_at": "2025-01-30T11:55:00Z",
"first_reported_at": "2025-01-30T11:58:00Z",
"first_responded_at": "2025-01-30T12:00:00Z",
"recovered_at": "2025-01-30T13:30:00Z",
"duration_seconds": 5700,
"duration_anchor": "impact_started_at",
"team_id": 42,
"event_count": 12,
"incident_manager": "[email protected]",
"last_event_at": "2025-01-30T13:30:00Z",
"last_event_summary": "Service fully recovered",
"created_at": "2025-01-30T12:00:00Z",
"created_by": "[email protected]",
"custom_fields": {}
}
}Example
curl -X PATCH \
'https://{company}.api.tellagen.com/api/v1/incidents/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"severity": "sev1",
"status": "resolved",
"issue_type": "incident",
"impact_summary": "Full payment outage in EU region",
"impact_started_at": "2025-01-30T11:55:00Z",
"recovered_at": "2025-01-30T13:30:00Z"
}'/api/v1/incidents/{id}/rename-slack-channelRename Slack channelRenames the incident's Slack channel based on the company's channel name template.
incidents:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Incident ID |
Response 200
The new channel name
{
"channel_name": "inc-2025-001-payments"
}Example
curl -X POST \
'https://{company}.api.tellagen.com/api/v1/incidents/{id}/rename-slack-channel' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'Timeline
Record events in the incident timeline.
/api/v1/incidents/{id}/timelineList timeline eventsReturns all timeline events for the incident, including attachments.
incidents:readPath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Incident ID |
Response 200
Array of timeline events
{
"events": [
{
"id": 100,
"incident_id": 1,
"at": "2025-01-30T12:10:00Z",
"is_key": false,
"source": "manual",
"source_ref": "",
"type": "action",
"icon": "🔧",
"title": "",
"body": "Restarted payment service",
"tags": [],
"created_by": "[email protected]",
"comment_count": 0,
"attachments": []
}
]
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/incidents/{id}/timeline' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/incidents/{id}/timelineAdd timeline eventAdds a new event to the incident timeline.
incidents:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Incident ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
body | string | Yes | Event description |
at | string | No | ISO 8601 timestamp (defaults to now) |
title | string | No | Event title |
source | string | No | Event source (e.g. "user", "api") |
type | string | No | Event type (e.g. "note", "action") |
icon | string | No | Emoji icon (max 8 runes) |
tags | string[] | No | Tags for categorisation |
is_key | boolean | No | Mark as a key event (default false) |
{
"body": "Restarted payment service",
"type": "action",
"icon": "🔧"
}Response 201
The created timeline event
{
"event": {
"id": 100,
"incident_id": 1,
"at": "2025-01-30T12:10:00Z",
"is_key": false,
"source": "api",
"source_ref": "",
"type": "action",
"icon": "🔧",
"title": "",
"body": "Restarted payment service",
"tags": [],
"created_by": "[email protected]",
"comment_count": 0,
"attachments": []
}
}Example
curl -X POST \
'https://{company}.api.tellagen.com/api/v1/incidents/{id}/timeline' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"body": "Restarted payment service",
"type": "action",
"icon": "🔧"
}'/api/v1/timeline/{id}Get timeline eventReturns a single timeline event by ID.
incidents:readPath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Timeline event ID |
Response 200
The timeline event
{
"event": {
"id": 100,
"incident_id": 1,
"at": "2025-01-30T12:10:00Z",
"is_key": false,
"source": "manual",
"source_ref": "",
"type": "action",
"icon": "🔧",
"title": "",
"body": "Restarted payment service",
"tags": [],
"created_by": "[email protected]",
"comment_count": 0,
"attachments": []
}
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/timeline/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/timeline/{id}Update timeline eventUpdates an existing timeline event.
incidents:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Timeline event ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
body | string | No | Event description (cannot be empty) |
title | string | No | Event title |
icon | string | No | Emoji icon (max 8 runes) |
type | string | No | Event type |
at | string | No | ISO 8601 timestamp (cannot be in the future) |
tags | string[] | No | Tags for categorisation |
is_key | boolean | No | Mark as a key event |
{
"body": "Restarted payment service — confirmed recovery"
}Response 200
The updated timeline event
{
"event": {
"id": 100,
"incident_id": 1,
"at": "2025-01-30T12:10:00Z",
"is_key": false,
"source": "manual",
"source_ref": "",
"type": "action",
"icon": "🔧",
"title": "",
"body": "Restarted payment service — confirmed recovery",
"tags": [],
"created_by": "[email protected]",
"comment_count": 0,
"attachments": []
}
}Example
curl -X PATCH \
'https://{company}.api.tellagen.com/api/v1/timeline/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"body": "Restarted payment service — confirmed recovery"
}'/api/v1/timeline/{id}Delete timeline eventDeletes a timeline event and its attachments.
incidents:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Timeline event ID |
Returns 204 with no body.
Example
curl -X DELETE \
'https://{company}.api.tellagen.com/api/v1/timeline/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'Services
Manage the service catalogue.
/api/v1/servicesList servicesReturns all services, optionally including archived ones.
services:readQuery parameters
| Field | Type | Required | Description |
|---|---|---|---|
include_archived | boolean | No | Include archived services (default false) |
Response 200
Array of services
{
"services": [
{
"id": 5,
"name": "Payment Service",
"slug": "payment-service",
"description": "Handles all payment processing",
"owner_team_id": 42,
"owner_team_name": "Platform Team",
"owner_team_slug": "platform-team",
"tier": "t0",
"tags": [
"critical",
"payments"
],
"external_id": "",
"created_at": "2025-01-15T10:00:00Z",
"updated_at": "2025-01-15T10:00:00Z",
"archived_at": null
}
]
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/services' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/servicesCreate serviceAdds a new service. Slug is auto-generated from name if omitted.
services:writeRequest body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Service name (1-128 chars) |
slug | string | No | URL-safe slug (auto-generated if omitted) |
description | string | No | Service description |
owner_team_id | integer | No | Owning team ID |
tier | string | No | t0 | t1 | t2 (default) | t3 |
tags | string[] | No | Tags for categorisation |
external_id | string | No | External system identifier |
{
"name": "Payment Service",
"description": "Handles all payment processing",
"owner_team_id": 42,
"tier": "t0",
"tags": [
"critical",
"payments"
]
}Response 201
The created service
{
"service": {
"id": 5,
"name": "Payment Service",
"slug": "payment-service",
"description": "Handles all payment processing",
"owner_team_id": 42,
"tier": "t0",
"tags": [
"critical",
"payments"
],
"external_id": "",
"created_at": "2025-01-30T12:00:00Z",
"updated_at": "2025-01-30T12:00:00Z",
"archived_at": null
}
}Example
curl -X POST \
'https://{company}.api.tellagen.com/api/v1/services' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "Payment Service",
"description": "Handles all payment processing",
"owner_team_id": 42,
"tier": "t0",
"tags": [
"critical",
"payments"
]
}'/api/v1/services/{id}Get serviceReturns a single service by ID.
services:readPath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Service ID |
Response 200
The service
{
"service": {
"id": 5,
"name": "Payment Service",
"slug": "payment-service",
"description": "Handles all payment processing",
"owner_team_id": 42,
"owner_team_name": "Platform Team",
"owner_team_slug": "platform-team",
"tier": "t0",
"tags": [
"critical",
"payments"
],
"external_id": "",
"created_at": "2025-01-15T10:00:00Z",
"updated_at": "2025-01-15T10:00:00Z",
"archived_at": null
}
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/services/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/services/{id}Update serviceUpdates service fields.
services:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Service ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | Service name (1-128 chars) |
description | string | No | Service description |
owner_team_id | integer | No | Owning team ID |
tier | string | No | t0 | t1 | t2 | t3 |
tags | string[] | No | Tags |
external_id | string | No | External system identifier |
{
"tier": "t1",
"tags": [
"payments",
"core"
]
}Response 200
The updated service
{
"service": {
"id": 5,
"name": "Payment Service",
"slug": "payment-service",
"tier": "t1",
"tags": [
"payments",
"core"
],
"created_at": "2025-01-15T10:00:00Z",
"updated_at": "2025-01-30T12:00:00Z",
"archived_at": null
}
}Example
curl -X PATCH \
'https://{company}.api.tellagen.com/api/v1/services/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"tier": "t1",
"tags": [
"payments",
"core"
]
}'/api/v1/services/{id}Archive serviceSoft-deletes (archives) a service. It can still be retrieved with include_archived=true.
services:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Service ID |
Returns 204 with no body.
Example
curl -X DELETE \
'https://{company}.api.tellagen.com/api/v1/services/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'Teams
Manage teams and their members.
/api/v1/teamsList teamsReturns all teams, optionally including archived ones.
teams:readQuery parameters
| Field | Type | Required | Description |
|---|---|---|---|
include_archived | boolean | No | Include archived teams (default false) |
Response 200
Array of teams
{
"teams": [
{
"id": 42,
"name": "Platform Team",
"slug": "platform-team",
"description": "Core platform infrastructure",
"parent_team_id": null,
"member_count": 12,
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-10T09:00:00Z",
"archived_at": null
}
]
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/teams' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/teamsCreate teamCreates a new team. Slug is auto-generated from name if omitted. Returns 409 if slug already exists.
teams:writeRequest body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Team name (1-128 chars) |
slug | string | No | URL-safe slug (auto-generated if omitted) |
description | string | No | Team description |
parent_team_id | integer | No | Parent team ID for hierarchy |
{
"name": "Platform Team",
"description": "Core platform infrastructure"
}Response 201
The created team
{
"team": {
"id": 42,
"name": "Platform Team",
"slug": "platform-team",
"description": "Core platform infrastructure",
"parent_team_id": null,
"member_count": 0,
"created_at": "2025-01-30T12:00:00Z",
"updated_at": "2025-01-30T12:00:00Z",
"archived_at": null
}
}Example
curl -X POST \
'https://{company}.api.tellagen.com/api/v1/teams' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "Platform Team",
"description": "Core platform infrastructure"
}'/api/v1/teams/{id}Get teamReturns a single team by ID.
teams:readPath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Team ID |
Response 200
The team
{
"team": {
"id": 42,
"name": "Platform Team",
"slug": "platform-team",
"description": "Core platform infrastructure",
"parent_team_id": null,
"member_count": 12,
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-10T09:00:00Z",
"archived_at": null
}
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/teams/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/teams/{id}Update teamUpdates team fields. Prevents circular parent references.
teams:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Team ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | Team name (1-128 chars) |
description | string | No | Team description |
parent_team_id | integer | No | Parent team ID |
{
"description": "Core platform and infrastructure"
}Response 200
The updated team
{
"team": {
"id": 42,
"name": "Platform Team",
"slug": "platform-team",
"description": "Core platform and infrastructure",
"parent_team_id": null,
"member_count": 12,
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-30T12:00:00Z",
"archived_at": null
}
}Example
curl -X PATCH \
'https://{company}.api.tellagen.com/api/v1/teams/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"description": "Core platform and infrastructure"
}'/api/v1/teams/{id}Archive teamSoft-deletes (archives) a team.
teams:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Team ID |
Returns 204 with no body.
Example
curl -X DELETE \
'https://{company}.api.tellagen.com/api/v1/teams/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/teams/{id}/membersList team membersReturns all members of the team with their user details.
teams:readPath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Team ID |
Response 200
Array of team members
{
"members": [
{
"team_id": 42,
"user_id": 100,
"role": "lead",
"email": "[email protected]",
"display_name": "Jane Doe",
"avatar_url": ""
}
]
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/teams/{id}/members' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/teams/{id}/membersAdd team memberAdds a user to the team.
teams:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Team ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
user_id | integer | Yes | User ID to add |
role | string | No | member (default) | lead |
{
"user_id": 100,
"role": "lead"
}Response 201
The created team member
{
"member": {
"team_id": 42,
"user_id": 100,
"role": "lead",
"created_at": "2025-01-30T12:00:00Z"
}
}Example
curl -X POST \
'https://{company}.api.tellagen.com/api/v1/teams/{id}/members' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"user_id": 100,
"role": "lead"
}'/api/v1/teams/{id}/members/{userId}Update team memberUpdates a team member's role.
teams:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Team ID |
userId | integer | Yes | User ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
role | string | Yes | member | lead |
{
"role": "member"
}Response 200
The updated team member
{
"member": {
"team_id": 42,
"user_id": 100,
"role": "member",
"created_at": "2025-01-10T09:00:00Z"
}
}Example
curl -X PATCH \
'https://{company}.api.tellagen.com/api/v1/teams/{id}/members/{userId}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"role": "member"
}'/api/v1/teams/{id}/members/{userId}Remove team memberRemoves a user from the team.
teams:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Team ID |
userId | integer | Yes | User ID |
Returns 204 with no body.
Example
curl -X DELETE \
'https://{company}.api.tellagen.com/api/v1/teams/{id}/members/{userId}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'Custom Fields
Define custom fields and set their values on incidents.
/api/v1/custom-fieldsList custom fieldsReturns all custom field definitions, optionally including archived ones.
custom_fields:readQuery parameters
| Field | Type | Required | Description |
|---|---|---|---|
include_archived | boolean | No | Include archived fields (default false) |
Response 200
Array of custom fields
{
"fields": [
{
"id": 50,
"name": "Affected Users",
"slug": "affected_users",
"field_type": "number",
"description": "Number of users impacted",
"default_value": 0,
"config": {
"min": 0,
"precision": 0
},
"required": false,
"sort_order": 1,
"category": "impact",
"visibility_level": "prominent",
"show_on_creation": true,
"required_on_creation": false,
"auto_add_to_layout": true,
"external_source": "",
"archived_at": null,
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-10T09:00:00Z"
}
]
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/custom-fields' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/custom-fieldsCreate custom fieldDefines a new custom field. Slug is auto-generated from name if omitted.
custom_fields:writeRequest body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Field name (1-64 chars) |
slug | string | No | URL-safe slug (auto-generated if omitted) |
field_type | string | Yes | string | number | boolean | date | time | datetime | monetary | json | select | multi_select |
description | string | No | Field description |
default_value | any | No | Default value |
config | object | No | Type-specific config (e.g. min/max for number, options for select) |
required | boolean | No | Whether the field is required |
category | string | No | context | impact | analysis | external | custom |
visibility_level | string | No | always | prominent | standard | collapsed |
show_on_creation | boolean | No | Show on incident creation form |
required_on_creation | boolean | No | Required on incident creation form |
auto_add_to_layout | boolean | No | Auto-add to incident workspace layout |
external_source | string | No | External source identifier (for external category) |
{
"name": "Affected Users",
"field_type": "number",
"description": "Number of users impacted",
"category": "impact",
"visibility_level": "prominent",
"show_on_creation": true,
"config": {
"min": 0,
"precision": 0
}
}Response 201
The created custom field
{
"field": {
"id": 50,
"name": "Affected Users",
"slug": "affected_users",
"field_type": "number",
"description": "Number of users impacted",
"default_value": null,
"config": {
"min": 0,
"precision": 0
},
"required": false,
"sort_order": 0,
"category": "impact",
"visibility_level": "prominent",
"show_on_creation": true,
"required_on_creation": false,
"auto_add_to_layout": false,
"external_source": "",
"archived_at": null,
"created_at": "2025-01-30T12:00:00Z",
"updated_at": "2025-01-30T12:00:00Z"
}
}Example
curl -X POST \
'https://{company}.api.tellagen.com/api/v1/custom-fields' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "Affected Users",
"field_type": "number",
"description": "Number of users impacted",
"category": "impact",
"visibility_level": "prominent",
"show_on_creation": true,
"config": {
"min": 0,
"precision": 0
}
}'/api/v1/custom-fields/{id}Get custom fieldReturns a single custom field definition by ID.
custom_fields:readPath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Custom field ID |
Response 200
The custom field
{
"field": {
"id": 50,
"name": "Affected Users",
"slug": "affected_users",
"field_type": "number",
"description": "Number of users impacted",
"default_value": 0,
"config": {
"min": 0,
"precision": 0
},
"required": false,
"sort_order": 1,
"category": "impact",
"visibility_level": "prominent",
"show_on_creation": true,
"required_on_creation": false,
"auto_add_to_layout": true,
"external_source": "",
"archived_at": null,
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-10T09:00:00Z"
}
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/custom-fields/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/custom-fields/{id}Update custom fieldUpdates a custom field definition.
custom_fields:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Custom field ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | Field name (1-64 chars) |
description | string | No | Field description |
default_value | any | No | Default value |
config | object | No | Type-specific config |
required | boolean | No | Whether the field is required |
sort_order | integer | No | Display order |
category | string | No | context | impact | analysis | external | custom |
visibility_level | string | No | always | prominent | standard | collapsed |
show_on_creation | boolean | No | Show on incident creation form |
required_on_creation | boolean | No | Required on incident creation form |
auto_add_to_layout | boolean | No | Auto-add to layout |
external_source | string | No | External source identifier |
{
"required": true,
"sort_order": 2
}Response 200
The updated custom field
{
"field": {
"id": 50,
"name": "Affected Users",
"slug": "affected_users",
"field_type": "number",
"required": true,
"sort_order": 2,
"created_at": "2025-01-10T09:00:00Z",
"updated_at": "2025-01-30T12:00:00Z"
}
}Example
curl -X PATCH \
'https://{company}.api.tellagen.com/api/v1/custom-fields/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"required": true,
"sort_order": 2
}'/api/v1/custom-fields/{id}Archive custom fieldSoft-deletes (archives) a custom field.
custom_fields:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Custom field ID |
Returns 204 with no body.
Example
curl -X DELETE \
'https://{company}.api.tellagen.com/api/v1/custom-fields/{id}' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/incidents/{id}/custom-fieldsGet incident field valuesReturns all custom field values set on the incident.
custom_fields:readPath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Incident ID |
Response 200
Array of custom field values
{
"values": [
{
"id": 1,
"incident_id": 1,
"custom_field_id": 50,
"value": 1500,
"created_at": "2025-01-30T12:05:00Z",
"updated_at": "2025-01-30T12:05:00Z"
}
]
}Example
curl -X GET \
'https://{company}.api.tellagen.com/api/v1/incidents/{id}/custom-fields' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN'/api/v1/incidents/{id}/custom-fieldsSet incident field valuesSets or updates custom field values on the incident.
custom_fields:writePath parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Incident ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
values | array | Yes | Array of { field_id, value } objects |
{
"values": [
{
"field_id": 50,
"value": 1500
},
{
"field_id": 51,
"value": "enterprise"
}
]
}Response 200
The updated custom field values
{
"values": [
{
"id": 1,
"incident_id": 1,
"custom_field_id": 50,
"value": 1500,
"created_at": "2025-01-30T12:05:00Z",
"updated_at": "2025-01-30T12:10:00Z"
},
{
"id": 2,
"incident_id": 1,
"custom_field_id": 51,
"value": "enterprise",
"created_at": "2025-01-30T12:10:00Z",
"updated_at": "2025-01-30T12:10:00Z"
}
]
}Example
curl -X PUT \
'https://{company}.api.tellagen.com/api/v1/incidents/{id}/custom-fields' \
-H 'Authorization: Bearer tllg_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"values": [
{
"field_id": 50,
"value": 1500
},
{
"field_id": 51,
"value": "enterprise"
}
]
}'