Skip to main content

Permissions

Every connection has a set of permissions. Each REST endpoint and MCP tool lists the permissions it needs, and a request fails with 403 and error.code: missing_permission if one is missing.

Permission dependencies​

Some permissions only make sense together. For example, creating a job requires reading jobs and customers. When you choose a create permission in Settings → API connections, the read permissions it depends on are selected automatically.

Dependencies are requirements, not automatic grants: the connection must actually hold every permission in the set. The table below is generated from the permission map of the API version this site documents.

PermissionRequires directlyComplete set to grant
customer_locations:createcustomer_locations:read, customers:readcustomer_locations:create, customer_locations:read, customers:read
customer_locations:readcustomers:readcustomer_locations:read, customers:read
customers:createcustomers:readcustomers:create, customers:read
customers:read—customers:read
invoices:createcustomers:read, invoices:read, products:readcustomers:read, invoices:create, invoices:read, products:read
invoices:readcustomers:readcustomers:read, invoices:read
job_items:createjob_items:read, jobs:read, products:readjob_items:create, job_items:read, jobs:read, products:read
job_items:readjobs:readjob_items:read, jobs:read
jobs:createcustomers:read, jobs:readcustomers:read, jobs:create, jobs:read
jobs:read—jobs:read
members:invitemembers:readmembers:invite, members:read
members:read—members:read
products:createproducts:readproducts:create, products:read
products:read—products:read
quotes:createcustomers:read, products:read, quotes:readcustomers:read, products:read, quotes:create, quotes:read
quotes:readcustomers:readcustomers:read, quotes:read
timesheets:readmembers:readmembers:read, timesheets:read

Inputs that need extra permissions​

Some optional inputs need permissions beyond the endpoint's own. For example, creating a job with a location_id also needs customer_locations:read. Each create page lists these under Permissions.

Fields that need extra permissions​

Reads return a record's own fields with the endpoint's permission. Summaries of related records need the related permission too. For example, a job's customer summary needs customers:read. Without it, the field is left out rather than causing an error.

For example, timesheet entries include the related job's name only when the connection has jobs:read.

Invitation authority​

Member invitations need more than members:invite and members:read: a person with authority to invite must stand behind the connection.

  • REST connections: the owner or admin who created the connection with invitation access, or who last saved its permissions, is its sponsor. They must still be an eligible owner or admin.
  • MCP connections: the owner or admin who approved the connection must still be one.

If that person loses their role, invitation endpoints return 403 operation_forbidden, and the MCP invitation tools disappear from the client's tool list. See Create a member invitation.

Features that must also be enabled​

A permission doesn't turn a feature on. Some features also need FieldTask to enable them, such as timed job scheduling, job items, quotes and invoices. Others depend on your organization's own settings: invoice creation needs invoicing enabled for the organization, and member invitations need an eligible owner or admin behind the connection.

Changing permissions​

ConnectionAdd a permissionRemove a permission
API tokenManage → select it. Applies from the next request.Applies from the next request.
OAuth clientManage → select it, then include it in scope when requesting a token.Applies from the next request.
AI assistant (MCP)Waits for approval: the person who connected the assistant must reconnect and approve, then refresh tools.Applies from the next request.

Existing access tokens never gain permissions they weren't issued with.