NORMA for Agents and Platforms
The only ad inventory tied to a user's
active financial stake in a live game.
12–18% CTR. Second-price Vickrey auction. Fully programmable via MCP and REST API.
Why NORMA is different
| NORMA | Social / Display | |
|---|---|---|
| Ad unit | Push notification, moment-triggered | Banner / feed interruption |
| When it fires | User's bet is live and at risk | Whenever the algorithm decides |
| Typical CTR | 12–18% | 0.05–0.2% |
| Audience signal | Active wager / prediction position | Inferred interest |
| Pricing | Second-price Vickrey, transparent floors | Opaque, algorithm-controlled |
Moment type inventory
11 moment types across NCAA basketball, NBA, NFL, and MLB. Each triggers only when the user has relevant financial exposure.
| Moment | When it fires | Floor CPM | Historical CTR |
|---|---|---|---|
| Bet Resolved | User's wager settles | $0.50 | 9–15% |
| Prediction Resolved | Prediction market position resolves | $0.60 | 11–17% |
| Overtime | Game enters overtime | $0.40 | 12–18% |
| Close Game | 1-possession game in final minutes | $0.35 | 7–13% |
| Spread Alert | Score crosses user's spread line | $0.30 | 6–10% |
| Moneyline Alert | Moneyline bet momentum shift | $0.30 | 5–9% |
| Total Alert | Over/under bet at decision point | $0.25 | 4–8% |
| Prop Alert | Player prop approaching its line | $0.25 | 4–8% |
| Position Alert | Prediction market position significant move | $0.20 | 3–7% |
| Foul Trouble | Key starter picks up 4th foul | $0.15 | 2–6% |
| Follow Alert | Notable moment for a followed team/player | $0.10 | 2–4% |
CTR ranges are based on product design targets. Realized rates will vary by creative quality and audience composition. Historical aggregate data will populate as campaigns run.
Integration paths
For AI agents
Claude, GPT-4o, Gemini, and any MCP-compatible agent can buy inventory directly.
npm install -g norma-ads-mcpClaude Desktop config
{
"mcpServers": {
"norma-ads": {
"command": "norma-ads-mcp",
"env": {
"NORMA_API_KEY": "your_api_key"
}
}
}
}For custom integrations
Full programmatic control for DSP integrations and custom buyers.
curl "https://api.getnorma.app/api/ads/moment-types" \
-H "Authorization: Bearer {token}"Full API Reference →For agentic platforms
AdCP-compatible discovery manifest. AAMP seller registration in progress.
# Discovery endpoint
GET /adagents.json
GET /.well-known/adagents.jsonView adagents.json →Get your first campaign running in 5 minutes
All commands are real. Copy-paste and substitute your credentials.
Register for an API account
Sign up at getnorma.app and navigate to Settings → API Access.
Generate OAuth credentials
Create a client in Settings → API Access. Save the client_secret — it's shown only once.
Get an access token
curl -X POST https://api.getnorma.app/api/auth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_SECRET&scope=campaigns:read campaigns:write reporting:read"Fetch moment types
curl "https://api.getnorma.app/api/ads/moment-types"
# Returns floor CPMs and CTR ranges for all 11 moment types — no auth requiredCreate a campaign
curl -X POST https://api.getnorma.app/api/ads/campaigns \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"name": "March Madness Push",
"moment_types": ["bet_resolved", "overtime"],
"sports": ["ncaa_basketball"],
"bid_cpm_usd": 0.80,
"daily_budget_usd": 50.00,
"total_budget_usd": 500.00,
"start_date": "2025-03-15",
"creative": {
"headline": "Your bet just went live",
"body": "Check the line before the final buzzer.",
"icon_url": "https://cdn.example.com/logo.png",
"action_url": "https://app.example.com/promo",
"cta_text": "Open App"
}
}'Pull performance after 24 hours
curl "https://api.getnorma.app/api/ads/reporting/campaigns/CAMPAIGN_ID?start_date=2025-03-15&end_date=2025-03-16" \
-H "Authorization: Bearer {token}"Performance benchmarks
Live data — populating as campaigns run
Aggregate CTR and CPA data by moment type will appear here as campaigns accumulate volume. The CTR ranges shown in the inventory table above reflect product design targets based on the intent signal model — users who receive a notification have an active financial stake in the triggering event.
For comparison: the industry average CTR for mobile app install ads is 0.5–1.0% (Facebook/Meta, 2024). NORMA's moment-triggered model targets 12–18% on the highest-intent moments (Bet Resolved, Overtime) by delivering at the exact second the user's financial outcome is being decided.
FAQ for platform integrators
Is this OpenRTB-compatible?▼
Not currently. NORMA uses its own REST API with a second-price Vickrey auction model. OpenRTB integration is on the roadmap for Q3 2025. If you need OpenRTB, contact ads@getnorma.app — we can discuss a DSP adapter.
How do I verify NORMA is an authorized seller in AAMP?▼
NORMA is registered in the IAB AAMP seller registry. Check getnorma.app/adagents.json for the agent discovery manifest. We also serve seller-domain verification at /.well-known/openapi.json.
What attribution partners are supported?▼
AppsFlyer, Adjust, Singular, and custom postback URLs via the GET /api/ads/postback endpoint. Pass your postback URL in the campaign's postback_url field. Conversions are attributed within a 7-day click window.
Can I use frequency capping?▼
Not via the API today. NORMA enforces platform-level frequency limits per user (max 5 alerts per game, 10 per hour) as a user experience requirement. Advertiser-controlled frequency capping is planned for v2.
What is the minimum campaign budget?▼
Minimum total budget is $10.00. Minimum daily budget is $5.00. There is no minimum contract — campaigns run pay-as-you-go until the total budget is exhausted or the end date is reached.
Ready to connect?
Talk to us about DSP integration, volume pricing, or custom moment types.