> ## 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.

# Mark story air status

> PATCH /bulletins/{id}/stories/{story_id}/air

Body:
  airing_status  (str, required)  — "aired" | "not_aired"
  remarks        (str, optional)  — rundown note / reason not aired



## OpenAPI

````yaml /openapi/content.yaml patch /api/v1/bulletins/{id}/stories/{story_id}/air
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/{id}/stories/{story_id}/air:
    patch:
      tags:
        - Bulletins
      summary: Mark story air status
      description: |-
        PATCH /bulletins/{id}/stories/{story_id}/air

        Body:
          airing_status  (str, required)  — "aired" | "not_aired"
          remarks        (str, optional)  — rundown note / reason not aired
      operationId: bulletins_mark_air_status
      parameters:
        - in: path
          name: id
          schema:
            type: string
            format: uuid
          description: A UUID string identifying this Bulletin.
          required: true
        - in: path
          name: story_id
          schema:
            type: string
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedAirStoryRequest'
            examples:
              Aired:
                value:
                  airing_status: aired
                  remarks: Ran as planned
              NotAired:
                value:
                  airing_status: not_aired
                  remarks: Time constraint
                summary: Not aired
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedAirStoryRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedAirStoryRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bulletin'
              examples:
                BulletinResponse:
                  value:
                    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:
    PatchedAirStoryRequest:
      type: object
      description: Input for PATCH .../stories/{story_id}/air
      properties:
        airing_status:
          enum:
            - aired
            - not_aired
          type: string
          description: |-
            * `aired` - aired
            * `not_aired` - not_aired
          x-spec-enum-id: 39e68983a52ab35d
        remarks:
          type: string
          default: ''
    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>'

````