NORMA for Agents and Platforms
The only ad inventory tied to a user's
active financial stake in a live game.
Second-price Vickrey auction. Fully programmable via MCP and REST API. Delivery metrics publish after real campaign volume.
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 |
| Delivery proof | Published after real campaign volume | Platform-reported averages |
| 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 |
|---|---|---|
| Bet Resolved | User's wager settles | $0.50 |
| Prediction Resolved | Prediction market position resolves | $0.60 |
| Overtime | Game enters overtime | $0.40 |
| Close Game | 1-possession game in final minutes | $0.35 |
| Spread Alert | Score crosses user's spread line | $0.30 |
| Moneyline Alert | Moneyline bet momentum shift | $0.30 |
| Total Alert | Over/under bet at decision point | $0.25 |
| Prop Alert | Player prop approaching its line | $0.25 |
| Position Alert | Prediction market position significant move | $0.20 |
| Foul Trouble | Key starter picks up 4th foul | $0.15 |
| Follow Alert | Notable moment for a followed team/player | $0.10 |
Floor CPMs are configured product rates. We do not publish CTR or CPA here until campaigns have real aggregate volume.
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 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 reporting
Early access — no placeholder delivery stats
Aggregate CTR and CPA by moment type will appear here after campaigns accumulate real volume. We do not show design-target percentages or empty zeros as proof.
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.