Skip to main content
TypeScript

Authorizations

Authorization
string
header
required

Your Periskope API token, sent as Authorization: Bearer <token>. Generate one from the Periskope dashboard under Settings → API & Webhooks. API access requires an active Pro or Enterprise plan.

Body

application/json
chat_id
string
required

Chat to raise the ticket on. For group chats, the chat_id ending with @g.us; for 1-1 chats, country code + number of the contact (e.g. 911111111111) or the chat_id suffixed with @c.us.

Minimum string length: 1
Example:

"120363000000000000@g.us"

subject
string
required

Subject of the new ticket

Minimum string length: 1
Example:

"Customer cannot access invoices"

quoted_message_id
string

message_id (or unique id) of the message in the chat to raise the ticket from. The message must exist in the chat (404 otherwise), and only one ticket can be raised per message — a second create for the same message is rejected. Stored and returned as the unique id of the message.

Minimum string length: 1
Example:

"false_120363000000000000@g.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"

assignee
string

Email of the member to assign the ticket to. Must be the email of a member of the organization — the request is rejected otherwise.

Example:

"user@example.com"

due_date
string

Due date of the new ticket. Accepts ISO 8601 (e.g. 2026-02-01T00:00:00Z) and any format parseable as a JavaScript date (YYYY-MM-DD, MM/DD/YYYY, etc.). Epoch timestamps are not supported.

Example:

"2026-02-01"

priority
string

Priority of the ticket as a string: '1' (low), '2' (medium), '3' (high) or '4' (urgent). An empty string is ignored (the priority is left unchanged/unset). New tickets have no priority unless one is provided.

Example:

"2"

status
enum<string>

Initial status of the ticket: 'open', 'inprogress', 'closed' or 'archived'. Defaults to 'open'.

Available options:
open,
inprogress,
closed,
archived
Example:

"open"

labels
string

Comma-separated list of ticket label names to apply, matched case-insensitively. Labels that do not exist yet are created automatically. An empty string is ignored.

Example:

"urgent, billing"

Response

The created ticket with its chat and quoted message

A ticket together with its chat, the message it was raised from and (on GET /tickets/{ticket_id}) the messages attached to it.

chat
object

The chat the ticket is raised on. null in the rare case the chat record is no longer available.

message
object

The message the ticket was raised from (quoted_message_id). Always present as an object — every field in it is null when the ticket is not linked to a message.

ticket
object

The ticket itself

attached_messages
object[]

Messages attached to the ticket. Populated only by GET /tickets/{ticket_id} — always an empty array in create and update responses.