Aanle External API

Simple REST API for integrating with Zapier, IFTTT, Make, n8n, and other automation services.

Base URL: https://api.aanle.com/api/v1

Authentication

All requests require an X-API-Key header with your personal API token.

X-API-Key: your-api-token-here

You can find your API token in Settings > General within the Aanle app.


Endpoints

Create Task

POST /api/v1/tasks

Create a new task with natural language parsing. The text field is automatically parsed to extract due dates, contexts, projects, energy levels, and time estimates.

Request Body:

FieldTypeRequiredDefaultDescription
textstringYes Task text with optional NLP tags (see below)
notesstringNo“”Additional notes for the task
statusstringNo“inbox”One of: inbox, next, waiting, someday

NLP Syntax in text:

SyntaxExampleResult
@contextBuy milk @errandsAssigns @errands context
#projectFix bug #websiteAssigns to “Website” project
!energyWrite report !highSets energy to high
time estimateCall dentist 15mSets estimate to 15 minutes
date expressionSubmit report tomorrowSets due date to tomorrow
  • Contexts (@): Matches your existing contexts (case-insensitive). E.g., @home, @work, @phone, @computer, @errands.
  • Projects (#): Matches your existing project names (prefix matching supported). E.g., #marketing matches “Marketing Campaign”.
  • Energy (!): One of !low, !med/!medium, !high.
  • Time estimates: 15m, 1h, 1.5hr, 90 minutes, etc.
  • Dates: today, tomorrow, friday, next week, in 3 days, jan 15, 2/14, etc.

Example Request:

curl -X POST https://api.aanle.com/api/v1/tasks \
  -H “X-API-Key: your-api-token” \
  -H “Content-Type: application/json” \
  -d ‘{“text”: “Buy groceries @errands tomorrow 30m !low”}’

Response (201 Created):

{
  “id”: “a1b2c3d4-…”,
  “title”: “Buy groceries”,
  “notes”: “”,
  “status”: “inbox”,
  “due_date”: “2026-02-09”,
  “project”: null,
  “contexts”: [“@errands”],
  “energy”: “low”,
  “estimated_minutes”: 30,
  “delegated_to”: null,
  “created_at”: “2026-02-08T12:00:00+00:00”,
  “updated_at”: “2026-02-08T12:00:00+00:00”
}


List Tasks

GET /api/v1/tasks

Retrieve tasks with optional filtering and pagination.

Query Parameters:

ParameterTypeDefaultDescription
statusstringFilter by status: inbox, next, waiting, someday, done
limitint50Max tasks to return (1–200)
offsetint0Number of tasks to skip (for pagination)

Example Request:

curl https://api.aanle.com/api/v1/tasks?status=next&limit=10 \
  -H “X-API-Key: your-api-token”

Response (200 OK):

{
  “tasks”: [
    {
      “id”: “a1b2c3d4-…”,
      “title”: “Buy groceries”,
      “notes”: “”,
      “status”: “next”,
      “due_date”: “2026-02-09”,
      “project”: “Home”,
      “contexts”: [“@errands”],
      “energy”: “low”,
      “estimated_minutes”: 30,
      “delegated_to”: null,
      “created_at”: “2026-02-08T12:00:00+00:00”,
      “updated_at”: “2026-02-08T12:00:00+00:00”
    }
  ],
  “count”: 1
}


Get Task

GET /api/v1/tasks/{task_id}

Retrieve a single task by ID.

Example Request:

curl https://api.aanle.com/api/v1/tasks/a1b2c3d4-… \
  -H “X-API-Key: your-api-token”

Response (200 OK): Same format as a single task object above.


Complete Task

POST /api/v1/tasks/{task_id}/complete

Mark a task as done. If the task has a recurrence rule, a new instance is automatically created.

Example Request:

curl -X POST https://api.aanle.com/api/v1/tasks/a1b2c3d4-…/complete \
  -H “X-API-Key: your-api-token”

Response (200 OK): Returns the completed task (with status: “done”).


Delete Task

DELETE /api/v1/tasks/{task_id}

Permanently delete a task.

Example Request:

curl -X DELETE https://api.aanle.com/api/v1/tasks/a1b2c3d4-… \
  -H “X-API-Key: your-api-token”

Response: 204 No Content


Error Responses

StatusMeaningExample
400Bad requestInvalid status value
401UnauthorizedMissing or invalid API key
404Not foundTask does not exist

Error body format:

{
  “detail”: “Invalid status: invalid”
}


Zapier Integration

Use Zapier’s Webhooks by Zapier app to connect to this API.

Quick-add task from any trigger

  1. Add a Webhooks by Zapier action → Custom Request
  2. Method: POST
  3. URL: https://<your-api-host>/api/v1/tasks
  4. Headers:
    1. X-API-Key: your API token
    1. Content-Type: application/json
  5. Body: {“text”: “{{trigger_field}}”}

Example Zaps

  • Gmail → Task: New starred email → Create task with {“text”: “{{subject}} @email”}
  • Slack → Task: New saved message → Create task with {“text”: “{{message_text}}”}
  • Calendar → Task: New event → Create task with {“text”: “Prepare for {{event_title}} {{event_date}}”}

IFTTT Integration

Use IFTTT’s Webhooks service to send requests to this API.

Quick-add task from any trigger

  1. Create a new applet
  2. Choose your trigger (e.g., Google Assistant, Button, Email)
  3. For the action, choose Webhooks → Make a web request
  4. URL: https://<your-api-host>/api/v1/tasks
  5. Method: POST
  6. Content Type: application/json
  7. Additional Headers: X-API-Key: your-api-token
  8. Body: {“text”: “{{TextField}}”}

Example Applets

  • “Hey Google, add task” → Google Assistant trigger → Webhook to create task
  • iOS Shortcuts → Button trigger → Webhook to create task
  • Email IFTTT → Send email to trigger@applet.ifttt.com → Webhook to create task

Email-to-Inbox

You can also create tasks by sending an email to your personal capture address:

<your-capture-token>@<capture-domain>

Find your capture email in Settings > General. The email subject line is parsed as the task text (with full NLP support), and the email body is saved as task notes.