Team and Security
Members and invitations
Invite people into your account, choose their role and which businesses they can reach, and manage everyone from Settings > Team.
Members are the people who work inside your account with you: a bookkeeper, a colleague who sends invoices, an accountant who only needs to look. Each member signs in with their own login, gets a role that decides what they can do, and a business scope that decides which of your businesses they can see. You invite them by email from Settings > Team, or through the API.
How membership works
Your account is the unit that holds your businesses, your plan and your billing. When you sign up, an account is created on the Free plan with you as its Owner. Everyone else you bring in becomes a member of that account.
A membership has three parts:
| Part | What it means |
|---|---|
| Person | One login, identified by one email address. |
| Role | Owner, Admin, Editor, Viewer, Accountant, or a custom role on Team. The role is a list of permission keys. See Roles and permissions. |
| Business scope | Either all businesses in the account, or a list of specific businesses. The scope applies on top of the role for every role except Owner. |
So an Editor scoped to one business can create and send invoices for that business only. They cannot see the other businesses in the account at all, in the app, the API, MCP or the AI agent.
One login, many accounts
A person signs in once, with one email, and that login can be a member of many accounts at the same time. Each membership has its own role and its own business scope.
- One member, several businesses: inside one account, a membership can cover one, several or all businesses.
- Your own account and someone else's: the same email can be the Owner of their own account and a member of a client's or employer's account.
- The switcher: the account and business switcher at the top of the app lists every account and business you can reach, grouped by account, with your role shown. Permissions, plan limits, billing, branding and the audit log always follow the account you are viewing, never the person.
Deactivating someone in one account never affects their other memberships or their own account.
Plan limits
| Free | Team | |
|---|---|---|
| Owner | 1 | 1 or more |
| Other members | 1 free view-only Accountant | 5 members included, then $2/month ($20/year) per extra member; regional price $1/month ($10/year) |
| Roles | Owner and Accountant, both fixed | Every role except Owner editable; custom roles |
On Free you can invite one member, and that member must have the Accountant role, which is view-only. Trying to invite a second member, or a member with any other role, shows the Team upgrade instead.
On Team, five members are included. When you invite a sixth, the app shows you the extra-member price before the invitation is sent. The extra seat is added to your Team subscription and billed with proration. See Member seats.
Every number here (members included, the extra-member price) is a plan setting we can change without a release. The pricing page and Settings > Billing always show the current values.
Invite a member
Open Settings > Team
You need the team.manage permission. The Owner and Admin have it by default.
Choose Invite
Enter the person's email address.
Pick a role
On Free, only Accountant is available. On Team, pick any role except Owner, including your custom roles.
Pick the business scope
Choose All businesses, or tick the businesses this person should reach. New businesses you add later are included automatically only when the scope is All businesses.
Send the invitation
The person receives an invitation link. When they accept it, they sign in (or create a login) and the membership becomes active with the role and scope you chose. If they already have a login, the new account simply appears in their switcher.
Invitation links are single-purpose, stored only as a hash, and expire. Until it is accepted, you can revoke an invitation from the same screen; the link then stops working.
Change a member's role or scope
Open Settings > Team, choose the member, and change their role, their business scope, or both. The change applies on the member's next request: permissions are read on every request, not cached in the session, so there is no need for them to sign out.
The Owner's membership cannot be changed this way. An account always keeps at least one Owner; a change that would leave it without one is refused with last_owner. To hand the account to someone else, use Transfer ownership.
Deactivate or remove
Two separate actions end a member's access:
- Deactivate ends access at once but keeps the membership, so you can reactivate it later.
- Remove ends the membership. Their work stays and is still attributed to them.
Both are available on every plan and are described in Deactivate and remove.
Through the API
Every member action is a capability, so the API, CLI and AI agent can do the same as the web app, with the same permission checks.
curl -X POST "https://api.freeinvoiceautomation.com/v1/invitations" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: invite-sam-2027-01-04" \
-d '{
"email": "[email protected]",
"role_id": "0193f2a1-4d2e-7a10-8b3c-5e6f7a8b9c01",
"business_scope": "list",
"business_ids": ["0193f2a1-0b0b-7c4e-9a10-2d3e4f5a6b70"]
}'business_ids is used only when business_scope is list. Get role ids from List roles.
| Capability | Route | Permission |
|---|---|---|
| List members | GET /v1/members | settings.view |
| Invite a member | POST /v1/invitations | team.manage |
| Revoke an invitation | DELETE /v1/invitations/{id} | team.manage |
| Update a member | PATCH /v1/members/{id} | team.manage |
| Deactivate a member | POST /v1/members/{id}/deactivate | team.manage |
| Reactivate a member | POST /v1/members/{id}/reactivate | team.manage |
| Remove a member | DELETE /v1/members/{id} | team.manage |
An API key acts for one account only. If your login belongs to several accounts, create a key in each account you want to automate. See Authentication.
Rules
- Only the Owner, or a member whose role holds
team.manage, can invite, change, deactivate or remove members. - The Owner can never be deactivated or removed.
- On Free, the only other member is one view-only Accountant.
- Every invite, change, deactivation, reactivation and removal writes an audit log entry, on every plan.
- API keys and MCP tokens a member created can never do more than that member's current role allows. If you narrow their role, their keys narrow too on the next call.
Errors
| Code | HTTP | When |
|---|---|---|
permission_denied | 403 | Your role does not hold team.manage (or settings.view to list members). |
plan_limit_reached | 403 | Free already has its one Accountant, or the invite is for a role other than Accountant on Free. |
feature_locked | 403 | A Team-only feature, such as a custom role, was requested on Free. |
last_owner | 409 | The change would leave the account without an Owner. |
business_out_of_scope | 403 | The request names a business that is outside your own business scope. |
member_deactivated | 403 | The member is deactivated in this account. |
not_found | 404 | The member or invitation does not exist in this account. |
The full list is on Errors.