Skip to main content
Early Access — Beta The Elean Public API is currently in beta. Endpoint paths, request/response shapes, and scopes may change before the stable 1.0 release. We will always communicate breaking changes before they go live.

Overview

The Elean Public API lets external clients — automation scripts, AI agents, CLI tools, and third-party integrations — read and write tasks without going through the browser UI. Authentication is handled via API keys tied to a specific workspace.

Base URL

All endpoints are relative to this base URL.

Authentication

Every request must include a valid API key. Authorization header (recommended):
API keys are created in Workspace Settings → API Keys. Each key carries:
  • Scopes — which operations it may perform (task:read, task:create, task:update)
  • Project scope — access to all projects in the workspace, or restricted to a specific project
  • Expiry — an optional date after which the key stops working
API keys are displayed once at creation time. Copy and store yours securely — it cannot be retrieved again.

Rate Limits

Rate limits are enforced per API key at 60 requests per minute. Exceeding the limit returns 429 Too Many Requests. Per-plan limits will be introduced in a future release.

Scopes

Endpoints

List statuses

GET /{projectSlug}/statuses Returns all custom task statuses for the project. Use the returned id values as statusId when creating or filtering tasks. Requires task:read. Example request

List labels

GET /{projectSlug}/labels Returns all labels available in the project — workspace-wide labels and project-scoped labels. Use the returned id values as entries in labelIds when creating or updating tasks. Requires task:read. Example request

List members

GET /{projectSlug}/members Returns all members of the project. Use the returned id values as entries in assigneeIds when creating or updating tasks. Requires task:read. Example request

List tasks

GET /{projectSlug}/tasks Returns a paginated list of top-level tasks in the given project. Subtasks are excluded. Requires task:read. Query parameters Example request

Get task

GET /{projectSlug}/tasks/{taskId} Returns a single task. Accepts either a UUID or an external ID (e.g. PROJ-42). Requires task:read. Example request

Create task

POST /{projectSlug}/tasks Creates a new task in the given project. Requires task:create. Request body Example request

Update task

PATCH /{projectSlug}/tasks/{taskId} Updates one or more fields on an existing task. Only the fields you include are changed. Accepts either a UUID or an external ID. Requires task:update. Request body Example request

Delete task

DELETE /{projectSlug}/tasks/{taskId} Permanently deletes a task. This action cannot be undone. Accepts either a UUID or an external ID. Requires task:update. Example request
Response

List comments

GET /{projectSlug}/tasks/{taskId}/comments Returns all comments on a task, ordered oldest first. Accepts either a UUID or an external ID. Requires task:read. Example request
Example response

Add comment

POST /{projectSlug}/tasks/{taskId}/comments Adds a comment to a task. The comment is attributed to the API key name. Accepts either a UUID or an external ID. Requires task:update. Request body Example request

Get attachment

GET /{projectSlug}/tasks/{taskId}/attachments/{attachmentId} Returns attachment details including a presigned download URL valid for 1 hour. Requires task:read.

Upload attachment

POST /{projectSlug}/tasks/{taskId}/attachments Uploads a file and attaches it to a task. Max file size is 10 MB. Send as multipart/form-data with a file field. Requires task:create.

Task object

All task endpoints return tasks in the following shape:

Error responses

All errors follow the same shape: