---
title: "Create ticket / incident"
method: POST
path: "/v1/tickets"
tags: ["Tickets"]
---

# Create ticket / incident

`POST /v1/tickets`

**Tickets and incidents are the same object.** Every record in this table is accessible via both `/v1/tickets` and the real-time `/v1/incidents` layer — same NocoDB row, same ID, same fields. No data is duplicated.

- Use `/v1/tickets` for helpdesk, ITSM, or async workflows
- Use `/v1/incidents` + SSE for real-time dispatch, ops war rooms, or alert routing
- The `source` field (`api`, `email`, `webhook`, `alert`) and `priority` together imply context — neither endpoint enforces a use case on the caller

Creates a new record. `title` is required. Defaults: `status=open`, `priority=normal`, `source=api`. A `customer_token` is generated automatically — use it to share the public status page at `https://schedkit.net/incidents/status/:token`. A real-time SSE event (`incident.created`) is broadcast to all connected staff.

## Request body

- object
  - `title` string, required
  - `description` string
  - `priority` 'low' | 'normal' | 'high' | 'urgent'
  - `source` 'api' | 'email' | 'webhook' | 'alert' — Origin of the record. Use `alert` for automated incident creation, `email` for inbound support, `api` for programmatic creation.
  - `source_ref` string — External reference ID (e.g. email message ID, alert ID)
  - `lat` number, nullable — Incident latitude
  - `lng` number, nullable — Incident longitude
  - `location_name` string, nullable — Human-readable location name
  - `customer_email` string, nullable — Email to notify — if set, confirmation goes here instead of the creator
  - `customer_name` string, nullable — Customer display name for the email
  - `org_id` integer, nullable — Org this ticket belongs to — determines email branding

## Response `201`

Created ticket/incident

- object — Created ticket/incident
  - `Id` integer
  - `title` string
  - `status` string
  - `priority` string
  - `sla_due_at` string, nullable
  - `sla_breached` boolean
  - `sla_status` 'ok' | 'warning' | 'breached'
  - `customer_token` string — Magic token for the public customer status page
  - `customer_status_url` string — Full URL to public customer status page
  - `lat` number, nullable
  - `lng` number, nullable
  - `location_name` string, nullable

---

[API](https://skmtc.net/schedkit/apis/schedkit-api.md) · [All operations](https://skmtc.net/schedkit/apis/schedkit-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/schedkit/schedkit-api/revisions/ff810218c3f4/schema)
