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

# List lesson plans

> List the lesson plans created with your account, with each plan's latest step and status.

The list only includes lesson plans created with the same API user as your access token. Results are newest first.

## Filter by your own fields

Any query parameter other than `page` and `page_size` filters on the `meta_data` you sent when starting the lesson plan. For example, if you started lesson plans with `meta_data={"teacher_id": "T-1042"}`:

```bash theme={null}
curl "https://api.crazygoldfish.com/lesson-plan/v1/listing?teacher_id=T-1042" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```

A parameter that doesn't match a `meta_data` key returns an empty list, not an error.

## Reading progress

`current_stage` is the furthest step that has started, and `status` is that step's status:

| `current_stage`                   | Step                                                                                                          |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `Lesson Plan Initiated`           | [Start a lesson plan](/api-reference/endpoint/lesson-plan/v1-meta-data-post)                                  |
| `Finalize Metadata`               | [Finalize lesson plan metadata](/api-reference/endpoint/lesson-plan/v1-finalize-metadata-post)                |
| `Instructional Framework Builder` | [Build lesson plan content](/api-reference/endpoint/lesson-plan/v1-instructional-framework-builder-post)      |
| `Additional Enrichment Block`     | [Add lesson plan enrichment blocks](/api-reference/endpoint/lesson-plan/v1-additional-enrichment-blocks-post) |

<Note>
  `current_stage` is `null` until the first job creates its step, which is also when the lesson plan first appears with a step to report. Until then, `status` is the lesson plan's own status, `In Progress`.
</Note>


## OpenAPI

````yaml GET /lesson-plan/v1/listing
openapi: 3.0.3
info:
  title: Lesson Plan Builder API
  version: 1.0.0
  description: >-
    Turn a topic, a photographed textbook page, or a recording into a full
    lesson plan, with a teacher review step between each stage.
servers:
  - url: https://api.crazygoldfish.com
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Lesson Plan
paths:
  /lesson-plan/v1/listing:
    get:
      tags:
        - Lesson Plan
      summary: List lesson plans
      description: >-
        Returns lesson plans created with your account, newest first, with each
        plan's latest step and its status. To filter by a `meta_data` field, add
        it as a query parameter, for example `?teacher_id=T-1042`.
      operationId: listLessonPlans
      parameters:
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
          description: Page number, starting at 1.
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 10
          description: Items per page. Maximum 100.
      responses:
        '200':
          description: A page of lesson plans.
          content:
            application/json:
              schema:
                type: object
                properties:
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                      page_size:
                        type: integer
                      total:
                        type: integer
                      total_pages:
                        type: integer
                      has_next:
                        type: boolean
                      has_previous:
                        type: boolean
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                        board:
                          $ref: '#/components/schemas/IdName'
                        grade:
                          $ref: '#/components/schemas/IdName'
                        section:
                          type: string
                          nullable: true
                        subject:
                          $ref: '#/components/schemas/IdName'
                        topic:
                          type: string
                          nullable: true
                        duration_minutes:
                          type: integer
                        documents:
                          type: array
                          items:
                            type: string
                            format: uri
                        audio:
                          type: string
                          format: uri
                          nullable: true
                        current_stage:
                          type: string
                          nullable: true
                          enum:
                            - Lesson Plan Initiated
                            - Finalize Metadata
                            - Instructional Framework Builder
                            - Additional Enrichment Block
                          description: >-
                            The furthest step that has started. `status` is that
                            step's status.
                        status:
                          $ref: '#/components/schemas/JobStatus'
                        meta_data:
                          type: object
                          description: >-
                            The `meta_data` you sent when starting the lesson
                            plan.
                        created_at:
                          type: string
                          format: date-time
              example:
                pagination:
                  page: 1
                  page_size: 10
                  total: 1
                  total_pages: 1
                  has_next: false
                  has_previous: false
                data:
                  - id: 7d2f1b90-4c6a-4f3e-b1d7-9a5e2c8f0b34
                    board:
                      id: baf36573-d049-4636-9c4b-bc9cda6270fe
                      name: CBSE
                    grade:
                      id: 28820b1a-34e1-4003-b5bd-96455ca2c6d8
                      name: Grade 10
                    section: A
                    subject:
                      id: 6dd7ebda-1bc5-4c01-8649-372579189073
                      name: Science
                    topic: Magnetic Effects of Electric Current
                    duration_minutes: 45
                    documents: []
                    audio: null
                    current_stage: Instructional Framework Builder
                    status: Completed
                    meta_data:
                      teacher_id: T-1042
                    created_at: '2026-09-17T10:42:18.512000'
        '401':
          description: >-
            The `Authorization` header is missing or invalid, or the token isn't
            tied to a user.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/AuthError'
                  - $ref: '#/components/schemas/Error'
              examples:
                missing:
                  summary: Missing header
                  value:
                    message: Authorization header is missing
                    data: {}
                    status: ''
                no_user:
                  summary: Token has no user
                  value:
                    detail:
                      - msg: User not authenticated.
        '422':
          description: '`page` or `page_size` is out of range.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                detail:
                  - type: less_than_equal
                    loc:
                      - query
                      - page_size
                    msg: Input should be less than or equal to 100
                    input: '500'
        '500':
          description: >-
            Something went wrong on our side. Retry the request, and contact
            CrazyGoldFish if it keeps failing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                detail:
                  - msg: Something went wrong. Please try again.
components:
  schemas:
    IdName:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
    JobStatus:
      type: string
      enum:
        - In Progress
        - Completed
        - Failed
      description: >-
        Status of the step. Most GET endpoints return a `Failed` step as HTTP
        400. [Get lesson plan
        content](/api-reference/endpoint/lesson-plan/v1-instructional-framework-builder-get)
        returns it as HTTP 200, so always read `status`.
    AuthError:
      type: object
      properties:
        message:
          type: string
        data:
          type: object
        status:
          type: string
    Error:
      type: object
      properties:
        detail:
          type: array
          items:
            type: object
            properties:
              msg:
                type: string
                description: What went wrong.
              id:
                type: string
                format: uuid
                description: Present when a step failed.
              status:
                type: string
                description: Present when a step failed.
              loc:
                type: array
                items:
                  type: string
                description: Present on request validation errors.
              type:
                type: string
                description: Present on request validation errors.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Access token from [Get an access
        token](/api-reference/endpoint/authentication).

````