One request. An ad back. Five languages.

Ask for a placement, pass the user you already know, and optionally a few traits. Meridian Ads returns a creative to render, or nothing. Auth, identifiers, and the HTTP contract live in the docs.

5 SDKs
TypeScript through Android
One request
POST /v1/decision
Fail closed
Missing traits do not match

How an ad resolves without an auction.

No header-bidder cascade. The SDK asks once. Matching, review, and fill happen on that request. The long-form contract is in the docs, not on this page.

01 Ask for an ad

Ask for an ad

Your app names a placement, the user you already know, and any traits you already store.

One request

Same call in five languages

Ask for a placement, pass the user you already know, and optionally a few traits. Render what comes back, record the impression when it appears, and send clicks through the URL we give you.

import { MeridianAds } from '@meridianads/sdk'

const client = new MeridianAds({
  appKey: process.env.MERIDIAN_ADS_APP_KEY,
  secret: process.env.MERIDIAN_ADS_SECRET,
  // baseUrl: 'http://localhost:8090'
})

const decision = await client.serve('home_banner', 'user-42', {
  country: 'US',
  plan: 'pro'
})

if (!decision) {
  // HTTP 204: no paid or house fill
} else {
  await client.recordImpression(decision)
}

What you send

Traits you already have

A user id is required. New traits replace older values for the same keys. Do not put that id on the advertiser landing URL.

{
  "placement": "home_banner",
  "user_key": "user-42",
  "context": {
    "plan": "pro",
    "country": "US"
  }
}

Runtime properties

  • AuthSigned app request
  • Rate limit100 asks per second per app
  • No fillEmpty response
  • User id on landingNever

What this release does not include

v1 is prepaid CPM serving with a review gate. These layers stay out, so you do not have to design around them.

No auction
Paid creatives compete on budget, pacing, priority, and caps. Not a real-time bid.
No header bidding
One request from the app. No extra wrappers on the page.
No third-party tags
Image banners and native text only. No HTML5 or third-party scripts.
No click or conversion billing
You pay when the ad is shown. Clicks are counted. Conversions are out of billing.
No viewability standard
An impression counts when the SDK fires as the ad renders. House ads can fill gaps.
No tracking cookies
Matching uses the profile and this request. No cookie graph.

Get started

Ready to integrate?

Start with the identifier contract, then pick an SDK. Open the console when you need keys.