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

# Share a cloud note with someone

> `target` is a username or an email address; Can edit unless `role` says otherwise. An address with no account yet is kept, and the note reaches whoever signs up with it. Sharing again with the same person sets their role. Only the owner shares.



## OpenAPI

````yaml https://api.doers.sh/openapi.json post /v2/cloud-notes/{noteId}/people
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://app.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: Notes
  - name: Billing
  - name: Calendar
  - name: Coach
  - name: Marketplace
paths:
  /v2/cloud-notes/{noteId}/people:
    post:
      tags:
        - Notes
      summary: Share a cloud note with someone
      description: >-
        `target` is a username or an email address; Can edit unless `role` says
        otherwise. An address with no account yet is kept, and the note reaches
        whoever signs up with it. Sharing again with the same person sets their
        role. Only the owner shares.
      operationId: shareCloudNote
      parameters:
        - name: noteId
          in: path
          required: true
          description: Identifier of a row.
          schema:
            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)$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                role:
                  type: string
                  enum:
                    - editor
                    - reader
                  default: editor
                target:
                  type: string
                  minLength: 1
                  maxLength: 254
              required:
                - target
              additionalProperties: false
      responses:
        '201':
          description: Created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  note:
                    type: object
                    properties:
                      id:
                        type: string
                      title:
                        type: string
                      role:
                        type: string
                        enum:
                          - owner
                          - editor
                          - reader
                        description: >-
                          `owner` moved it to the cloud; `editor` can edit;
                          `reader` can view.
                      owner:
                        type: object
                        properties:
                          id:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: >-
                              The account, or `null` for an address with no
                              account yet.
                          username:
                            anyOf:
                              - type: string
                              - type: 'null'
                          name:
                            anyOf:
                              - type: string
                              - type: 'null'
                          image:
                            anyOf:
                              - type: string
                              - type: 'null'
                          email:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Only for an address with no account, to its owner.
                        required:
                          - id
                          - username
                          - name
                          - image
                          - email
                        additionalProperties: false
                      revision:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      updatedAt:
                        type: number
                        description: Epoch milliseconds.
                      peopleCount:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                        description: How many people it is shared with, owner aside.
                      sourcePath:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: >-
                          The owner's vault path, kept current by their saves;
                          `null` to anyone else.
                      body:
                        type: string
                      createdAt:
                        type: number
                        description: Epoch milliseconds.
                      people:
                        type: array
                        items:
                          type: object
                          properties:
                            memberId:
                              type: string
                            person:
                              type: object
                              properties:
                                id:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                  description: >-
                                    The account, or `null` for an address with
                                    no account yet.
                                username:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                name:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                image:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                email:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                  description: >-
                                    Only for an address with no account, to its
                                    owner.
                              required:
                                - id
                                - username
                                - name
                                - image
                                - email
                              additionalProperties: false
                            role:
                              type: string
                              enum:
                                - editor
                                - reader
                          required:
                            - memberId
                            - person
                            - role
                          additionalProperties: false
                        description: Everyone it is shared with, owner aside.
                      here:
                        type: array
                        items:
                          type: object
                          properties:
                            person:
                              type: object
                              properties:
                                id:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                  description: >-
                                    The account, or `null` for an address with
                                    no account yet.
                                username:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                name:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                image:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                email:
                                  anyOf:
                                    - type: string
                                    - type: 'null'
                                  description: >-
                                    Only for an address with no account, to its
                                    owner.
                              required:
                                - id
                                - username
                                - name
                                - image
                                - email
                              additionalProperties: false
                            editing:
                              type: boolean
                          required:
                            - person
                            - editing
                          additionalProperties: false
                        description: Who has it open now, the caller aside.
                    required:
                      - id
                      - title
                      - role
                      - owner
                      - revision
                      - updatedAt
                      - peopleCount
                      - sourcePath
                      - body
                      - createdAt
                      - people
                      - here
                    additionalProperties: false
                required:
                  - note
                additionalProperties: false
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '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.
    PaymentRequired:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: >-
        The trial is over and no plan holds this account
        (`subscription_required`). Choose a plan in the app; `access` says why.
    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.
    Conflict:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Conflicts with the resource's current state.
    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
            access:
              type: object
              description: >-
                Present only on `subscription_required`: why the account is
                closed, and when its trial ended (null when it never had one).
              properties:
                reason:
                  type: string
                  enum:
                    - trial_ended
                    - payment_failed
                    - subscription_ended
                trialEndedAt:
                  type:
                    - number
                    - 'null'
              required:
                - reason
                - trialEndedAt
          required:
            - code
            - message
      required:
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A `pc_…` token generated from Settings > API & MCP.

````