Managed account pricing and payer change
What you pay for each managed account, how a plan change is charged and what happens when the client takes over the payment.
A managed account is a normal account with its own plan, and your account pays for it until its client takes over the payment. There is no separate price list for managed accounts: your subscription uses the same prices as the plans and add-ons of any account, and what changes is who pays. This guide covers what you pay, how you choose and change the plan, when we charge you, what happens when the payment passes to the client, and what you can and cannot do while your account is in trial or has a payment problem.
The operations of this guide that you run as the provider of managed accounts need the privileged scope accounts:read or accounts:write, which * does not cover: managed accounts explains how they are granted and checked. {account} is the id of the managed account, the one that GET /v1/accounts lists, except in provisioning-usage, where it is your own account.
What you pay
For every live managed account whose management is in force and whose client has not taken over the payment, your account pays three things, always monthly. All of them go on one subscription of your account, managed-accounts, which has one item per price and the quantity of all your managed accounts added up, never one item per account.
| What | What you pay |
|---|---|
| The plan | The monthly price of the plan you chose for the account, emprendedor, empresario or integral. The interval is always monthly: a managed account has billing_interval: "monthly" and no operation takes another. |
| Additional tax IDs | Only from empresario upwards (empresario and integral): each active tax ID beyond its titular company, at the price of the additional tax ID. emprendedor does not allow them. |
| Employees | Each active employee of any of its tax IDs, at the price of the employee seat. |
What decides the amount:
- Your access level does not matter. An account at
none,vieworoperatecosts the same: the level changes what your credentials reach, not what you pay. - The plan is the account's own. It is stored on the managed account and its tax IDs follow it. Your own plan never changes it, as your account in trial or with a payment problem explains.
- The quantities come from the real state of each account. We recompute them and always send them to the payment provider as absolute numbers, so repeating a call never charges twice.
- Amounts are taxable base. The plan preview returns the base, without VAT.
What does not cost you anything:
- A test managed account, created with a
fact_test_key. It never reaches the payment provider: see test managed accounts. - An account on
enterprise. It is billed by contract, outside your subscription. - An account that is not operable, because its titular tax ID is not
active, for example when your billing is blocked. - An account whose management ended, or whose client took over the payment.
Choose the plan
You choose the plan when you provision the account: plan is required in POST /v1/accounts, and there is no interval to choose.
plan | Answer |
|---|---|
emprendedor | Accepted. It does not allow additional tax IDs. |
empresario | Accepted. It allows additional tax IDs, which you also pay. |
integral | Accepted, at the normal price of the plan. It allows additional tax IDs, which you also pay. |
enterprise | 422 managed_account_plan_not_self_serve. Only we assign it, by contract. |
| Any other value | 422 invalid_param_value, with plan in error.param. |
An account on enterprise is agreed with us by contract, and it is billed by contract, outside your subscription. You cannot ask for it when you provision, and once an account is under contract you cannot change its plan with the plan operations either: they answer the same 422 managed_account_plan_not_self_serve.
When you are charged
We charge your account when something you pay for changes, always on the same subscription. There is no checkout: if your account has no payment method, the operation that would charge you is rejected first.
| What happens | What we do on your subscription |
|---|---|
| You provision a live managed account | We charge its plan at once, prorated for what is left of the current period. Your account needs a payment method. If the payment provider fails after the account was created, the account stays and the daily reconciliation sets the quantity: repeating the same external_ref creates nothing. |
| You raise its plan | We charge at once, prorated, in one update: the credit for the unused time of the old plan, the charge for the new one and one invoice for the difference. |
| You lower its plan | Nothing at once: the new price starts at the next renewal. See change the plan. |
A tax ID is added to the account, from empresario upwards | We charge at once, prorated for what is left of the period. See additional tax IDs. |
| An employee is added, or reactivated after its paid seat expired | We charge a seat at once, prorated. |
| An employee is deactivated | The seat leaves your next invoice with no credit. It stays paid until the end of the period, so reactivating the employee within it costs nothing. |
| A tax ID is deactivated or leaves the account | The unit leaves your next invoice with no credit. Reactivating the tax ID is charged again: only an account that pays for itself keeps the coverage of a deactivated tax ID. |
| The client takes over the payment, or the management ends | The account leaves your subscription. See change of payer. |
A daily reconciliation keeps the quantities aligned with the real accounts, without proration.
Change the plan
You can change the plan of a managed account you pay at any time, also after the client claimed it, as long as you keep paying. Besides the scope, both operations need your access level on the account to be operate. Preview the change first, then make it.
| Channel | Operation | Scope |
|---|---|---|
| API | GET /v1/accounts/{account}/plan/preview with plan | accounts:read |
| API | PATCH /v1/accounts/{account}/plan with plan | accounts:write |
| MCP | preview_managed_account_plan_change and change_managed_account_plan, with managed_account_id and plan | accounts:read and accounts:write |
The MCP tools need an API key: the OAuth channel does not reach accounts:*. The change is irreversible, so it needs an Idempotency-Key (idempotency_key in the tool), and a call without it answers 422 idempotency_key_required.
Both operations ask for the same things:
- The account is yours and you pay it. It must be a managed account provisioned by your account, with its management in force and in the environment of the key. Your own account, another one, one whose management ended and one whose client took over the payment all answer the same
404 account_not_found. - Your level is
operate. Withviewornonethe answer is403 forbidden_actionand nothing changes. - The plan is
emprendedor,empresarioorintegral.enterpriseanswers422 managed_account_plan_not_self_serve.
After the claim you can lower your level but never raise it again: only the client can, from its panel. If you expect to change the plan after the claim, keep operate.
Preview the change
curl -G https://api.factuarea.com/v1/accounts/$MANAGED_ACCOUNT_ID/plan/preview \
-H "Authorization: Bearer $FACTUAREA_API_KEY" \
--data-urlencode "plan=empresario"{
"data": {
"object": "managed_account_plan_change_preview",
"from_plan": "emprendedor",
"to_plan": "empresario",
"effective": "immediate",
"effective_at": null,
"prorated_amount_cents": 1250,
"next_invoice_amount_cents": 3500,
"currency": "EUR"
}
}| Field | Meaning |
|---|---|
from_plan, to_plan | The current plan and the requested one. |
effective | immediate for a raise, for asking the plan the account already has, and when nothing is charged to you. period_end for a lowering that stays pending. |
effective_at | When a period_end change takes effect, the end of the current period, or null for an immediate one. |
prorated_amount_cents | What we would charge you at once. It is only above 0 in a raise. |
next_invoice_amount_cents | The monthly fee of the requested plan on your next periodic invoice. |
currency | EUR. |
The amounts are integer cents of taxable base, without VAT. Unlike the euros as strings of GET …/billing, the plan preview keeps cents, as the field names say. The amounts in the examples are only illustrative: ask the preview for the real ones instead of hard-coding them.
Make the change
curl -X PATCH https://api.factuarea.com/v1/accounts/$MANAGED_ACCOUNT_ID/plan \
-H "Authorization: Bearer $FACTUAREA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "plan": "emprendedor" }'The answer is 200 with the managed account. A lowering shows the target in pending_plan and keeps the current plan in plan:
{
"data": {
"id": "0199a1f0-1c22-7a10-b111-6a6b6c6d6e6f",
"object": "managed_account",
"external_ref": "cliente-0042",
"status": "claimed",
"environment": "live",
"plan": "empresario",
"pending_plan": "emprendedor",
"billing_interval": "monthly",
"access_level": "operate",
"display_name": "Talleres García",
"language": "es",
"companies": [
{
"id": "0199a1f0-1c22-7a10-b111-7a7b7c7d7e7f",
"tax_id": "B12345674",
"name": "Talleres García SL"
}
],
"claimed": true,
"claimed_at": "2026-09-29T08:00:00+00:00",
"management": {
"status": "active",
"ended_at": null
},
"paid_by_provider": true,
"created_at": "2026-09-27T09:00:00+00:00"
}
}- Raising (
emprendedortoempresario). It takes effect and is charged at once, prorated, in one update of your subscription, with one invoice for the credit and the charge. The answer already shows the newplan. - Lowering (
empresariotoemprendedor). It stays pending until the end of the period of yourmanaged-accountssubscription. Nothing of the current period is credited, but the renewal invoice already carries the new plan and no additional tax IDs, becauseemprendedordoes not allow them. When the change takes effect, the account's additional tax IDs are deactivated, never its titular company. - Changing your mind. A new request replaces a pending one, and asking for the plan the account already has withdraws it. If the client takes over the payment first, the pending lowering is discarded and the client continues on the current plan.
- A failed charge. If the payment provider rejects a raise, the plan is not written and nothing stays charged. The answer still shows the previous plan, so read
planandpending_planin it and, if they did not change, repeat the change with a newIdempotency-Key. - Nothing to charge. A test account, or one that is not charged to you because its payer is blocked, changes at once with no charge, and its preview shows both amounts at
0.
Read what you pay
GET /v1/accounts/{account}/provisioning-usage, with your own account.id as {account}, counts what you pay. managed_accounts_by_plan has your live accounts of each plan, where the enterprise ones are not in your subscription, and provider_paid_additional_nifs and provider_paid_employee_seats have the additional tax IDs and employee seats you pay on top of their plan. It needs accounts:read, and managed accounts describes the whole answer.
The API returns no amount per account. The client accounts list of the app shows the monthly amount of each one, and the preview of a bulk import returns the monthly amount and the proration of every row and of the whole file before you confirm it.
Change of payer
Your account pays until the client takes the payment over. The payer changes in the ways below, and in all of them the client continues with the same plan and the same price: nothing is repriced and there is no new plan to choose.
| What happens | Who pays afterwards | Plan and price | What your relation becomes |
|---|---|---|---|
| The client takes over the payment, from the app or by choosing it when it claims the account | The client, on its own account | The same | It stops being a management and becomes granted access with the same level, unless your level is none: a granted access is never none, so there is nothing to hand over and the management ends instead, as in the next row. The account leaves GET /v1/accounts, and its {account} routes answer 404 account_not_found. |
| The management ends after the claim, by you or by the client | The client, on its own account | The same | The relation ends: you lose all access to the account and to its tax IDs, and the account is active. |
| The management ends after the claim and the client has no payment method | Nobody yet | The same, from the moment the client takes over the payment | The relation ends as above, and you stop paying. The account is active but all its tax IDs are inactive, with suspension_reason: "management_ended", until the client takes over the payment. |
| The management ends before the claim | Nobody until the client claims the account | The ones you chose | The relation ends and you stop paying. The account is not operable: all its tax IDs are inactive with management_ended. The voucher keeps working, and when the client claims the account it takes over the payment. Provisioning the same external_ref again reactivates the management, and you pay for the account again. |
This is how the payment passes from you to the client, so that nothing is charged twice and there is no gap:
- The client starts paying when the period you already paid ends. We create its subscriptions first, verify them, and only then lower yours. The client's first charge falls when that period ends, never before. If that date has already passed, the first charge is immediate.
- You are not credited, and you do not pay twice. Your next invoice goes out without the account's units. Nothing is credited for the rest of the period, because the client starts paying when it ends.
- A failure never leaves the account without a payer. We retry, and if the payment cannot be completed we undo what we created and you keep paying.
- The client needs a payment method on its own account. The app asks for it before the client takes the payment over, and nothing changes until it is added.
- A pending lowering is discarded. The client continues on the plan the account has.
Follow it from your side
We publish no account.* event when the client takes over the payment. The relation turns into a granted access without announcing it, and from then on you receive no account.* events about that account.
paid_by_provider tells you who pays while the management is in force. To notice the take-over, look for these signs:
GET /v1/accounts/{account}answers404 account_not_found, and the account is no longer inGET /v1/accounts.GET /v1/melists the account inclient_accountsas a granted access, withorigin: "granted"andpaid_by_provider: false:
{
"id": "0199a1f0-1c22-7a10-b111-6a6b6c6d6e6f",
"name": "Talleres García",
"origin": "granted",
"access_level": "operate",
"status": "active",
"paid_by_provider": false,
"environment": "live"
}When the management ends, in contrast, we do publish account.management_ended to your account webhook endpoints.
Enterprise by contract
An account under an enterprise contract has no plan to continue on until we set one. If you end the management, or its client tries to take over the payment, before we have set it, the answer is 422 enterprise_contract_transition_required: nothing changes and the management stays in force. That also holds before the claim, because the client will need the same plan when it claims the account. Contact us, we set the plan the account continues on, and you repeat the operation. If that plan is emprendedor, the account's additional tax IDs are deactivated, because that plan does not allow them.
End the management
DELETE /v1/accounts/{account}/management ends the management, as managed accounts explains. What happens to the payment depends on whether the client had claimed the account: see the table in change of payer. It needs an Idempotency-Key, and the MCP tool is end_account_management. The answer is 200 with the account and management.status: "ended", and from the next request your account loses access to it.
Your account in trial or with a payment problem
Provisioning a live managed account checks three things, in this order, before it creates or charges anything:
- In trial. A live managed account is charged from the first day, so an account in its trial can only create test managed accounts. A live one answers
422 managed_account_provider_in_trial. Your account is in trial during its trial window with no subscription, or while its plan subscription is in its trial period. When the trial ends and you start paying, the next live provisioning goes on to the next check. Afact_test_key creates test accounts during the trial, at no charge. - The limit. At your cap of live managed accounts, the answer is
422 managed_accounts_limit_reached. Test accounts do not count:limitandremaininginprovisioning-usagetell you where you are. - The payment method. A live account needs a payment method on your account. Without one, the answer is
402 payment_method_required. Register one in the billing portal of the app and repeat the call.
The same order applies when you reactivate, by external_ref, a management that ended before the claim.
If your account stops paying, the managed accounts you pay stop being operable. Nothing is deleted. It happens when your own plan goes unpaid, when it lapses with no active subscription, or when your managed-accounts subscription ends unpaid or canceled after the payment retries. A failed renewal does not block at once: the usual retries run first. The effect is:
- All the tax IDs of those accounts become
inactive, withsuspension_reason: "payer_blocked", as the state of a tax ID describes. Calls on them answer403 company_inactive. - They resume by themselves when your billing is up to date again, or when the client takes over the payment. Only the tax IDs the block suspended resume: one the account deactivated itself stays as it was.
- Test managed accounts are not affected.
Otherwise your own plan is independent of your managed accounts: raising it, lowering it or scheduling its cancellation changes nothing on them, and their subscription, managed-accounts, is not touched.
What the client cannot buy while you pay
While you pay and the management is in force, the client does not buy anything on its own account, because what it would buy is on your bill. Its credentials, and its people in the app and in MCP, get 403 billing_managed_by_provider on these operations, with no charge and no change. In this table {account} is the client's own account:
| Operation | What it is |
|---|---|
POST /v1/accounts/{account}/companies | Register an additional tax ID. |
POST /v1/accounts/{account}/companies/activate and POST …/companies/{company}/activate | Reactivate tax IDs. |
POST /v1/accounts/{account}/nif-transfers/accept | Accept a tax ID transfer. |
GET /v1/accounts/{account}/companies/seat-charge-preview | Preview the charge of an additional tax ID. |
GET and POST /v1/accounts/{account}/employee-seats… | Read, preview, subscribe, cancel or change the quantity of employee seats. |
Reading the billing is not an error: GET /v1/companies/{company}/billing of a tax ID of such an account answers managed: true with no gestoria_seats and no payment_method, so what you pay never reaches the client's keys.
On your side, you do not buy employee seats for a managed account: the quantity follows its active employees. The additional tax IDs are added by your account, with the {account} of the managed account and operate level, and the charge goes to your subscription: see additional tax IDs. When the client takes over the payment, the account pays for itself and its owner and admins can use those operations again.
Errors
| Code | Status | When |
|---|---|---|
payment_method_required | 402 | You provision a live managed account, or add something charged to you, and your account has no payment method. |
managed_account_plan_not_self_serve | 422 | You ask for enterprise, or you change or preview the plan of an account under contract. |
managed_account_provider_in_trial | 422 | You provision a live account while your account is in trial. |
managed_accounts_limit_reached | 422 | You are at your cap of live managed accounts. |
enterprise_contract_transition_required | 422 | You end the management of an account under contract before we set the plan it continues on. |
invalid_param_value | 422 | plan is not emprendedor, empresario, integral or enterprise. |
idempotency_key_required | 422 | The plan change or the end of the management arrives without Idempotency-Key. |
forbidden_action | 403 | You change or preview the plan with your level at view or none. |
privileged_scope_required | 403 | Your account lacks the account provider privilege, or the person who issued the key is no longer an owner or admin. |
billing_managed_by_provider | 403 | The client buys something while you pay. |
company_inactive | 403 | A tax ID is suspended because the payer is blocked. |
account_not_found | 404 | The account is not a managed account of yours, its management ended or its client took over the payment. |
Related
provision, claim, access level, end of management and the routes a managed account opens.
the price, the plans and the gate of an additional tax ID, also when you pay it for a managed account.
what your relation becomes when the client takes over the payment.
the whole flow with a test key, with no charge and no claim.
every code of the account, with its cause and what to do.