> ## 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.

# Schedule tasks atomically

> Schedules one or more tasks by day, optional precise time and optional manual order in one transaction. Omitted time preserves an existing precise time; null clears it. If any task is inaccessible, nothing changes. Deadlines are never changed.



## OpenAPI

````yaml https://api.doers.sh/openapi.json patch /v2/tasks/schedule
openapi: 3.1.0
info:
  title: Doers API
  version: 2.0.0
  description: >-
    The open API of Doers: tasks, projects, areas, prioritised context and the
    day's plan.


    ## Authentication


    Every route requires a bearer token, generated from **Settings > API & MCP**
    in the app:


    ```

    Authorization: Bearer pc_…

    ```


    ## Two date fields, not to be confused


    - `when` — the **schedule**: `today`, `anytime` (Later), `someday` (Future)
    or a date.

    - `deadline` — the **commitment**, independent of the schedule.


    ## Time zone


    The server reasons in UTC and does not know yours. Send the `X-PC-Today:
    YYYY-MM-DD` header

    (or the `day` argument where it exists) so dated operations use your local
    day.


    ## MCP server


    The same token gives access to the [Model Context
    Protocol](https://modelcontextprotocol.io)

    server at `POST https://doers.sh/mcp`, which exposes the same operations as
    tools for Claude,

    Cursor and other compatible clients.
servers:
  - url: https://api.doers.sh
    description: Production.
security:
  - bearerAuth: []
tags:
  - name: Tasks
  - name: Projects
  - name: Areas
  - name: Headings
  - name: Comments
  - name: Realtime
  - name: Devices
  - name: Context
  - name: Plan
  - name: Sessions
  - name: Rounds
  - name: Journal
  - name: Habits
  - name: Stats
  - name: Users
  - name: Profiles
  - name: Workspaces
  - name: Access
  - name: Activity
  - name: Tokens
  - name: Referrals
  - name: Files
  - name: Connections
  - name: Collaborators
  - name: Links
  - name: Packages
  - name: Installs
  - name: Billing
  - name: Calendar
  - name: Coach
  - name: Marketplace
paths:
  /v2/tasks/schedule:
    patch:
      tags:
        - Tasks
      summary: Schedule tasks atomically
      description: >-
        Schedules one or more tasks by day, optional precise time and optional
        manual order in one transaction. Omitted time preserves an existing
        precise time; null clears it. If any task is inaccessible, nothing
        changes. Deadlines are never changed.
      operationId: scheduleTasks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                items:
                  type: array
                  items:
                    type: object
                    properties:
                      taskId:
                        type: string
                        format: uuid
                        pattern: >-
                          ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                        description: Identifier of a row.
                      day:
                        type: string
                        format: date
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
                        description: Local day key, `YYYY-MM-DD`.
                      time:
                        anyOf:
                          - type: string
                            description: Time `HH:MM` — only meaningful alongside a date.
                            pattern: ^([01]\d|2[0-3]):[0-5]\d$
                          - type: 'null'
                      order:
                        type: number
                        description: >-
                          Manual position. Fractional values are valid; lower
                          sorts first.
                    required:
                      - taskId
                      - day
                    additionalProperties: false
                  minItems: 1
                  maxItems: 50
              required:
                - items
              additionalProperties: false
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  tasks:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        title:
                          type: string
                        notes:
                          type: string
                        status:
                          type: string
                          enum:
                            - open
                            - done
                            - archived
                        priority:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        when:
                          oneOf:
                            - type: object
                              properties:
                                kind:
                                  type: string
                                  const: today
                              required:
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                kind:
                                  type: string
                                  const: anytime
                              required:
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                kind:
                                  type: string
                                  const: someday
                              required:
                                - kind
                              additionalProperties: false
                            - type: object
                              properties:
                                kind:
                                  type: string
                                  const: date
                                date:
                                  type: string
                                hasTime:
                                  type: boolean
                                time:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                              required:
                                - kind
                                - date
                                - hasTime
                              additionalProperties: false
                          description: >-
                            How the task is scheduled (distinct from its
                            `deadline`).
                        deadline:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Due date `YYYY-MM-DD`, or `null`.
                        projectId:
                          anyOf:
                            - type: string
                            - type: 'null'
                        areaId:
                          anyOf:
                            - type: string
                            - type: 'null'
                        headingId:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: >-
                            Heading grouping the task, or `null` if it sits
                            above them all.
                        tags:
                          type: array
                          items:
                            type: string
                        checklist:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                type: string
                              label:
                                type: string
                              done:
                                type: boolean
                            required:
                              - id
                              - label
                              - done
                            additionalProperties: false
                        completedAt:
                          anyOf:
                            - type: number
                            - type: 'null'
                        durationMin:
                          anyOf:
                            - type: number
                            - type: 'null'
                        kind:
                          type: string
                          enum:
                            - task
                            - event
                        repeat:
                          anyOf:
                            - type: object
                              properties:
                                every:
                                  type: integer
                                  minimum: 1
                                  maximum: 365
                                  description: 'The multiplier: 2 × week.'
                                unit:
                                  type: string
                                  enum:
                                    - day
                                    - week
                                    - month
                                    - year
                                mode:
                                  type: string
                                  enum:
                                    - calendar
                                    - after
                                  description: >-
                                    `calendar`: the next one starts from the
                                    scheduled date. `after`: from ticking.
                                weekdays:
                                  description: >-
                                    ISO weekdays (1 = Monday … 7 = Sunday) the
                                    weekly rule fires on. Only valid with unit
                                    "week".
                                  minItems: 1
                                  maxItems: 7
                                  type: array
                                  items:
                                    type: integer
                                    minimum: 1
                                    maximum: 7
                              required:
                                - every
                                - unit
                                - mode
                              additionalProperties: false
                              description: >-
                                Repeat rule. Ticking the task creates the next
                                occurrence.
                            - type: 'null'
                        visibility:
                          type: string
                          enum:
                            - public
                            - anonymized
                            - private
                          description: >-
                            Who sees this task on shared and social surfaces:
                            public shows title and project, anonymized shows
                            only the area, private shows nothing. New tasks
                            default to private.
                        order:
                          type: number
                          description: >-
                            Manual position. Fractional values are valid; lower
                            sorts first.
                        notePath:
                          anyOf:
                            - type: string
                              maxLength: 1024
                              description: >-
                                Path of a note in the local markdown vault,
                                relative to its root (`Projects/Launch.md`).
                                When set, the app shows that note **instead of**
                                the `notes` field. Do not invent one: it names a
                                file on the user's machine.
                            - type: 'null'
                        conversationPath:
                          anyOf:
                            - type: string
                              maxLength: 1024
                              description: >-
                                Path of the Atelier conversation this task is
                                delegated to, relative to the vault root
                                (`Agents/Reel scripter/Conversations/….md`). The
                                agent is derived from the path. Do not invent
                                one: it names a file on the user's machine.
                            - type: 'null'
                        assigneeId:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: >-
                            Who it is assigned to: one person who reaches the
                            task, or nobody.
                        assignee:
                          anyOf:
                            - type: object
                              properties:
                                id:
                                  type: string
                                username:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                name:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                email:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                image:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                              required:
                                - id
                                - username
                                - name
                                - email
                                - image
                              additionalProperties: false
                            - type: 'null'
                          description: The same person, as the row draws them.
                        accessRole:
                          description: Your effective role on this task.
                          type: string
                          enum:
                            - owner
                            - editor
                            - commenter
                            - reader
                      required:
                        - id
                        - title
                        - notes
                        - status
                        - priority
                        - when
                        - deadline
                        - projectId
                        - areaId
                        - headingId
                        - tags
                        - checklist
                        - completedAt
                        - durationMin
                        - kind
                        - repeat
                        - visibility
                        - order
                        - notePath
                        - conversationPath
                        - assigneeId
                        - assignee
                      additionalProperties: false
                required:
                  - tasks
                additionalProperties: false
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Unprocessable'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  responses:
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: >-
        Invalid request — unreadable body, out-of-range field or unknown
        parameter.
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Token missing, unknown or revoked.
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Readable resource, but your role does not permit this action.
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: >-
        Resource does not exist **or** belongs to another account — the API
        never distinguishes the two.
    Unprocessable:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: >-
        Well-formed but unusable request — an empty title once parsed, for
        instance.
    TooManyRequests:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Too many requests. `Retry-After` says how many seconds to wait.
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable machine-readable code.
            message:
              type: string
              description: Human-readable message.
            details:
              type: array
              description: Per-field detail, present on validation errors.
              items:
                type: object
                properties:
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - field
                  - message
          required:
            - code
            - message
      required:
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A `pc_…` token generated from Settings > API & MCP.

````