License types
What is counted
A call counts as one message when both of the following are true:
- the call is chargeable - see Free calls;
- the call succeeded - a JSON response whose
statusis notSuccessis not counted (a non-JSON response such as a PDF or a CSV file counts as successful).
Every chargeable call costs exactly one message, whatever it does.
Free calls
These calls are never counted and never refused for quota:
- discovery and self-description - the list of operations, what an operation does, who am I;
- reading and writing memory records;
- session handling, such as approving a session source;
- incoming webhook calls;
- reading change-log history and restoring field values.
They are free only when they belong to a Bifröst application from Origo. An operation that another publisher's app adds is chargeable whatever it does. Free calls still need the approved EULA - see Before the first call.
Two pools
Messages are counted in two pools, according to who made the call:
| Pool | Consumed by |
|---|---|
| User | Calls made under a normal user - interactive or web service. |
| App Registration | Calls made by a Microsoft Entra application (service principal). |
Charge types on Subscription
On Subscription each message is also recorded with a charge type, so that your regular usage can be told apart from work done by your Partner. Every user's charge type is shown in the Charge Type column of Bifrost User Setup. The first rule that matches wins:
| Charge type | The user is |
|---|---|
| Support | a Partner's user working in your tenant through a delegated partner plan (Delegated Admin, Delegated Helpdesk, Dynamics 365 Admin Partner or Delegated BC Admin) |
| App Registration | a Microsoft Entra application (service principal) |
| Internal | a person in a tenant that its own Partner invited as a Customer - the Partner using Bifröst itself |
| Demo | a person in a tenant the Partner marked as a demo environment when it invited it |
| User | anyone else - regular customer usage |
Internal and Demo apply only to people who would otherwise be User; an application registration or a delegated partner user keeps App Registration or Support. On Prepaid only User and App Registration are used.
The charge type is set when a user starts using Bifröst in a company, and re-evaluated for every user of the company by the daily usage sync (started by the first chargeable call of the day) and by Sync on Bifrost Setup. After a license or partner change - a new Partner relationship, a cancelled one, a user given or removed a delegated plan - the new charge types apply from the next daily sync; choose Sync to apply them at once.
Before the first call
Every company must approve the End-User License Agreement (EULA) in the
Setup Wizard before Bifröst processes any call for it.
Until then every call - including discovery calls - is answered with an EULA_REQUIRED error that points
to the wizard. An administrator can withdraw the approval with Revoke EULA Approval on the
Bifrost Setup page; calls are then refused again until the wizard is completed.
Outbound HTTP must also be allowed for Bifröst Foundation (the wizard does this): the license checks talk to the licensing service.
Prepaid
Prepaid is the license type of every new installation and of every tenant that is not the Customer of a Partner.
- Trial. A trial (its size) is activated once per Microsoft Entra tenant, when the Setup Wizard finishes in a SaaS production environment, or on the next Sync on Bifrost Setup. Until it is activated, chargeable calls are answered with a trial has not been started error.
- Purchased quota. After the trial you buy more messages per pool: contact your Business Central partner. Bifrost Setup shows a notification when either pool drops below 200 messages.
- Grace. When a pool reaches zero, a grace of 100 messages still runs; the responses carry a warning. When the grace is used up, the pool is exhausted.
- Blocking. An exhausted pool refuses calls with the quota-exhausted error - unless the licensing agreement for the tenant says the pool should keep running, in which case calls continue, are still counted, and keep returning the warning.
- Rate limit. Production usage is not rate-limited. Sandbox usage on the Bifröst MCP server always has the Free tier. See Rate limits.
Subscription
A tenant is on Subscription while it is the Customer of a Bifröst Partner - from the moment it accepts the Partner's invitation until the relationship ends. The license type is per tenant: every company of the tenant is on Subscription, including companies that start using Bifröst later.
- Invoicing. The Partner invoices the Customer for the messages it used each month. There is no purchased quota: the pools are counted, not limited. The monthly quotas are the Customer's way to cap its bill.
- Rate limit. Production usage is not rate-limited. Sandbox usage on the Bifröst MCP server has the Free tier by default; the Customer can raise it by choosing a higher tier from its production environment, priced by its Partner. See Rate limits.
When the relationship with the Partner ends, the tenant returns to Prepaid and its sandbox rate limit returns to the Free tier. The change takes effect when a license administrator chooses Sync on Bifrost Setup.
Monthly quotas
Both license types can cap their own monthly usage:
- Company Monthly Message Quota on the Bifrost Setup page - the chargeable messages of the company in the calendar month. On Subscription it counts every charge type except App Registration, so service-to-service calls never stop your users; on Prepaid it counts both pools;
- User Monthly Message Quota on each user's Bifrost User Setup - that user's chargeable messages in the calendar month, whatever their charge type.
0 (the default) means no limit. When a quota is reached, calls are refused with a
monthly-quota-exhausted error until the next calendar month; the response names which quota (user
or company) stopped the call. The user quota is checked before the company quota, and both before
a Prepaid tenant's purchased pools. When a monthly quota has 100 or fewer messages left, successful
responses carry a warning. Monthly quotas are not enforced in a sandbox.
How the monthly quotas are counted
Business Central counts the monthly quotas itself, from the Bifrost Messages of the company: the chargeable messages of the current calendar month. Reporting usage to the licensing service does not change that count - a message reported by the daily usage sync still counts until the month ends.
Keep at least 31 days of Bifrost Messages if you use the monthly quotas.
Sandbox environments
In a Business Central online sandbox:
- Bifröst does not block on quota: pools and monthly quotas are not enforced, and no trial is needed.
- Usage is still recorded and reported, separately from production.
- On the Bifröst MCP server, sandbox usage is rate-limited per Microsoft Entra tenant; see Rate limits. Bifröst itself has no message limit.
For unlimited sandbox usage, run the Local MCP server from businesscentralal/origo-bc-mcp.
On-premises installations
On-premises installations are Prepaid only. There is no trial; Origo supplies the connection to the licensing service together with the on-premises license, and the purchased quota works as described under Prepaid.
Checking the license
- The License fact box on the Bifrost Setup page shows the license type, the remaining quota and validity of each pool, the messages not yet reported, and the date of the last sync. See License fact box.
- An AI assistant can read the same status, and the tenant's usage in the current month, through Bifröst.