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

# Post interview flow

> Create an interview flow. If team_id is not provided, defaults to the oldest team in the organization.



## OpenAPI

````yaml post /v1/interview-flows
openapi: 3.0.2
info:
  title: Ribbon API
  version: v1
  description: API for Ribbon
servers:
  - url: https://app.ribbon.ai/be-api/
  - url: https://staging.ribbon.ai/be-api/
security: []
tags:
  - name: Ribbon Public API
    description: ''
  - name: private_routes
    description: ''
paths:
  /v1/interview-flows:
    post:
      tags:
        - Ribbon Public API
      summary: Post interview flow
      description: >-
        Create an interview flow. If team_id is not provided, defaults to the
        oldest team in the organization.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostInterviewFlowsRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostInterviewFlowsResponse'
        '403':
          description: The team_id does not belong to authenticated organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: >-
            Unable to use file provided for company_logo_url or
            preamble_video_url. Or no teams found in organization. Or more than
            20 questions provided.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        default:
          $ref: '#/components/responses/DEFAULT_ERROR'
      security:
        - BearerAuth: []
components:
  schemas:
    PostInterviewFlowsRequest:
      type: object
      properties:
        org_name:
          type: string
          description: The name of the organization requesting the interview.
        title:
          type: string
          description: The title for the interview.
        questions:
          type: array
          description: >-
            A list of questions to include in the interview. Maximum 20
            questions.
          items:
            type: string
        voice_id:
          default: 11labs-Kate
          enum:
            - 11labs-Anna
            - openai-Onyx
            - openai-Shimmer
            - 11labs-Anthony
            - 11labs-Kate
            - 11labs-Amy
            - 11labs-Rahul
            - IPgYtHTNLjC7Bq7IPHrm
            - UOIqAnmS11Reiei1Ytkc
            - vUmLiNBm6MDcy1NUHaVr
            - bhJUNIXWQQ94l8eI2VUf
            - b3jcIbyC3BSnaRu8avEk
            - xF681s0UeE04gsf0mVsJ
            - uNsWM1StCcpydKYOjKyu
            - BGEU6wFi2uNm6Kje1Yhk
            - 4kCDY3HJwvO7Zp3con83
            - null
          description: The voice ID to be used for the interview agent.
          nullable: true
        language:
          default: en-US
          enum:
            - en-US
            - de-DE
            - es-419
            - hi-IN
            - ja-JP
            - pt-BR
            - fr-FR
            - zh-CN
            - ko-KR
            - vi-VN
            - th-TH
            - ar-AE
            - no-NO
            - null
          description: The language of the interview flow.
          nullable: true
        company_logo_url:
          type: string
          default: null
          description: >-
            Optional URL for the company's logo. If not provided, the Ribbon
            logo will be shown.
          nullable: true
        additional_info:
          type: string
          default: null
          description: >-
            Extra contextual information relevant to the interview. This can
            include background details, facts, or data points that the AI may
            use to enrich its questions or answers. For example: research focus,
            demographics or situational context.
          nullable: true
        additional_instructions:
          type: string
          default: null
          description: >-
            Guidelines on how the AI should behave during the interview. For
            example, adjust tone formality, avoid certain topics, or follow
            specific communication rules.
          nullable: true
        interview_type:
          default: general
          description: The type of interview.
          type: string
          enum:
            - recruitment
            - general
            - null
          nullable: true
        is_video_enabled:
          type: boolean
          default: false
          description: Whether the interview is video recorded or not.
          nullable: true
        is_doc_upload_enabled:
          type: boolean
          default: false
          description: >-
            Whether candidates can add resumes or other documents during the
            interview or not.
          nullable: true
        redirect_url:
          type: string
          default: null
          description: >-
            The URL where interviewee will be redirected after completing the
            interview. Make sure you're using the full URL, including https://
          nullable: true
        webhook_url:
          type: string
          default: null
          description: >-
            The URL that will be called after interview processing is complete.
            The payload will contain interview_flow_id, interview_id, and
            status.
          nullable: true
        webhook_secret_key:
          type: string
          default: null
          description: >-
            A secret key used to sign webhook payloads. When set, an
            X-Ribbon-Signature header containing an HMAC-SHA256 signature will
            be included with each webhook request.
          nullable: true
        intro:
          type: string
          default: null
          description: >-
            Introductory text spoken by the AI interviewer at the beginning of
            the interview.
          nullable: true
        outro:
          type: string
          default: null
          description: >-
            Concluding text spoken by the AI interviewer at the end of the
            interview.
          nullable: true
        team_id:
          type: string
          default: null
          description: >-
            The team ID to create the interview flow for. If not provided,
            defaults to the oldest team in the organization.
          nullable: true
        preamble_video_url:
          type: string
          default: null
          description: >-
            URL of an intro video to show candidates before the interview
            starts. The video will be downloaded and stored by Ribbon. Supported
            formats: MP4 (video/mp4), QuickTime (video/quicktime), WebM
            (video/webm). Maximum file size: 100 MB. The URL must be publicly
            accessible and served by a reasonably fast host — slow or unreliable
            servers may cause the request to time out. When provided, the intro
            video is automatically enabled for the interview flow.
          nullable: true
      required:
        - org_name
        - questions
        - title
      additionalProperties: false
    PostInterviewFlowsResponse:
      type: object
      properties:
        interview_flow_id:
          type: string
          description: The ID of the interview flow.
      required:
        - interview_flow_id
      additionalProperties: false
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
          description: The error message
        code:
          type: integer
          description: The status code
        status:
          type: string
          description: The status
      required:
        - code
        - message
        - status
      additionalProperties: false
    Error:
      type: object
      properties:
        code:
          type: integer
          description: Error code
        status:
          type: string
          description: Error name
        message:
          type: string
          description: Error message
        errors:
          type: object
          description: Errors
          additionalProperties: {}
      additionalProperties: false
  responses:
    DEFAULT_ERROR:
      description: Default error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: UUID
      description: >-
        Provide your API key UUID in the 'Authorization' header prefixed with
        'Bearer '.

        Example: 'Authorization: Bearer 123e4567-e89b-12d3-a456-426614174000'

````