Planzer.io API
Read and create tasks and get notified when tasks are created or completed. It powers the Planzer.io apps for Zapier and Make, and you can use it from your own scripts.
Base URL: https://api.planzer.io/v1 · OpenAPI: openapi.json · Help: [email protected]
Authentication
Create a personal API key in Planzer under Settings → Integrations → API keys. It's shown once; copy it right away. Send it with every request:
curl https://api.planzer.io/v1/me \
-H "Authorization: Bearer pk_your_key"
A key gives full access to the tasks of the account that created it. Delete a key in the same place to revoke it; Zaps, scenarios and webhooks using it stop right away.
Errors and limits
Errors use HTTP status codes with a JSON body:
{ "error": { "status": 400, "message": "title is required" } }
| Status | Meaning |
|---|---|
| 400 | Invalid input; the message says what. |
| 401 | Missing or invalid API key. |
| 402 | The free plan's task limit is reached. |
| 404 | The task doesn't exist or isn't yours. |
| 429 | More than 120 requests per minute. |
The task object
{
"id": "6f1c2b8e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"title": "Send the proposal to Acme",
"notes": "Attach the pricing sheet.",
"status": "open", // open | completed
"date": "2026-10-06", // planned day; null = inbox
"deadline": "2026-10-10",
"estimate_minutes": 45,
"priority": "high", // none | low | medium | high | urgent
"project": { "id": "…", "name": "Acme" },
"tag": { "id": "…", "name": "Work" },
"source": "PLANZER", // or the integration it came from
"created_at": "2026-10-06T08:00:00.000Z",
"completed_at": null,
"url": "https://app.planzer.io/dashboard"
}
Account
GET /me
The account the key belongs to: id, name, email, timezone. Useful to test a key.
Tasks
GET /tasks
Lists tasks, newest first, as { "data": [Task, …] }.
| Query | Values |
|---|---|
status | open, completed or all (default) |
sort | created (default) or completed (most recently completed first) |
search | Only tasks whose title contains this text |
limit | 1–100, default 25 |
GET /tasks/{id}
One task.
POST /tasks
Creates a task and answers 201 with it. Only title is required.
| Field | Description |
|---|---|
title | Up to 255 characters |
notes | Text |
date | YYYY-MM-DD, or today in the account's time zone. Leave out to add it to the inbox. |
deadline | YYYY-MM-DD |
estimate_minutes | Whole minutes |
priority | none, low, medium, high or urgent |
project_id, tag_id | From /projects and /tags |
curl -X POST https://api.planzer.io/v1/tasks \
-H "Authorization: Bearer pk_your_key" \
-H "Content-Type: application/json" \
-d '{ "title": "Call Anna", "date": "today", "estimate_minutes": 15 }'
POST /tasks/{id}/complete
Completes the task like ticking it off in the app (a running timer on it is stopped) and answers with the task. Completing a completed task changes nothing.
Projects and tags
GET /projects
Active projects: { "data": [{ "id", "name", "color", "due_date" }] }.
GET /tags
Tags: { "data": [{ "id", "name", "color" }] }.
Webhooks
Get notified the moment a task is created or completed, anywhere in Planzer (web, desktop, phone or an integration).
POST /webhooks
{ "event": "task.created", "target_url": "https://hooks.example.com/planzer" }
Events: task.created, task.completed. Answers 201 with { "id", "event", "target_url" }. The URL must be a public https address; up to 50 webhooks per account.
DELETE /webhooks/{id}
Unsubscribes. Answers 204, also when the webhook is already gone.
What you receive
POST https://hooks.example.com/planzer
Content-Type: application/json
{ "event": "task.completed", "created_at": "2026-10-06T15:30:00.000Z", "data": { …task… } }
Answer with any 2xx status. Answer 410 Gone to unsubscribe. Deliveries time out after 10 seconds and aren't retried. Deleting the API key removes the webhooks it created.