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

# List primary appointments for a profile



## OpenAPI

````yaml /openapi.json get /api/v1/profiles/{profile_id}/primary_appointments
openapi: 3.1.0
info:
  title: Scholarly API V1
  version: v1
  description: API for accessing Scholarly data
  license:
    name: Proprietary
    identifier: Proprietary
servers:
  - url: https://api.scholarlysoftware.com
    description: Production server
security: []
paths:
  /api/v1/profiles/{profile_id}/primary_appointments:
    parameters:
      - name: profile_id
        in: path
        required: true
        schema:
          type: string
    get:
      tags:
        - Primary Appointments
      summary: List primary appointments for a profile
      operationId: profile_appointmentsProfilePrimaryAppointments
      parameters:
        - name: Authorization
          in: header
          required: true
          description: Bearer token
          schema:
            type: string
        - name: include
          in: query
          required: false
          description: >-
            Comma-separated list of relationships to include. Allowed:
            `profile`, `rank`, `department`, `campus`
          schema:
            type: string
        - name: sort
          in: query
          required: false
          description: >-
            Sort order. Prefix with `-` for descending. Allowed: `created_at`,
            `updated_at`
          schema:
            type: string
        - name: filter[key]
          in: query
          required: false
          description: >-
            Filter results. Available filters: `is_current` (boolean, Limit to
            currently-effective records.), `title`, `title.neq`, `title.cont`
            (case-insensitive substring match), `title.in` (comma-separated
            list), `title.nin` (comma-separated list), `effective_from`,
            `effective_from.neq`, `effective_from.lt`, `effective_from.lte`,
            `effective_from.gt`, `effective_from.gte`, `track_type`,
            `track_type.neq`, `track_type.cont` (case-insensitive substring
            match), `track_type.in` (comma-separated list), `track_type.nin`
            (comma-separated list), `external_id`, `external_id.neq`,
            `external_id.cont` (case-insensitive substring match),
            `external_id.in` (comma-separated list), `external_id.nin`
            (comma-separated list), `effective_to`, `effective_to.neq`,
            `effective_to.lt`, `effective_to.lte`, `effective_to.gt` (null
            values are treated as unbounded above and match this filter),
            `effective_to.gte` (null values are treated as unbounded above and
            match this filter), `terminated_on`, `terminated_on.neq`,
            `terminated_on.lt`, `terminated_on.lte`, `terminated_on.gt`,
            `terminated_on.gte`, `percent_allocation` (number),
            `percent_allocation.neq` (number), `percent_allocation.lt` (number),
            `percent_allocation.lte` (number), `percent_allocation.gt` (number),
            `percent_allocation.gte` (number), `percent_allocation.in` (number,
            comma-separated list), `percent_allocation.nin` (number,
            comma-separated list), `appointment_type`, `appointment_type.neq`,
            `appointment_type.cont` (case-insensitive substring match),
            `appointment_type.in` (comma-separated list), `appointment_type.nin`
            (comma-separated list), `full_time` (boolean), `profile`, `rank`,
            `department`, `campus`, `campus.exists`. Custom fields can also be
            filtered with `filter[custom_fields.field_name]`.
          schema:
            type: string
        - name: page[size]
          in: query
          required: false
          description: Number of items per page (max 100)
          schema:
            type: integer
        - name: page[after]
          in: query
          required: false
          description: Cursor for next page
          schema:
            type: string
        - name: page[before]
          in: query
          required: false
          description: Cursor for previous page
          schema:
            type: string
      responses:
        '200':
          description: primary appointments found
          content:
            application/vnd.api+json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PrimaryAppointment'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
                  links:
                    $ref: '#/components/schemas/PaginationLinks'
                required:
                  - data
        '401':
          description: unauthorized
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearer_auth: []
components:
  schemas:
    PrimaryAppointment:
      type: object
      properties:
        id:
          type: string
          format: uuid
        type:
          type: string
          const: primary_appointment
          example: primary_appointment
        attributes:
          type: object
          properties:
            created_at:
              type: string
              format: datetime
            updated_at:
              type: string
              format: datetime
            custom_fields:
              type:
                - object
                - 'null'
            is_current:
              type: boolean
              description: True when the record is currently effective as of today.
            title:
              type: string
              example: Associate Professor
            effective_from:
              type: string
              example: '2025-01-01'
              format: date
            track_type:
              type:
                - string
                - 'null'
              example: Research
            external_id:
              type:
                - string
                - 'null'
              example: EMP001234
            effective_to:
              type:
                - string
                - 'null'
              example: '2026-01-01'
              format: date
            terminated_on:
              type:
                - string
                - 'null'
              example: '2026-12-31'
              format: date
            termination_note:
              type:
                - string
                - 'null'
              example: Resigned to accept position elsewhere
            percent_allocation:
              type:
                - number
                - 'null'
              example: 100
            appointment_type:
              type:
                - string
                - 'null'
            full_time:
              type:
                - boolean
                - 'null'
            note:
              type:
                - string
                - 'null'
              example: <div>This is a note with <strong>formatting</strong></div>
            note_as_plain_text:
              type:
                - string
                - 'null'
              example: This is a note with formatting
        relationships:
          type: object
          properties:
            profile:
              type: object
              properties:
                links:
                  type: object
                  properties:
                    related:
                      type: string
                      format: uri
                  required:
                    - related
                meta:
                  type: object
                data:
                  type: object
                  required:
                    - type
                    - id
                  properties:
                    type:
                      type: string
                      const: profile
                      example: profile
                    id:
                      type: string
                      format: uuid
              anyOf:
                - required:
                    - links
                - required:
                    - meta
                - required:
                    - data
            rank:
              type: object
              properties:
                links:
                  type: object
                  properties:
                    related:
                      type: string
                      format: uri
                  required:
                    - related
                meta:
                  type: object
                data:
                  type: object
                  required:
                    - type
                    - id
                  properties:
                    type:
                      type: string
                      const: rank
                      example: rank
                    id:
                      type: string
                      format: uuid
              anyOf:
                - required:
                    - links
                - required:
                    - meta
                - required:
                    - data
            department:
              type: object
              properties:
                links:
                  type: object
                  properties:
                    related:
                      type: string
                      format: uri
                  required:
                    - related
                meta:
                  type: object
                data:
                  type: object
                  required:
                    - type
                    - id
                  properties:
                    type:
                      type: string
                      const: department
                      example: department
                    id:
                      type: string
                      format: uuid
              anyOf:
                - required:
                    - links
                - required:
                    - meta
                - required:
                    - data
            campus:
              type: object
              properties:
                links:
                  type: object
                  properties:
                    related:
                      type:
                        - string
                        - 'null'
                      format: uri
                  required:
                    - related
                meta:
                  type: object
                data:
                  oneOf:
                    - type: object
                      required:
                        - type
                        - id
                      properties:
                        type:
                          type: string
                          const: campus
                          example: campus
                        id:
                          type: string
                          format: uuid
                    - type: 'null'
              anyOf:
                - required:
                    - links
                - required:
                    - meta
                - required:
                    - data
      required:
        - id
        - type
        - attributes
    PaginationMeta:
      type: object
      properties:
        page:
          type: object
          properties:
            size:
              type: integer
        total:
          type: integer
    PaginationLinks:
      type: object
      properties:
        self:
          type: string
        first:
          type: string
        next:
          type:
            - string
            - 'null'
        prev:
          type:
            - string
            - 'null'
        last:
          type:
            - string
            - 'null'
    Error:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
              title:
                type: string
              detail:
                type: string
            required:
              - status
              - title
      required:
        - errors
  securitySchemes:
    bearer_auth:
      type: http
      scheme: bearer
      bearerFormat: API Key

````