Teachworks Students API

List, retrieve, create, and update students - both child students belonging to a family and independent students. Set custom field values and retrieve per-student lesson totals. Student groups organize students for group lessons.

OpenAPI Specification

teachworks-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Teachworks API
  description: >-
    The Teachworks API is a REST API that lets Teachworks users build custom
    integrations against the data in their Teachworks account - customers
    (families and independent students), students, employees (teachers and
    staff), lessons and events, services, invoices, payments, and teacher wages.
    Teachworks is business management software for tutoring companies, music
    schools, and test-prep centers. The API is available on the Growth and
    Premium plans. All requests are made over HTTPS to
    https://api.teachworks.com/v1 and authenticated with an account API token
    passed in the Authorization header using the scheme
    "Authorization: Token token=API_TOKEN". Responses are JSON. List endpoints
    are paginated (20 records per page by default, up to 80 via per_page) and
    support field-based search and id range filters. The API is rate limited to
    4 requests per second per token. There is no native webhook or WebSocket
    surface; event-driven integrations are handled through Zapier, Make, and
    Integrately polling. All paths in this document are confirmed against the
    official Teachworks Postman API reference.
  version: '1.0'
  contact:
    name: Teachworks Support
    url: https://teachworks.com/addons/api
    email: support@teachworks.com
servers:
  - url: https://api.teachworks.com/v1
    description: Teachworks API
security:
  - tokenAuth: []
tags:
  - name: Locations
    description: Physical or virtual locations where lessons are delivered.
  - name: Services
    description: The billable services (lesson types) offered.
  - name: Wage Tiers
    description: Teacher wage tiers used to calculate pay.
  - name: Cost Premiums
    description: Cost premiums applied on top of base service rates.
  - name: Employees
    description: Teachers and staff, their status, earnings, and lesson totals.
  - name: Customers
    description: Billing accounts - families and independent students.
  - name: Students
    description: Child and independent students and their lesson totals.
  - name: Subjects
    description: Subjects taught.
  - name: Student Groups
    description: Groups of students for group lessons.
  - name: Lessons
    description: Scheduled lessons, participants, and completion.
  - name: Lesson Participants
    description: Per-student rows attached to a lesson.
  - name: Other Events
    description: Non-teaching calendar events.
  - name: Availabilities
    description: Employee availability windows.
  - name: Unavailabilities
    description: Employee unavailability windows.
  - name: Invoices
    description: Customer invoices.
  - name: Payments
    description: Customer payments.
  - name: Payment Allocations
    description: Allocations of payments to invoices.
  - name: Credit Note Allocations
    description: Allocations of credit notes to invoices.
  - name: Other Compensation
    description: Employee compensation outside of lesson wages.
  - name: Wage Payments
    description: Wage payments to employees.
  - name: Result Groups
    description: Groupings of student results.
  - name: Results
    description: Student progress results.
  - name: Repertoires
    description: Repertoire items (e.g. for music lessons).
paths:
  /locations:
    get:
      operationId: listLocations
      tags: [Locations]
      summary: List all Locations
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createLocation
      tags: [Locations]
      summary: Create a Location
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /locations/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getLocation
      tags: [Locations]
      summary: Retrieve a Location
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateLocation
      tags: [Locations]
      summary: Update a Location
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /services:
    get:
      operationId: listServices
      tags: [Services]
      summary: List all Services
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /services/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getService
      tags: [Services]
      summary: Retrieve a Service
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /wage_tiers:
    get:
      operationId: listWageTiers
      tags: [Wage Tiers]
      summary: List all Wage Tiers
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /wage_tiers/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getWageTier
      tags: [Wage Tiers]
      summary: Retrieve a Wage Tier
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /cost_premiums:
    get:
      operationId: listCostPremiums
      tags: [Cost Premiums]
      summary: List all Cost Premiums
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /cost_premiums/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getCostPremium
      tags: [Cost Premiums]
      summary: Retrieve a Cost Premium
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /employees:
    get:
      operationId: listEmployees
      tags: [Employees]
      summary: List all Employees
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createEmployee
      tags: [Employees]
      summary: Create an Employee
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /employees/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getEmployee
      tags: [Employees]
      summary: Retrieve an Employee
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateEmployee
      tags: [Employees]
      summary: Update an Employee
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /employees/{id}/earnings:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getEmployeeEarnings
      tags: [Employees]
      summary: Retrieve Employee Earnings
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /employees/{id}/lesson_totals:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getEmployeeLessonTotals
      tags: [Employees]
      summary: Retrieve Employee Lesson Totals
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /employees/{id}/set_status:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: setEmployeeStatus
      tags: [Employees]
      summary: Set Employee Status
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /employees/{id}/custom_fields:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: setEmployeeCustomFields
      tags: [Employees]
      summary: Set Custom Field Values
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /customers:
    get:
      operationId: listCustomers
      tags: [Customers]
      summary: List all Customers
      description: >-
        Returns customer profiles (family and independent student). Supports
        search by first_name, last_name, email, phone_number, city, state, zip,
        country, type (family or independent), and status (Active, Inactive,
        Prospective), plus id range filters and sort direction.
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
        - name: type
          in: query
          schema:
            type: string
            enum: [family, independent]
        - name: status
          in: query
          schema:
            type: string
            enum: [Active, Inactive, Prospective]
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /customers/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getCustomer
      tags: [Customers]
      summary: Retrieve a Customer
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateCustomer
      tags: [Customers]
      summary: Update a Customer (Family or Independent Student)
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /customers/{id}/lesson_totals:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getCustomerLessonTotals
      tags: [Customers]
      summary: Retrieve Customer Lesson Totals
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /customers/{id}/custom_fields:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: setCustomerCustomFields
      tags: [Customers]
      summary: Set Custom Field Values
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /customers/family:
    post:
      operationId: createFamily
      tags: [Customers]
      summary: Create a Family
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /customers/independent_student:
    post:
      operationId: createIndependentStudent
      tags: [Customers]
      summary: Create an Independent Student
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /students:
    get:
      operationId: listStudents
      tags: [Students]
      summary: List all Students
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createStudent
      tags: [Students]
      summary: Create a Child Student
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /students/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getStudent
      tags: [Students]
      summary: Retrieve a Student
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateStudent
      tags: [Students]
      summary: Update a Child Student
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /students/{id}/lesson_totals:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getStudentLessonTotals
      tags: [Students]
      summary: Retrieve Student Lesson Totals
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /students/{id}/custom_fields:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: setStudentCustomFields
      tags: [Students]
      summary: Set Custom Field Values
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /subjects:
    get:
      operationId: listSubjects
      tags: [Subjects]
      summary: List all Subjects
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /subjects/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getSubject
      tags: [Subjects]
      summary: Retrieve a Subject
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /student_groups:
    get:
      operationId: listStudentGroups
      tags: [Student Groups]
      summary: List all Student Groups
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /student_groups/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getStudentGroup
      tags: [Student Groups]
      summary: Retrieve a Student Group
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /lessons:
    get:
      operationId: listLessons
      tags: [Lessons]
      summary: List all Lessons
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createLesson
      tags: [Lessons]
      summary: Create a Lesson
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /lessons/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getLesson
      tags: [Lessons]
      summary: Retrieve a Lesson
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /lessons/{id}/add_student:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: addStudentToLesson
      tags: [Lessons]
      summary: Add Student to Lesson
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /lessons/{id}/complete:
    parameters:
      - $ref: '#/components/parameters/Id'
    put:
      operationId: completeLesson
      tags: [Lessons]
      summary: Complete a Lesson
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /lesson_participants:
    get:
      operationId: listLessonParticipants
      tags: [Lesson Participants]
      summary: List all Lesson Participants
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /lesson_participants/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getLessonParticipant
      tags: [Lesson Participants]
      summary: Retrieve a Lesson Participant
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /other_events:
    get:
      operationId: listOtherEvents
      tags: [Other Events]
      summary: List all Other Events
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /other_events/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getOtherEvent
      tags: [Other Events]
      summary: Retrieve an Other Event
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /availabilities:
    get:
      operationId: listAvailabilities
      tags: [Availabilities]
      summary: List all Availabilities
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /availabilities/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getAvailability
      tags: [Availabilities]
      summary: Retrieve an Availability
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /unavailabilities:
    get:
      operationId: listUnavailabilities
      tags: [Unavailabilities]
      summary: List all Unavailabilities
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /unavailabilities/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getUnavailability
      tags: [Unavailabilities]
      summary: Retrieve an Unavailability
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /invoices:
    get:
      operationId: listInvoices
      tags: [Invoices]
      summary: List all Invoices
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /invoices/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getInvoice
      tags: [Invoices]
      summary: Retrieve an Invoice
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /payments:
    get:
      operationId: listPayments
      tags: [Payments]
      summary: List all Payments
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createPayment
      tags: [Payments]
      summary: Create a Payment
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /payments/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getPayment
      tags: [Payments]
      summary: Retrieve a Payment
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updatePayment
      tags: [Payments]
      summary: Update a Payment
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /payment_allocations:
    get:
      operationId: listPaymentAllocations
      tags: [Payment Allocations]
      summary: List all Payment Allocations
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createPaymentAllocation
      tags: [Payment Allocations]
      summary: Create a Payment Allocation
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /payment_allocations/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getPaymentAllocation
      tags: [Payment Allocations]
      summary: Retrieve a Payment Allocation
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /credit_note_allocations:
    get:
      operationId: listCreditNoteAllocations
      tags: [Credit Note Allocations]
      summary: List all Credit Note Allocations
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /credit_note_allocations/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getCreditNoteAllocation
      tags: [Credit Note Allocations]
      summary: Retrieve a Credit Note Allocation
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /other_compensation:
    get:
      operationId: listOtherCompensation
      tags: [Other Compensation]
      summary: List all Compensation
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createOtherCompensation
      tags: [Other Compensation]
      summary: Create Other Compensation
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /other_compensation/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getOtherCompensation
      tags: [Other Compensation]
      summary: Retrieve Compensation
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /wage_payments:
    get:
      operationId: listWagePayments
      tags: [Wage Payments]
      summary: List all Wage Payments
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createWagePayment
      tags: [Wage Payments]
      summary: Create a Wage Payment
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /wage_payments/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getWagePayment
      tags: [Wage Payments]
      summary: Retrieve a Wage Payment
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateWagePayment
      tags: [Wage Payments]
      summary: Update a Wage Payment
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /result_groups:
    get:
      operationId: listResultGroups
      tags: [Result Groups]
      summary: List all Result Groups
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /result_groups/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getResultGroup
      tags: [Result Groups]
      summary: Retrieve a Result Group
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /results:
    get:
      operationId: listResults
      tags: [Results]
      summary: List all Results
      parameters:
        - $ref: '#/components/parameters/Page'
        - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          $ref: '#/components/responses/CollectionOk'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createResult
      tags: [Results]
      summary: Create a Result
      requestBody:
        $ref: '#/components/requestBodies/GenericJson'
      responses:
        '200':
          $ref: '#/components/responses/ResourceOk'
        '401':
        

# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/teachworks/refs/heads/main/openapi/teachworks-openapi.yml