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

# Record a student's daily attendance

> Record one student's attendance for one school day. Requires an access token from an API client with the attendance-daily scope (see Authentication). The student is matched by OneRoster identifier (student number), state identifier, or Scout student id. The attendanceCode accepts Scout status names or common letter codes (P, T, A, E, ET, LE). Writes are idempotent: re-sending an unchanged record is reported as a duplicate, and a changed status overwrites the day (last write wins). Tardy statuses record no late minutes (keeping any lateness staff already recorded on a tardy day); arrivalTime is stored on the day but not used to compute lateness.




## OpenAPI

````yaml /api-reference/openapi.json post /attendance/daily
openapi: 3.1.0
info:
  title: Scout API
  version: 1.0.0
  description: >-
    Programmatic access to Scout rostering data (IMS OneRoster 1.1 & 1.2) and
    related endpoints, authenticated with an API access token.
servers:
  - url: https://api.teachwithscout.com/v1
    description: Production
security: []
tags:
  - name: Access tokens
  - name: Attendance
  - name: Enrollment invitations
  - name: OneRoster 1.1
  - name: OneRoster 1.2
paths:
  /attendance/daily:
    post:
      tags:
        - Attendance
      summary: Record a student's daily attendance
      description: >
        Record one student's attendance for one school day. Requires an access
        token from an API client with the attendance-daily scope (see
        Authentication). The student is matched by OneRoster identifier (student
        number), state identifier, or Scout student id. The attendanceCode
        accepts Scout status names or common letter codes (P, T, A, E, ET, LE).
        Writes are idempotent: re-sending an unchanged record is reported as a
        duplicate, and a changed status overwrites the day (last write wins).
        Tardy statuses record no late minutes (keeping any lateness staff
        already recorded on a tardy day); arrivalTime is stored on the day but
        not used to compute lateness.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DailyAttendanceRecord'
      responses:
        '200':
          description: The attendance day was recorded, updated, or already current.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DailyAttendanceResult'
        '400':
          description: >-
            Invalid record - a missing or non-string field, unknown attendance
            code, malformed or future date, ambiguous student identifiers, a
            date inside a short-term independent study placement, or an attended
            status on a date covered only by a no-show enrollment or after a
            pending withdrawal request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    example: 400
                  message:
                    type: string
        '403':
          description: Forbidden - requires an API token, and in-person attendance enabled
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    example: 403
                  message:
                    type: string
        '404':
          description: No student matched the provided identifier
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    example: 404
                  message:
                    type: string
      security:
        - accessToken: []
components:
  schemas:
    DailyAttendanceRecord:
      type: object
      description: >-
        One student's attendance for one school day, reported by an attendance
        vendor.
      properties:
        studentId:
          type: string
          description: >-
            The student the record is for. Accepts the OneRoster identifier
            (student number), the state identifier (e.g. SSID), or the Scout
            student id (OneRoster sourcedId).
        date:
          type: string
          description: The school day, as YYYY-MM-DD. Must not be in the future.
        attendanceCode:
          type: string
          description: >-
            The day's attendance status. Accepts Scout status names
            (case-insensitive) — Present, Late, ExcusedLate, Absent,
            ExcusedAbsence, LeftEarly — or common letter codes: P, T/L (tardy),
            A, E/EA (excused absence), ET/TE (excused tardy), LE (left early).
        arrivalTime:
          type: string
          nullable: true
          description: >-
            When the student arrived, as 24-hour local time (HH:mm or HH:mm:ss)
            on the record's date, read as Pacific time. Stored as a timestamp
            and returned by the attendance reads; also used as the attendance
            log description when no comment is given. Not used to compute late
            minutes.
        comment:
          type: string
          nullable: true
          description: Free-text note, stored as the attendance log description.
      required:
        - studentId
        - date
        - attendanceCode
    DailyAttendanceResult:
      type: object
      description: Outcome of ingesting one daily-attendance record.
      properties:
        success:
          type: boolean
        status:
          type: string
          description: >-
            recorded — a new attendance day was written; updated — an existing
            day's status was overwritten (last write wins); duplicate — the day
            already held this status, nothing changed.
          enum:
            - recorded
            - updated
            - duplicate
        scoutStudentId:
          type: string
          description: The Scout id of the matched student.
        mappedStatus:
          description: The Scout status the attendanceCode mapped to.
          type: string
          enum:
            - Absent
            - ExcusedAbsence
            - ExcusedLate
            - Late
            - LeftEarly
            - Present
      required:
        - success
        - status
        - scoutStudentId
        - mappedStatus
  securitySchemes:
    accessToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Bearer access token from `POST /oauth/token` (OAuth 2.0 client
        credentials; the OneRoster `/ims/oneroster/v1p1/token` and `/v1p2/token`
        URLs are aliases). Send it as `Authorization: Bearer <access_token>`.
        Tokens expire after 1 hour and carry your API client's granted scopes —
        an endpoint outside them returns 403.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.