Skip to main content

Set Up Dimensional Pricing

This guide walks you through implementing dimensional pricing for an AI call center that charges different rates based on region and call outcome.
What is dimensional pricing? Charge different rates for the same meter based on event properties like region, tier, or outcome. Learn more →

Prerequisites

  • A Monk account with dashboard access
  • Understanding of meters and pricing

What We’re Building

An AI call center product with rates that vary by:
DimensionValues
RegionUS, EU, APAC
Call Outcomeresolved, transferred, escalated
Example rates:
  • US resolved calls: $2.00
  • EU escalated calls: $7.50
  • Fallback (unknown combinations): $4.00

Step 1: Create a Meter with Dimensions

First, create a meter that tracks AI calls and groups by dimension keys.
  1. Open your Monk dashboard
  2. Go to Usage-basedMeters
  3. Click Create Meter

Configure the Meter

FieldValue
CodeAI_CALL
Display NameAI Calls
Event Nameai_call
AggregationSum
Aggregation Keyduration_minutes
Group Keysregion, call_outcome
Create Meter dialog with Group Keys field showing region and call_outcome
Group Keys define which event properties Monk uses to break down usage. These must match the property names in your events exactly.

Save the Meter

Click Save. Your meter is now ready to receive events with dimension properties.

Step 2: Create a Rate Card

Rate cards define prices for specific dimension combinations.
  1. Go to Usage-basedDimensional Rates
  2. Click Create dimensional rate

Select the Meter

Choose AI Calls as the meter this rate card applies to.
Rate Card creation showing meter selection dropdown

Add Rate Entries

Add entries for each dimension combination you want to price specifically:
RegionOutcomeRate
USresolved$2.00
UStransferred$4.00
USescalated$6.00
EUresolved$2.50
EUtransferred$5.00
EUescalated$7.50
APACresolved$3.00
APACtransferred$6.00
APACescalated$9.00
Rate Card table showing dimension combinations and rates
You don’t need to add every possible combination. Unmatched events use the fallback rate from the pricing configuration.

Save the Rate Card

Click Save. The rate card is now available to use in pricing.

Step 3: Create Pricing with the Rate Card

Now create a pricing configuration that uses your rate card.
  1. Go to Products and Plans
  2. Click Create Product (or edit an existing product)
  3. Add a Usage-based pricing

Configure Pricing

FieldValue
NameAI Call Pricing
MeterAI Calls
Pricing ModelPer Unit
Fallback Rate$4.00
Rate Card(select your rate card)
Create Pricing dialog with rate card selection
The Fallback Rate is used when an event’s dimension values don’t match any rate card entry. Set this to a sensible default.

Save the Pricing

Click Save. Your dimensional pricing is now ready to add to a plan.

Step 4: Add to a Plan

Add the pricing to a plan to make it available for contracts.
  1. Go to Products and Plans
  2. Select an existing plan or click Create Plan
  3. Click Add Pricing Item

Add the Pricing

  1. Select Usage-Based
  2. Choose AI Call Pricing
Add Pricing Item showing AI Call Pricing with dimensional rates

Save the Plan

Click Save. Customers on this plan will now be billed with dimensional rates.

Step 5: Send Events with Dimensions

Your application sends events with the dimension properties:
// When an AI call completes, send the usage event
await fetch('https://events-api.monk.com/v1/events', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer mk_live_your_api_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    customer_id: 'cust_123',
    event_name: 'ai_call',
    idempotency_key: `ai_call_${callId}`,
    properties: {
      region: 'US', // Dimension 1
      call_outcome: 'resolved', // Dimension 2
      duration_seconds: 180, // Additional metadata (not a dimension)
      agent_id: 'agent_456', // Additional metadata
    },
  }),
});
Property names must match exactly — If your rate card expects call_outcome but you send callOutcome, the event won’t match and will use the fallback rate.

Batch Events

For high-volume scenarios, use the batch endpoint:
await fetch('https://events-api.monk.com/v1/events/batch', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer mk_live_your_api_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    events: [
      {
        customer_id: 'cust_123',
        event_name: 'ai_call',
        properties: { region: 'US', call_outcome: 'resolved' },
      },
      {
        customer_id: 'cust_123',
        event_name: 'ai_call',
        properties: { region: 'EU', call_outcome: 'escalated' },
      },
      {
        customer_id: 'cust_456',
        event_name: 'ai_call',
        properties: { region: 'APAC', call_outcome: 'transferred' },
      },
    ],
  }),
});

Step 6: View Invoice Breakdown

When the billing period ends, the invoice shows each dimension combination as a separate line item:
Invoice showing separate line items for each region/outcome combination
Line ItemQtyRateAmount
AI Calls - US / Resolved60$2.00$120.00
AI Calls - US / Transferred30$4.00$120.00
AI Calls - US / Escalated10$6.00$60.00
AI Calls - EU / Resolved50$2.50$125.00
Total$425.00

Troubleshooting

Events Not Matching Rate Card

Symptom: All events are billed at the fallback rate. Check:
  1. Property names match exactly (case-sensitive)
  2. Property values match exactly (US vs us)
  3. The rate card is attached to the pricing
// ❌ Wrong - property names don't match rate card
properties: { Region: 'US', callOutcome: 'resolved' }

// ✅ Correct - exact match
properties: { region: 'US', call_outcome: 'resolved' }

Missing Dimension Properties

Symptom: Events without dimension properties use fallback rate. Solution: Ensure your application always sends the required properties:
// ❌ Missing call_outcome
properties: { region: 'US' }

// ✅ All dimensions present
properties: { region: 'US', call_outcome: 'resolved' }

Too Many Line Items

Symptom: Invoice has dozens of line items. Solution: Reduce the number of dimensions or consolidate dimension values:
  • Combine low-volume dimension values (e.g., APAC instead of JP, KR, AU)
  • Use fewer dimensions (1-2 is usually sufficient)

Next Steps

Dimensional Pricing Concepts

Design patterns and best practices

Events API

Send events with dimension properties

Create a Contract

Subscribe customers with dimensional pricing

Tiered Pricing

Combine dimensions with volume tiers