TEGNA Premion OTT Advertising API

Premion is TEGNA's over-the-top (OTT) and connected TV (CTV) advertising platform, enabling advertisers to reach audiences across premium streaming services including Roku, Hulu, Amazon Fire TV, and other OTT platforms. The Premion API provides campaign creation, audience targeting, impression delivery, and performance reporting for streaming video advertising at local and national scale.

OpenAPI Specification

tegna-premion-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: TEGNA Premion OTT Advertising API
  description: >-
    The Premion OTT Advertising API enables programmatic access to TEGNA's
    over-the-top (OTT) and connected TV (CTV) advertising platform. Premion
    delivers targeted video ads across premium streaming services including
    Roku, Hulu, Amazon Fire TV, Apple TV, and other OTT platforms. The API
    supports campaign creation, audience targeting, creative management, and
    detailed streaming performance reporting.
  version: 1.0.0
  contact:
    url: https://premion.com/
  license:
    name: Proprietary
    url: https://premion.com/
servers:
  - url: https://api.premion.com/v1
    description: Premion OTT API - Production
paths:
  /campaigns:
    get:
      operationId: listOttCampaigns
      summary: List OTT Campaigns
      description: Retrieve OTT/CTV advertising campaigns.
      tags:
        - OTT Campaigns
      parameters:
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - active
              - paused
              - completed
              - draft
        - name: page
          in: query
          required: false
          schema:
            type: integer
            default: 1
      security:
        - apiKeyAuth: []
      responses:
        '200':
          description: A list of OTT campaigns.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OttCampaign'
        '401':
          description: Unauthorized.
    post:
      operationId: createOttCampaign
      summary: Create OTT Campaign
      description: Create a new OTT/CTV advertising campaign on Premion.
      tags:
        - OTT Campaigns
      security:
        - apiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OttCampaignCreate'
      responses:
        '201':
          description: OTT campaign created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OttCampaign'
        '400':
          description: Invalid campaign data.
  /campaigns/{campaignId}:
    get:
      operationId: getOttCampaign
      summary: Get OTT Campaign
      description: Retrieve details for a specific OTT campaign.
      tags:
        - OTT Campaigns
      parameters:
        - name: campaignId
          in: path
          required: true
          schema:
            type: string
      security:
        - apiKeyAuth: []
      responses:
        '200':
          description: OTT campaign details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OttCampaign'
        '404':
          description: Campaign not found.
  /campaigns/{campaignId}/performance:
    get:
      operationId: getOttCampaignPerformance
      summary: Get OTT Campaign Performance
      description: Retrieve streaming performance metrics for an OTT campaign.
      tags:
        - Reporting
      parameters:
        - name: campaignId
          in: path
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          required: false
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          required: false
          schema:
            type: string
            format: date
      security:
        - apiKeyAuth: []
      responses:
        '200':
          description: OTT campaign performance metrics.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OttPerformanceReport'
  /inventory:
    get:
      operationId: listOttInventory
      summary: List OTT Inventory
      description: Retrieve available OTT/CTV inventory across streaming platforms.
      tags:
        - Inventory
      parameters:
        - name: platform
          in: query
          description: Filter by streaming platform.
          required: false
          schema:
            type: string
            enum:
              - roku
              - hulu
              - amazon-fire-tv
              - apple-tv
              - samsung-tv
              - all
        - name: genre
          in: query
          description: Filter by content genre.
          required: false
          schema:
            type: string
      security:
        - apiKeyAuth: []
      responses:
        '200':
          description: Available OTT inventory.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OttInventory'
  /creatives:
    get:
      operationId: listCreatives
      summary: List Creatives
      description: Retrieve video creative assets for OTT campaigns.
      tags:
        - Creatives
      security:
        - apiKeyAuth: []
      responses:
        '200':
          description: A list of video creatives.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Creative'
    post:
      operationId: uploadCreative
      summary: Upload Creative
      description: Upload a new video creative asset for OTT advertising.
      tags:
        - Creatives
      security:
        - apiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreativeUpload'
      responses:
        '201':
          description: Creative uploaded successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Creative'
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
  schemas:
    OttCampaign:
      type: object
      description: A Premion OTT/CTV advertising campaign.
      properties:
        campaignId:
          type: string
        name:
          type: string
        status:
          type: string
          enum:
            - active
            - paused
            - completed
            - draft
        startDate:
          type: string
          format: date
        endDate:
          type: string
          format: date
        budget:
          type: number
          format: double
        targetPlatforms:
          type: array
          items:
            type: string
        targetGenres:
          type: array
          items:
            type: string
        impressionGoal:
          type: integer
        completionRateTarget:
          type: number
          format: double
    OttCampaignCreate:
      type: object
      required:
        - name
        - startDate
        - budget
      properties:
        name:
          type: string
        startDate:
          type: string
          format: date
        endDate:
          type: string
          format: date
        budget:
          type: number
          format: double
        targetPlatforms:
          type: array
          items:
            type: string
        targetGenres:
          type: array
          items:
            type: string
        impressionGoal:
          type: integer
    OttPerformanceReport:
      type: object
      description: Performance metrics for an OTT/CTV advertising campaign.
      properties:
        campaignId:
          type: string
        impressions:
          type: integer
        completions:
          type: integer
        completionRate:
          type: number
          format: double
          description: Video completion rate as a percentage.
        reach:
          type: integer
        frequency:
          type: number
          format: double
          description: Average frequency of exposure per unique viewer.
        spend:
          type: number
          format: double
        cpcv:
          type: number
          format: double
          description: Cost per completed view in USD.
        platformBreakdown:
          type: array
          items:
            type: object
            properties:
              platform:
                type: string
              impressions:
                type: integer
              completionRate:
                type: number
    OttInventory:
      type: object
      description: Available OTT/CTV advertising inventory.
      properties:
        inventoryId:
          type: string
        platform:
          type: string
        channel:
          type: string
        genre:
          type: string
        availableImpressions:
          type: integer
        cpm:
          type: number
          format: double
          description: Cost per thousand impressions (CPM) in USD.
    Creative:
      type: object
      description: A video creative asset for OTT advertising.
      properties:
        creativeId:
          type: string
        name:
          type: string
        duration:
          type: integer
          description: Video duration in seconds.
        format:
          type: string
          enum:
            - mp4
            - mov
            - webm
        resolution:
          type: string
          enum:
            - 1080p
            - 720p
            - 4K
        status:
          type: string
          enum:
            - approved
            - pending
            - rejected
        uploadedAt:
          type: string
          format: date-time
    CreativeUpload:
      type: object
      required:
        - name
        - videoUrl
        - duration
      properties:
        name:
          type: string
        videoUrl:
          type: string
          format: uri
          description: URL of the video file to upload.
        duration:
          type: integer
          description: Video duration in seconds.
        clickThroughUrl:
          type: string
          format: uri