> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# MCC/MNC override model — how per-operator overrides layer onto rate resolution

> The per-(organization, operator) rate override record — one network bound to one fixed price, applied verbatim ahead of every markup rule — which send paths honor it, how to read override-versus-default pricing for a destination, the guarantees and limits, and when a change takes effect.

# MCC/MNC override model

[Pricing and rate resolution](/concepts/pricing-rate-resolution) describes
how a per-operator price is attributed. This page is the model behind its
strongest rule: the **per-(organization, operator) override** — a fixed
price your organization publishes for one mobile network, applied verbatim
ahead of every markup-based rule. Read this page before you manage
negotiated rates: it covers what an override record is, which send paths
honor it, where to read its effect, and the limits the write path enforces.
The task-level walkthrough (create, review, import, delete) lives in
[MCCMNC overrides](/guides/billing-mccmnc-overrides).

## The two pricing planes

Every priced destination exists on two planes at once:

* **Headline pricing** — the platform rate card: the published per-operator
  cost multiplied by a markup, plus the country-level ladder for generic
  channels. This plane is the same for every organization.
* **Effective pricing** — the headline number after your organization's
  own rules apply: a verbatim per-operator override first, then your
  organization-wide markup, then the platform default.

An operator needs both views. The headline plane is what a prospect or an
unauthenticated caller sees and what a sales conversation quotes. The
effective plane is what your wallet is actually charged, and the only plane
your reconciliation loop can rely on. Overrides are the mechanism that moves
a network from the headline plane onto your effective plane — the model on
this page is what guarantees the movement is exact, bounded, and auditable.

## Resolution background

When a send carries a resolved destination operator, a network lookup maps
the recipient's number to an MCC/MNC pair, and the pricing resolver runs the
[per-operator precedence](/concepts/pricing-rate-resolution): an override
row first, then operator cost × your organization's markup, then operator
cost × the platform default, then no published rate. Both the display path
(the rate card) and the charge path (the wallet debit) run the same ladder,
so a labeled row on the card names the rule you are billed under. The
override record below is the input to step one of that ladder. Voice lanes
resolve through the equivalent per-prefix ladder, so an override concept
applies to any channel whose lanes are keyed to a specific destination
network.

## The override record

An override is a single row binding:

* **Your organization** and **one mobile network** (the MCC/MNC pair, stored
  in canonical zero-padded form — MCC + MNC padded to three digits each, so
  the resolver's lookup key matches what you entered).
* **A fixed customer-facing price** — a `rate_per_unit` decimal and an
  ISO-4217 `currency`, plus optional `effective_from` / `effective_to`
  bounds and a `notes` field that carries the change-control reason.

One row per (organization, network) pair. Creating a second row for a pair
that is already overridden returns 409; update the existing row instead.

Two behaviors define the record:

1. **Precedence** — the resolver consults the override before any markup
   rule. The price is applied **verbatim**: the resolved customer price is
   the override rate, with no markup layered on top and no further ladder
   consulted. On the rate card that row reads `pricing_source:
   absolute_override`.
2. **Channel scope** — the public SMS surface (`GET
   /api/v1/pricing/mccmnc-rates` and `POST /api/v1/billing/mccmnc-overrides`)
   writes and reads SMS-scoped overrides. Per-channel resolution is
   explicit in the pricing model — an override bound to one channel never
   leaks into another — so an unauthorized channel match cannot reprice a
   send. Channels without a per-operator lane (the generic country-level
   ladder) never match an operator override at all, and per-channel
   wildcard markup overrides are a separate record class covered on the
   [rate-resolution page](/concepts/pricing-rate-resolution).

Manage the records through
[`POST /api/v1/billing/mccmnc-overrides`](/api-reference/billing) and its
list/update/delete siblings, or through **Billing → MCCMNC Overrides** in
the dashboard. Writes are role-gated to `owner` and `admin`; reads are open
to any member of your organization. Every write records the before/after
state and the stated reason to the pricing change trail.

## Reading the effective price

Three surfaces separate override from default pricing for a destination:

* **The SMS rate card** — `GET /api/v1/pricing/mccmnc-rates` returns one
  row per operator with a `pricing_source` label: `absolute_override` when
  a verbatim override supplies the price, `org_markup` or `default_markup`
  when a markup rule does, and `null` when no published rate exists. In the
  dashboard this renders under Billing → SMS rates.
* **The what-if simulator** — `POST /api/v1/pricing/whatif-simulate` replays
  a window of your own traffic against a candidate rate card, so you can
  size the delta an override will create before you commit it.
* **The cost estimate** — `GET /api/v1/pricing/estimate?channel=sms&to=…`
  previews the resolved per-unit rate for one destination, the same
  resolution the send path runs.

For a worked example of consuming the labeled rate card in a reconciliation
script, see the [MCCMNC overrides guide](/guides/billing-mccmnc-overrides).

## Guarantees and limits

* **Bound, never waived.** A write that lands a rate below the platform's
  active wholesale cost for that operator is rejected (422), so a below-cost
  override can never bill you less than Orbit pays upstream. A zero or
  negative rate is rejected at the form level — overrides bound a price,
  they never emit zero-cost sends. When no wholesale cost row exists for
  the operator, there is no oracle to compare against and the bound is
  skipped.
* **Estimate equals charge.** The billing estimate and the wallet debit run
  the same resolution ladder against the same override records, so a
  previewed price is the charged price. The reconciliation surfaces on
  [CDR export & billing reconciliation](/billing/cdr-export-billing-reconciliation)
  — per-call records and per-message usage counters — close that loop for
  your finance stack.
* **Tenant-scoped by construction.** Reads are pinned to your organization
  and writes to your organization's rows; cross-organization identifiers
  return an ordinary not-found rather than confirming a row exists.

## Change-management semantics

An override applies to the **next send priced after the write**. Create,
update, and delete all invalidate the cached override entry immediately, so
there is no cache window to wait out. Sends already in flight keep the rate
resolved when they priced — a later override change never rewrites an
established ledger row. Deleting an override reverts the network to the
markup planes from that point on, and the reverted-from rate stays on the
change trail for review.

## Related pages

* [Pricing and rate resolution](/concepts/pricing-rate-resolution) — the
  precedence ladder the override wins, and how the resolved price reaches
  the wallet.
* [MCCMNC overrides guide](/guides/billing-mccmnc-overrides) — the dashboard
  and API walkthrough for creating, reviewing, importing, and deleting
  override rows.
* [Rate cards](/billing/rate-cards) — the headline pricing surface overrides
  layer onto.
* [CDR export & billing reconciliation](/billing/cdr-export-billing-reconciliation)
  — the per-call and per-message records that reconcile the wallet against
  the resolved price.
* [Billing API reference](/api-reference/billing) — the endpoint schemas for
  the override list, create, update, and delete calls.
