> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doers.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Natural language

> What quick_add_task and POST /v2/tasks/quick understand in a sentence, and what they keep.

`POST /v2/tasks/quick` (the `quick_add_task` tool) creates a task from one sentence, with the same
parser as the app's quick entry. It reads English and French, and the tokens can come in any
order.

```text theme={null}
!!! call the Acme accountant #Acme tomorrow 10am
```

| Token           | Result                                             |
| --------------- | -------------------------------------------------- |
| `!!!`           | priority 3                                         |
| `#Acme`         | filed in the project whose name starts with "Acme" |
| `tomorrow 10am` | `when` tomorrow, at 10:00                          |
| the rest        | the title: "call the Acme accountant"              |

## Priority

| Token         | Priority  |
| ------------- | --------- |
| `!`           | 1, low    |
| `!!`          | 2, medium |
| `!!!` or more | 3, high   |

Priority 4, "goal of the day", cannot be typed: set it with `update_task`.

## Project or area

`#name` is compared with the start of your project names, ignoring case and accents. When no
project matches, your areas are tried. A `#word` that matches nothing, or matches several, stays in
the title as typed.

Only projects and areas are matched here: `#heading` does not file a task under a heading through
the API.

## Dates

| You type                              | `when`                                            |
| ------------------------------------- | ------------------------------------------------- |
| `today`, `tod`, `aujourd'hui`         | today                                             |
| `tomorrow`, `tmr`, `tom`, `demain`    | tomorrow                                          |
| `monday`, `mardi`                     | the next such day                                 |
| `next monday 9am`, `in 2 days at 7pm` | that day and time                                 |
| `demain 14h`, `mardi à 9h30`          | French times work too, and mix with English dates |
| `someday`, `un jour`                  | someday                                           |
| nothing                               | anytime                                           |

A lone small number ("pay invoice 3") is never read as a date.

<Warning>
  Relative dates are resolved against the **server's clock, in UTC**, not against `X-Doers-Today`.
  Close to midnight in your time zone, "tomorrow" can land a day off. When the day matters, send an
  explicit date, or use `create_task` with `when`.
</Warning>

## What is read but not kept

The parser understands more than this operation stores. These are recognised and **removed from
the title**, but the created task does not carry them:

| Token                                             | Recognised as                                | Stored                                                         |
| ------------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------- |
| `every monday`, `every 2 weeks`, `tous les jours` | a repeat rule                                | no: the task is dated on the next occurrence, without the rule |
| `14h-15h`, `1h30`, `45min`                        | a duration                                   | no                                                             |
| a leading `/`, `+meet`, `+name@acme.example`      | a calendar event with a video link or guests | no: a plain task is created                                    |

To create a repeating task or set a duration, use `create_task` with `repeat` and `durationMin`.

## Deadlines

The parser never produces a deadline: a date in the sentence is always the plan. Pass the deadline
alongside the sentence:

```json theme={null}
{ "raw": "!! renew the Acme domain #Acme friday", "deadline": "2026-09-30" }
```

## The answer

The response carries the created task and what the parser understood:

```json theme={null}
{
  "task": {
    "id": "1f58b914-5b24-4108-87ac-38887338b3ea",
    "title": "renew the Acme domain",
    "…": "…"
  },
  "parsed": {
    "title": "renew the Acme domain",
    "priority": 2,
    "projectId": "244210e4-8437-4655-8980-a70249a99369",
    "areaId": null
  }
}
```

A sentence with nothing left once the tokens are removed is refused with `422 empty_title`.
