Skip to main content

Permissions Reference

This guide lists every permission in Fiskl, grouped by area. For each permission it shows what the permission controls, how it behaves in the app, and which OAuth scope grants it to a connected app. Use it to assign access precisely and to understand how the same permission applies across the app and the API.

How to Read This Reference​

Each area below has a table with four columns:

  • Permission — the stable key you see in the permission grid and in API responses, such as invoice.read. A âš  marks a sensitive permission.
  • What it controls — the capability the permission grants.
  • In the app — how the permission affects what you see and do in the Fiskl interface.
  • OAuth scope — the scope a connected app requests to gain this permission. A dash (—) means the permission is not available to OAuth apps.

Two rules explain most of the table, and are covered in full in How Permissions Work:

  • The server separates read from write. An API key or connected app with read access gets read-only access — it can view but not change. The app mostly mirrors this, but a few screens are coarser: the accounting transaction ledger requires write access even to view (see Accounting).
  • Sensitive permissions are never granted through OAuth. A connected app can never receive the eleven sensitive permissions; they are available only to a team member directly, or to an API key whose creator holds them.

Contacts​

PermissionWhat it controlsIn the appOAuth scope
client.readView clientsSee the Clients list and open client recordscontacts:read
client.writeCreate and update clientsAdd and edit clientscontacts:write
client.deleteDelete and restore clientsDelete and restore clientscontacts:write
vendor.readView vendorsSee the Vendors list and open vendor recordscontacts:read
vendor.writeCreate and update vendorsAdd and edit vendorscontacts:write
vendor.deleteDelete and restore vendorsDelete and restore vendorscontacts:write

Line Items​

PermissionWhat it controlsIn the appOAuth scope
billing_item.readView line items attached to invoices and billsSee line items on documentsinvoicing:read
billing_item.writeCreate, update, and attach line itemsAdd and edit line itemsinvoicing:write
billing_item.deleteRemove line itemsRemove line itemsinvoicing:write

Invoices and Bills​

PermissionWhat it controlsIn the appOAuth scope
invoice.readView invoicesSee the Invoices list and open invoicesinvoicing:read
invoice.writeCreate, update, and save draft invoicesAdd and edit invoicesinvoicing:write
invoice.sendSend invoices to customersEmail or share invoicesinvoicing:write
invoice.voidVoid or cancel issued invoicesVoid issued invoicesinvoicing:write
invoice.deleteDelete draft invoicesDelete draft invoicesinvoicing:write
bill.readView vendor billsSee the Bills list and open billsbills:read
bill.writeCreate and update billsAdd and edit billsbills:write
bill.deleteDelete billsDelete billsbills:write

Quotes​

PermissionWhat it controlsIn the appOAuth scope
quote.readView quotesSee the Quotes list and open quotesinvoicing:read
quote.writeCreate, update, accept, reject, or convert quotesAdd and edit quotes, change their statusinvoicing:write
quote.sendSend quotes to clientsEmail or share quotesinvoicing:write
quote.deleteDelete draft quotesDelete draft quotesinvoicing:write

Expenses​

PermissionWhat it controlsIn the appOAuth scope
expense.submitSubmit expenses through the field-employee workflowSubmit expenses; the list shows your own submissions—

Payments​

PermissionWhat it controlsIn the appOAuth scope
payment.readView payments recorded against invoices and billsSee payments on documentspayments:read
payment.writeRecord payments and mark invoices paidRecord a payment, mark an invoice paidpayments:write
payment.refundRefund paymentsRefund a recorded paymentpayments:write
payment.deleteDelete payment recordsDelete a paymentpayments:write
payment_instruction.readView bank details and payment instructions on invoicesSee payment instructions on invoicespayments:read
payment_instruction.write ⚠Edit bank details on a customer-facing invoiceEdit invoice payment instructions—

Accounting​

In the app, accounting.read opens a read-only view of the Chart of Accounts and all Reports. The transaction ledger — the Transactions and Multi Journal screens — requires accounting.write even to view, because the app does not offer a read-only ledger view. The financial widgets on the main dashboard also require accounting.write. On the server the split is cleaner: an API key or connected app with accounting.read gets genuine read-only access to all ledger and report data. See How Permissions Work.

PermissionWhat it controlsIn the appOAuth scope
accounting.readView the ledger, journals, chart of accounts, and accounting summariesView the Chart of Accounts and all Reports (read-only)accounting:read
accounting.write ⚠Post manual journal entries, edit the chart of accountsView, create, and edit the transaction ledger (Transactions, Multi Journal) and accounts; also gates the dashboard financial widgets—
accounting.reconcileReconcile bank transactions to ledger entriesMatch and reconcile transactionsaccounting:write
accounting.close ⚠Close and lock accounting periodsLock a period—

Banking Connections​

PermissionWhat it controlsIn the appOAuth scope
bank_connection.readView connected bank accounts and their statusSee bank connectionsbanking:read
bank_connection.writeAdd, connect, and refresh bank connectionsConnect and refresh banksbanking:write
bank_connection.deleteDisconnect bank connectionsDisconnect a bankbanking:write

Reports​

PermissionWhat it controlsIn the appOAuth scope
report.readView accounting reportsOpen reports such as Profit and Lossreports:read
report.exportExport reportsExport a report to PDF or CSVreports:read

FX Rates​

PermissionWhat it controlsIn the appOAuth scope
fx_rate.readView FX rates and any active overridesSee exchange ratesaccounting:read
fx_rate.write ⚠Override FX rates for a date or periodSet an FX rate override—

Tax​

PermissionWhat it controlsIn the appOAuth scope
tax.readView tax registration numbers, rates, and tax groupsSee tax setuptaxes:read
tax.write ⚠Configure tax numbers, rates, and groupsEdit tax setup—

Products and Services​

PermissionWhat it controlsIn the appOAuth scope
product.readView products, services, and expense categoriesSee the catalogueproducts:read
product.writeCreate and update catalogue itemsAdd and edit catalogue itemsproducts:write
product.deleteDelete catalogue itemsDelete catalogue itemsproducts:write

Brand​

PermissionWhat it controlsIn the appOAuth scope
brand.readView brand profiles and document templatesSee brand settings—
brand.write ⚠Edit brand name, logo, sender address, default payment instructions, and templatesEdit brand settings—

Integrations​

PermissionWhat it controlsIn the appOAuth scope
integration.readView connected integrationsSee connected services—
integration.writeConnect, configure, and refresh integrations; manage webhooksConnect services and open the webhook portal—
integration.deleteDisconnect integrationsDisconnect a service—

Team Management​

PermissionWhat it controlsIn the appOAuth scope
user.readView team members and their accessSee the team list—
user.invite ⚠Invite new usersSend invitations—
user.writeEdit existing users' detailsEdit member details—
user.assign_role ⚠Change a member's preset or permissionsEdit access in the permission grid—
user.deleteRemove users from the companyRemove a member—

Accountant Relationship​

PermissionWhat it controlsIn the appOAuth scope
accountant.readView connected accountantsSee connected accountants—
accountant.writeInvite accountants and manage their accessInvite and manage accountants—
accountant.deleteDisconnect accountantsRemove an accountant—

Company​

PermissionWhat it controlsIn the appOAuth scope
company.readView company settingsSee company settingscompany:read
company.writeEdit company settings such as address and fiscal yearEdit company settingscompany:write

Subscription​

PermissionWhat it controlsIn the appOAuth scope
subscription.manageUpgrade, downgrade, and manage billing detailsChange the plan and billing—
subscription.delete ⚠Cancel the subscription and end the accountCancel the account—

API Access​

PermissionWhat it controlsIn the appOAuth scope
api_key.createCreate your own API keysCreate personal API keys—
api_key.manage ⚠View and revoke any credential in the companyManage all company keys—
oauth_app.installAuthorise third-party appsConnect an app—
oauth_app.manage ⚠View and revoke any OAuth app in the companyRegister and manage connected apps—

Common Questions​

Why can a read-only API key see the transaction ledger when a teammate with the same level cannot?

The server enforces accounting.read and accounting.write separately, so an API key or connected app with read access genuinely gets read-only access to all accounting data, including the ledger. In the app, a teammate with accounting.read sees the Chart of Accounts and Reports, but the transaction ledger (Transactions, Multi Journal) requires accounting.write even to view — the app does not offer a read-only ledger view, because separating read-only viewing across every ledger screen would be a large change. This is a known difference between the app and the API. See How Permissions Work.

Why can't I grant a connected app permissions like accounting.write or tax.write?

Those are sensitive permissions. They are never available through OAuth scopes, so a third-party app can never receive them. A team member can hold them directly, and an API key can include them if the person who created the key holds them.

What does a dash (—) in the OAuth scope column mean?

The permission is not granted by any OAuth scope, so a connected app cannot receive it. The permission still works for team members in the app, and for API keys whose creator holds it.