Factuarea APIDevelopers

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.

WhatWhat you pay
The planThe 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 IDsOnly 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.
EmployeesEach 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, view or operate costs 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.

planAnswer
emprendedorAccepted. It does not allow additional tax IDs.
empresarioAccepted. It allows additional tax IDs, which you also pay.
integralAccepted, at the normal price of the plan. It allows additional tax IDs, which you also pay.
enterprise422 managed_account_plan_not_self_serve. Only we assign it, by contract.
Any other value422 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 happensWhat we do on your subscription
You provision a live managed accountWe 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 planWe 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 planNothing at once: the new price starts at the next renewal. See change the plan.
A tax ID is added to the account, from empresario upwardsWe 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 expiredWe charge a seat at once, prorated.
An employee is deactivatedThe 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 accountThe 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 endsThe 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.

ChannelOperationScope
APIGET /v1/accounts/{account}/plan/preview with planaccounts:read
APIPATCH /v1/accounts/{account}/plan with planaccounts:write
MCPpreview_managed_account_plan_change and change_managed_account_plan, with managed_account_id and planaccounts: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. With view or none the answer is 403 forbidden_action and nothing changes.
  • The plan is emprendedor, empresario or integral. enterprise answers 422 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"
  }
}
FieldMeaning
from_plan, to_planThe current plan and the requested one.
effectiveimmediate 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_atWhen a period_end change takes effect, the end of the current period, or null for an immediate one.
prorated_amount_centsWhat we would charge you at once. It is only above 0 in a raise.
next_invoice_amount_centsThe monthly fee of the requested plan on your next periodic invoice.
currencyEUR.

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 (emprendedor to empresario). 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 new plan.
  • Lowering (empresario to emprendedor). It stays pending until the end of the period of your managed-accounts subscription. Nothing of the current period is credited, but the renewal invoice already carries the new plan and no additional tax IDs, because emprendedor does 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 plan and pending_plan in it and, if they did not change, repeat the change with a new Idempotency-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 happensWho pays afterwardsPlan and priceWhat your relation becomes
The client takes over the payment, from the app or by choosing it when it claims the accountThe client, on its own accountThe sameIt 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 clientThe client, on its own accountThe sameThe 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 methodNobody yetThe same, from the moment the client takes over the paymentThe 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 claimNobody until the client claims the accountThe ones you choseThe 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} answers 404 account_not_found, and the account is no longer in GET /v1/accounts.
  • GET /v1/me lists the account in client_accounts as a granted access, with origin: "granted" and paid_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:

  1. 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. A fact_test_ key creates test accounts during the trial, at no charge.
  2. The limit. At your cap of live managed accounts, the answer is 422 managed_accounts_limit_reached. Test accounts do not count: limit and remaining in provisioning-usage tell you where you are.
  3. 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, with suspension_reason: "payer_blocked", as the state of a tax ID describes. Calls on them answer 403 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:

OperationWhat it is
POST /v1/accounts/{account}/companiesRegister an additional tax ID.
POST /v1/accounts/{account}/companies/activate and POST …/companies/{company}/activateReactivate tax IDs.
POST /v1/accounts/{account}/nif-transfers/acceptAccept a tax ID transfer.
GET /v1/accounts/{account}/companies/seat-charge-previewPreview 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

CodeStatusWhen
payment_method_required402You provision a live managed account, or add something charged to you, and your account has no payment method.
managed_account_plan_not_self_serve422You ask for enterprise, or you change or preview the plan of an account under contract.
managed_account_provider_in_trial422You provision a live account while your account is in trial.
managed_accounts_limit_reached422You are at your cap of live managed accounts.
enterprise_contract_transition_required422You end the management of an account under contract before we set the plan it continues on.
invalid_param_value422plan is not emprendedor, empresario, integral or enterprise.
idempotency_key_required422The plan change or the end of the management arrives without Idempotency-Key.
forbidden_action403You change or preview the plan with your level at view or none.
privileged_scope_required403Your account lacks the account provider privilege, or the person who issued the key is no longer an owner or admin.
billing_managed_by_provider403The client buys something while you pay.
company_inactive403A tax ID is suspended because the payer is blocked.
account_not_found404The account is not a managed account of yours, its management ended or its client took over the payment.

On this page

Need a hand?Contact support