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

# Get a schedule

> Returns a single recurring schedule. Caller must be the creator or admin.

**Authorization model — partition-key trust.** Non-admin callers issue a Cosmos point-read with their own UPN as the partition key. If the schedule belongs to another user the point-read misses and the route returns **404 Not Found** — there is no separate 403 path for "exists but you can't see it". This is intentional (it avoids the existence oracle pattern) but means clients cannot distinguish "schedule was deleted" from "schedule belongs to someone else". Admin callers fall through to a cross-partition `findScheduleById` lookup.




## OpenAPI

````yaml /api-reference/openapi.json get /assignments/schedules/{id}
openapi: 3.0.3
info:
  title: Findable API
  version: 3.2.38
  description: >
    REST API for the Findable AI Assistant platform.


    ## Authentication


    All endpoints (except `/server/setup` and `/server/bootstrap`) require a
    valid **Azure AD / Entra ID Bearer token**.


    ### Obtaining a token


    1. Register (or reuse) an **App Registration** in Azure Entra ID for your
    client.

    2. Under **API Permissions**, add a delegated permission for the Findable
    server app:
       `api://<SERVER_CLIENT_ID>/User.Read`
    3. Acquire a token using MSAL (or any OAuth 2.0 library) with the following
    parameters:


    | Parameter | Value |

    |-----------|-------|

    | Authority | `https://login.microsoftonline.com/<TENANT_ID>` |

    | Client ID | Your client app registration ID |

    | Scope | `api://<SERVER_CLIENT_ID>/User.Read` |

    | Grant type | Authorization Code (interactive) or Client Credentials
    (daemon) |


    ### Example (MSAL Node.js)


    ```javascript

    const { ConfidentialClientApplication } = require("@azure/msal-node");


    const cca = new ConfidentialClientApplication({
      auth: {
        clientId: "<YOUR_CLIENT_ID>",
        authority: "https://login.microsoftonline.com/<TENANT_ID>",
        clientSecret: "<YOUR_CLIENT_SECRET>",
      },
    });


    const result = await cca.acquireTokenByClientCredential({
      scopes: ["api://<SERVER_CLIENT_ID>/.default"],
    });


    // Use result.accessToken in the Authorization header

    ```


    ### Using the token


    Include the token in every request:

    ```

    Authorization: Bearer <access_token>

    ```


    ### Roles


    Access is determined by Azure AD group membership configured in the
    application settings:

    - **Admin (Owner)**: Full access to all endpoints including admin operations

    - **Contributor**: Can create and manage chats, files, and content

    - **User**: Read access to entitled chats and resources
  contact:
    name: Findable Support
  license:
    name: Proprietary
servers:
  - url: /server
    description: Application server (relative)
security:
  - BearerAuth: []
tags:
  - name: AI
    description: Chat completion and AI generation endpoints
  - name: Chats
    description: Chat configuration CRUD with ACL enforcement
  - name: Settings
    description: Application settings and health
  - name: Files
    description: Blob storage file operations
  - name: Search
    description: Azure AI Search resource management
  - name: User
    description: User profile, feedback, chat logs, and preferences
  - name: Flows
    description: FlowEngine flow designer operations
  - name: Prompts
    description: Prompt template management
  - name: Pages
    description: Navigation page management
  - name: Admin
    description: Administrative operations (admin-only)
  - name: Bootstrap
    description: Bootstrap seed data operations (admin-only)
  - name: Setup
    description: Initial application setup (pre-auth)
  - name: Cosmos
    description: Generic Cosmos DB CRUD operations
  - name: Tools
    description: Tool providers, web search, and utility tools
  - name: MCP
    description: Model Context Protocol server management
  - name: Telemetry
    description: Version, health, and API permission checks
  - name: SharePoint
    description: SharePoint entitlement management
  - name: Data Platform
    description: Data platform connection management
  - name: Vector Stores
    description: Vector store provider operations
  - name: OneDrive
    description: OneDrive personal file storage operations
  - name: Jobs
    description: Background job and scheduler management
  - name: Memory
    description: User and organizational memory operations
  - name: Slack
    description: >-
      Slack bot interactions and webhooks (public, uses Slack signature
      verification)
  - name: Teams
    description: Microsoft Teams bot webhooks and interactions
  - name: Human Input
    description: Human-in-the-loop input requests for flow executions
  - name: Datasources
    description: Datasource catalog CRUD with ACL enforcement
  - name: Assignments
    description: >-
      Assignment lifecycle: inbox, sent, create, launch, complete, delegate,
      reject, reassign, remind, and recurring schedules. Experimental feature —
      requires experimental flag enabled.
paths:
  /assignments/schedules/{id}:
    get:
      tags:
        - Assignments
      summary: Get a schedule
      description: >
        Returns a single recurring schedule. Caller must be the creator or
        admin.


        **Authorization model — partition-key trust.** Non-admin callers issue a
        Cosmos point-read with their own UPN as the partition key. If the
        schedule belongs to another user the point-read misses and the route
        returns **404 Not Found** — there is no separate 403 path for "exists
        but you can't see it". This is intentional (it avoids the existence
        oracle pattern) but means clients cannot distinguish "schedule was
        deleted" from "schedule belongs to someone else". Admin callers fall
        through to a cross-partition `findScheduleById` lookup.
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Schedule record
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssignmentSchedule'
        '404':
          description: Schedule not found
components:
  schemas:
    AssignmentSchedule:
      type: object
      properties:
        id:
          type: string
        targetType:
          type: string
          enum:
            - chat
            - document
            - survey
        targetId:
          type: string
        targetVersion:
          type: string
        assignees:
          type: array
          items: {}
        assigneeStrategy:
          type: string
        recurrence:
          type: object
          properties:
            frequency:
              type: string
              enum:
                - daily
                - weekly
                - monthly
                - yearly
                - cron
            interval:
              type: integer
            cron:
              type: string
            dueOffsetDays:
              type: integer
            expiryOffsetDays:
              type: integer
          required:
            - frequency
          additionalProperties: false
        defaultCompletionCriteria:
          type: string
          enum:
            - chat_visited
            - chat_engaged
            - flow_started
            - flow_completed
            - flow_passed
            - manual
        defaultMaxAttempts:
          type: integer
        defaultAllowDelegation:
          type: boolean
        defaultAllowRejection:
          type: boolean
        defaultReminderPolicy:
          type: object
          properties:
            schedule:
              type: string
              enum:
                - none
                - daily
                - weekly
                - custom
            offsetDaysBeforeDue:
              type: array
              items:
                type: integer
            finalReminder:
              type: string
              enum:
                - onDueDate
                - onExpiry
          required:
            - schedule
          additionalProperties: false
        originatorEmail:
          type: string
        originatorName:
          type: string
        originatorMessage:
          type: string
        active:
          type: boolean
        nextRunAt:
          type: string
        lastRunAt:
          type: string
        createdAssignmentIds:
          type: array
          items:
            type: string
        createdAt:
          type: string
        updatedAt:
          type: string
        createdBy:
          type: string
        updatedBy:
          type: string
        _ts:
          type: number
        _etag:
          type: string
      required:
        - id
        - targetType
        - targetId
        - assignees
        - recurrence
        - originatorEmail
        - active
        - nextRunAt
        - createdAssignmentIds
      additionalProperties: false
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Azure AD access token obtained via MSAL

````