Pick the integration that matches the surface you already have.

A static page loads one script. An app or a server calls the same serve API through an SDK. Both return a creative to render.

Browser tag
Public token, no signature
Five SDKs
TypeScript, Go, Python, Swift, Android
House ads
Can fill past the frequency cap

Browser

A public token in the page.

A static page loads tag/v1.js and names each slot with data-meridian-placement. A page that already runs JavaScript imports the client, passes the same public web token, and renders into an element it already has. The tag also sends a first-party viewer id, the browser language, and a coarse device class. The HMAC secret is not in the page.

<script
  async
  src="https://meridianads.tech/tag/v1.js"
  data-token="mw_live_0123456789abcdef"
></script>
<aside data-meridian-placement="leaderboard"></aside>
<div data-meridian-placement="infeed"></div>
<div data-meridian-placement="infeed"></div>
Read the JavaScript guide

SDKs

One client. Three calls.

TypeScript, Go, Python, Swift, and Android call serve with a placement name, the user id you already have, and any traits you already store. Record the impression when you render. Open the click URL that comes back. The SDK signs the request with an app key and secret. Do not put that user id on the advertiser landing URL.

import { MeridianAds } from '@yellesoftware/meridian-ads'

const client = new MeridianAds({
  appKey: process.env.MERIDIAN_ADS_APP_KEY,
  secret: process.env.MERIDIAN_ADS_SECRET,
})

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)
}
See the SDKs

What both paths share

  1. 01

    You ask with a placement. You get a creative to render.

  2. 02

    A campaign that needs a trait you did not send does not match.

  3. 03

    Only a reviewed creative can fill. Paid fills first. A house ad from Yelle Software fills when nothing paid can, even past its frequency cap.

  4. 04

    A click is counted, then the browser continues to the landing. The user id does not travel.

Console actions and signed HTTP

Agents can run console actions through the hosted MCP at mcp.meridianads.tech. Serving still uses a web token or an SDK key.

Read the MCP guide

Signing HTTP yourself is documented. The SDKs are the supported way to call serve.

Read authentication

Get started

Ready to integrate?

A static site starts with a web token and the tag. An app starts with an SDK key.