For the complete documentation index, see llms.txt. This page is also available as Markdown.

Issues

Get a list of issues

get

Returns a paginated list of issues within a required time range (max 30 days).

Rate limit: 10 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Query parameters
start_timestringRequired

The start time (RFC3339) of the time range to get issues for. The duration between start_time and end_time must be less than or equal to 30 days.

end_timestringRequired

The end time (RFC3339) of the time range to get issues for. The duration between start_time and end_time must be less than or equal to 30 days.

cursorstringOptional

The cursor to use for pagination.

limitinteger · int64Optional

The number of issues to fetch. Defaults to 20000. Set to 0 or omit to use the default. Must be between 0 and 20000.

Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

get/issues
GET /issues?start_time=text&end_time=text HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": [],
  "request_id": "req_123"
}

Create a new issue

post

Creates a new issue and its first message. Requires either an account_id or requester information.

Requester fields identify the customer, user_id or contact_id identifies the first-message author, and destination_metadata controls delivery. These choices are independent. If destination_metadata is omitted, the first message is an internal note and no customer is contacted. See the request-field descriptions and examples for destination-specific requirements.

Rate limit: 10 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Body
account_idstringOptional

The account that this issue belongs to. If requester_id is also provided, the requester must belong to this account. If requester_email is provided, the contact is found or created in this account.

assignee_idstringOptional

The user the issue should be assigned to.

attachment_urlsstring[]Optional

URLs of files to attach to the issue's first message.

author_unverifiedbooleanOptional

Whether the requester's identity has NOT been verified. Defaults to false (verified).

body_htmlstringRequired

The HTML content of the body of the issue.

contact_idstringOptional

The contact to attribute the first message to. This controls the message author, not the issue requester. Makes the message appear as a customer message rather than an internal note. Only one of user_id or contact_id can be provided. Requires destination_metadata.

created_atstringOptional

Timestamp of when the issue was created. If not specified, the current time will be used. (RFC3339)

customer_portal_visiblebooleanOptional

Whether the issue should be visible in the customer portal. When destination is "customer_portal", this is set to true and cannot be false.

prioritystring · enumOptional

The priority of the issue. Can be one of: urgent, high, medium, or low.

Example: mediumPossible values:
requester_avatar_urlstringOptional

The URL of an avatar of the requester.

requester_emailstringOptional

The email of the customer this issue is for. Used when requester_id is omitted. If no matching contact exists, one will be created. When account_id is provided, the contact is found or created in that account. This does not control who authored the first message.

requester_idstringOptional

The customer this issue is for. Sets the "Requester" shown in the issue sidebar but does not control who authored the first message. If account_id is omitted, the requester's primary account is used when available. If requester_email is also provided, requester_id takes precedence.

requester_namestringOptional

The optional full name of the requester. Used when creating a new contact via requester_email.

tagsstring[]Optional

An array of strings to use as tags on this issue. If provided, the issue tags will be updated to the given tags.

team_idstringOptional

The ID of the team this issue should be assigned to.

titlestringRequired

The title of the issue.

user_idstringOptional

The internal Pylon user to attribute the first message to. This does not assign the user as the requester. Only one of user_id or contact_id can be provided. If neither is set, the API token's user is used.

Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

post/issues
POST /issues HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 187

{
  "body_html": "<p>I cannot access my account.</p>",
  "contact_id": "contact_123",
  "destination_metadata": {
    "destination": "in_app_chat"
  },
  "requester_id": "contact_123",
  "title": "Unable to sign in"
}
{
  "data": {
    "id": "issue_123",
    "state": "new",
    "title": "Unable to sign in",
    "type": "conversation"
  },
  "request_id": "req_123"
}

Get an issue by its ID/number

get

Returns a single issue by ID or issue number.

Rate limit: 60 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID or number of the issue to fetch.

Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

get/issues/{id}
GET /issues/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": {
    "id": "issue_123",
    "state": "new",
    "title": "Unable to sign in",
    "type": "conversation"
  },
  "request_id": "req_123"
}

Update an existing issue

patch

Updates an existing issue. Only provided fields are modified.

Rate limit: 20 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID of the issue to update.

Body
account_idstringOptional

The ID of the account that this issue belongs to.

assignee_idstringOptional

The ID of the user who should be assigned to this issue. If empty string is passed in, the issue assignee will be removed.

customer_portal_visiblebooleanOptional

Whether the issue should be visible in the customer portal.

requester_idstringOptional

The ID of the requester that this issue is on behalf of.

requestor_idstringOptional

Deprecated: Use requester_id instead.

statestringOptional

The state this issue should be moved to. Standard values are new, waiting_on_you, waiting_on_customer, on_hold, and closed; custom status slugs are also supported.

Example: new
tagsstring[]Optional

An array of strings to use as tags on this issue. If provided, the issue tags will be updated to be exactly the given tags.

team_idstringOptional

The ID of the team this issue should be assigned to. If empty string is passed in, any assigned team will be removed.

titlestringOptional

The title of the issue.

typestring · enumOptional

The type of the issue. Set to "ticket" to upgrade a conversation to a support ticket. Cannot be downgraded from "ticket" to "conversation".

Possible values:
Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

patch/issues/{id}
PATCH /issues/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 268

{
  "account_id": "text",
  "assignee_id": "text",
  "custom_fields": [
    {
      "slug": "text",
      "value": "text",
      "values": [
        "text"
      ]
    }
  ],
  "customer_portal_visible": true,
  "requester_id": "text",
  "requestor_id": "text",
  "state": "new",
  "tags": [
    "text"
  ],
  "team_id": "text",
  "title": "text",
  "type": "conversation"
}
{
  "data": {
    "id": "issue_123",
    "state": "waiting_on_you",
    "title": "Unable to sign in",
    "type": "conversation"
  },
  "request_id": "req_123"
}

Delete an existing issue

delete

Permanently deletes an issue by ID.

Rate limit: 20 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID of the issue to delete.

Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

delete/issues/{id}
DELETE /issues/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200Success
{
  "request_id": "text"
}

Search for issues by a given filter

post

Filterable fields and their allowed operators:

Field
Allowed operators

created_at

time_is_after, time_is_before, time_range

account_id

equals, in, not_in, is_set, is_unset

ticket_form_id

equals, in, not_in, is_set, is_unset

requester_id

equals, in, not_in, is_set, is_unset

follower_user_id

equals, in, not_in

follower_contact_id

equals, in, not_in

state

equals, in, not_in

tags

contains, does_not_contain, in, not_in

title

string_contains, string_does_not_contain

body_html

string_contains, string_does_not_contain

assignee_id

equals, in, not_in, is_set, is_unset

team_id

equals, in, not_in

issue_type

equals, in, not_in, is_set, is_unset

resolved_at

time_is_after, time_is_before, time_range

latest_message_activity_at

time_is_after, time_is_before, time_range

updated_at

time_is_after, time_is_before, time_range

slack_channel_id

equals, in, not_in

Timestamp values use RFC3339 format. Standard state values are new, waiting_on_you, waiting_on_customer, on_hold, and closed; custom status slugs are also supported. issue_type values are conversation and ticket.

For tag filters, pass the tag name. For custom fields, pass the field slug as field. slack_channel_id identifies the Slack channel where the issue was created.

Rate limit: 20 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Body
cursorstringOptional

The cursor to use for pagination.

limitinteger · int64Optional

The number of issues to fetch. Defaults to 100. Must be greater than 0 and less than 1000.

search_textstringOptional

Fuzzy text search. Results are intersected with any provided filter.

Responses
200Success
application/json
request_idstringOptional
post/issues/search
POST /issues/search HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 62

{
  "filter": {
    "field": "state",
    "operator": "equals",
    "value": "new"
  }
}
{
  "data": [],
  "request_id": "req_123"
}

Snooze an issue

post

Snoozes an issue until the specified date and time.

Rate limit: 20 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID or number of the issue to snooze.

Body
snooze_untilstringRequired

The date and time to snooze the issue until. (RFC3339)

Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

post/issues/{id}/snooze
POST /issues/{id}/snooze HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 23

{
  "snooze_until": "text"
}
{
  "data": {
    "id": "issue_123",
    "state": "on_hold",
    "title": "Unable to sign in",
    "type": "conversation"
  },
  "request_id": "req_123"
}

Get followers of an issue

get

Returns the list of followers for the specified issue.

Rate limit: 60 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID or number of the issue to get followers for.

Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

get/issues/{id}/followers
GET /issues/{id}/followers HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": [
    {
      "id": "text",
      "type": "user"
    }
  ],
  "request_id": "text"
}

Add or remove followers to/from an issue

post

By default, adds followers. To remove followers, set the operation field to "remove".

Rate limit: 20 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID or number of the issue to add followers to.

Body
contact_idsstring[]Optional

The IDs of contacts to add as followers.

operationstringOptional

Operation to perform. Use "add" to add followers (default) or "remove" to remove followers.

user_idsstring[]Optional

The IDs of users to add as followers.

Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

post/issues/{id}/followers
POST /issues/{id}/followers HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 63

{
  "contact_ids": [
    "text"
  ],
  "operation": "text",
  "user_ids": [
    "text"
  ]
}
{
  "data": [
    {
      "id": "text",
      "type": "user"
    }
  ],
  "request_id": "text"
}

Link or unlink external issues to/from an issue

post

By default, links external issues. To unlink issues, set the operation field to "unlink".

Rate limit: 20 requests per minute

Authorizations
AuthorizationstringRequired

Authorization: Bearer

Path parameters
idstringRequired

The ID or number of the issue to link external issues to.

Body
external_issue_idstringRequired

The ID of the external issue in the source system.

operationstringOptional

Operation to perform. Use "link" to link issues (default) or "unlink" to unlink issues.

sourcestringRequired

The source system of the external issue (e.g., "linear", "asana", "jira", "github", "shortcut").

Responses
200Success
application/json
request_idstringOptional

The request ID for tracking.

post/issues/{id}/external-issues
POST /issues/{id}/external-issues HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 63

{
  "external_issue_id": "text",
  "operation": "text",
  "source": "text"
}
{
  "data": {
    "account": {
      "external_ids": [
        {
          "external_id": "text",
          "label": "text"
        }
      ],
      "id": "text"
    },
    "active_time_by_user": [
      {
        "active_time_seconds": 1,
        "business_hours_active_time_seconds": 1,
        "user_id": "text"
      }
    ],
    "active_time_seconds": 1,
    "assignee": {
      "email": "text",
      "id": "text"
    },
    "attachment_urls": [
      "text"
    ],
    "author_unverified": true,
    "body_html": "text",
    "business_hours_active_time_seconds": 1,
    "business_hours_first_response_seconds": 1,
    "business_hours_resolution_seconds": 1,
    "business_hours_time_in_status_seconds": {
      "new": 120,
      "waiting_on_customer": 1800
    },
    "chat_widget_info": {
      "page_url": "text"
    },
    "child_issues": [
      {
        "id": "text",
        "number": 1
      }
    ],
    "created_at": "text",
    "csat_responses": [
      {
        "comment": "text",
        "score": 1
      }
    ],
    "custom_fields": {
      "priority": {
        "value": "high"
      }
    },
    "customer_portal_visible": true,
    "external_issues": [
      {
        "external_id": "text",
        "link": "text",
        "source": "text"
      }
    ],
    "first_response_breach_time": "text",
    "first_response_seconds": 1,
    "first_response_time": "text",
    "id": "text",
    "latest_message_time": "text",
    "link": "text",
    "number": 1,
    "number_of_touches": 1,
    "parent_issue_group": {
      "id": "text",
      "number": 1
    },
    "requester": {
      "email": "text",
      "id": "text"
    },
    "resolution_breach_time": "text",
    "resolution_seconds": 1,
    "resolution_time": "text",
    "slack": {
      "channel_id": "text",
      "message_ts": "text",
      "workspace_id": "text"
    },
    "snoozed_until_time": "text",
    "source": "slack",
    "state": "new",
    "tags": [
      "text"
    ],
    "team": {
      "id": "text"
    },
    "team_slas": [
      {
        "first_response": {
          "breach_time": "text",
          "business_hours_seconds": 1,
          "seconds": 1,
          "time": "text"
        },
        "resolution": {
          "breach_time": "text",
          "business_hours_seconds": 1,
          "seconds": 1,
          "time": "text"
        },
        "team_id": "text"
      }
    ],
    "time_in_status_seconds": {
      "new": 120,
      "waiting_on_customer": 3600
    },
    "title": "text",
    "type": "conversation",
    "updated_at": "text"
  },
  "request_id": "text"
}

Note: Utilizing external issues endpoint will update the ticket status to whatever is set in the apps directory page, if the "automatically change issue status when linked" setting is enabled. Please see screenshot below.

Last updated

Was this helpful?