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

NORMASocial / Display
Ad unitPush notification, moment-triggeredBanner / feed interruption
When it firesUser's bet is live and at riskWhenever the algorithm decides
Delivery proofPublished after real campaign volumePlatform-reported averages
Audience signalActive wager / prediction positionInferred interest
PricingSecond-price Vickrey, transparent floorsOpaque, 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.

MomentWhen it firesFloor CPM
Bet ResolvedUser's wager settles$0.50
Prediction ResolvedPrediction market position resolves$0.60
OvertimeGame enters overtime$0.40
Close Game1-possession game in final minutes$0.35
Spread AlertScore crosses user's spread line$0.30
Moneyline AlertMoneyline bet momentum shift$0.30
Total AlertOver/under bet at decision point$0.25
Prop AlertPlayer prop approaching its line$0.25
Position AlertPrediction market position significant move$0.20
Foul TroubleKey starter picks up 4th foul$0.15
Follow AlertNotable 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

MCP Server

For AI agents

Claude, GPT-4o, Gemini, and any MCP-compatible agent can buy inventory directly.

npm install -g norma-ads-mcp
Claude Desktop config
{
  "mcpServers": {
    "norma-ads": {
      "command": "norma-ads-mcp",
      "env": {
        "NORMA_API_KEY": "your_api_key"
      }
    }
  }
}
REST API

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 →
AdCP / AAMP

For agentic platforms

AdCP-compatible discovery manifest. AAMP seller registration in progress.

# Discovery endpoint
GET /adagents.json
GET /.well-known/adagents.json
View adagents.json →

Get your first campaign running in 5 minutes

All commands are real. Copy-paste and substitute your credentials.

1

Register for an API account

Sign up at getnorma.app and navigate to Settings → API Access.

2

Generate OAuth credentials

Create a client in Settings → API Access. Save the client_secret — it's shown only once.

3

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"
4

Fetch moment types

curl "https://api.getnorma.app/api/ads/moment-types"
# Returns floor CPMs for all 11 moment types — no auth required
5

Create 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"
    }
  }'
6

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.