Tasks & Projects
Returns a paginated list of tasks for the organization.
Rate limit: 300 requests per minute
Authorization: Bearer
The cursor to use for pagination.
The number of tasks to fetch. Defaults to 100. Must be greater than 0 and less than 1000.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
GET /tasks HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"data": [
{
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"assignee": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"custom_fields": {
"priority": {
"value": "high"
}
},
"customer_portal_visible": true,
"due_date": "text",
"external_issues": [
{
"external_id": "text",
"link": "text",
"source": "text"
}
],
"id": "text",
"linked_issues": [
{
"id": "text",
"number": 1,
"title": "text"
}
],
"milestone": {
"id": "text"
},
"parent_task_id": "text",
"project": {
"id": "text"
},
"status": "text",
"subtask_ids": [
"text"
],
"title": "text",
"updated_at": "text"
}
],
"pagination": {
"cursor": "text",
"has_next_page": true
},
"request_id": "text"
}Returns a single task by ID.
Rate limit: 300 requests per minute
Authorization: Bearer
The ID of the task to fetch.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
GET /tasks/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"assignee": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"custom_fields": {
"priority": {
"value": "high"
}
},
"customer_portal_visible": true,
"due_date": "text",
"external_issues": [
{
"external_id": "text",
"link": "text",
"source": "text"
}
],
"id": "text",
"linked_issues": [
{
"id": "text",
"number": 1,
"title": "text"
}
],
"milestone": {
"id": "text"
},
"parent_task_id": "text",
"project": {
"id": "text"
},
"status": "text",
"subtask_ids": [
"text"
],
"title": "text",
"updated_at": "text"
},
"request_id": "text"
}Returns all comments for a task, ordered by creation time.
Rate limit: 300 requests per minute
Authorization: Bearer
The ID of the task to fetch comments for.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
GET /tasks/{id}/comments HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"data": [
{
"author": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"id": "text",
"is_internal": true,
"last_edited_at": "text",
"task_id": "text",
"updated_at": "text"
}
],
"request_id": "text"
}Creates a new comment on a task. The authenticated user is the author.
Rate limit: 120 requests per minute
Authorization: Bearer
The ID of the task to add a comment to.
The body of the comment in HTML format.
Whether the comment is visible only to internal users.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
POST /tasks/{id}/comments HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 39
{
"body_html": "text",
"is_internal": true
}{
"data": {
"author": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"id": "text",
"is_internal": true,
"last_edited_at": "text",
"task_id": "text",
"updated_at": "text"
},
"request_id": "text"
}Updates an existing comment. Only the original author can update their comment.
Rate limit: 120 requests per minute
Authorization: Bearer
The ID of the task.
The ID of the comment to update.
The updated body of the comment in HTML format.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
PATCH /tasks/{id}/comments/{comment_id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 20
{
"body_html": "text"
}{
"data": {
"author": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"id": "text",
"is_internal": true,
"last_edited_at": "text",
"task_id": "text",
"updated_at": "text"
},
"request_id": "text"
}Deletes an existing comment. Only the original author can delete their comment.
Rate limit: 120 requests per minute
Authorization: Bearer
The ID of the task.
The ID of the comment to delete.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
DELETE /tasks/{id}/comments/{comment_id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"request_id": "text"
}Filterable fields and their allowed operators:
account_id
equals, in, not_in, is_set
project_id
equals, in, not_in, is_set, is_unset
status
equals, in, not_in
assignee_id
equals, in, not_in, is_set
milestone_id
equals, in, not_in, is_set
created_at
time_is_after, time_is_before, time_range
due_date
time_is_after, time_is_before, time_range, is_set
updated_at
time_is_after, time_is_before, time_range
Timestamp values use RFC3339 format. Valid status values are not_started, in_progress, and completed. For custom fields, pass the field slug as field.
Rate limit: 120 requests per minute
Authorization: Bearer
The cursor to use for pagination.
The number of tasks to fetch. Defaults to 100. Must be greater than 0 and less than 1000.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
POST /tasks/search HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 173
{
"cursor": "text",
"filter": {
"field": "text",
"operator": "equals",
"subfilters": [
{
"field": "state",
"operator": "equals",
"value": "new"
}
],
"value": "text",
"values": [
"text"
]
},
"limit": 1
}{
"data": [
{
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"assignee": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"custom_fields": {
"priority": {
"value": "high"
}
},
"customer_portal_visible": true,
"due_date": "text",
"external_issues": [
{
"external_id": "text",
"link": "text",
"source": "text"
}
],
"id": "text",
"linked_issues": [
{
"id": "text",
"number": 1,
"title": "text"
}
],
"milestone": {
"id": "text"
},
"parent_task_id": "text",
"project": {
"id": "text"
},
"status": "text",
"subtask_ids": [
"text"
],
"title": "text",
"updated_at": "text"
}
],
"pagination": {
"cursor": "text",
"has_next_page": true
},
"request_id": "text"
}Creates a new task with a title and optional metadata.
Rate limit: 300 requests per minute
Authorization: Bearer
Account ID for this task
Assignee ID for this task
Body HTML for this task
Customer portal visible for this task
falseDue date for this task, in RFC 3339 format
Milestone ID for this task
Parent task ID, to create this task as a subtask
Project ID for this task
Title for this task
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
POST /tasks HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 275
{
"account_id": "text",
"assignee_id": "text",
"body_html": "text",
"custom_fields": [
{
"slug": "text",
"value": "text",
"values": [
"text"
]
}
],
"customer_portal_visible": false,
"due_date": "text",
"milestone_id": "text",
"parent_task_id": "text",
"project_id": "text",
"status": "text",
"title": "text"
}{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"assignee": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"custom_fields": {
"priority": {
"value": "high"
}
},
"customer_portal_visible": true,
"due_date": "text",
"external_issues": [
{
"external_id": "text",
"link": "text",
"source": "text"
}
],
"id": "text",
"linked_issues": [
{
"id": "text",
"number": 1,
"title": "text"
}
],
"milestone": {
"id": "text"
},
"parent_task_id": "text",
"project": {
"id": "text"
},
"status": "text",
"subtask_ids": [
"text"
],
"title": "text",
"updated_at": "text"
},
"request_id": "text"
}Updates an existing task. Only provided fields are modified.
Rate limit: 300 requests per minute
Authorization: Bearer
The ID of the task to update.
Assignee ID for this task
Body HTML for this task
Customer portal visible for this task
Due date for this task, in RFC 3339 format
Milestone ID for this task
Project ID for this task
Title for this task
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
PATCH /tasks/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 230
{
"assignee_id": "text",
"body_html": "text",
"custom_fields": [
{
"slug": "text",
"value": "text",
"values": [
"text"
]
}
],
"customer_portal_visible": true,
"due_date": "text",
"milestone_id": "text",
"project_id": "text",
"status": "text",
"title": "text"
}{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"assignee": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"custom_fields": {
"priority": {
"value": "high"
}
},
"customer_portal_visible": true,
"due_date": "text",
"external_issues": [
{
"external_id": "text",
"link": "text",
"source": "text"
}
],
"id": "text",
"linked_issues": [
{
"id": "text",
"number": 1,
"title": "text"
}
],
"milestone": {
"id": "text"
},
"parent_task_id": "text",
"project": {
"id": "text"
},
"status": "text",
"subtask_ids": [
"text"
],
"title": "text",
"updated_at": "text"
},
"request_id": "text"
}Permanently deletes a task by ID.
Rate limit: 120 requests per minute
Authorization: Bearer
The ID of the task to delete.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
DELETE /tasks/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"request_id": "text"
}By default, links the external issue. To unlink it, set the operation field to "unlink". Repeating the same link request is a successful no-op.
Rate limit: 120 requests per minute
Authorization: Bearer
The ID of the task to link an external issue to.
The ID or human-readable key of the external issue in the source system.
Operation to perform. Use "link" to link the issue (default) or "unlink" to unlink it.
The source system of the external issue (e.g., "linear", "asana", "jira", "github", "shortcut").
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
POST /tasks/{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"
},
"assignee": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"custom_fields": {
"priority": {
"value": "high"
}
},
"customer_portal_visible": true,
"due_date": "text",
"external_issues": [
{
"external_id": "text",
"link": "text",
"source": "text"
}
],
"id": "text",
"linked_issues": [
{
"id": "text",
"number": 1,
"title": "text"
}
],
"milestone": {
"id": "text"
},
"parent_task_id": "text",
"project": {
"id": "text"
},
"status": "text",
"subtask_ids": [
"text"
],
"title": "text",
"updated_at": "text"
},
"request_id": "text"
}Links the issue to the task by default. To unlink it, set the operation field to "unlink".
Rate limit: 120 requests per minute
Authorization: Bearer
The ID of the task to link a Pylon issue to.
The ID of the Pylon issue.
Operation to perform. Use "link" to link the issue (default) or "unlink" to unlink it.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
POST /tasks/{id}/issues HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 38
{
"issue_id": "text",
"operation": "text"
}{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"assignee": {
"contact": {
"email": "text",
"id": "text"
},
"user": {
"email": "text",
"id": "text"
}
},
"body_html": "text",
"created_at": "text",
"custom_fields": {
"priority": {
"value": "high"
}
},
"customer_portal_visible": true,
"due_date": "text",
"external_issues": [
{
"external_id": "text",
"link": "text",
"source": "text"
}
],
"id": "text",
"linked_issues": [
{
"id": "text",
"number": 1,
"title": "text"
}
],
"milestone": {
"id": "text"
},
"parent_task_id": "text",
"project": {
"id": "text"
},
"status": "text",
"subtask_ids": [
"text"
],
"title": "text",
"updated_at": "text"
},
"request_id": "text"
}Returns a single project by ID.
Rate limit: 300 requests per minute
Authorization: Bearer
The ID of the project to fetch.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
GET /projects/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"archived_at": "text",
"created_at": "text",
"custom_fields": {
"health": {
"value": "on_track"
}
},
"customer_portal_visible": true,
"description_html": "text",
"end_date": "text",
"id": "text",
"is_archived": true,
"name": "text",
"owner_id": "text",
"progress": 1,
"project_template": {
"id": "text"
},
"start_date": "text",
"status": "not_started",
"updated_at": "text"
},
"request_id": "text"
}Filterable fields and their allowed operators:
account_id
equals, in, not_in, is_set
status
equals, in, not_in
owner_id
equals, in, not_in, is_set, is_unset
is_archived
equals
created_at
time_is_after, time_is_before, time_range
updated_at
time_is_after, time_is_before, time_range
Timestamp values use RFC3339 format. Valid status values are not_started, in_progress, and completed. For custom fields, pass the field slug as field.
Rate limit: 120 requests per minute
Authorization: Bearer
The cursor to use for pagination.
The number of projects to fetch. Defaults to 100. Must be greater than 0 and less than 1000.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
POST /projects/search HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 173
{
"cursor": "text",
"filter": {
"field": "text",
"operator": "equals",
"subfilters": [
{
"field": "state",
"operator": "equals",
"value": "new"
}
],
"value": "text",
"values": [
"text"
]
},
"limit": 1
}{
"data": [
{
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"archived_at": "text",
"created_at": "text",
"custom_fields": {
"health": {
"value": "on_track"
}
},
"customer_portal_visible": true,
"description_html": "text",
"end_date": "text",
"id": "text",
"is_archived": true,
"name": "text",
"owner_id": "text",
"progress": 1,
"project_template": {
"id": "text"
},
"start_date": "text",
"status": "not_started",
"updated_at": "text"
}
],
"pagination": {
"cursor": "text",
"has_next_page": true
},
"request_id": "text"
}Updates an existing project. Only provided fields are modified.
Rate limit: 300 requests per minute
Authorization: Bearer
The ID of the project to update.
Customer portal visible for this project
Description HTML for this project
End date for this project, in RFC 3339 format
Whether the project is archived
Name for this project
Owner ID for this project
Start date for this project, in RFC 3339 format
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
PATCH /projects/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 214
{
"custom_fields": [
{
"slug": "text",
"value": "text",
"values": [
"text"
]
}
],
"customer_portal_visible": true,
"description_html": "text",
"end_date": "text",
"is_archived": true,
"name": "text",
"owner_id": "text",
"start_date": "text"
}{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"archived_at": "text",
"created_at": "text",
"custom_fields": {
"health": {
"value": "on_track"
}
},
"customer_portal_visible": true,
"description_html": "text",
"end_date": "text",
"id": "text",
"is_archived": true,
"name": "text",
"owner_id": "text",
"progress": 1,
"project_template": {
"id": "text"
},
"start_date": "text",
"status": "not_started",
"updated_at": "text"
},
"request_id": "text"
}Permanently deletes a project by ID.
Rate limit: 120 requests per minute
Authorization: Bearer
The ID of the project to delete.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
DELETE /projects/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"request_id": "text"
}Creates a new project for an account. Provide a name or project_template_id. A template supplies defaults; non-empty name and description_html values and supplied customer_portal_visible and owner_id values override them. Supplying either start_date or end_date replaces both template dates.
Rate limit: 300 requests per minute
Authorization: Bearer
Account ID for this project
Customer portal visible for this project
falseDescription HTML for this project
End date for this project, in RFC 3339 format
Name for this project. Required unless project_template_id is provided. When both are provided, this name overrides the template's name.
Owner ID for this project
Project template ID for this project. When provided, it supplies defaults; non-empty name and description_html values and supplied customer_portal_visible and owner_id values override them. Supplying either start_date or end_date replaces both template dates.
Start date for this project, in RFC 3339 format
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
POST /projects HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 178
{
"account_id": "text",
"customer_portal_visible": false,
"description_html": "text",
"end_date": "text",
"name": "text",
"owner_id": "text",
"project_template_id": "text",
"start_date": "text"
}{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"archived_at": "text",
"created_at": "text",
"custom_fields": {
"health": {
"value": "on_track"
}
},
"customer_portal_visible": true,
"description_html": "text",
"end_date": "text",
"id": "text",
"is_archived": true,
"name": "text",
"owner_id": "text",
"progress": 1,
"project_template": {
"id": "text"
},
"start_date": "text",
"status": "not_started",
"updated_at": "text"
},
"request_id": "text"
}Returns a single milestone by ID.
Rate limit: 300 requests per minute
Authorization: Bearer
The ID of the milestone to fetch.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
An unexpected internal error occurred.
GET /milestones/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"created_at": "text",
"due_date": "text",
"id": "text",
"name": "text",
"project": {
"id": "text"
},
"updated_at": "text"
},
"request_id": "text"
}Updates an existing milestone. Only provided fields are modified.
Rate limit: 300 requests per minute
Authorization: Bearer
The ID of the milestone to update.
Due date for this milestone, in RFC 3339 format
Name for this milestone
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
PATCH /milestones/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 33
{
"due_date": "text",
"name": "text"
}{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"created_at": "text",
"due_date": "text",
"id": "text",
"name": "text",
"project": {
"id": "text"
},
"updated_at": "text"
},
"request_id": "text"
}Creates a new milestone within a project.
Rate limit: 300 requests per minute
Authorization: Bearer
Account ID for this project
Due date for this milestone, in RFC 3339 format
Name for this milestone
Project ID for this milestone
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
POST /milestones HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 73
{
"account_id": "text",
"due_date": "text",
"name": "text",
"project_id": "text"
}{
"data": {
"account": {
"external_ids": [
{
"external_id": "text",
"label": "text"
}
],
"id": "text"
},
"created_at": "text",
"due_date": "text",
"id": "text",
"name": "text",
"project": {
"id": "text"
},
"updated_at": "text"
},
"request_id": "text"
}Permanently deletes a milestone by ID.
Rate limit: 300 requests per minute
Authorization: Bearer
The ID of the milestone to delete.
The request ID for tracking.
The request was invalid or could not be completed.
The authenticated caller or organization is not allowed to access this endpoint or operation.
DELETE /milestones/{id} HTTP/1.1
Host: api.usepylon.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"request_id": "text"
}Last updated
Was this helpful?

