Pricing & Access Tiers¶
The seller agent implements a 4-tier identity-based pricing system. Buyers who reveal more about their identity unlock better pricing, volume discounts, and negotiation access. This page documents how tiers, pricing rules, volume discounts, and negotiation strategies work.
The 4-Tier Pricing System¶
| Tier | Discount | See Exact Prices | Can Negotiate | Volume Discounts | Custom Deals |
|---|---|---|---|---|---|
| PUBLIC | 0% | No (price shown as +/-20% range) | No | No | No |
| SEAT | 5% | Yes | No | No | Yes |
| AGENCY | 10% | Yes | Yes | Yes | Yes |
| ADVERTISER | 15% | Yes | Yes | Yes | Yes |
Tier Details¶
PUBLIC -- General product catalog. Buyers see price ranges (base CPM +/-20%).
No negotiation, no volume discounts, no custom deals. Avails granularity: high_level.
SEAT -- Authenticated DSP seat. Buyers see exact prices with a 5% discount
from base. Custom deals are enabled but negotiation and volume discounts are not.
Avails granularity: moderate.
AGENCY -- Agency-level pricing. 10% discount, full negotiation access,
volume discounts, premium inventory access. Avails granularity: detailed.
ADVERTISER -- Best available rates. 15% discount, full negotiation, volume
discounts, premium inventory, and custom deals. Avails granularity: detailed.
How Tier Is Determined¶
A buyer's effective tier is determined by the combination of their claimed identity and their agent trust status.
Step 1: Claimed Tier¶
The buyer provides identity fields via API key or request body:
seat_idalone -> SEAT tierseat_id+agency_id-> AGENCY tierseat_id+agency_id+advertiser_id-> ADVERTISER tier- No identity -> PUBLIC tier
Step 2: Trust Cap (for Agent-to-Agent)¶
When the buyer is an agent, the agent registry trust status sets a ceiling:
| Trust Status | Maximum Access Tier |
|---|---|
unknown |
PUBLIC |
registered |
SEAT |
approved |
ADVERTISER |
preferred |
ADVERTISER |
blocked |
Denied (403) |
Step 3: Effective Tier¶
The effective tier is the minimum of the claimed tier and the trust cap:
For example, if an agent claims ADVERTISER tier but its trust status is
registered (ceiling: SEAT), the effective tier is SEAT.
Pricing Calculation Flow¶
The PricingRulesEngine calculates final prices through these steps:
graph TD
A[Base CPM] --> B[Apply Tier Discount]
B --> C[Match Pricing Rules]
C --> D{Rules found?}
D -->|Yes, price override| E[Use override price]
D -->|Yes, discount| F[Apply rule discount]
D -->|No| G[Continue]
E --> H[Apply Volume Discount]
F --> H
G --> H
H --> I{Volume discounts enabled?}
I -->|Yes + volume > 0| J[Apply volume discount]
I -->|No| K[Enforce floor/ceiling]
J --> K
K --> L[Final Price]
Step-by-step:¶
- Start with product
base_cpm - Apply tier discount (0%, 5%, 10%, or 15%)
- Match pricing rules -- Rules can match by tier, agency ID, advertiser ID,
holding company, product ID, or inventory type. Rules are sorted by priority
(highest first). A
base_price_overrideon a rule takes precedence and stops further rule evaluation. - Apply volume discounts (if tier allows and volume > 0)
- Enforce floor/ceiling -- Global floor CPM (default: $1.00), global ceiling (if set)
Pricing Rules¶
Rules are matched against the buyer context and can specify:
| Field | Description |
|---|---|
access_tier |
Match specific tier only |
agency_ids |
Match specific agencies |
advertiser_ids |
Match specific advertisers |
holding_company_ids |
Match specific holding companies |
product_ids |
Match specific products |
inventory_types |
Match specific inventory types |
base_price_override |
Override the base price entirely |
discount_percentage |
Additional discount (0-1) |
price_floor |
Rule-specific floor |
price_ceiling |
Rule-specific ceiling |
volume_discounts |
Rule-specific volume discount brackets |
negotiation_enabled |
Whether negotiation is allowed under this rule |
max_negotiation_discount |
Maximum additional discount from negotiation |
When multiple rules match, their discounts are evaluated and the highest discount percentage is applied (not stacked).
Default Volume Discounts¶
Volume discounts apply when the buyer's tier has volume_discounts_enabled=True
(AGENCY and ADVERTISER tiers) and the buyer specifies an impression volume.
If no custom volume discount rules are configured, these defaults apply:
| Minimum Impressions | Discount |
|---|---|
| 50,000,000+ | 20% |
| 20,000,000+ | 15% |
| 10,000,000+ | 10% |
| 5,000,000+ | 5% |
Volume discounts are applied after tier and rule discounts.
Negotiation Strategy Per Tier¶
Each tier maps to a negotiation strategy with specific concession limits:
| Tier | Strategy | Max Rounds | Per-Round Concession Cap | Total Concession Cap | Buyer Gap Share |
|---|---|---|---|---|---|
| PUBLIC | AGGRESSIVE | 3 | 3% | 8% | 30% |
| SEAT | STANDARD | 4 | 4% | 12% | 40% |
| AGENCY | COLLABORATIVE | 5 | 5% | 15% | 50% |
| ADVERTISER | PREMIUM | 6 | 6% | 20% | 65% |
How Negotiation Works¶
- Negotiation starts from the tier-adjusted base price (base CPM minus tier discount)
- Each round, the buyer submits an offer
- The engine evaluates:
- Accept if the buyer's offer meets or exceeds the seller's last price
- Reject if the buyer's offer is below the absolute floor price
- Reject if the maximum number of rounds is exceeded
- Final offer if approaching the total concession cap (within 80%) or on the last round
- Counter otherwise, using gap-split:
counter = buyer_price + gap * (1 - buyer_gap_share)
- Each counter is clamped by the per-round concession cap and the total concession cap
- The counter never goes below the product floor price
Gap-Split Example (AGENCY Tier)¶
- Base price (after 10% tier discount): $31.50
- Buyer offers: $25.00
- Gap: $31.50 - $25.00 = $6.50
- Buyer share: 50%
- Seller concedes: $6.50 * 0.50 = $3.25
- Counter: $31.50 - $3.25 = $28.25
- Per-round cap check: 5% of $31.50 = $1.575 max drop... $3.25 exceeds cap
- Clamped counter: $31.50 - $1.575 = $29.93
Cross-Advertiser Pricing Consistency¶
The seller agent enforces consistent pricing for the same advertiser regardless
of which agency submits the request. This is controlled by the
advertiser_pricing_consistent flag (default: True).
When enabled:
- If Advertiser X gets a $28 CPM through Agency A, Agency B submitting for Advertiser X will see the same $28 CPM
- This prevents arbitrage and ensures advertiser-level pricing integrity
- The agency's own tier discount still applies to the base calculation
Price Display by Tier¶
| Tier | Display Format | Example (base $35 CPM) |
|---|---|---|
| PUBLIC | Range (+/-20%) | "$28 - $42 CPM" |
| SEAT | Exact (5% off) | "$33.25 CPM" |
| AGENCY | Exact (10% off) | "$31.50 CPM" |
| ADVERTISER | Exact (15% off) | "$29.75 CPM" |
Pricing Configuration Defaults¶
| Parameter | Default | Description |
|---|---|---|
global_floor_cpm |
$1.00 | Absolute minimum CPM |
global_ceiling_cpm |
None | No ceiling by default |
default_currency |
"USD" |
Currency for all pricing |
advertiser_pricing_consistent |
True |
Same advertiser = same price across agencies |
price_range_variance |
0.2 | +/-20% for PUBLIC tier ranges |
Current Limitations¶
Customization Roadmap
Currently, tier discounts, volume brackets, and negotiation limits are
code-level defaults in pricing_tiers.py and negotiation.py. A runtime
Pricing Rules API is planned to allow:
- Custom discount percentages per tier
- Per-agency or per-advertiser pricing overrides
- Custom volume discount brackets
- Adjustable negotiation concession limits
- Per-product floor/ceiling overrides
- Rule CRUD via REST API
- Time-bound rules (valid_from / valid_to)
- Rule priority management
See PROGRESS.md for roadmap status.