---
title: "POST /boards/{board_uuid}/tasks"
method: POST
path: "/boards/{board_uuid}/tasks"
tags: ["Boards"]
---

# POST /boards/{board_uuid}/tasks

`POST /boards/{board_uuid}/tasks`

## Request

- Base URL: `https://api.laver.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.laver.app/boards/{board_uuid}/tasks`
- Auth: one of:
  - HTTP bearer
  - API key in header `Authorization`

## Path parameters

- `board_uuid` string, uuid, required

## Request body

- object
  - `title` string, required
  - `status` string
  - `description` string, nullable
  - `description_json` unknown
  - `status_uuid` string, uuid, nullable
  - `group_uuid` string, uuid, nullable
  - `parent_task_uuid` string, uuid, nullable
  - `priority` union
    - 'none'
    - 'low'
    - 'medium'
    - 'high'
    - 'urgent'
  - `due_date` string, nullable
  - `start_date` string, nullable
  - `due_reminder_minutes` integer, nullable
  - `position` number
  - `is_private` boolean
  - `page_url` string, nullable
  - `page_context` object, nullable
    - `title` string
    - `selector` string
    - `viewport_width` integer
    - `viewport_height` integer
    - `user_agent` string
    - `captured_at` string, date-time

## Response `2XX`

Success. This endpoint declares no response schema, so its body is not part of the generated contract.

## Other responses

- `400`: The request failed schema validation, or the handler rejected its contents. Undeclared properties are rejected on every body, path and query schema, so an unexpected field is a 400 rather than a silently ignored one.
- `401`: No credential, or one that is expired, revoked or not accepted by this endpoint.
- `402`: The request would exceed a plan limit, or the workspace has been made read-only over an unpaid invoice. Billing never refuses a read: a workspace in any billing state can still be read in full and exported, and only its writes are turned away.
- `403`: Authenticated, but not allowed: a `viewer` attempting a write, a `commenter` attempting any write other than a comment on a ticket it can see, a `guest` writing anywhere or a `guest_editor` writing outside the boards it was given, a non-admin on an admin route, a non-owner on billing, or a non-staff user on staff tooling.
- `404`: No such resource — or one the caller may not see. Membership and board access are enforced by answering 404 rather than 403, so a stranger never learns that a resource exists.
- `409`: The write lost a race, or collided with something that already exists. Where the resource carries optimistic concurrency the response body carries the current `version` alongside `error`, so the client can reconcile and retry without re-reading everything.
- `423`: The workspace is suspended, which is an action taken by Laver rather than a billing state. Reads are refused alongside writes, and no plan change lifts it — unlike a 402, which the workspace can settle itself.
- `429`: The rate limit was exceeded. The budget is keyed on the authenticated session user or API key, falling back to the caller IP.

---

[API](https://skmtc.dev/laver/apis/laver-api.md) · [All operations](https://skmtc.dev/laver/apis/laver-api/llms.txt) · [OpenAPI document](https://skmtc.dev/laver/apis/laver-api/revisions/91e3db25a19c?raw)
