# Plan API quickstart

> Make your first Dailybot Plan API calls in under five minutes: get a token, list boards, create a task, move it and comment on it, with curl and the CLI.

Language: en
Canonical: https://www.dailybot.com/developers/plan/quickstart
Markdown: send header `Accept: text/markdown` on any URL to receive Markdown instead of HTML.
Last Updated: 2026-09-25

---

> **Beta** — Plan is in beta. Everything under `/plan` in the web app, the CLI and agent skill commands for projects, goals, boards and tasks, and the `/v1/plan/` public API may change before general availability. Want to try it with your team? Write to **support@dailybot.com**.
>
> [request beta access](mailto:support@dailybot.com?subject=Dailybot%20Plan%20Beta%20access)

In about five minutes you will sign in, find a board, create a task, move it to "in progress" and leave a comment on it. Every step shows the `curl` call and the Dailybot CLI equivalent.

You need `curl` and [`jq`](https://jqlang.github.io/jq/) (to read JSON in the shell), and an email address that belongs to a Dailybot organization enabled for the Plan Beta.

<h2 id="step-1">1. Get a token</h2>

The quickest credential is a **CLI user token**: it acts as you, with your role. Ask for a one-time code by email:

```bash
curl -sS -X POST "https://api.dailybot.com/v1/cli/auth/request-code/" \
  -H "Content-Type: application/json" \
  -d '{"email": "you@company.com"}'
```

Paste the code from the email in place of `123456` and keep the token in `DAILYBOT_TOKEN`:

```bash
export DAILYBOT_TOKEN=$(curl -sS -X POST "https://api.dailybot.com/v1/cli/auth/verify-code/" \
  -H "Content-Type: application/json" \
  -d '{"email": "you@company.com", "code": "123456"}' | jq -r .access_token)
```

If your email belongs to several organizations, the first call answers `"status": "select_organization"` with a list: send it again with `"organization_uuid"` set to the one you want.

From the CLI, `dailybot login` runs the same email-code flow and keeps the session for you:

```bash
dailybot login
```

> A **personal API key** works too (`X-API-KEY: $DAILYBOT_API_KEY`) and acts as you, with no scope to request. An **agent or organization key** acts as a system actor, needs Plan scopes enabled for it (during the Beta, write to **support@dailybot.com**) and is refused on the endpoints that need a person. See [Authentication for Plan](/developers/plan/authentication).

<h2 id="step-2">2. Check that Plan is enabled</h2>

```bash
curl -sS "https://api.dailybot.com/v1/plan/entitlements/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN"
```

You want `"enabled": true`. If you get `"enabled": false`, or any other Plan call answers **`402 plan_upgrade_required`**, that is expected: your organization is not in the Beta yet. Write to **support@dailybot.com** and we will enable it.

<h2 id="step-3">3. List your boards</h2>

```bash
curl -sS "https://api.dailybot.com/v1/plan/boards/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" | jq '.results[] | {uuid, key, name}'
```

Keep the first board's uuid for the next steps:

```bash
export BOARD=$(curl -sS "https://api.dailybot.com/v1/plan/boards/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" | jq -r '.results[0].uuid')
```

From the CLI:

```bash
dailybot plan board list --json
```

<h2 id="step-4">4. Create a task</h2>

`board` and `title` are required. The `Idempotency-Key` header makes the call safe to retry: sending it again with the same key and body returns the first task instead of creating a second one.

```bash
export TASK=$(curl -sS -X POST "https://api.dailybot.com/v1/plan/tasks/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: quickstart-$(date +%s)" \
  -d "{\"board\": \"$BOARD\", \"title\": \"My first task from the API\"}" | jq -r .key)
echo "$TASK"
```

`TASK` now holds the task's key, such as `ENG-143`. You can use it anywhere a task is addressed.

From the CLI:

```bash
dailybot plan task create -t "My first task from the API" -b "$BOARD"
```

<h2 id="step-5">5. Move it to "in progress"</h2>

A board's columns are its workflow states. Find the first state whose category is `in_progress`, then move the task there:

```bash
export STATE=$(curl -sS "https://api.dailybot.com/v1/plan/boards/$BOARD/states/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" | jq -r '[.[] | select(.category == "in_progress")][0].uuid')

curl -sS -X POST "https://api.dailybot.com/v1/plan/tasks/$TASK/move/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"state\": \"$STATE\"}" | jq '{key, state: .state.name, version}'
```

Without `after` or `before`, the task goes to the end of the column. Moving is the only way to change a task's state.

From the CLI:

```bash
dailybot plan task move "$TASK" --state in_progress
```

<h2 id="step-6">6. Comment on it</h2>

```bash
curl -sS -X POST "https://api.dailybot.com/v1/plan/tasks/$TASK/comments/" \
  -H "Authorization: Bearer $DAILYBOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body": "Created and moved from the Plan API quickstart."}' | jq '{uuid, body, created_at}'
```

From the CLI:

```bash
dailybot plan task comment "$TASK" "Created and moved from the Plan API quickstart."
```

That is the whole loop: you have read a board, created a task, changed its state and talked about it.

> These CLI commands ship in the next Dailybot CLI release. Add `--json` to any of them for machine-readable output.

<h2 id="next">Next steps</h2>

- Read the [overview](/developers/plan) for the model: states and categories, keys, ordering, versions and archive.
- Browse the reference: [Tasks](/developers/api/plan-tasks), [Boards](/developers/api/plan-boards), [Projects](/developers/api/plan-projects), [Goals](/developers/api/plan-goals), [Comments & files](/developers/api/plan-collaboration) and [Home & search](/developers/api/plan-home).

---

## Developer portal navigation

**Getting Started**

- [Overview](/developers)
- [Quick start](/developers/getting-started)
- [Authentication](/developers/authentication)

**API Reference**

- [API Overview](/developers/api)
- [Users](/developers/api/users)
- [Organization](/developers/api/organization)
- [Teams](/developers/api/teams)
- [Invitations](/developers/api/invitations)
- [Check-ins](/developers/api/check-ins)
- [Forms](/developers/api/forms)
- [Labels](/developers/api/labels)
- [Report channels](/developers/api/report-channels)
- [Templates](/developers/api/templates)
- [Kudos](/developers/api/kudos)
- [Mood tracking](/developers/api/mood)
- [Important dates](/developers/api/important-dates)
- [Messaging](/developers/api/messaging)
- [Automations](/developers/api/workflows)
- [Webhooks](/developers/api/webhooks)
- [Commands platform](/developers/api/commands-platform)
- [Agents](/developers/api/agents)
- [OAuth2](/developers/api/oauth2)
- [Integrations](/developers/api/integrations)
- [CLI](/developers/api/cli)
- [Plan · Projects](/developers/api/plan-projects)
- [Plan · Goals](/developers/api/plan-goals)
- [Plan · Boards](/developers/api/plan-boards)
- [Plan · Tasks](/developers/api/plan-tasks)
- [Plan · Comments & files](/developers/api/plan-collaboration)
- [Plan · Home & search](/developers/api/plan-home)
- [Plan · Notifications & reports](/developers/api/plan-notifications)

**Dailybot Plan**

- [Overview](/developers/plan)
- [Concepts](/developers/plan/concepts)
- [Quickstart](/developers/plan/quickstart) (this page)
- [Authentication & scopes](/developers/plan/authentication)
- [Agents on Plan](/developers/plan/agents)
- [Conventions](/developers/plan/conventions)
- [Errors](/developers/plan/errors)
- [CLI for Plan](/developers/plan/cli)
- [Agent skill](/developers/plan/agent-skill)
- [Recipe: live board](/developers/plan/recipes/board-live-updates)
- [Recipe: home in one request](/developers/plan/recipes/home-in-one-request)
- [Recipe: bulk create](/developers/plan/recipes/bulk-create)
- [Recipe: move on PR merge](/developers/plan/recipes/move-on-pr-merge)
- [Recipe: goal progress](/developers/plan/recipes/goal-progress)
- [Recipe: webhooks](/developers/plan/recipes/webhooks)

**API guides**

- [Errors & Status Codes](/developers/errors)
- [Rate Limits](/developers/rate-limits)
- [Conventions](/developers/conventions)
- [API Changelog](/developers/api-changelog)
- [Recipes](/developers/recipes)

**Developer Features**

- [Custom commands](/developers/custom-commands)
- [Serverless commands](/developers/serverless)
- [Webhooks & events](/developers/webhooks)
- [Automation API trigger](/developers/workflow-trigger)
- [Activity API](/developers/activity-api)

**CLI**

- [Overview](/developers/cli)
- [Authentication](/developers/cli-authentication)
- [Command reference](/developers/cli-reference)
- [CI/CD recipes](/developers/cli-ci-cd)
- [Configuration](/developers/cli-configuration)
- [Troubleshooting](/developers/cli-troubleshooting)

**Agent Skill**

- [Overview](/developers/agent-skill)
- [Skills catalog](/skills)

---

## Site navigation

**Product:**
- [Home](/)
- [Product](/product)
- [Pricing](/pricing)
- [Enterprise](/enterprise)
- [Integrations](/integrations)
- [Templates](/templates)

**Resources:**
- [Blog](/blog)
- [Academy](/academy)
- [Changelog](/changelog)
- [Help Center](/help)
- [Developers](/developers)
- [Agents](/agents)

**Company:**
- [About](/about)
- [Careers](/careers)
- [Security](/security)
- [Contact Sales](/demo)

**Connect:**
- [LinkedIn](https://www.linkedin.com/company/dailybot/)
- [X/Twitter](https://twitter.com/dailybot)
- [GitHub](https://github.com/Dailybot-Inc)
- [YouTube](https://www.youtube.com/channel/UC3uM9V52vwX7e3vQpCc4qvA)

