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

# List bulletins

> Base model view set providing standardized CRUD operations and error handling.

This view set enforces consistent response formats, error handling patterns,
and logging across all API endpoints. Subclasses must override the class
variables below.



## OpenAPI

````yaml /openapi/content.yaml get /api/v1/bulletins
openapi: 3.0.3
info:
  title: Content Service API
  version: 1.0.0
  description: |2-

        **Content Service API** - Comprehensive content(story) and management system.
        
servers:
  - url: https://api.capedigital.co.ke/content
    description: Production
  - url: http://localhost:8000
    description: Local
security: []
paths:
  /api/v1/bulletins:
    get:
      tags:
        - Bulletins
      summary: List bulletins
      description: >-
        Base model view set providing standardized CRUD operations and error
        handling.


        This view set enforces consistent response formats, error handling
        patterns,

        and logging across all API endpoints. Subclasses must override the class

        variables below.
      operationId: bulletins_list
      parameters:
        - in: query
          name: category
          schema:
            type: string
          description: 'Filter by bulletin category: `news`, `sports`, or `business`.'
        - name: cursor
          required: false
          in: query
          description: The pagination cursor value.
          schema:
            type: string
        - in: query
          name: date
          schema:
            type: string
          description: Filter by scheduled air date, `YYYY-MM-DD`.
        - name: page_size
          required: false
          in: query
          description: Number of results to return per page.
          schema:
            type: integer
        - in: query
          name: platform
          schema:
            type: string
          description: 'Filter by broadcast platform: `television` or `radio`.'
        - in: query
          name: studio
          schema:
            type: string
          description: Filter by studio/station name (case-insensitive, partial match).
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedBulletinList'
              examples:
                BulletinResponse:
                  value:
                    next: http://api.example.org/accounts/?cursor=cD00ODY%3D"
                    previous: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3
                    results:
                      - id: 1fa85f64-5717-4562-b3fc-2c963f66afa1
                        platform: television
                        slot: evening
                        scheduled_at: '2026-05-27T19:00:00Z'
                        studio: Studio A
                        slot_duration: '00:30:00'
                        editor_on_duty:
                          id: 3c90c3cc-0d44-4b50-8888-8dd25736052a
                          name: John Doe
                          employee_number: EMP-001
                        head_of_news:
                          id: 4fa85f64-5717-4562-b3fc-2c963f66afa7
                          name: Jane Smith
                          employee_number: EMP-002
                        presenters:
                          - id: 5fa85f64-5717-4562-b3fc-2c963f66afa8
                            name: Peter Kamau
                            employee_number: EMP-003
                        report_status: draft
                        slots: []
                        created_at: '2026-05-27T10:00:00Z'
                        updated_at: '2026-05-27T10:00:00Z'
                  summary: Bulletin response
          description: ''
      security:
        - bearerAuth: []
components:
  schemas:
    PaginatedBulletinList:
      type: object
      required:
        - results
      properties:
        next:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?cursor=cD00ODY%3D"
        previous:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?cursor=cj0xJnA9NDg3
        results:
          type: array
          items:
            $ref: '#/components/schemas/Bulletin'
    Bulletin:
      type: object
      description: Mixin for serializers that need to resolve user IDs to user objects.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        platform:
          enum:
            - television
            - radio
          type: string
          x-spec-enum-id: 562fafbd4b066458
          description: |-
            Broadcast platform

            * `television` - Television
            * `radio` - Radio
        slot:
          enum:
            - morning
            - midday
            - afternoon
            - evening
            - late_night
            - breaking
          type: string
          x-spec-enum-id: c946736aa899c338
          description: |-
            Scheduled broadcast window

            * `morning` - Morning
            * `midday` - Midday
            * `afternoon` - Afternoon
            * `evening` - Evening
            * `late_night` - Late Night
            * `breaking` - Breaking
        category:
          enum:
            - news
            - sports
            - business
          type: string
          x-spec-enum-id: 66ae5be8ea000669
          default: news
          description: >-
            Editorial subject of this bulletin (distinct from slot, which is
            time-of-day)


            * `news` - News

            * `sports` - Sports

            * `business` - Business
        scheduled_at:
          type: string
          format: date-time
          description: Date and time the bulletin is scheduled to air
        studio:
          type: string
          description: Studio or broadcast location
          maxLength: 100
        slot_duration:
          type: string
          nullable: true
          description: >-
            Total editorial time allocated for this bulletin slot (e.g. 30
            minutes)
        editor_on_duty:
          type: string
          format: uuid
          nullable: true
          description: User ID of the editor managing this bulletin
        head_of_news:
          type: string
          format: uuid
          readOnly: true
          nullable: true
          description: User ID of the head of news who reviews the bulletin report
        presenters:
          type: array
          items:
            type: string
            format: uuid
          description: User IDs of the news presenters/anchors for this bulletin
        report_status:
          enum:
            - draft
            - signed_off
            - awaiting_review
            - reviewed
          type: string
          x-spec-enum-id: b4fb3143817d8e95
          readOnly: true
          description: |-
            Current state of the post-bulletin report

            * `draft` - Draft
            * `signed_off` - Signed Off
            * `awaiting_review` - Awaiting Review
            * `reviewed` - Reviewed
        headlines:
          type: string
          description: >-
            Top-of-bulletin headlines read by the presenter, as contenteditable
            HTML
        intro:
          type: string
          description: >-
            Bulletin-wide opening copy read by the presenter, as contenteditable
            HTML
        outro:
          type: string
          description: >-
            Bulletin-wide closing copy read by the presenter, as contenteditable
            HTML
        slots:
          type: array
          items:
            $ref: '#/components/schemas/BulletinSlot'
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      required:
        - created_at
        - head_of_news
        - id
        - platform
        - report_status
        - scheduled_at
        - slot
        - slots
        - updated_at
    BulletinSlot:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        story_id:
          type: string
          format: uuid
          readOnly: true
        order:
          type: integer
          maximum: 32767
          minimum: 0
          description: Position of this story within the bulletin rundown
      required:
        - id
        - order
        - story_id
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Enter your JWT token in the format: Bearer <token>'

````