curl --request GET \
--url https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "018e1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c",
"externalId": "PROJ-42",
"title": "Fix login bug",
"description": "Users cannot log in with SSO on Safari.",
"category": "in_progress",
"status": {
"id": "018e1b2c-aaaa-0000-0000-000000000002",
"name": "In Review",
"color": "#f59e0b",
"category": "in_progress"
},
"priority": "high",
"dueDate": "2026-03-15T00:00:00.000Z",
"assignees": [
{
"id": "018e1b2c-0000-0000-0000-000000000099",
"name": "Jane Smith"
}
],
"labels": [
{
"id": "018e1b2c-aaaa-0000-0000-000000000010",
"name": "bug",
"color": "#EF4444"
}
],
"attachments": [
{
"id": "018e1b2c-aaaa-bbbb-cccc-000000000001",
"filename": "screenshot.png"
}
],
"createdAt": "2026-03-01T12:00:00.000Z",
"updatedAt": "2026-03-02T09:30:00.000Z"
}{
"statusCode": 401,
"message": "Invalid API key"
}{
"statusCode": 403,
"message": "Missing required scope: task:create"
}{
"statusCode": 404,
"message": "Task not found"
}{
"statusCode": 429,
"message": "Too many requests"
}Get task
Returns a single task by its UUID or external ID (e.g. PROJ-42). The task must belong to the workspace associated with the API key.
Requires the task:read scope.
curl --request GET \
--url https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.elean.app/v1/public/{projectSlug}/tasks/{taskId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "018e1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c",
"externalId": "PROJ-42",
"title": "Fix login bug",
"description": "Users cannot log in with SSO on Safari.",
"category": "in_progress",
"status": {
"id": "018e1b2c-aaaa-0000-0000-000000000002",
"name": "In Review",
"color": "#f59e0b",
"category": "in_progress"
},
"priority": "high",
"dueDate": "2026-03-15T00:00:00.000Z",
"assignees": [
{
"id": "018e1b2c-0000-0000-0000-000000000099",
"name": "Jane Smith"
}
],
"labels": [
{
"id": "018e1b2c-aaaa-0000-0000-000000000010",
"name": "bug",
"color": "#EF4444"
}
],
"attachments": [
{
"id": "018e1b2c-aaaa-bbbb-cccc-000000000001",
"filename": "screenshot.png"
}
],
"createdAt": "2026-03-01T12:00:00.000Z",
"updatedAt": "2026-03-02T09:30:00.000Z"
}{
"statusCode": 401,
"message": "Invalid API key"
}{
"statusCode": 403,
"message": "Missing required scope: task:create"
}{
"statusCode": 404,
"message": "Task not found"
}{
"statusCode": 429,
"message": "Too many requests"
}Authorizations
API key created in Workspace Settings → API Keys. Pass it in the Authorization header as a Bearer token, or in the X-API-Key header.
Format: el_ followed by 40 hex characters.
Path Parameters
The slug of the project.
"my-project"
UUID of the task, or its external ID (e.g. PROJ-42).
"018e1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c"
Response
Task found.
A task object returned by the API.
Unique identifier of the task.
"018e1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c"
Human-readable task identifier, unique within the project (e.g. PROJ-42).
"PROJ-42"
Task title.
"Fix login bug"
Task description as plain text. Newlines are preserved.
"Users cannot log in with SSO on Safari."
Status category of the task. For the specific named status, see status.
todo, in_progress, done "in_progress"
The specific custom status assigned to this task, or null if none is set.
Show child attributes
Show child attributes
Priority level of the task.
none, low, medium, high, urgent "high"
Due date in ISO 8601 format, or null if not set.
"2026-03-15T00:00:00.000Z"
List of users assigned to the task.
Show child attributes
Show child attributes
Labels attached to the task.
Show child attributes
Show child attributes
Files attached to this task. Each entry contains only the attachment ID and filename. Use GET /{projectSlug}/tasks/{taskId}/attachments/{attachmentId} to retrieve the full attachment details including the download URL.
Show child attributes
Show child attributes
ISO 8601 timestamp of when the task was created.
"2026-03-01T12:00:00.000Z"
ISO 8601 timestamp of the last update.
"2026-03-02T09:30:00.000Z"