BidMachine Placement Management API

Lets publishers create, list, update and delete placements on the ad sources (apps) they own programmatically, without the dashboard. Authenticate with HTTP Basic (dashboard login and password) at POST /auth to obtain a short-lived bearer token; all placement operations are scoped to sources owned by the authenticated publisher (403 otherwise). Placement ids are generated server-side from name and bundle.

Operations 5

POST /auth Get Access Token #
GET /publisher/sources/{sourceId}/placements List Placements #
POST /publisher/sources/{sourceId}/placements Create Placement #
PUT /publisher/sources/{sourceId}/placements Update Placement #
DELETE /publisher/sources/{sourceId}/placements/{id} Delete Placement #

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/bidmachine-placement-management-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

bidmachine-io-placement-management-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: BidMachine Placement Management API
  version: 1.0.0
  description: "This API lets publishers create, list, update, and delete placements on their ad sources programmatically\
    \ — without using the BidMachine dashboard. Requirements:\n  - Bearer token authentication. Obtain a token via the __Get\
    \ Access Token__ endpoint using\n    your dashboard __login and password__.\n  - All operations are scoped to sources\
    \ owned by the authenticated publisher.\n    Requests for foreign sources return **403 Forbidden**.\nNote:\n  Tokens are\
    \ short-lived. When a request returns **401 Unauthorized**, re-authenticate\n  and retry with a fresh token.\n"
  x-apievangelist:
    source: https://developers.bidmachine.io/api/bidmachine-placement-management-api
    method: searched
    harvested: '2026-09-19'
    note: 'Assembled from the provider''s own compiled OpenAPI operation objects embedded in developers.bidmachine.io (docusaurus-plugin-openapi-docs).
      Every path, parameter, schema, response and security scheme is the provider''s; operationId, tags and summary were added
      by API Evangelist (see overlays/). Verbatim decoded objects: openapi/_original/.'
servers:
- url: https://api-eu.bidmachine.io/api/v1
tags:
- name: Authentication
- name: Placements
paths:
  /auth:
    post:
      operationId: getAccessToken
      summary: Get Access Token
      description: 'Returns a short-lived bearer token. Authenticate with HTTP Basic credentials — the same username and password
        used to log in to the dashboard. Use the returned token in all subsequent requests as `Authorization: Bearer <token>`.

        '
      tags:
      - Authentication
      responses:
        '200':
          description: Successful response with a bearer token.
          content:
            application/json:
              schema:
                type: object
                properties:
                  token:
                    type: string
                    description: Bearer token to use in subsequent requests.
                    example: eyJhbGci...
                  expires:
                    type: string
                    format: date-time
                    description: Token expiration time.
                    example: '2026-07-11T10:00:00Z'
        '401':
          description: Unauthorized – invalid or missing authentication credentials.
      security:
      - basicAuth: []
  /publisher/sources/{sourceId}/placements:
    get:
      operationId: listPlacements
      summary: List Placements
      description: 'Returns all placements for the given source.

        '
      tags:
      - Placements
      parameters:
      - in: path
        name: sourceId
        required: true
        schema:
          type: integer
        description: ID of the ad source (app) the placements belong to.
      responses:
        '200':
          description: Successful response with the list of placements.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Placement'
        '401':
          description: Unauthorized – missing or expired bearer token.
        '403':
          description: Forbidden – the authenticated publisher does not own the requested source.
      security:
      - bearerAuth: []
    post:
      operationId: createPlacement
      summary: Create Placement
      description: 'Creates a new placement on the given source. The placement `id` is generated server-side from the `name`
        and `bundle` fields — store it, you will need it for update and delete calls.

        '
      tags:
      - Placements
      parameters:
      - in: path
        name: sourceId
        required: true
        schema:
          type: integer
        description: ID of the ad source (app) the placements belong to.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlacementInput'
      responses:
        '201':
          description: Placement created. Returns the created placement including its generated `id`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Placement'
        '401':
          description: Unauthorized – missing or expired bearer token.
        '403':
          description: Forbidden – the authenticated publisher does not own the requested source.
        '409':
          description: Conflict – placement ID collision.
      security:
      - bearerAuth: []
    put:
      operationId: updatePlacement
      summary: Update Placement
      description: 'Updates an existing placement. Send the full placement object including its `id` — all fields are replaced.

        '
      tags:
      - Placements
      parameters:
      - in: path
        name: sourceId
        required: true
        schema:
          type: integer
        description: ID of the ad source (app) the placements belong to.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Placement'
      responses:
        '200':
          description: Placement updated. Returns the updated placement.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Placement'
        '401':
          description: Unauthorized – missing or expired bearer token.
        '403':
          description: Forbidden – the authenticated publisher does not own the requested source.
        '404':
          description: Not Found – no placement with that `id` exists on the given source.
        '409':
          description: Conflict – placement ID collision.
      security:
      - bearerAuth: []
  /publisher/sources/{sourceId}/placements/{id}:
    delete:
      operationId: deletePlacement
      summary: Delete Placement
      description: 'Deletes the placement with the given `id` from the source.

        '
      tags:
      - Placements
      parameters:
      - in: path
        name: sourceId
        required: true
        schema:
          type: integer
        description: ID of the ad source (app) the placements belong to.
      - in: path
        name: id
        required: true
        schema:
          type: string
        description: Placement ID returned by the create call.
      responses:
        '204':
          description: Placement deleted, no body.
        '401':
          description: Unauthorized – missing or expired bearer token.
        '403':
          description: Forbidden – the authenticated publisher does not own the requested source.
      security:
      - bearerAuth: []
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    bearerAuth:
      type: http
      scheme: bearer
  schemas:
    PlacementInput:
      type: object
      required:
      - name
      - platform
      - bundle
      - adType
      - placementType
      - hva
      properties:
        name:
          type: string
          description: Human-readable placement name.
          example: Main Banner
        platform:
          type: string
          enum:
          - android
          - ios
          description: Platform the placement is created for.
          example: android
        bundle:
          type: string
          description: 'App bundle ID. Android bundle name should be in the format `com.example.app`, while iOS bundle should
            be the numeric store ID (e.g. `123456789`).

            '
          example: com.example.app
        adType:
          type: string
          enum:
          - banner
          - interstitial
          - rewarded
          - native
          description: Ad type of the placement.
          example: banner
        placementType:
          type: string
          enum:
          - bidding
          - waterfall
          description: 'Method of ad serving. Use `bidding` for real-time auction or `waterfall` for sequential requests by
            priority.

            '
          example: bidding
        hva:
          type: boolean
          description: High-value audience flag.
          example: false
        pricefloor:
          type: number
          format: float
          description: Minimum CPM in USD. Omit to set no floor.
          example: 0.5
    Placement:
      allOf:
      - type: object
        required:
        - id
        properties:
          id:
            type: string
            description: 'Unique placement ID generated server-side on creation. Required for update and delete calls, and
              referenced in your SDK and mediation console setup.

              '
            example: dGVzdC1pZA
      - $ref: '#/components/schemas/PlacementInput'