---
title: "POST /v1/features/learn/plan"
method: POST
path: "/v1/features/learn/plan"
tags: ["Features"]
---

# POST /v1/features/learn/plan

`POST /v1/features/learn/plan`

## Request

- Base URL: `https://api.taada.dev`
- URL: `https://api.taada.dev/v1/features/learn/plan`
- Auth: HTTP bearer

## Request body

- object
  - `repositoryId` string, uuid, required
  - `ticket` object, required
    - `title` string, required
    - `ref` string, nullable
    - `text` string
  - `agent` object
    - `acceptanceCriteria` string[]
    - `pages` object[]
      - `route` string, required
      - `reachedBy` string
      - `purpose` string
    - `roles` object[]
      - `name` string, required
      - `can` string[]
      - `cannot` string[]
    - `setup` string[]
    - `changed` object
      - `branch` string
      - `summary` string
    - `outOfScope` string[]
  - `proposal` object
    - `name` string, required: The feature, named exactly as the ticket names it.
    - `ticketRef` string, nullable, required: The ticket id as the tracker writes it (SOL-123), or null.
    - `access` 'permissions' | 'sign_in' | 'none', required: permissions: who may see or do what once inside. sign_in: signing in and out itself. none: neither.
    - `journeys` object[], required
      - `name` string, required
      - `as` string, nullable, required: The role it runs as, as the app names it; null for the default login.
      - `kind` 'setup' | 'invite' | 'can' | 'cant' | 'revoke' | 'direct_url' | 'check', required
      - `says` string, required: What should happen and why, said before it is shown.
      - `covers` integer[]: The numbers of the acceptance criteria this journey proves. Empty when none were given.
      - `needs` string[]: Other journeys of this plan, by name, that must pass before this one can run, for example "Access taken away" needs "Admin creates a viewer role". Empty when it stands alone.
    - `notBrowserCheckable` object[], required: What the ticket asks for that a browser cannot check, each with the criteria numbers it accounts for.
      - `what` string, required
      - `covers` integer[]
    - `uses` string[], required: Other features this proof needs to exist first, by name.
    - `area` string, nullable: The area of the app this feature lives in, as its sidebar names it (Companies): one Tada already knows when it fits.

## Response `200`

Default Response

---

[API](https://skmtc.dev/taada/apis/tada.md) · [All operations](https://skmtc.dev/taada/apis/tada/llms.txt) · [OpenAPI document](https://skmtc.dev/taada/apis/tada/revisions/9079c5c8a580?raw)
