Create ticket
curl -X POST "/api/v1/tickets" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: example_string" \
-H "Authorization: Bearer YOUR_API_TOKEN (API key (ixk_...))" \
-d '{
"subject": "example_string",
"inbox_id": "123e4567-e89b-12d3-a456-426614174000",
"priority": "low",
"priority_id": "123e4567-e89b-12d3-a456-426614174000",
"assignee_id": "123e4567-e89b-12d3-a456-426614174000",
"reporter_email": "user@example.com",
"initial_internal_note": {
"body_html": "example_string",
"body_text": "example_string"
},
"custom_fields": {}
}'
import requests
import json
url = "/api/v1/tickets"
headers = {
"Content-Type": "application/json",
"Idempotency-Key": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN (API key (ixk_...))"
}
data = {
"subject": "example_string",
"inbox_id": "123e4567-e89b-12d3-a456-426614174000",
"priority": "low",
"priority_id": "123e4567-e89b-12d3-a456-426614174000",
"assignee_id": "123e4567-e89b-12d3-a456-426614174000",
"reporter_email": "user@example.com",
"initial_internal_note": {
"body_html": "example_string",
"body_text": "example_string"
},
"custom_fields": {}
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("/api/v1/tickets", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Idempotency-Key": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN (API key (ixk_...))"
},
body: JSON.stringify({
"subject": "example_string",
"inbox_id": "123e4567-e89b-12d3-a456-426614174000",
"priority": "low",
"priority_id": "123e4567-e89b-12d3-a456-426614174000",
"assignee_id": "123e4567-e89b-12d3-a456-426614174000",
"reporter_email": "user@example.com",
"initial_internal_note": {
"body_html": "example_string",
"body_text": "example_string"
},
"custom_fields": {}
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"subject": "example_string",
"inbox_id": "123e4567-e89b-12d3-a456-426614174000",
"priority": "low",
"priority_id": "123e4567-e89b-12d3-a456-426614174000",
"assignee_id": "123e4567-e89b-12d3-a456-426614174000",
"reporter_email": "user@example.com",
"initial_internal_note": {
"body_html": "example_string",
"body_text": "example_string"
},
"custom_fields": {}
}`)
req, err := http.NewRequest("POST", "/api/v1/tickets", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Idempotency-Key", "example_string")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN (API key (ixk_...))")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('/api/v1/tickets')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Idempotency-Key'] = 'example_string'
request['Authorization'] = 'Bearer YOUR_API_TOKEN (API key (ixk_...))'
request.body = '{
"subject": "example_string",
"inbox_id": "123e4567-e89b-12d3-a456-426614174000",
"priority": "low",
"priority_id": "123e4567-e89b-12d3-a456-426614174000",
"assignee_id": "123e4567-e89b-12d3-a456-426614174000",
"reporter_email": "user@example.com",
"initial_internal_note": {
"body_html": "example_string",
"body_text": "example_string"
},
"custom_fields": {}
}'
response = http.request(request)
puts response.body
{
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"ticket_number": 42,
"subject": "example_string",
"inbox_id": "123e4567-e89b-12d3-a456-426614174000",
"status": "open",
"status_id": "123e4567-e89b-12d3-a456-426614174000",
"status_name": "John Doe",
"status_color": "example_string",
"priority": "low",
"priority_id": "123e4567-e89b-12d3-a456-426614174000",
"priority_name": "John Doe",
"priority_color": "example_string",
"assignee_id": "123e4567-e89b-12d3-a456-426614174000",
"contact_id": "123e4567-e89b-12d3-a456-426614174000",
"remind_at": "2024-12-25T10:00:00Z",
"remind_transition_status_id": "123e4567-e89b-12d3-a456-426614174000",
"created_at": "2024-12-25T10:00:00Z",
"updated_at": "2024-12-25T10:00:00Z",
"custom_fields": {}
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Conflict",
"message": "The request conflicts with the current state of the resource",
"code": 409,
"details": "Resource already exists"
}
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later",
"code": 429,
"retryAfter": 3600
}
/tickets
API key from Settings → API. Pass as Authorization: Bearer <key>
The media type of the request body
Optional. When sent, duplicate POSTs with the same key and identical JSON body return 201 with the same ticket (no second create). Same key with a different body returns 409 (idempotency_conflict). Entries expire after 7 days.
Priority level
Custom priority ID (takes precedence over priority)
Optional; creates/links contact (RFC 5322 From-style supported)
Optional; first internal note in same DB transaction as ticket
Optional; applied in the same transaction as ticket create
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token (API key (ixk_...)). API key from Settings → API. Pass as Authorization: Bearer <key>
Headers
Optional. When sent, duplicate POSTs with the same key and identical JSON body return 201 with the same ticket (no second create). Same key with a different body returns 409 (idempotency_conflict). Entries expire after 7 days.
Body
Custom priority ID (takes precedence over priority)
Optional; creates/links contact (RFC 5322 From-style supported)
Optional; first internal note in same DB transaction as ticket
Optional; applied in the same transaction as ticket create
Responses
Ticket with custom_fields (GET by id, POST create 201, PATCH 200). GET /tickets/{id} may add optional keys when using include= (tags, contact, company, inbox, sla, participants).
Status type (semantic category)
openin_progresswaitingresolvedclosedCustom status ID
Custom status display name
Custom status hex color
Priority level (semantic category)
lownormalhighurgentCustom priority ID
Custom priority display name
Custom priority hex color
Set when transitioning to waiting (with status / status_id)
Validation error
Problem code unauthorized — missing/invalid Authorization: Bearer, or revoked API key.
Problem code forbidden — workspace has no API access entitlement, or insufficient_scope — read-only API key used for POST/PATCH/DELETE.
Idempotency-Key reused with a different request body
Rate limit exceeded
Last updated 3 weeks ago
Built with Documentation.AI