Migration Guide: OpenRTB to Core API

This guide walks you through migrating from the legacy OpenRTB 2.6 interface to the Adlocaite Core API. The Core API provides better performance, more features, and a simpler integration model.

OpenRTB 2.6 is deprecated

The OpenRTB 2.6 interface is maintained for legacy compatibility only and will be phased out. All new integrations should use the Core API. Existing integrations should migrate at the earliest opportunity.


Why migrate?

The Core API was built specifically for DOOH advertising workflows and removes the limitations imposed by the OpenRTB protocol.

What you gain

  • Name
    Real-time offer control
    Description

    Accept or reject offers explicitly instead of relying on auction mechanics. You decide which ads run on your screens.

  • Name
    Lower latency
    Description

    Simple REST calls (GET/POST) instead of complex BidRequest/BidResponse serialization. No auction overhead.

  • Name
    Full feature set
    Description

    Access to playout tracking, billing codes, demo mode, VAST XML on demand, and external screen IDs.

  • Name
    Simpler integration
    Description

    Three endpoints instead of a full OpenRTB implementation. No VAST parsing required for basic integrations.

  • Name
    Better error handling
    Description

    Clear HTTP status codes and human-readable error messages instead of no-bid reason codes.

What changes

  • Name
    Protocol
    Description

    From OpenRTB 2.6 BidRequest/BidResponse to simple REST API (JSON).

  • Name
    Authentication
    Description

    Same Bearer token authentication -- no changes needed.

  • Name
    Screen identification
    Description

    From imp.tagid to path parameter. UUIDs recommended, external IDs supported.

  • Name
    Pricing
    Description

    From CPM-based bidfloor calculations to direct bid price in cents.

  • Name
    Creative delivery
    Description

    From mandatory VAST XML to direct asset URLs. VAST available optionally via ?vast=true.


Key differences

AspectOpenRTB 2.6 (Legacy)Core API
Request methodPOST with JSON bodyGET (offers) / POST (response, playout)
Screen IDimp[0].tagidURL path parameter
Pricing modelCPM bidfloor x totalaudDirect min_bid_cents
Auction typeFixed Price only (at=3)No auction -- direct offer/accept model
Creative formatVAST 4.0 XML (always)Direct asset URL (VAST optional)
Offer acceptanceImplicit (bid wins auction)Explicit accept/reject call
Playout trackingVia VAST tracking pixelsDedicated endpoint with metadata
No-match responseHTTP 204 or empty seatbid + NBR codeHTTP 404 with clear error message

Migration steps

Step 1: Map your screen identifiers

In OpenRTB, screens are identified via imp[0].tagid (External Screen ID). The Core API supports both UUIDs and external IDs:

  • If you have Adlocaite UUIDs: Use them directly in the path -- this is recommended for best performance
  • If you only have external IDs: Use the /external-id/ endpoint variant (see External Screen IDs)

Step 2: Replace the bid request with an offer request

Instead of constructing a full OpenRTB BidRequest, make a simple GET request:

Before vs. After

curl -X POST https://api.adlocaite.com/functions/v1/openrtb-2-6/bid \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "auction-12345",
    "imp": [{
      "id": "1",
      "tagid": "screen-ext-001",
      "video": {
        "mimes": ["video/mp4"],
        "w": 1920,
        "h": 1080
      },
      "pmp": {
        "deals": [{
          "id": "deal-001",
          "bidfloor": 2.50,
          "at": 3
        }]
      },
      "ext": {
        "totalaud": 119.47
      }
    }],
    "at": 3
  }'

Note the pricing difference: in OpenRTB, the minimum bid is calculated as (bidfloor x totalaud) / 10. In the Core API, you pass min_bid_cents directly.

Step 3: Handle the simpler response

The Core API returns a flat JSON object instead of the nested OpenRTB BidResponse:

Response comparison

{
  "id": "auction-12345",
  "seatbid": [{
    "bid": [{
      "id": "bid-uuid-12345",
      "impid": "1",
      "price": 2.50,
      "adm": "<?xml version=\"1.0\"?>...<VAST>...</VAST>",
      "dealid": "deal-001",
      "w": 1920,
      "h": 1080
    }]
  }],
  "cur": "EUR"
}

Step 4: Add explicit offer acceptance

This is the biggest workflow change. In OpenRTB, winning a bid implicitly means the ad will be shown. In the Core API, you must explicitly accept or reject offers:

Accept an offer

curl -X POST https://api.adlocaite.com/functions/v1/api/offers/response/[offer_id] \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "accept",
    "accepted_price_cents": 253
  }'

This returns a deal_id that you use for playout tracking.

Step 5: Implement playout tracking

Replace VAST tracking pixels with the dedicated playout confirmation endpoint:

Confirm playout

curl -X POST "https://api.adlocaite.com/functions/v1/api/playout/confirm/[deal_id]" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "played_at": "2025-10-10T14:30:00Z",
    "duration_seconds": 15,
    "completion_rate": 100
  }'

Endpoint mapping

  • Name
    POST /functions/v1/openrtb-2-6/bid
    Description

    Replaced by GET /functions/v1/api/offers/request/[screenId] -- Offers documentation

  • Name
    VAST tracking pixels
    Description

    Replaced by POST /functions/v1/api/playout/confirm/[dealId] -- Playout Tracking documentation

  • Name
    (No equivalent)
    Description

    New: POST /functions/v1/api/offers/response/[offerId] for explicit accept/reject -- Offers documentation


Request & response comparison

Field mapping

Use this table to map your existing OpenRTB field handling to the Core API:

  • Name
    BidRequest.imp[0].tagid
    Type
    string
    Description

    Maps to the [screenId] path parameter in the offer request URL.

  • Name
    BidRequest.imp[0].pmp.deals[0].bidfloor
    Type
    number
    Description

    Replaced by the min_bid_cents query parameter. Convert using: min_bid_cents = (bidfloor x totalaud) / 10.

  • Name
    BidResponse.seatbid[0].bid[0].price
    Type
    number
    Description

    Maps to bid_price_cents in the offer response (note: cents, not EUR).

  • Name
    BidResponse.seatbid[0].bid[0].adm
    Type
    string
    Description

    Replaced by asset_url for direct asset access. Use ?vast=true if you still need VAST XML.

  • Name
    BidResponse.seatbid[0].bid[0].dealid
    Type
    string
    Description

    No longer in the offer response. The deal_id is returned when you accept the offer.


Playout tracking

The Core API provides richer playout tracking compared to VAST tracking pixels:

FeatureOpenRTB (VAST pixels)Core API
ConfirmationFire-and-forget pixelPOST with response confirmation
Duration trackingNot availableduration_seconds
Completion rateNot availablecompletion_rate (0-100)
Player infoNot availableplayer_version, screen_resolution

See the full Playout Tracking documentation for details.


Testing your migration

The Core API provides built-in demo mode for testing without affecting production data.

Demo offer request

Request a demo offer

curl -X GET "https://api.adlocaite.com/functions/v1/api/offers/request/test-display-test" \
  -H "Authorization: Bearer YOUR_API_KEY"

Demo offer acceptance

Accept the demo offer

curl -X POST https://api.adlocaite.com/functions/v1/api/offers/response/test-offer-test \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "accept",
    "accepted_price_cents": 250
  }'

Demo playout confirmation

Confirm demo playout

curl -X POST "https://api.adlocaite.com/functions/v1/api/playout/confirm/test-deal-test" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "duration_seconds": 15,
    "completion_rate": 100
  }'

All demo endpoints return realistic responses without modifying any data. Use the Staging environment for integration testing with real API keys.

Need help migrating? Contact our integration team at support@adlocaite.com for assistance with your migration.

Was this page helpful?