Skip to main content
Fetch tickets from your Typewise workspace using a REST API. Use this to build reporting pipelines, trigger workflows in Zapier, or sync ticket data with external systems.
You need an API key. Create one in Workspace Settings → API Keys.

Endpoint

GET https://platform-api.typewise.app/external/v1/tickets
Authentication: Pass your API key as a Bearer token.
Authorization: Bearer YOUR_API_KEY

Quick start

cURL
curl -G 'https://platform-api.typewise.app/external/v1/tickets' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  --data-urlencode 'limit=5'

Query parameters

pageIndex
number
default:"0"
Zero-based page index for pagination.
limit
number
default:"20"
Number of tickets to return per page.
sortBy
string
default:"updatedAt"
Field to sort by. Supported values: createdAt, updatedAt.
sortDirection
string
default:"desc"
Sort order. asc for oldest first, desc for newest first.
searchTerm
string
Free-text search across ticket title, summary, and customer name.
filters
string
URL-encoded JSON object that combines one or more filter rules. See Filters below.

Filters

Pass a JSON object in the filters query parameter to narrow results. The object has a combinator (always "and") and an array of rules. Each rule specifies a field, an operator, and a value.

Filter fields

FieldOperatorValueExample
statusinArray of statuses: open, needs_human_attention, waiting_for_customer, closed["open", "needs_human_attention"]
csatRatinginArray of integers (1–5)[4, 5]
assigneeIdinArray of user UUIDs["uuid-of-agent"]
teamIdinArray of team UUIDs["uuid-of-team"]
priority=Integer (1 = highest)1
channelTypeinArray of channel types: email, chat_widget["email"]
createdAtbetween, after, beforeISO 8601 datetime string(s). between takes a two-element array.["2026-01-01T00:00:00Z", "2026-03-31T23:59:59Z"]
updatedAtbetween, after, beforeISO 8601 datetime string(s). between takes a two-element array."2026-03-01T00:00:00Z"

Example filter

This filter returns open tickets with a CSAT rating of 4 or 5, created in Q1 2026:
{
  "combinator": "and",
  "rules": [
    { "field": "status", "operator": "in", "value": ["open"] },
    { "field": "csatRating", "operator": "in", "value": [4, 5] },
    {
      "field": "createdAt",
      "operator": "between",
      "value": ["2026-01-01T00:00:00Z", "2026-03-31T23:59:59Z"]
    }
  ]
}

Response

totalCount
number
required
Total number of tickets matching the query across all pages.
tickets
Ticket[]
required
Array of ticket objects for the current page.

Code examples

curl -G 'https://platform-api.typewise.app/external/v1/tickets' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  --data-urlencode 'pageIndex=0' \
  --data-urlencode 'limit=20' \
  --data-urlencode 'sortBy=updatedAt' \
  --data-urlencode 'sortDirection=desc' \
  --data-urlencode 'filters={
    "combinator": "and",
    "rules": [
      { "field": "status", "operator": "in", "value": ["open", "needs_human_attention"] },
      { "field": "csatRating", "operator": "in", "value": [4, 5] },
      { "field": "createdAt", "operator": "between", "value": ["2026-01-01T00:00:00Z", "2026-03-31T23:59:59Z"] }
    ]
  }'
{
  "totalCount": 42,
  "tickets": [
    {
      "id": "b3e1f9a0-1234-4abc-9def-567890abcdef",
      "status": "open",
      "resolutionStatus": "unresolved",
      "channelType": "email",
      "title": "Order not received",
      "summary": "Customer reports their order #12345 has not arrived after 10 days.",
      "priority": 2,
      "sentiment": -0.6,
      "language": "en",
      "assigneeId": "a1b2c3d4-5678-9abc-def0-1234567890ab",
      "teamId": "f0e1d2c3-b4a5-6789-0abc-def123456789",
      "endCustomerId": "cust-001",
      "endCustomerName": "Jane Doe",
      "endCustomerEmail": "jane.doe@example.com",
      "endCustomerWaitingForReplySince": "2026-03-15T14:30:00Z",
      "csatRating": 4,
      "csatComment": "Quick response, still waiting for resolution.",
      "variables": {
        "orderId": "ORD-12345",
        "accountType": "premium"
      },
      "createdAt": "2026-03-14T09:00:00Z",
      "updatedAt": "2026-03-15T14:30:00Z"
    }
  ]
}

Errors

StatusBodyCause
401{ "error": "Missing or invalid API key" }API key is missing, malformed, or revoked
403{ "error": "Insufficient permissions" }Key lacks the tickets:read permission
429Rate limit responseToo many requests, back off and retry

Rate limiting

The API allows 500 requests per 60-second window per API key. If you exceed this limit, the API returns 429. Implement exponential backoff or space your polling intervals accordingly.

See also