Skip to content

Provider rates ​

Settings → Provider rates. What each provider call costs, and what this account has set.

Requires provider_rate.view to read and provider_rate.manage to change.

Why it exists ​

Every provider call is recorded as a ProviderFetchRun. Until recently none of them recorded what it cost, so "what did onboarding this merchant cost us" had no answer — and a Wathq retry loop was invisible at 11 SAR a turn.

Rates were then transcribed into a Ruby constant, which meant a renegotiated price needed a deploy and a rate that changed mid-month could not be expressed at all. This screen is the answer to both.

Published, and yours ​

Verity ships the published rate sheet. A rate set here replaces it for this account, and the screen shows both:

Full commercial registration data | published 11.00 SAR | in effect 9.50 SAR [Your rate] | from 2026-08-17

Both numbers are shown deliberately. A screen showing only the effective rate leaves nobody able to tell a renegotiated 9.50 from a transcription error; one showing only the published rate would be a lie about what is pricing the runs.

Setting a rate records a new one ​

Setting a rate does not edit the old one. It records a new rate from a date, and the previous rate stays readable.

Why not just edit it

Cost is written onto each run when the run happens. A run priced last month keeps its amount — and if the rate it was priced under were overwritten, that stored number would become unexplainable.

Guarding against re-pricing on the run and then allowing it here would be pointless.

A rate dated in the future prices nothing until it arrives. Each row carries its own history: what it was, from when, who set it, and why.

Changing a rate is recorded in the audit trail with the previous value, because a trail saying a rate changed but not from what cannot answer why last month's total differs.

An unknown cost is blank, never zero ​

This is the rule the whole feature rests on, and this screen is where somebody types a number.

ChargedAn amount above 0
Nothing is chargedExactly 0 — a real zero, for a call that invoices nothing
Cost unknownBlank

Zero and blank are different claims

A cost nobody knows, recorded as 0.00, flows into a total that looks complete and reads low. It is the same failure as a screening that reports "clear" because nobody looked.

Enforced three times: the form does not default the field, the model explains the refusal in a sentence, and a check constraint guarantees it against a console or a future importer.

A blank amount also drops its currency — "SAR" beside an empty number reads as 0.00 SAR.

Six of the seventeen priceable calls have no known cost today: Focal screening, Wathq GOSI, Wathq related registrations, Elm digital ID, and Sijilat. Every total containing one is a floor, and says so.

Which "why" you can set ​

Only four of the eight bases can be configured:

Basis
positive_inquiryCharged at the rate
negative_inquiryCharged for a provider error
no_external_costGenuinely 0.00 — no biller exists
no_published_rateUnknown

The other four — the call never finished, it failed in a way no rate covers, nobody put it on a card, no call was made — are conclusions about one particular run, not properties of a rate. Offering them would invite recording a run's outcome as a price.

The override works both ways ​

  • You can price a call the shipped sheet does not price at all (Focal, Sijilat)
  • You can declare a call unknown that the sheet prices — and it will not fall back to our number, because you are saying you have never been billed the rate we wrote down

Failed calls ​

Held against the provider, not the service. Watheq bills a fixed 0.25 SAR for a 400 or 404 — a registration that came back not-found still costs money — and it bills the same whichever endpoint produced it, so pinning it to one service would be wrong and repeating it on each would be six copies of one number.

A configured failure rate still only applies to the statuses that mean the provider answered with a refusal. A 500, a timeout, or a request that never left the building stays unknown rather than being written down as free.

Subject-priced services ​

Elm charges by who is looked up: 3.96 SAR to verify a Saudi citizen, 3.12 for a resident. Those appear as separate rows, and a subject-specific rate you set overrides your own general one.

An identifier type matching neither prices as unknown rather than falling back to the cheaper of the two.

Where the cost shows up ​

  • Entity page — a "Cost of checks" section, totalling this merchant's calls including retries and failures, with the caveat attached to the number
  • Provider run page — the amount and its basis

A retry is a second invoice, so every call is counted. A reused screening made no new call and costs nothing.

The rate card ​

Confirmed against the Moyasar biller sheet. Full commercial registration and the company formation contract are 11.00 SAR each; national address 2.00; Neotek IBAN 0.30; Elm Yakeen 3.96 / 3.12.

RateCard::EFFECTIVE_ON dates runs priced from the shipped defaults. The sheet carries no printed effective date, so it is the transcription date — largely moot now that a configured rate carries its own.