Tickets
Create tickets, read their status and add comments (REST API v1).
Create a ticket
Section titled “Create a ticket”POST /api/v1/tickets
Creates a ticket in the tenant bound to the API key. Send an Idempotency-Key header
so retries don’t create duplicates: a repeated key returns the original result
with action: deduplicated.
Authentication: API key: Authorization: Bearer nhk.<keyid>.<secret>, or API key in X-NH-API-Key
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
Idempotency-Key |
header | string | no | Unique key per logical operation (UUID recommended). A retry with the same key returns the first result. |
Request body
Section titled “Request body”application/json
| Name | Type | Required | Description |
|---|---|---|---|
subject |
string | no | Ticket title. Required (alias: summary). |
summary |
string | no | deprecated Alias of subject. |
description |
string | no | Body text (alias: body). |
priority |
string | no | Priority name. The tenant’s priority scheme may define more values. |
category |
string | no | Category hint used by routing. |
issuetype |
string | no | Issue-type override, for example IT-INC or IT-SR. |
country |
string | no | ISO 3166-1 alpha-2 country, if your tenant routes by country. |
sender_email |
string (email) | no | Requester. Defaults to the key’s contact. |
sender_name |
string | no | |
sender_phone |
string | no | |
company |
string | no | |
external_id |
string | no | Your system’s id, kept for correlation. |
tags |
array<string> | no | |
attachments |
array<object> | no | Attachments by reference (URL). Binary upload is not part of v1. |
attachments[].name |
string | yes | |
attachments[].url |
string (uri) | no | |
attachments[].size |
integer | no | |
attachments[].mime |
string | no |
{ "subject": "Payment gateway returns HTTP 502", "description": "Checkout fails for all EU customers since 09:12 UTC.", "priority": "High", "category": "Application", "sender_email": "oncall@example.com", "sender_name": "ACME On-call", "external_id": "INC-88231", "tags": [ "checkout", "eu-west" ]}Responses
Section titled “Responses”| Status | Description |
|---|---|
200 |
Ticket created (or deduplicated by Idempotency-Key). |
400 |
Invalid request. |
401 |
API key missing, invalid or revoked. |
403 |
Key disabled or missing the required scope. |
429 |
Rate limit exceeded for this API key. |
500 |
Unexpected server error. Retry with the same Idempotency-Key. |
Example 200
{ "ok": true, "ticket_key": "ACME-1042", "ingestion_id": "ing_7f3c2a91", "action": "created", "status_url": "/api/v1/tickets/ACME-1042", "skipped": null, "backend_status": null, "backend_error": null, "error": null, "post_routing": null}Example with curl
Section titled “Example with curl”curl -X POST "https://exocortex-api.ai-exo-cortex.com/api/v1/tickets" \ -H "Authorization: Bearer $EXO_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ --data '{"subject":"Payment gateway returns HTTP 502","description":"Checkout fails for all EU customers since 09:12 UTC.","priority":"High","category":"Application","sender_email":"oncall@example.com","sender_name":"ACME On-call","external_id":"INC-88231","tags":["checkout","eu-west"]}'Get a ticket
Section titled “Get a ticket”GET /api/v1/tickets/{key}
Returns the current status of a ticket in the API key’s tenant. Tickets of other tenants return 404.
Authentication: API key: Authorization: Bearer nhk.<keyid>.<secret>, or API key in X-NH-API-Key
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
key |
path | string | yes | Ticket key. |
Responses
Section titled “Responses”| Status | Description |
|---|---|
200 |
Ticket found. |
401 |
API key missing, invalid or revoked. |
403 |
Key disabled or missing the required scope. |
404 |
Ticket not found in the API key’s tenant. |
429 |
Rate limit exceeded for this API key. |
500 |
Unexpected server error. Retry with the same Idempotency-Key. |
Example 200
{ "ok": true, "ticket": { "key": "ACME-1042", "summary": "Payment gateway returns HTTP 502", "status": "In Progress", "priority": "High", "assignee": "Jane Doe", "created": "2026-11-01T09:14:05.000Z", "updated": "2026-11-01T09:31:47.000Z" }}Example with curl
Section titled “Example with curl”curl -X GET "https://exocortex-api.ai-exo-cortex.com/api/v1/tickets/ACME-1042" \ -H "Authorization: Bearer $EXO_API_KEY"Add a comment
Section titled “Add a comment”POST /api/v1/tickets/{key}/comment
Authentication: API key: Authorization: Bearer nhk.<keyid>.<secret>, or API key in X-NH-API-Key
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
key |
path | string | yes | Ticket key. |
Idempotency-Key |
header | string | no | Unique key per logical operation (UUID recommended). A retry with the same key returns the first result. |
Request body
Section titled “Request body”application/json
| Name | Type | Required | Description |
|---|---|---|---|
comment |
string | no | Comment text. Required (alias: text). |
text |
string | no | deprecated Alias of comment. |
sender_email |
string (email) | no | |
sender_name |
string | no |
{ "comment": "Rollback of release 4.18.2 completed; error rate back to baseline.", "sender_email": "oncall@example.com"}Responses
Section titled “Responses”| Status | Description |
|---|---|
200 |
Comment accepted. |
400 |
Invalid request. |
401 |
API key missing, invalid or revoked. |
403 |
Key disabled or missing the required scope. |
404 |
Ticket not found in the API key’s tenant. |
429 |
Rate limit exceeded for this API key. |
500 |
Unexpected server error. Retry with the same Idempotency-Key. |
Example 200
{ "ok": true, "ticket_key": "ACME-1042", "ingestion_id": "ing_91be04d2"}Example with curl
Section titled “Example with curl”curl -X POST "https://exocortex-api.ai-exo-cortex.com/api/v1/tickets/ACME-1042/comment" \ -H "Authorization: Bearer $EXO_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ --data '{"comment":"Rollback of release 4.18.2 completed; error rate back to baseline.","sender_email":"oncall@example.com"}'Page generated from the OpenAPI specification of the integration API, version 1.1.0.