Developer GuideDemand SourcesReporting & Analytics

Reporting & Analytics

Track your bid performance, spend, and creative efficiency from the dashboard or API.


Key metrics

MetricDefinition
Bid requestsAuction invitations sent to your endpoint (or evaluated against your Delegate strategy)
BidsResponses with a valid bid (price > floor)
WinsAuctions where your bid was the highest valid bid
ImpressionsWins where the creative was successfully rendered
Win rateWins / bid requests
SpendTotal clearing price paid across all wins (USD)
Avg CPM(Spend / impressions) × 1,000
Timeout rateRequests that exceeded 150ms before you responded
Circuit breaker opensTimes the circuit breaker paused requests to your endpoint

Dashboard — demand source (DSP) view

  1. Log in → Demand → click your demand source
  2. The overview shows: bid requests, win rate, spend, avg CPM — for the selected period
  3. Use the time period selector to view 1h, 6h, today, 24h, 7d, or 30d
  4. The Publisher Breakdown tab shows win rate and spend per publisher
  5. For Delegate demand sources, the Strategy Breakdown tab shows performance per rule

Dashboard data has a ~60-second lag. Live win rate updates every 5 seconds via WebSocket.


API — pull metrics programmatically

Demand source metrics

GET /api/demand/sources/{DSP_ID}/stats?period=24h
X-API-Key: {YOUR_KEY}

Response:

{
  "period": "24h",
  "dsp_id": "dsp-uuid",
  "bid_requests": 284500,
  "bids": 97200,
  "wins": 42100,
  "impressions": 41850,
  "win_rate": 0.1480,
  "spend_cents": 61983,
  "avg_cpm_cents": 1481,
  "timeout_rate": 0.0082,
  "p50_ms": 38,
  "p95_ms": 112
}

Demand source health

GET /api/demand/sources/{DSP_ID}/health
X-API-Key: {YOUR_KEY}

Response:

{
  "circuit_breaker": "closed",
  "timeout_rate_5m": 0.012,
  "error_rate_5m": 0.003,
  "avg_latency_ms": 42,
  "qps_current": 87,
  "qps_limit": 200,
  "daily_budget_remaining_cents": 14230
}

Circuit breaker states: closed (healthy), open (paused — too many timeouts), half_open (recovering).

Platform-wide metrics

GET /api/metrics?period=7d

Win rate — what it means

Win rate = wins / bid requests. This is not win rate relative to all bids — it includes no-bids (204 responses) as denominator.

Typical win rates:

  • Traditional RTB, competitive category: 5–20%
  • Delegate with targeted strategy: 15–40%
  • Delegate with match-all rule: 2–10% (floor competition)

Low win rate causes:

  • Bids below floor price → increase base_cpm
  • Geographic mismatch → your bids for geos you don’t serve still count as requests
  • Delegate conditions too narrow → widen targeting or add a fallback rule

Spend reconciliation

Praevis stores every auction in PostgreSQL with 90-day retention. For reconciliation:

  1. Request an audit export via [email protected]
  2. Export includes: auction ID, timestamp, publisher, clearing price, your bid
  3. Available as CSV or JSON

Revenue shown in the dashboard is in cents (USD × 100). Micro-dollar precision is used internally; cents are displayed for readability.


Billing

  • Cycle: Monthly (1st–last day of each calendar month, UTC)
  • Invoice: Emailed on the 5th of the following month
  • Currency: USD
  • Payment terms: Net 30 from invoice date
  • Minimum spend: None — minimum bid is set per pool

Contact [email protected] for invoice questions or consolidated billing.