Guides

The OpenRTB endpoint

Send OpenRTB 2.6 auction requests to POST /ortb on your serving domain. Riptide resolves placements, evaluates eligible demand, and returns bids or a no-bid response. Responses include the x-openrtb-version: 2.6 header.

Request

Use OpenRTB when your bidder or wrapper already exchanges bid requests. This example offers a video placement with a duration of 5 to 30 seconds and a negotiated deal ID. Replace the sample placement and deal with your sandbox configuration to check whether eligible demand returns a bid with the expected creative and terms.

POST https://ads.acme.example/ortb
Content-Type: application/json
x-openrtb-version: 2.6

{ "id": "auction-1",
  "imp": [{ "id": "1", "tagid": "acme-preroll",
            "video": { "mimes": ["video/mp4"], "w": 1280, "h": 720, "minduration": 5, "maxduration": 30, "protocols": [2,3,7,8], "plcmt": 1 },
            "pmp": { "deals": [{ "id": "ACME-PG-2026" }] } }],
  "site": { "page": "https://publisher.example/", "publisher": { "id": "acme-pub" } },
  "device": { "ua": "Mozilla/5.0 ...", "ip": "203.0.113.10" },
  "tmax": 500 }
InboundHow Riptide reads it
imp.tagid / imp.ext.gpid / site,app pathPlacement key, in that order. An impression that cannot be served is skipped with a reason; the remaining impressions are processed.
banner, video, audio, native, pmp, qty, refresh, durfloorsOpenRTB 2.6 impression attributes. Native 1.2 requests include the requested event trackers in the response.
site, app, dooh, publisher, content, producer, network, channelInventory and content objects, including inventorypartnerdomain (2.5 fallback read as well).
device, geo, user, eids, data/segment (segtax)Device, geo and identity; seller-defined audiences become qualified segments ("<segtax>:<id>").
source.schain, regs (gdpr, us_privacy, gpp, coppa), user.ext.consentSupply-chain and privacy signals. OpenRTB 2.6 fields take precedence over equivalent 2.5 extension fields.
video.podid, slotinpod, maxseq, poddurImpressions sharing a podid are sent to demand as one pod, then combined after each impression’s auction.

Response

OutboundWhat it carries
seatbid.seatOne seatbid per buyer seat; the tenant's own seat for house and direct wins.
bid.impid, price, cur, dealidEchoes the imp; price in the request's currency; dealid when a preferred, guaranteed or private deal won.
bid.adm, mtype, dur, w, hVAST for video (mtype 2), markup for banner (1), Native 1.2 JSON for native (4); duration for video.
bid.adomain, cat, cattax, attr, apis, protocol, language, bundle, iurl, cid, crid, adid, slotinpodCreative metadata, all advertiser domains.
seatbid.group1 only when a pod slate from one seat must win or lose together.
bid.ext.dsa, ext.dchainBuyer transparency objects pass through.

Deals and seats

A deal id in imp.pmp.deals matches the tenant's deals (preferred, guaranteed or private, with flight, seats, domains and caps from the console or createDeal); a winning deal bid answers with bid.dealid. Seats are the buyer seats configured on demand partners; seat allow-lists on a private deal are enforced before the auction.

No-bid and loss codes

A no-bid with a reason code returns HTTP 200 with id and nbr. A no-bid without a reason code returns HTTP 204 with no body. Outbound loss notices use OpenRTB 3.0 loss codes. Riptide reserves 500 for a bid superseded by the long auction pass and 501 for a bid blocked by the supply-transparency policy.

nbrMeaning
0 - 17The standard list: unknown error, technical error, invalid request, known web crawler, suspected non-human, data-center IP, unsupported device, blocked publisher, unmatched user, daily user cap, daily domain cap, ads.txt unavailable, ads.txt violation, ads.cert unavailable, ads.cert violation, insufficient auction time, incomplete supply chain, blocked supply-chain node.
500Rejected by the request-rate or latency limit.
501Tenant data-residency region differs from this cell.
502Request-level audience gate did not match.

Check the integration

Run the conformance probe before connecting your wrapper's rendering and tracking code. It checks the response fields the wrapper needs to read.

riptide conformance ortb --serve https://ads.acme.example --pub acme-pub --tag acme-preroll

The probe posts a minimal 2.6 video request and checks the status, the version header, the echoed id and each bid's impid, VAST markup, and mtype. Customer checkouts also include header-bidding adapter examples under examples/headerbidding.

Request creative content as JSON

Use the Decision API when your application needs creative content and tracking URLs to render directly. The serving probe can help you check either protocol before connecting your renderer.