> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dally.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# holding.read

> Access: public. Send a JSON body; unknown keys are rejected with 400 invalid_request (inputs are strict). Responses may gain fields additively — never remove or repurpose; ignore unknown response fields.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/holding.read
openapi: 3.1.0
info:
  title: Dally API
  version: v1
  description: >-
    PRIVATE (posture 2026-09-01): the MCP connector is Dally's only supported
    surface; this REST surface serves internal harnesses only, and its keys are
    WorkOS-dashboard-issued, never product-issued (CONTEXT.md § Positions).
    Headless Dally v1 — Slack-shape RPC: every operation is POST
    /v1/<family.verb> with a JSON body. Cursor-only pagination ({items,
    has_more, next_cursor}; next_cursor null is the only end signal).
    Unversioned while private (Jim 2026-09-03): a retired name drops in the
    first migration after the deployed release stops naming it; inputs are
    strict, responses are tolerant.
servers:
  - url: https://dally.ai
    description: The production Headless Dally v1 API.
security: []
paths:
  /v1/holding.read:
    post:
      tags:
        - holding
      summary: >-
        The caller's holding of one platform as it stands: whether Dally holds a
        live connection, which permissions are missing, the account's handle,
        and the rows of its first sync while they land. The connect card asks
        this after the person leaves for the platform and while the sync runs;
        it opens no authorization and paints nothing.
      description: >-
        Access: public. Send a JSON body; unknown keys are rejected with 400
        invalid_request (inputs are strict). Responses may gain fields
        additively — never remove or repurpose; ignore unknown response fields.
      operationId: holding.read
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                platform:
                  type: string
                  enum:
                    - instagram
                  description: >-
                    The platform a row belongs to. v1 supports instagram; more
                    platforms will be added to this enum additively — treat
                    unknown values as new platforms, never as errors.
              required:
                - platform
              additionalProperties: false
            example:
              platform: instagram
      responses:
        '200':
          description: Success. request_id is present on every response.
          content:
            application/json:
              schema:
                type: object
                properties:
                  platform:
                    type: string
                    enum:
                      - instagram
                    description: >-
                      The platform a row belongs to. v1 supports instagram; more
                      platforms will be added to this enum additively — treat
                      unknown values as new platforms, never as errors.
                  state:
                    type: string
                    enum:
                      - absent
                      - connected
                      - degraded
                      - invalid
                    description: >-
                      absent when this room has never connected the platform,
                      connected while Dally holds a live connection, degraded
                      when the connection stands but a permission was withheld,
                      invalid when every connection this room opened is dead.
                  connected:
                    type: boolean
                    description: Whether Dally holds a live connection right now.
                  handle:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      The connected account's handle, for display only; null
                      when nothing is connected or the platform never named one.
                  missing_permissions:
                    type: array
                    items:
                      type: string
                    description: >-
                      The permissions the platform withheld, named as the person
                      will recognize them; empty unless the state is degraded.
                  sync:
                    anyOf:
                      - type: array
                        items:
                          type: object
                          properties:
                            key:
                              type: string
                              enum:
                                - posts
                                - comments
                                - messages
                                - followers
                                - insights
                              description: Which of the five first-sync rows this is.
                            label:
                              type: string
                              description: The row's name, as the card prints it.
                            value:
                              type: string
                              description: >-
                                The row's count, as the card prints it; empty
                                while nothing has landed, and the words for a
                                row the account did not share.
                            state:
                              type: string
                              enum:
                                - waiting
                                - landed
                                - muted
                              description: >-
                                waiting while the row is still landing, landed
                                once it is in, muted when this account shares
                                nothing of it.
                          required:
                            - key
                            - label
                            - value
                            - state
                          description: One row of the first sync, ready to print.
                      - type: 'null'
                    description: >-
                      The five rows of this account's first sync, in the order
                      the card prints them; null when nothing is connected or
                      the sync cannot be read.
                  request_id:
                    type: string
                    minLength: 1
                    description: >-
                      Server-minted id for this request. Present on every
                      response, success and error — quote it when reporting a
                      problem.
                required:
                  - platform
                  - state
                  - connected
                  - handle
                  - missing_permissions
                  - sync
                  - request_id
              example:
                platform: instagram
                state: connected
                connected: true
                handle: sarahcreates
                missing_permissions: []
                sync:
                  - key: posts
                    label: Posts
                    value: 128 of 412
                    state: waiting
                  - key: comments
                    label: Comments
                    value: 2,304
                    state: landed
                  - key: messages
                    label: DMs
                    value: not shared
                    state: muted
                  - key: followers
                    label: Followers
                    value: 12,480
                    state: landed
                  - key: insights
                    label: Insights
                    value: ''
                    state: waiting
                request_id: req_01j8zkq
        default:
          description: >-
            Error — the real HTTP status carries the class; the body is always
            the one error envelope. Codes: invalid_request, stale_cursor,
            query_too_broad, unauthorized, forbidden, no_connected_accounts,
            stale_authority, not_found, precondition_failed, method_not_allowed,
            stale_snapshot, stale_revision, execution_payload_erased,
            exhaustiveness_unavailable, rate_limited, internal_error,
            unavailable, search_unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      security:
        - bearerAuth: []
        - apiKeyAuth: []
components:
  schemas:
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - invalid_request
                - stale_cursor
                - query_too_broad
                - unauthorized
                - forbidden
                - no_connected_accounts
                - stale_authority
                - not_found
                - precondition_failed
                - method_not_allowed
                - stale_snapshot
                - stale_revision
                - execution_payload_erased
                - exhaustiveness_unavailable
                - rate_limited
                - internal_error
                - unavailable
                - search_unavailable
              description: >-
                The machine-readable error code. The set only grows — treat
                unknown codes by falling back to the HTTP status class.
            message:
              type: string
              description: >-
                A human-readable teaching message: what failed and the exact
                fix, never just the symptom.
            details:
              description: >-
                Optional structured context for this code — e.g.
                estimated_matches and ceiling on query_too_broad.
              type: object
              propertyNames:
                type: string
              additionalProperties: {}
          required:
            - code
            - message
          description: The error object — the one shape every failure wears.
        request_id:
          type: string
          minLength: 1
          description: >-
            Server-minted id for this request. Present on every response,
            success and error — quote it when reporting a problem.
      required:
        - error
        - request_id
      description: The ONE error envelope (API-ERR-001).
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'A WorkOS-dashboard-issued internal API key on Authorization: Bearer.'
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: The same internal API key, accepted on x-api-key.

````