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

# Create story

> Create a new {self.verbose_name}



## OpenAPI

````yaml /openapi/content.yaml post /api/v1/stories
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/stories:
    post:
      tags:
        - Stories
      summary: Create story
      description: Create a new {self.verbose_name}
      operationId: stories_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StoryRequest'
            examples:
              CreateStory:
                value:
                  title: Government announces new economic policy
                  location: Nairobi
                  summary: >-
                    The government has announced a sweeping new economic
                    policy...
                  category: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                  treatment: 4fa85f64-5717-4562-b3fc-2c963f66afa7
                  classification: national
                  estimated_duration: 120
                  urgency_level: high
                  submit_for_approval: false
                summary: Create story
              CreateRadioStory:
                value:
                  title: Flooding disrupts traffic in Mombasa Road
                  location: Nairobi
                  summary: Heavy rains have caused flooding along Mombasa Road...
                  category: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                  treatment: 4fa85f64-5717-4562-b3fc-2c963f66afa7
                  classification: breaking
                  platform: radio
                  assigned_reporter: 3c90c3cc-0d44-4b50-8888-8dd25736052a
                  bulletin: 5fa85f64-5717-4562-b3fc-2c963f66afa8
                  script: Good evening, this is the 7 o'clock news...
                  assets:
                    - asset_source: upload
                      asset: 6fa85f64-5717-4562-b3fc-2c963f66afa9
                      media_type: audio_track
                      tags:
                        - economy
                summary: Create radio story
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/StoryRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/StoryRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Story'
              examples:
                StoryResponse:
                  value:
                    id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                    reference: CT-2026-001
                    title: Government announces new economic policy
                    location: Nairobi
                    summary: >-
                      The government has announced a sweeping new economic
                      policy...
                    category: Politics
                    treatment: Package
                    estimated_duration: 120
                    urgency_level: high
                    status: pending
                    node: NODE_PITCH
                    created_at: '2026-05-27T08:00:00Z'
                    updated_at: '2026-05-27T08:00:00Z'
                    reporter:
                      id: 3c90c3cc-0d44-4b50-8888-8dd25736052a
                      name: James Wanjiru
                      employee_number: EMP-004
                  summary: Story response
          description: ''
      security:
        - bearerAuth: []
components:
  schemas:
    StoryRequest:
      type: object
      description: Basic story serializer for list views.
      properties:
        reference:
          type: string
          nullable: true
          description: Generated reference string
          maxLength: 30
        title:
          type: string
          minLength: 1
          description: The title of the story
          maxLength: 255
        location:
          type: string
          nullable: true
          description: The location of the story (city, region, etc)
          maxLength: 255
        summary:
          type: string
          minLength: 1
          description: The summary of the story
        category:
          type: string
          format: uuid
        treatment:
          type: string
          format: uuid
        classification:
          enum:
            - national
            - mashinani
            - breaking
            - ''
            - null
          type: string
          x-spec-enum-id: 8f2a424f5bae516e
          nullable: true
          description: >-
            Editorial classification of the story (national reach,
            mashinani/local, or breaking)


            * `national` - National

            * `mashinani` - Mashinani

            * `breaking` - Breaking
        platform:
          enum:
            - television
            - radio
            - ''
            - null
          type: string
          x-spec-enum-id: 562fafbd4b066458
          nullable: true
          description: |-
            Intended broadcast medium, set at story creation

            * `television` - Television
            * `radio` - Radio
        estimated_duration:
          type: string
          nullable: true
          description: Estimated duration for story completion
        urgency_level:
          enum:
            - low
            - medium
            - high
            - urgent
            - ''
            - null
          type: string
          x-spec-enum-id: a7d3359884510a2e
          nullable: true
          description: |-
            Story priority level

            * `low` - Low
            * `medium` - Medium
            * `high` - High
            * `urgent` - Breaking
        deadline:
          type: string
          format: date-time
          nullable: true
          description: Story deadline set by editor at pitch approval (node 3)
        submit_for_approval:
          type: boolean
          writeOnly: true
          default: false
          description: >-
            True to submit directly for editorial approval; False (default) to
            save as draft.
        assigned_reporter:
          type: string
          format: uuid
          nullable: true
          description: >-
            Reporter commissioned by an editor at creation. When set, the story
            skips pitch approval and starts directly at the morning outlook
            node, assigned to this reporter (assignment-desk flow).
        bulletin:
          type: string
          format: uuid
          writeOnly: true
          nullable: true
          description: >-
            Bulletin to place this story into immediately at creation. When set,
            a rundown slot (BulletinStory) is created for it as the last item in
            that bulletin's running order.
        script:
          type: string
          writeOnly: true
          description: >-
            Radio only. Broadcast script — when provided together with `assets`,
            the story is filed straight to the gallery at creation (same as the
            submit_script_and_assets transition).
        assets:
          type: array
          items:
            type: object
            additionalProperties: {}
          writeOnly: true
          description: >-
            Radio only. Audio clips to attach alongside `script` — same shape as
            the submit_script_and_assets transition payload: [{asset_source,
            asset|platform_url, platform_type, media_type, tags}, ...]
      required:
        - category
        - summary
        - title
        - treatment
    Story:
      type: object
      description: Basic story serializer for list views.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        reference:
          type: string
          nullable: true
          description: Generated reference string
          maxLength: 30
        title:
          type: string
          description: The title of the story
          maxLength: 255
        location:
          type: string
          nullable: true
          description: The location of the story (city, region, etc)
          maxLength: 255
        summary:
          type: string
          description: The summary of the story
        category:
          type: string
          format: uuid
        treatment:
          type: string
          format: uuid
        classification:
          enum:
            - national
            - mashinani
            - breaking
            - ''
            - null
          type: string
          x-spec-enum-id: 8f2a424f5bae516e
          nullable: true
          description: >-
            Editorial classification of the story (national reach,
            mashinani/local, or breaking)


            * `national` - National

            * `mashinani` - Mashinani

            * `breaking` - Breaking
        platform:
          enum:
            - television
            - radio
            - ''
            - null
          type: string
          x-spec-enum-id: 562fafbd4b066458
          nullable: true
          description: |-
            Intended broadcast medium, set at story creation

            * `television` - Television
            * `radio` - Radio
        estimated_duration:
          type: string
          nullable: true
          description: Estimated duration for story completion
        urgency_level:
          enum:
            - low
            - medium
            - high
            - urgent
            - ''
            - null
          type: string
          x-spec-enum-id: a7d3359884510a2e
          nullable: true
          description: |-
            Story priority level

            * `low` - Low
            * `medium` - Medium
            * `high` - High
            * `urgent` - Breaking
        deadline:
          type: string
          format: date-time
          nullable: true
          description: Story deadline set by editor at pitch approval (node 3)
        status:
          type: string
          readOnly: true
          description: Human-readable workflow status (cached from workflow engine)
        node:
          type: string
          readOnly: true
          nullable: true
          description: Current workflow node reference number (cached for performance)
        assigned_reporter:
          type: string
          format: uuid
          nullable: true
          description: >-
            Reporter commissioned by an editor at creation. When set, the story
            skips pitch approval and starts directly at the morning outlook
            node, assigned to this reporter (assignment-desk flow).
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        reporter:
          type: string
          readOnly: true
      required:
        - category
        - created_at
        - id
        - node
        - reporter
        - status
        - summary
        - title
        - treatment
        - updated_at
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Enter your JWT token in the format: Bearer <token>'

````