FreeWheel Media Demand Creative Management API V1 API

The Demand Creative Management API V1 API from FreeWheel Media — 5 operation(s) for demand creative management api v1.

Operations 8

GET /accounts/{account_id}/ads Retrieve All Creatives #
POST /accounts/{account_id}/ads Create a Creative #
GET /accounts/{account_id}/ads/{ad_id}/underlying_creatives Retrieve Underlying Creatives #
PUT /accounts/{account_id}/ads/{id} Update a Creative #
GET /accounts/{account_id}/deal_assignments Retrieve a Deal Assignment for a Creative #
POST /accounts/{account_id}/deal_assignments Assign a Creative to a Deal #
DELETE /accounts/{account_id}/deal_assignments Delete a Creative’s Deal Assignments #
GET /ads Retrieve All Creatives Without Account Id #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/freewheel-media-demand-creative-management-api-v1-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

freewheel-media-demand-creative-management-api-v1-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Demand Creative Management API V1 API
  contact: {}
  version: '1.0'
servers:
- url: https://api.freewheel.tv/demand/v1
tags:
- name: Demand Creative Management API V1
paths:
  /accounts/{account_id}/ads:
    get:
      security:
      - Bearer: []
      description: 'This method uses GET to retrieve all creatives that are part of an account (seat id) belonging to the requesting DSP.

        Note: The response code samples below include sellerid. However, there is a use case in which the sellerid is not returned.

        A response code that does not include sellerid receives approval on behalf of the seller from the global approvals network. So, the seller network is still the ultimate approver.

        Only one network ID providing approval is included in any response''s audit status object.'
      tags:
      - Demand Creative Management API V1
      summary: Retrieve All Creatives
      operationId: RetrieveAllCreatives
      parameters:
      - description: When you retrieve any resource in the Demand Creative Management API, you must specify accountid (your seatid) in the request URL.
        name: account_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.GetDemandAdReply'
    post:
      security:
      - Bearer: []
      description: 'This method POST to create a creative.

        **Notes:**

        * FreeWheel currently supports a maximum of 30 creative renditions per VAST creative at one query per second for both POST and PUT methods. To improve performance, if possible, keep creative renditions to fewer than ten.'
      tags:
      - Demand Creative Management API V1
      summary: Create a Creative
      operationId: CreateACreative
      parameters:
      - description: When you create any resource in the Demand Creative Management API, you must specify accountid (your seatid) in the request URL.
        name: account_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        $ref: '#/components/requestBodies/model.DemandAdList'
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/model.DemandAdResponse'
  /accounts/{account_id}/ads/{ad_id}/underlying_creatives:
    get:
      security:
      - Bearer: []
      description: This method uses GET to retrieve underlying creatives that belongs a demand ad.
      tags:
      - Demand Creative Management API V1
      summary: Retrieve Underlying Creatives
      operationId: RetrieveUnderlyingCreatives
      parameters:
      - description: When you retrieve underlying creatives of an ad, you must specify accountid (your seatid) in the request URL.
        name: account_id
        in: path
        required: true
        schema:
          type: string
      - description: When you retrieve underlying creatives of an ad, you must specify ad_id in the request URL.
        name: ad_id
        in: path
        required: true
        schema:
          type: string
      - description: offset
        name: offset
        in: query
        schema:
          type: integer
      - description: count
        name: count
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.GetDemandAdUnderlyingCreativeReply'
  /accounts/{account_id}/ads/{id}:
    put:
      security:
      - Bearer: []
      description: 'This method PUT to update a creative.

        **Notes:**

        * When you update your creative, its creative approval status is reset to pending if the seller requires creative review. It is recommended that you only update creatives when absolutely necessary and that you inform the seller prior to doing so.

        * FreeWheel currently supports a maximum of 30 creative renditions per VAST creative at one query per second for both POST and PUT methods. To improve performance, if possible, keep creative renditions to fewer than ten.'
      tags:
      - Demand Creative Management API V1
      summary: Update a Creative
      operationId: UpdateACreative
      parameters:
      - description: When you update any resource in the Demand Creative Management API, you must specify accountid (your seatid) in the request URL.
        name: account_id
        in: path
        required: true
        schema:
          type: string
      - description: id
        name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        $ref: '#/components/requestBodies/model.DemandAdList'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.DemandAdResponse'
  /accounts/{account_id}/deal_assignments:
    get:
      security:
      - Bearer: []
      description: This method uses GET to retrieve a deal assignment for a particular creative for a given Deal ID and Ad ID.
      tags:
      - Demand Creative Management API V1
      summary: Retrieve a Deal Assignment for a Creative
      operationId: RetrieveADealAssignmentForACreative
      parameters:
      - description: When you retrieve any resource in the Demand Creative Management API, you must specify accountid (your seatid) in the request URL.
        name: account_id
        in: path
        required: true
        schema:
          type: string
      - description: dealid
        name: dealid
        in: query
        required: true
        schema:
          type: integer
      - description: adid
        name: adid
        in: query
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.DemandAdAssignmentReply'
    post:
      security:
      - Bearer: []
      description: 'This method uses POST to assign a creative to a deal ID. You can assign the same creative to multiple deal IDs through this endpoint.

        **Note: You do not need to assign new creative IDs when you are extending a campaign. For example, if you extend an end date or add another flight schedule on the same campaign, you do not need new creative IDs. Creative IDs can be reused across programmatic deals.**'
      tags:
      - Demand Creative Management API V1
      summary: Assign a Creative to a Deal
      operationId: AssignACreativeToADeal
      parameters:
      - description: accountid
        name: account_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/model.DemandAdAssignment'
        description: Ad Assignment
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.DemandAdAssignmentReply'
    delete:
      security:
      - Bearer: []
      description: This method uses DELETE to remove a creative’s deal assignments for a given Deal ID and ad ID. This does not DELETE the actual creative from our system, but rather the association between deal ID and ad ID.
      tags:
      - Demand Creative Management API V1
      summary: Delete a Creative’s Deal Assignments
      operationId: DeleteACreativeDealAssignments
      parameters:
      - description: When you delete any resource in the Demand Creative Management API, you must specify accountid (your seatid) in the request URL.
        name: account_id
        in: path
        required: true
        schema:
          type: string
      - description: dealid
        name: dealid
        in: query
        required: true
        schema:
          type: integer
      - description: adid
        name: adid
        in: query
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: OK
  /ads:
    get:
      security:
      - Bearer: []
      description: This method uses GET to retrieve all creatives belonging to the requesting DSP.
      tags:
      - Demand Creative Management API V1
      summary: Retrieve All Creatives Without Account Id
      operationId: RetrieveAllCreativesWithoutAccountId
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.GetDemandAdReply'
components:
  schemas:
    model.DemandAd:
      type: object
      properties:
        accountid:
          type: string
        audit:
          type: array
          items:
            $ref: '#/components/schemas/model.DemandAdAudit'
        id:
          type: string
        init:
          type: string
        lastmod:
          type: string
        name:
          type: string
        video:
          $ref: '#/components/schemas/model.DemandAdCreativeVideo'
        warnings:
          type: array
          items:
            type: string
    model.UnderlyingCreative:
      type: object
      properties:
        audit:
          type: array
          items:
            $ref: '#/components/schemas/model.DemandAdAudit'
        externalcreativeid:
          type: string
        vastcontenturl:
          type: string
    model.DemandAdCreativeVideo:
      type: object
      properties:
        ctype:
          type: array
          items:
            type: integer
        curl:
          type: string
    model.DemandAdAudit:
      type: object
      properties:
        feedback:
          type: string
        init:
          type: string
        lastmod:
          type: string
        sellerid:
          type: string
        status:
          type: integer
        statusispartial:
          type: integer
    model.DemandAdAssignmentReply:
      type: object
      properties:
        adid:
          type: string
        deal:
          $ref: '#/components/schemas/model.AssignmentDeal'
        dealid:
          type: string
        id:
          type: integer
    model.DemandAdList:
      type: object
      properties:
        ads:
          type: array
          items:
            $ref: '#/components/schemas/model.DemandAd'
        count:
          type: integer
    model.DemandAdResponse:
      type: object
      properties:
        ads:
          type: array
          items:
            $ref: '#/components/schemas/model.DemandAd'
        count:
          type: integer
    model.GetDemandAdUnderlyingCreativeReply:
      type: object
      properties:
        count:
          type: integer
        offset:
          type: integer
        total:
          type: integer
        underlyingcreatives:
          type: array
          items:
            $ref: '#/components/schemas/model.UnderlyingCreative'
    model.AssignmentDeal:
      type: object
      properties:
        approvaltype:
          type: integer
        clearancelevel:
          type: integer
        dealid:
          type: string
        sellerid:
          type: array
          items:
            type: string
    model.DemandAdAssignment:
      type: object
      properties:
        adid:
          type: string
        dealid:
          type: string
    model.GetDemandAdReply:
      type: object
      properties:
        ads:
          type: array
          items:
            $ref: '#/components/schemas/model.DemandAd'
        count:
          type: integer
        offset:
          type: integer
        total:
          type: integer
  requestBodies:
    model.DemandAdList:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/model.DemandAdList'
      description: Ad List
      required: true
  securitySchemes:
    bearer:
      type: apiKey
      name: Authorization
      in: header
x-readme:
  explorer-enabled: true
  proxy-enabled: true