Overview
ProjectLayer is a project management tool built for development teams. It provides kanban boards, task tracking, milestones, and a backlog that integrates directly with SupportLayer to turn support tickets into actionable work items.
Quick start
- Create an account — Register here. Your first member seat is free.
- Create a project — Give it a name and a prefix (e.g.
API). This prefix is used in task keys likeAPI-42. - Add tasks — Create tasks with titles, descriptions, priorities, and assignees.
- Use the board — Every project gets a default Kanban board with To Do, In Progress, and Done columns.
- Invite your team — Add members from the Team settings page.
Key concepts
Projects
A project groups related work together. Each project has its own tasks, board, labels, milestones, and backlog. Projects have a short prefix (e.g. WEB, API) used to generate unique task keys.
Tasks
Tasks are individual work items. Each task has a unique key (like API-42), a status, priority, optional assignee, due date, and description. Tasks can be commented on and labelled.
Boards
Kanban boards visualize your workflow. Each board has ordered columns (e.g. To Do, In Progress, Review, Done). Tasks are placed in columns and can be moved between them.
Milestones
Milestones represent goals or releases with optional due dates. Assign tasks to milestones to track progress toward a delivery target.
Backlog
The backlog holds items that haven't been promoted to tasks yet. Items can arrive via the API (e.g. from SupportLayer) or be created manually. They can be accepted, rejected, or converted into tasks.
Access groups
Permissions are managed via access groups. Each group has a set of permissions (e.g. project.create, task.assign, settings.manage). Users are assigned to an access group within their organization.
API Authentication
The ProjectLayer API uses Bearer token authentication. Generate API keys from Settings → API Keys in the portal.
Include the key in the Authorization header:
Authorization: Bearer pl_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API keys are scoped to your organization. All requests made with a key will only see and modify data within that organization.
Base URL
https://your-projectlayer-domain.com/api/v1/
Error responses
Errors return a JSON object with an error field:
{
"error": {
"code": "authentication_failed",
"message": "Invalid or revoked API key."
}
}
API — Projects
List projects
GET /api/v1/projects
Returns all active projects in your organization.
Response:
{
"data": [
{
"id": 1,
"name": "API Platform",
"slug": "api-platform",
"prefix": "API",
"status": "active"
}
]
}
API — Backlog
Create a backlog item
POST /api/v1/backlog
Request body:
{
"project_id": 1,
"title": "Customer reports broken CSV export",
"description": "Details from the support ticket...",
"priority": "high",
"source_service": "supportlayer",
"source_ticket_id": 1842,
"source_ticket_url": "https://support.example.com/portal/tickets/1842"
}
| Field | Type | Required | Description |
|---|---|---|---|
project_id | integer | Yes | Target project ID |
title | string | Yes | Backlog item title |
description | string | No | Detailed description |
priority | string | No | low, medium, high, or critical. Default: medium |
source_service | string | No | Source system identifier. Default: supportlayer |
source_ticket_id | integer | No | External ticket ID (used for deduplication) |
source_ticket_url | string | No | URL back to the source ticket |
Response (201 Created):
{
"id": 15,
"status": "pending"
}
Duplicate detection: If a backlog item already exists for the same source_service + source_ticket_id, the API returns 409 Conflict with the existing item's ID and status.
Get a backlog item
GET /api/v1/backlog/{id}
Response:
{
"id": 15,
"title": "Customer reports broken CSV export",
"status": "pending",
"priority": "high",
"project_id": 1,
"source_service": "supportlayer",
"source_ticket_id": 1842,
"converted_task_id": null,
"created_at": "2026-04-10T14:30:00+00:00"
}
List backlog items
GET /api/v1/backlog?project_id=1&status=pending
Both query parameters are optional. Returns up to 100 items, newest first.
SupportLayer Integration
ProjectLayer integrates with SupportLayer to convert support tickets into backlog items automatically.
How it works
- Generate an API key in ProjectLayer (Settings → API Keys).
- Configure the key in your SupportLayer instance under Integrations.
- When a support agent clicks "Send to ProjectLayer" on a ticket, SupportLayer calls the
POST /api/v1/backlogendpoint. - The ticket appears in your ProjectLayer backlog with a link back to the original ticket.
- Your team reviews the backlog and converts accepted items into tasks.
Backlog statuses
| Status | Meaning |
|---|---|
pending | Newly arrived, awaiting review |
accepted | Approved by the team, not yet a task |
rejected | Declined — won't be worked on |
converted | Promoted to a full task |