Plaineo Public API
REST API v1 for tasks, files, categories, and recurring exceptions. The full machine-readable contract is available as OpenAPI JSON.
Authentication
All public API calls use an API key in the HTTP header X-API-Key. Keys can be created and managed in the Plaineo Developer Portal.
Keep the full key private. The portal shows the full value only when you create it; later lists show only the prefix.
curl https://api.plaineo.com/api/v1/tasks \
-H "X-API-Key: sc_your_api_key"
/api/v1/tasks
List owned and accepted shared tasks
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
limit |
query | integer | optional | Maximum number of items to return. |
offset |
query | integer | optional | Number of items to skip for pagination. |
dateFrom |
query | string (date) | optional | Only include tasks on or after this date. |
dateTo |
query | string (date) | optional | Only include tasks on or before this date. |
categoryCode |
query | string | optional | Convenience category code for one of your own categories. |
search |
query | string | optional | Case-insensitive substring match against task title only. |
finished |
query | boolean | optional | Completion state. |
Responses: 200 Task list, 401 Unauthorized
/api/v1/tasks
Create a task
Request body fields
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
id |
body | string | optional | Stable resource ID. You can provide one on create where supported, otherwise Plaineo generates it. |
title |
body | string | required | Task title. |
notes |
body | string | optional | Free-form task notes. |
date |
body | string (date) | optional | Task date in YYYY-MM-DD format. |
start |
body | string | optional | Optional task start time. |
end |
body | string | optional | Optional task end time. |
categoryId |
body | string | optional | Stable category ID to assign the task to. |
categoryCode |
body | string | optional | Convenience category code for one of your own categories. |
finished |
body | boolean | optional | Completion state. |
cancelled |
body | boolean | optional | Whether the task or recurring instance is cancelled. |
recurring |
body | object | optional | Recurring rule data for repeating tasks. |
subtasks |
body | array<object> | optional | Checklist/subtask items attached to the task. |
reminders |
body | array<value> | optional | Reminder definitions for the task. |
attachments |
body | array<object | object> | optional | Inline file uploads or references to previously uploaded files. |
Example JSON body
{
"title": "Call dentist",
"date": "2026-06-10"
}
Responses: 200 Created task, 400 BadRequest, 401 Unauthorized, 403 Forbidden
/api/v1/tasks/from-content
Create tasks from text, base64 content, or URL using AI extraction
Request body fields
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
text |
body | string | optional | Plain text to process. |
base64 |
body | string | optional | Base64-encoded file or image content. |
url |
body | string | optional | Public URL of content to process. |
mimeType |
body | string | optional | MIME type, such as image/jpeg or application/pdf. |
fileName |
body | string | optional | Original file name, including extension. |
categoryCode |
body | string | optional | Convenience category code for one of your own categories. |
Example JSON body
{
"text": "Dentist appointment next Monday at 3pm"
}
Responses: 200 Created tasks, 400 BadRequest, 401 Unauthorized, 413 PayloadTooLarge, 422 Unprocessable
/api/v1/tasks/{id}
Get a task detail, including safe attachment metadata
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
id |
path | string | required | Stable resource ID. You can provide one on create where supported, otherwise Plaineo generates it. |
Responses: 200 Task detail, 401 Unauthorized, 404 NotFound
/api/v1/tasks/{id}
Update a task; shared recipients need write permission
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
id |
path | string | required | Stable resource ID. You can provide one on create where supported, otherwise Plaineo generates it. |
Request body fields
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
title |
body | string | optional | Task title. |
notes |
body | string | optional | Free-form task notes. |
date |
body | string (date) | optional | Task date in YYYY-MM-DD format. |
start |
body | string | optional | Optional task start time. |
end |
body | string | optional | Optional task end time. |
categoryId |
body | string | optional | Stable category ID to assign the task to. |
categoryCode |
body | string | optional | Convenience category code for one of your own categories. |
finished |
body | boolean | optional | Completion state. |
cancelled |
body | boolean | optional | Whether the task or recurring instance is cancelled. |
recurring |
body | object | optional | Recurring rule data for repeating tasks. |
subtasks |
body | array<object> | optional | Checklist/subtask items attached to the task. |
reminders |
body | array<value> | optional | Reminder definitions for the task. |
attachments |
body | array<object | object> | optional | Inline file uploads or references to previously uploaded files. |
Example JSON body
{
"notes": "Updated via API"
}
Responses: 200 Updated task, 401 Unauthorized, 403 Forbidden, 404 NotFound
/api/v1/tasks/{id}
Soft-delete a task; shared recipients need write permission
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
id |
path | string | required | Stable resource ID. You can provide one on create where supported, otherwise Plaineo generates it. |
Responses: 200 Ok, 401 Unauthorized, 403 Forbidden, 404 NotFound
/api/v1/files
Upload a base64 file
Request body fields
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
id |
body | string | optional | Stable resource ID. You can provide one on create where supported, otherwise Plaineo generates it. |
fileName |
body | string | required | Original file name, including extension. |
mimeType |
body | string | required | MIME type, such as image/jpeg or application/pdf. |
base64 |
body | string | required | Base64-encoded file or image content. |
thumbBase64 |
body | string | optional | Optional base64-encoded thumbnail. |
description |
body | string | optional | Optional human-readable description. |
Example JSON body
{
"fileName": "receipt.jpg",
"mimeType": "image/jpeg",
"base64": "<base64>"
}
Responses: 201 File metadata, 400 BadRequest, 401 Unauthorized, 413 PayloadTooLarge
/api/v1/files/{id}
Get file metadata and base64 content
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
id |
path | string | required | Stable resource ID. You can provide one on create where supported, otherwise Plaineo generates it. |
onlyThumb |
query | boolean | optional | Return thumbnailBase64Content instead of base64Content. |
Responses: 200 File DTO, 401 Unauthorized, 403 Forbidden, 404 NotFound
/api/v1/files/{id}
Soft-delete an owned file
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
id |
path | string | required | Stable resource ID. You can provide one on create where supported, otherwise Plaineo generates it. |
Responses: 200 Ok, 401 Unauthorized, 403 Forbidden, 404 NotFound
/api/v1/categories
List owned and accepted shared categories
Responses: 200 Category list, 401 Unauthorized
/api/v1/recurring-exceptions/task/{taskId}
List exceptions for an accessible recurring task
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
taskId |
path | string | required | ID of the parent task. |
Responses: 200 Exception list, 401 Unauthorized, 404 NotFound
/api/v1/recurring-exceptions/task/{taskId}
Create or upsert an exception; shared recipients need write permission
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
taskId |
path | string | required | ID of the parent task. |
Request body fields
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
instanceDate |
body | string | optional | Date of the recurring task instance to override. |
cancelled |
body | boolean | optional | Whether the task or recurring instance is cancelled. |
finished |
body | boolean | optional | Completion state. |
comments |
body | array<object> | optional | Public comment objects for the task or recurring instance. |
Example JSON body
{
"instanceDate": "2026-06-10",
"finished": true
}
Responses: 200 Updated existing exception, 201 Created exception, 401 Unauthorized, 403 Forbidden, 404 NotFound
/api/v1/recurring-exceptions/{id}
Update an exception; shared recipients need write permission on the parent task
Path and query parameters
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
id |
path | string | required | Stable resource ID. You can provide one on create where supported, otherwise Plaineo generates it. |
Request body fields
| Name | Where | Type | Required | Description |
|---|---|---|---|---|
instanceDate |
body | string | optional | Date of the recurring task instance to override. |
cancelled |
body | boolean | optional | Whether the task or recurring instance is cancelled. |
finished |
body | boolean | optional | Completion state. |
comments |
body | array<object> | optional | Public comment objects for the task or recurring instance. |
Example JSON body
{
"finished": false
}
Responses: 200 Updated exception, 401 Unauthorized, 403 Forbidden, 404 NotFound