MCCMNC overrides
An MCCMNC override is a fixed per-carrier SMS rate for one mobile network (the MCC/MNC pair that identifies an operator, such as26201 for Deutsche Telekom). When an override exists, the pricing resolver applies it verbatim — no markup is layered on top, and it beats every markup-based rule on the pricing-rate-resolution precedence. That makes it the right tool for negotiated pricing: a specific carrier pricing exception, a corrected price for a remote-region network, or an enterprise contract rate that must hold per message, per carrier.
The dashboard surface is Billing → MCCMNC Overrides at /billing/mccmnc-overrides (the older /settings/billing/mccmnc path redirects there). The page lists every override you have published, supports search and country filters, and offers CSV import/export for bulk edits. It is role-gated to owner and admin.
1. What an override is — and when you need one
Each override binds one mobile network to one fixed customer-facing price: a(network, rate per unit, currency) triple, optionally with an effective window. The base SMS rates card is computed from operator cost plus markup — either your organization’s markup or the platform default. An override short-circuits that math for the networks you name: the resolver looks the override up first, and only when no override row exists for that network does it fall back to the markup-based price.
Reach for an override when:
- A carrier agreement gives you a negotiated per-message price for a specific network, and the markup-computed price would misstate it.
- A network in a remote region prices wrong under the default card and you need to correct it per operator.
- An enterprise customer needs a fixed rate quote that stays stable while the underlying cost moves.
2. Add or edit an override
Open Billing → MCCMNC Overrides and choose Create override, or pick the edit (pencil) action on an existing row. The form runs in two steps so a rate change is never committed from the edit fields alone:- Edit fields — in create mode, pick the country, then the network from the filtered list (or type the 5–6 digit MCCMNC code directly), and set the rate and currency. In edit mode the network is locked and only the rate, currency, and effective window can change. Review change advances to the review step without writing anything.
- Review and apply — the review step shows the exact change (the current → new rate for edits, the new rate for creates), requires a reason for the change, and requires you to confirm you have reviewed the billing impact. Apply rate change stays disabled until both hold. The reason is recorded to the audit trail alongside the old and new rate, so every change carries a who/why record.
(network, rate, currency) rows through the same review-and-apply gate, and Export CSV downloads the currently visible (filtered) rows in the same column shape, so an export → tweak → re-import round-trip is clean.
3. Remove an override
Choose the delete (trash) action on a row and confirm in the dialog. Deletion reverts the network to its markup-computed price from this point on — pricing resumes resolving under your organization’s markup or the platform default. Because the delete is a pricing change, it is recorded and the confirmation dialog states the revert explicitly. A failed delete (a permission rejection or a network error) surfaces an error toast rather than closing silently, so the row you still see is a row that still exists. Onlyowner and admin roles can create, edit, export, import, or delete overrides — the page and the API both gate on those roles.
4. Read the effect on delivered pricing
Before you commit an override, check what the customer-facing price becomes:- The SMS rates card under Billing (
GET /api/v1/pricing/mccmnc-rates) lists one row per operator with apricing_sourcelabel:absolute_overridewhen a verbatim override supplies the price,org_markupordefault_markupwhen a markup rule does, andnullwhen no published rate exists. A row labeledabsolute_overrideshows exactly the override rate — no markup on top. - The review step of the create/edit dialog shows the from → to diff before you apply, and the resolver treats the cached value as invalidated the moment the write lands, so the next send prices on the new number.
- For a what-if check across your whole card, the what-if pricing simulator replays your recorded usage through a candidate card and returns the per-lane delta — run it when a carrier exception touches a high-traffic destination.
org_markup or default_markup; there is no forced cache wait between the write and the next priced send.
5. Troubleshooting
These are the failures you can actually hit:- “No MCC/MNC networks are loaded yet” — the form offers no networks to pick, so it cannot accept a submit. Retry; if the list never loads, contact support before attempting the change.
- “Pick a network or enter a 5–6 digit MCCMNC” — free-typed codes must be 5–6 digits; the canonical form zero-pads the MNC, so a two-digit MNC is fine as long as the full code is 5–6 digits.
- “Enter a reason / confirm the billing impact” — the apply button is gated on both. A change with no stated reason is rejected, by design.
- Role rejection on write — if you are not an
owneroradmin, create/edit/import/delete calls fail the role gate. Reads still work for any member, so a colleague with a lower role can view the list but not touch it. - A delete that “did nothing” — because of the explicit error surface, a rejected delete (for example a permission error) shows a toast and keeps the row; if the row is still there after a delete attempt, treat the delete as failed, retry, and check the toast message.
6. Example: a BYON travel scenario
Bring-your-own-number setups often price a travel SIM’s home network wrong when the markup default under- or over-charges a small carrier. Suppose a customer’s travel service runs on a specific carrier in a remote country, and their contract quotes0.012 USD per message on that network — below what the markup-computed default would say.
- Open Billing → MCCMNC Overrides, choose Create override.
- Pick the country, select the carrier’s network from the filtered list (the MCCMNC code is shown beside the name), set rate
0.012, currencyUSD, and submit. - On the review step, state the reason — “BYON travel contract — fixed carrier rate” — confirm the billing impact, and apply.
- Check Billing → SMS rates: the row for that network now shows
pricing_source: absolute_overridewithyour_rate: 0.012— the verbatim rate, not the markup price.
Related pages
- Pricing and rate resolution — the precedence the override wins, and how the resolved price reaches the wallet.
- SMS rates and billing overview — the card that labels each row with its pricing source.
- What-if pricing simulator — back-test a candidate card against your recorded traffic before you commit.
- Billing API reference — the endpoint schemas for the override list, create, update, and delete calls.