AurionAI Docs

Tickets

Create, read, update, and manage tickets via the Aurion API.

Tickets

The Tickets API lets you manage IT support tickets programmatically — create tickets, list and filter them, fetch a single ticket, and update fields including status and priority.

Create a Ticket

Requires the tickets:write scope.

curl -X POST "https://apps.aurionai.net/api/v1/tickets" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: idem_xxxx" \
  -d '{
    "subject": "VPN not connecting",
    "description": "Unable to connect to corporate VPN since this morning.",
    "priority": "high",
    "requester_email": "alex@example.com",
    "metadata": { "category": "Network" }
  }'

Request body:

FieldTypeRequiredDescription
subjectstringyesTicket subject, 1–255 characters
descriptionstringyesTicket description, minimum 1 character
statusstringnoInitial status (defaults to open)
prioritystringnolow, medium, high, urgent
requester_emailstringnoEmail of the person the ticket is raised for
metadataobjectnoArbitrary key/value data to attach to the ticket

There is no top-level category field — store free-form attributes such as a category inside metadata.

Response (201 Created):

{
  "id": "5c2e8f1a-3d4b-4e6f-9a1c-7b2d8e0f5a3c",
  "subject": "VPN not connecting",
  "description": "Unable to connect to corporate VPN since this morning.",
  "status": "open",
  "priority": "high",
  "requester_email": "alex@example.com",
  "external_provider": "freshservice",
  "external_ticket_id": "1042",
  "external_ticket_url": "https://example.freshservice.com/a/tickets/1042",
  "metadata": { "category": "Network" },
  "created_at": "2026-02-20T14:30:00Z",
  "updated_at": "2026-02-20T14:30:00Z"
}

A 400 with body {"detail": "<validation message>"} is returned if the underlying ITSM provider rejects the ticket (e.g. a mandatory field is missing). A malformed body (missing subject/description, or subject over 255 chars) returns a 422 Pydantic validation error.

Get a Ticket

The ticket_id path parameter is a UUID. A non-UUID value returns 422, and an unknown ticket returns 404 with body {"detail": "Ticket not found"}.

curl "https://apps.aurionai.net/api/v1/tickets/5c2e8f1a-3d4b-4e6f-9a1c-7b2d8e0f5a3c" \
  -H "X-API-Key: itsm_sk_live_xxxx"

List Tickets

curl "https://apps.aurionai.net/api/v1/tickets?status=open&limit=10&offset=0" \
  -H "X-API-Key: itsm_sk_live_xxxx"

Query Parameters:

ParameterTypeDescription
statusstringFilter by status: open, pending, resolved, closed
start_datestringISO 8601 datetime — return tickets with created_at >= start_date
end_datestringISO 8601 datetime — return tickets with created_at <= end_date
limitintegerResults per page (default: 20, min: 1, max: 100)
offsetintegerNumber of results to skip (default: 0)

Response (200 OK):

{
  "tickets": [
    {
      "id": "5c2e8f1a-3d4b-4e6f-9a1c-7b2d8e0f5a3c",
      "subject": "VPN not connecting",
      "description": "Unable to connect to corporate VPN since this morning.",
      "status": "open",
      "priority": "high",
      "requester_email": "alex@example.com",
      "external_provider": "freshservice",
      "external_ticket_id": "1042",
      "external_ticket_url": "https://example.freshservice.com/a/tickets/1042",
      "metadata": { "category": "Network" },
      "created_at": "2026-02-20T14:30:00Z",
      "updated_at": "2026-02-20T14:30:00Z"
    }
  ],
  "total": 1,
  "limit": 20,
  "offset": 0
}

The list response uses a resource-named envelope (tickets), not data or items. See Pagination for details on paginating through results.

Update a Ticket

Use PATCH to change any subset of subject, description, status, priority, requester_email, or metadata. Omitted fields are left unchanged. Requires the tickets:write scope. An unknown ticket returns 404 with body {"detail": "Ticket not found"}.

curl -X PATCH "https://apps.aurionai.net/api/v1/tickets/5c2e8f1a-3d4b-4e6f-9a1c-7b2d8e0f5a3c" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "pending",
    "priority": "medium"
  }'

Close a Ticket

There is no dedicated close endpoint. Close a ticket by updating its status with PATCH:

curl -X PATCH "https://apps.aurionai.net/api/v1/tickets/5c2e8f1a-3d4b-4e6f-9a1c-7b2d8e0f5a3c" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "closed"
  }'

Idempotency

POST /api/v1/tickets supports an Idempotency-Key header to prevent duplicate creation on retries:

curl -X POST "https://apps.aurionai.net/api/v1/tickets" \
  -H "X-API-Key: itsm_sk_live_xxxx" \
  -H "Idempotency-Key: idem_xxxx" \
  ...

If a request reuses an idempotency key within 1 hour (the cache TTL), the API returns the original response without creating a duplicate. The replayed request must carry an identical body — reusing the same key with a different payload returns 409 with body {"detail": "Idempotency key reused with a different payload"}.

The Ticket Object

Every ticket endpoint returns the same ticket shape:

FieldTypeDescription
idstringTicket UUID
subjectstringTicket subject
descriptionstringTicket description
statusstringCurrent status (open, pending, resolved, closed)
prioritystring | nullPriority, if set
requester_emailstring | nullRequester email, if set
external_providerstring | nullBacking ITSM provider (e.g. freshservice)
external_ticket_idstring | nullTicket ID in the backing ITSM provider
external_ticket_urlstring | nullDeep link to the ticket in the backing provider
metadataobjectArbitrary key/value data attached to the ticket
created_atstring | nullISO 8601 creation timestamp
updated_atstring | nullISO 8601 last-update timestamp

Ticket Lifecycle

open → pending → resolved → closed
  ↑                           |
  └────── PATCH status ───────┘

Tickets progress through statuses. There is no dedicated transition endpoint — move a ticket between statuses (including reopening a closed one) by sending the target status to PATCH /tickets/:id.

  • Conversations — Omnichannel conversations (v2 API for the Aurion CS helpdesk)
  • Webhooks — Subscribe to ticket.* events
  • Custom Fields — Add custom data fields to tickets

Required Scopes

ScopeEndpoints
tickets:readGET /tickets, GET /tickets/:id
tickets:writePOST /tickets, PATCH /tickets/:id

On this page