SLA Management
Configure SLA policies, track compliance, and manage escalations via the Aurion API.
⚠️ Preview — not yet in the public API
The endpoints on this page are part of the AurionAI helpdesk and are currently accessible only through an authenticated dashboard session. They are not yet exposed through public API keys — a request authenticated with
X-API-Keyreturns403. Public API-key access is planned. The reference below documents the intended contract.
SLA Management
The SLA API (v2) lets you define service level agreement policies with response and resolution time targets, automated escalations, and compliance analytics.
Plan requirement: Core SLA management — policies, targets, escalations, instances, and the deadline preview — is available on all plans. SLA analytics (compliance summary, trends, breaches) requires the Professional plan or higher. OLA management requires the Enterprise plan.
List SLA Policies
limit defaults to 50 (range 1–100); offset defaults to 0. Soft-deleted (archived) policies are hidden by default — pass include_archived=true (or status=archived) to include them.
curl "https://apps.aurionai.net/api/v2/sla/policies?limit=50&offset=0" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
{
"items": [
{
"id": "9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d",
"name": "Standard Support",
"description": "Default SLA for all tickets",
"business_hours_id": "5f1e2d3c-4b5a-6978-8a9b-0c1d2e3f4a5b",
"conditions": {
"all": [
{"field": "priority", "operator": "in", "value": ["medium", "low"]}
]
},
"priority_order": 0,
"is_default": true,
"status": "active",
"target_count": 2,
"escalation_count": 1,
"created_at": "2026-03-08T09:00:00Z",
"updated_at": "2026-03-08T09:00:00Z"
}
],
"total": 3,
"limit": 50,
"offset": 0
}Each list item also carries target_count and escalation_count. Fetch a single policy (below) to retrieve its full targets and escalations arrays.
Get SLA Policy
Retrieve a single SLA policy by ID, including its targets and escalations. The policy_id must be a valid UUID — a non-UUID path returns 422; an unknown ID returns 404 {"detail": "SLA policy not found"}.
curl "https://apps.aurionai.net/api/v2/sla/policies/9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
{
"id": "9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d",
"name": "Standard Support",
"description": "Default SLA for all tickets",
"business_hours_id": "5f1e2d3c-4b5a-6978-8a9b-0c1d2e3f4a5b",
"conditions": {
"all": [
{"field": "priority", "operator": "in", "value": ["medium", "low"]}
]
},
"priority_order": 0,
"is_default": true,
"status": "active",
"created_at": "2026-03-08T09:00:00Z",
"updated_at": "2026-03-08T09:00:00Z",
"targets": [
{
"id": "3a4b5c6d-7e8f-4091-a2b3-c4d5e6f7a8b9",
"priority": "medium",
"first_response_minutes": 240,
"resolution_minutes": 1440,
"next_response_minutes": null
}
],
"escalations": [
{
"id": "1d2e3f4a-5b6c-4d7e-8f90-a1b2c3d4e5f6",
"name": "Notify lead near breach",
"trigger_type": "threshold",
"trigger_percent": 80,
"target_metric": "resolution",
"priority_filter": ["high", "urgent"],
"action_type": "notify",
"action_config": {},
"sort_order": 0,
"status": "active",
"created_at": "2026-03-08T09:00:00Z"
}
]
}Create SLA Policy
Returns 201 Created with the full policy detail. conditions is an object, not an array — use the {"all": [...]} form (a legacy flat form like {"priority": ["high"]} is also accepted).
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | 1–200 characters |
description | string | no | |
business_hours_id | string (UUID) | no | Business-hours schedule the timers follow |
conditions | object | no | Matching rules, e.g. {"all": [{"field","operator","value"}]} |
priority_order | integer | no | Evaluation order; default 0 |
is_default | boolean | no | Default false |
status | enum | no | active | inactive | archived; default active |
curl -X POST "https://apps.aurionai.net/api/v2/sla/policies" \
-H "X-API-Key: itsm_sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Critical Support",
"description": "SLA for urgent and high-priority tickets",
"business_hours_id": "5f1e2d3c-4b5a-6978-8a9b-0c1d2e3f4a5b",
"conditions": {
"all": [
{"field": "priority", "operator": "in", "value": ["urgent", "high"]}
]
},
"priority_order": 1,
"is_default": false,
"status": "active"
}'Update SLA Policy
Partially update an existing policy. Only the fields you send are changed; any of the create-body fields (name, description, business_hours_id, conditions, priority_order, is_default, status) are accepted. Returns the updated policy detail.
curl -X PATCH "https://apps.aurionai.net/api/v2/sla/policies/9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d" \
-H "X-API-Key: itsm_sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Critical Support (Updated)",
"status": "inactive"
}'Delete SLA Policy
Soft-delete (archive) a policy. Returns 204 No Content on success. Returns 409 Conflict if the policy has active or paused SLA instances, and 422 if the path policy_id is not a valid UUID.
curl -X DELETE "https://apps.aurionai.net/api/v2/sla/policies/9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d" \
-H "X-API-Key: itsm_sk_live_xxxx"Reorder SLA Policies
Set the evaluation order for policies. Policies are matched top-to-bottom; the first matching policy applies — each policy's priority_order is set to its index in the list. policy_ids must be a non-empty list of 1–100 UUIDs that all exist for the tenant. Returns 204 No Content on success; an unknown ID returns 422 {"detail": "Policy IDs not found: [...]"}.
curl -X POST "https://apps.aurionai.net/api/v2/sla/policies/reorder" \
-H "X-API-Key: itsm_sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"policy_ids": [
"c1d2e3f4-a5b6-4789-9012-3456789abcde",
"7e6f5a4b-3c2d-41e0-8f9a-0b1c2d3e4f5a",
"9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d"
]
}'Upsert SLA Target
A target is per priority: a single upsert sets the first-response and resolution clocks (and optionally the next-response clock) for one priority level, all expressed in minutes. Posting again for the same priority replaces that priority's target. Returns the upserted target; a non-existent policy_id returns 404, and a non-UUID policy_id returns 422.
| Field | Type | Required | Notes |
|---|---|---|---|
priority | enum | no | low | medium | high | urgent; default medium |
first_response_minutes | integer | yes | Minutes until first agent response (≥ 0) |
resolution_minutes | integer | yes | Minutes until the conversation is resolved (≥ 0) |
next_response_minutes | integer | no | Minutes until the next agent response (≥ 0) |
curl -X POST "https://apps.aurionai.net/api/v2/sla/policies/9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d/targets" \
-H "X-API-Key: itsm_sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"priority": "urgent",
"first_response_minutes": 15,
"resolution_minutes": 240,
"next_response_minutes": 60
}'Response:
{
"id": "3a4b5c6d-7e8f-4091-a2b3-c4d5e6f7a8b9",
"priority": "urgent",
"first_response_minutes": 15,
"resolution_minutes": 240,
"next_response_minutes": 60
}Delete SLA Target
Remove a specific target by its target ID. Returns 204 No Content on success, 404 if the target does not exist, and 422 if the path target_id is not a valid UUID.
curl -X DELETE "https://apps.aurionai.net/api/v2/sla/targets/3a4b5c6d-7e8f-4091-a2b3-c4d5e6f7a8b9" \
-H "X-API-Key: itsm_sk_live_xxxx"Escalation Rules
Automatically escalate when an SLA target is at risk. Escalations are attached to a policy and fire when the elapsed time crosses trigger_percent of the chosen target_metric's deadline. Escalation management is core SLA functionality (available on all plans).
Create Escalation
Returns 201 Created with the escalation. A non-existent policy_id returns 404; a non-UUID policy_id returns 422.
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | 1–200 characters |
trigger_type | enum | no | Only threshold; default threshold |
trigger_percent | integer | no | Percent of the target elapsed before firing, 1–500; default 100 |
target_metric | enum | no | first_response | resolution | next_response; default resolution |
priority_filter | array of enum | null | no | Restrict to priorities low/medium/high/urgent |
action_type | enum | no | notify | reassign | change_priority | notify_and_reassign; default notify |
action_config | object | no | Action-specific configuration; default {} |
sort_order | integer | no | Evaluation order; default 0 |
status | enum | no | active | inactive; default active |
curl -X POST "https://apps.aurionai.net/api/v2/sla/policies/9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d/escalations" \
-H "X-API-Key: itsm_sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Notify lead near breach",
"trigger_type": "threshold",
"trigger_percent": 80,
"target_metric": "resolution",
"priority_filter": ["high", "urgent"],
"action_type": "notify",
"action_config": {},
"sort_order": 0,
"status": "active"
}'Update Escalation
Partially update an existing escalation rule — send any subset of name, trigger_type, trigger_percent, target_metric, priority_filter, action_type, action_config, sort_order, status. An empty body returns 422 {"detail": "No fields to update"}. Returns the updated escalation; 404 if it does not exist, 422 if the path escalation_id is not a valid UUID.
curl -X PATCH "https://apps.aurionai.net/api/v2/sla/escalations/1d2e3f4a-5b6c-4d7e-8f90-a1b2c3d4e5f6" \
-H "X-API-Key: itsm_sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"trigger_percent": 90,
"action_type": "notify_and_reassign",
"status": "active"
}'action_type accepts notify, reassign, change_priority, or notify_and_reassign. status accepts active or inactive.
Delete Escalation
Returns 204 No Content on success, 404 if the escalation does not exist, and 422 if the path escalation_id is not a valid UUID.
curl -X DELETE "https://apps.aurionai.net/api/v2/sla/escalations/1d2e3f4a-5b6c-4d7e-8f90-a1b2c3d4e5f6" \
-H "X-API-Key: itsm_sk_live_xxxx"SLA Instances
Track active SLA timers across conversations. Each instance is one row per target type (a conversation governed by a policy with both first-response and resolution targets has two instance rows). Filter with conversation_id, state, and/or policy_id. limit defaults to 50 (range 1–200); offset defaults to 0.
curl "https://apps.aurionai.net/api/v2/sla/instances?state=active&limit=10" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
{
"items": [
{
"id": "a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d",
"conversation_id": "f0e1d2c3-b4a5-4968-8778-695a4b3c2d1e",
"sla_policy_id": "9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d",
"target_type": "first_response",
"state": "active",
"deadline_at": "2026-03-08T14:00:00Z",
"started_at": "2026-03-08T10:00:00Z",
"paused_at": null,
"completed_at": null,
"elapsed_minutes": 45.0,
"target_minutes": 240,
"priority": "medium",
"metadata": {},
"created_at": "2026-03-08T10:00:00Z",
"updated_at": "2026-03-08T10:45:00Z"
}
],
"total": 1,
"limit": 10,
"offset": 0
}Get SLA Instance
Retrieve a single SLA instance by ID (same flat shape as the list rows above). Returns 404 {"detail": "SLA instance not found"} if it does not exist, and 422 if the path instance_id is not a valid UUID.
curl "https://apps.aurionai.net/api/v2/sla/instances/a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d" \
-H "X-API-Key: itsm_sk_live_xxxx"List SLA Instance Events
Retrieve the state-transition event log for an instance, newest first. limit defaults to 100 (range 1–500). Returns a JSON array (no pagination envelope). Returns 422 if the path instance_id is not a valid UUID.
curl "https://apps.aurionai.net/api/v2/sla/instances/a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d/events?limit=100" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
[
{
"id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
"instance_id": "a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d",
"event_type": "paused",
"old_state": "active",
"new_state": "paused",
"triggered_by": "system",
"metadata": {},
"created_at": "2026-03-08T11:30:00Z"
}
]Run Escalations
Manually trigger an escalation sweep across the tenant's active SLA instances. Rate-limited to 5 requests/hour and protected by a distributed lock — a concurrent run returns 409 {"detail": "Another escalation run is in progress"}. Requires the tenant_admin role or higher (not available to read-only members).
curl -X POST "https://apps.aurionai.net/api/v2/sla/run-escalations" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
{
"run_at": "2026-03-08T12:00:00Z",
"scanned_conversations": 42,
"triggered_escalations": 3,
"actions_executed": 3,
"errors": [],
"sla_instances_breached": 1,
"ola_instances_breached": 0
}Preview Deadline
Calculate a projected SLA deadline based on a business-hours schedule, start time, and duration. Useful for showing estimated deadlines before creating a conversation. start_at is an ISO-8601 datetime and duration_minutes must be ≥ 0. Returns 404 {"detail": "Business-hours schedule not found"} if business_hours_id does not resolve.
curl -X POST "https://apps.aurionai.net/api/v2/sla/preview-deadline" \
-H "X-API-Key: itsm_sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"business_hours_id": "5f1e2d3c-4b5a-6978-8a9b-0c1d2e3f4a5b",
"start_at": "2026-03-08T09:00:00Z",
"duration_minutes": 240
}'Response:
{
"start_at": "2026-03-08T09:00:00Z",
"due_at": "2026-03-08T17:00:00Z",
"timezone": "Europe/Brussels"
}SLA Analytics
All analytics endpoints require the Professional plan or higher. Dates are YYYY-MM-DD; a malformed date returns 422.
Compliance Summary
start_date, end_date, and policy_id are all optional.
curl "https://apps.aurionai.net/api/v2/sla/analytics/summary?start_date=2026-03-01&end_date=2026-03-08" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
{
"total_instances": 120,
"met_count": 110,
"breached_count": 6,
"active_count": 3,
"paused_count": 1,
"cancelled_count": 0,
"compliance_percent": 94.8
}Compliance Trends
start_date and end_date are both required, and start_date must be before end_date (otherwise 422). granularity is day (default) or week. Returns a JSON array of trend points (no pagination envelope).
curl "https://apps.aurionai.net/api/v2/sla/analytics/trends?start_date=2026-02-01&end_date=2026-03-08&granularity=week" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
[
{"period": "2026-02-01", "total": 30, "met": 28, "breached": 2}
]Breach Analysis
start_date and end_date are optional. limit defaults to 50 (range 1–200); offset defaults to 0. Returns the standard { "items": [...], "total", "limit", "offset" } envelope.
curl "https://apps.aurionai.net/api/v2/sla/analytics/breaches?start_date=2026-03-01&limit=20&offset=0" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
{
"items": [
{
"id": "a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d",
"conversation_id": "f0e1d2c3-b4a5-4968-8778-695a4b3c2d1e",
"conversation_subject": "Cannot log in to portal",
"policy_id": "9b2c1f6a-3d4e-4a1b-8c2d-7e6f5a4b3c2d",
"policy_name": "Standard Support",
"target_type": "resolution",
"target_minutes": 1440,
"elapsed_minutes": 1620.0,
"priority": "medium",
"started_at": "2026-03-01T09:00:00Z",
"breached_at": "2026-03-02T12:00:00Z",
"deadline_at": "2026-03-02T09:00:00Z"
}
],
"total": 6,
"limit": 20,
"offset": 0
}OLA Policies
Operational Level Agreements (OLAs) track internal team commitments. OLA management requires the Enterprise plan.
List OLA Policies
limit defaults to 50 (range 1–100); offset defaults to 0. Optionally filter by status (active | inactive | archived).
curl "https://apps.aurionai.net/api/v2/sla/ola/policies?limit=50&offset=0" \
-H "X-API-Key: itsm_sk_live_xxxx"Response:
{
"items": [
{
"id": "d4e5f6a7-b8c9-4d0e-8f1a-2b3c4d5e6f7a",
"name": "Tier 2 escalation OLA",
"description": "Internal handoff to the platform team",
"internal_team_id": "8c9d0e1f-2a3b-4c5d-9e0f-1a2b3c4d5e6f",
"target_minutes": 120,
"business_hours_id": "5f1e2d3c-4b5a-6978-8a9b-0c1d2e3f4a5b",
"status": "active",
"created_at": "2026-03-08T09:00:00Z",
"updated_at": "2026-03-08T09:00:00Z"
}
],
"total": 1,
"limit": 50,
"offset": 0
}Create OLA Policy
Returns 201 Created with the created OLA policy.
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | 1–200 characters |
description | string | no | |
internal_team_id | string (UUID) | no | Team responsible for the commitment |
target_minutes | integer | yes | Commitment target in minutes (≥ 1) |
business_hours_id | string (UUID) | no | Business-hours schedule the timer follows |
status | enum | no | active | inactive; default active |
curl -X POST "https://apps.aurionai.net/api/v2/sla/ola/policies" \
-H "X-API-Key: itsm_sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Tier 2 escalation OLA",
"description": "Internal handoff to the platform team",
"internal_team_id": "8c9d0e1f-2a3b-4c5d-9e0f-1a2b3c4d5e6f",
"target_minutes": 120,
"business_hours_id": "5f1e2d3c-4b5a-6978-8a9b-0c1d2e3f4a5b",
"status": "active"
}'Instance States
The instance state field (and the ?state= list filter) takes one of:
| State | Description |
|---|---|
active | SLA timer is running |
paused | Timer paused (e.g., awaiting customer response) |
met | The target was met within its deadline |
breached | The target's deadline was exceeded |
cancelled | The timer was cancelled before completion |
Related Guides
- Analytics — SLA compliance analytics and trends
- Automation & Workflows — Automate SLA escalation actions
- Teams & Routing — Team business hours affect SLA timers
Access Control
These endpoints are not gated by API-key scopes (there is no sla:* scope). While behind a dashboard session they are protected by role:
| Operations | Minimum role |
|---|---|
| Read (list/get policies, instances, instance events, preview-deadline, analytics, OLA list) | tenant_readonly and above — also tenant_user, supervisor, agent, tenant_admin, tenant_owner, super_admin |
| Write (create/update/delete policies, targets, escalations; reorder; create OLA; run escalations) | tenant_admin, tenant_owner, or super_admin |
Analytics endpoints additionally require the Professional plan; OLA endpoints additionally require the Enterprise plan (see the sections above).