From d93989f388e571d06c3cb73b6965d28cfa9cb464 Mon Sep 17 00:00:00 2001
From: tfordcodat <133787407+tfordcodat@users.noreply.github.com>
Date: Wed, 20 May 2026 15:31:05 +0100
Subject: [PATCH 1/5] Update scopes.md
Adding guidance on Xero's new granular scopes
---
.../xero/partner-certification/scopes.md | 49 +++++++++++++------
1 file changed, 33 insertions(+), 16 deletions(-)
diff --git a/docs/integrations/accounting/xero/partner-certification/scopes.md b/docs/integrations/accounting/xero/partner-certification/scopes.md
index 1cf26a83a..7f74cfa78 100644
--- a/docs/integrations/accounting/xero/partner-certification/scopes.md
+++ b/docs/integrations/accounting/xero/partner-certification/scopes.md
@@ -1,25 +1,42 @@
----
-title: "Xero scopes by use case"
-description: "Detailed guidance on access scopes required for the Xero partnership certification"
----
+# Xero scopes by use case
+
+Detailed guidance on the new granular access scopes required for the Xero partnership certification
[Checkpoint 7: Scopes](https://developer.xero.com/documentation/xero-app-store/app-partner-guides/certification-checkpoints/#required-for-all-integrations), part of the Xero App Partner certification program, requires that apps have the minimal access to data as required by their use case.
To comply, you must define the access scopes you need for your intended use case. During the app review, Xero will ask you to justify your use of scopes and explain why you are accessing the related data.
-We have mapped out the Xero scopes that apply to each specific Codat use case in the table below. You will also need these scope regardless of the use case:
+We have mapped out the Xero scopes that apply to each specific Codat use case in the table below. You will also need these scopes regardless of the use case:
- `offline_access`
- `accounting.settings`
-| **Xero Partnership Type** | **Codat Use Case** | **Suggested Xero Scopes** |
-| --------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Financial Services - Bank Feeds | Reconciling bank transactions | `bankfeeds` |
-| Financial Services - Lending | Lending - Loan qualification | `accounting.reports.read`
`accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.bankstatement.read` |
-| Financial Services - Lending | Lending - Invoice finance | `accounting.reports.read`
`accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.bankstatement.read` |
-| App Store and Financial Services - Bank Feeds | Managing expenses | `accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`bankfeeds` |
-| App Store | Dashboarding | Read-only configuration required. Please work with your implementation specialist to configure scopes. |
-| App Store | Automating payables | `accounting.transactions`
`accounting.contacts`
`accounting.attachments` |
-| App Store | Automating receivables | `accounting.transactions`
`accounting.contacts`
`accounting.attachments` |
-| App Store | Integrating commerce data | `accounting.journals.read`
`accounting.transactions`
`accounting.contacts` |
-| App Store | Managing payroll | `accounting.journals.read`
`accounting.transactions` |
+## About Xero's granular scopes
+
+Xero is replacing its broad OAuth 2.0 scopes — most notably `accounting.transactions` — with a set of more granular scopes, so your app requests only the data it needs.
+
+If you create a new Xero app on or after **2 March 2026**, you must use the new granular scopes from day one. If your app already exists, you can begin requesting the granular scopes from **April 2026**, and you must complete your migration by **September 2027**.
+
+Granular scopes are not applied to existing tokens automatically. Because your app is requesting a different set of permissions, each customer connection requires fresh, explicit consent, and you'll need customers to reauthenticate with the granular apps.
+
+For full details, see Xero's [Granular Scopes FAQs](https://developer.xero.com/faq/granular-scopes) and the announcement post, [Upcoming changes to Xero accounting API scopes](https://devblog.xero.com/upcoming-changes-to-xero-accounting-api-scopes-705c5a9621a0).
+
+## Scopes by Codat use case
+
+| Xero Partnership Type | Codat Use Case | Current (broad) Xero Scopes | New granular Xero scopes |
+|---|---|---|---|
+| Financial Services — Bank Feeds | Reconciling bank transactions | `bankfeeds` | `bankfeeds` |
+| Financial Services — Lending | Lending — Loan qualification | `accounting.reports.read`
`accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.bankstatement.read` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.reports.balancesheets.read`
`accounting.reports.profitandloss.read`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.banksummary.read` |
+| Financial Services — Lending | Lending — Invoice finance | `accounting.reports.read`
`accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.bankstatement.read` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.balancesheets.read` |
+| App Store and Financial Services — Bank Feeds | Managing expenses | `accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`bankfeeds` | `accounting.banktransactions`
`accounting.contacts`
`accounting.attachments`
`bankfeeds` |
+| App Store | Dashboarding | Read-only configuration required. Please work with your implementation specialist to configure scopes. | Read-only configuration required. Please work with your implementation specialist to configure scopes. |
+| App Store | Automating payables | `accounting.transactions`
`accounting.contacts`
`accounting.attachments` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
+| App Store | Automating receivables | `accounting.transactions`
`accounting.contacts`
`accounting.attachments` | `accounting.invoices`
`accounting.payments`
`accounting.contacts`
`accounting.attachments` |
+| App Store | Integrating commerce data | `accounting.journals.read`
`accounting.transactions`
`accounting.contacts` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.journals.read` *(needs Advanced tier)*
`accounting.contacts` |
+| App Store | Managing payroll | `accounting.journals.read`
`accounting.transactions` | `accounting.manualjournals`
`accounting.journals.read` *(needs Advanced tier)* |
+| App Store and Financial Services | Spend Insights | `accounting.contacts`
`accounting.attachments`
`accounting.transactions` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
+| App Store and Financial Services | FX Insights | | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
+
+### A note on the Xero Advanced tier
+
+The `accounting.journals.read` scope is only available to apps on Xero's **Advanced** tier. If your use case requires it, confirm your Xero subscription level before submitting for certification.
From f13415d8aa4e9113849f099ead335d7370abafe6 Mon Sep 17 00:00:00 2001
From: pmckinney-codat
Date: Wed, 20 May 2026 15:56:49 +0100
Subject: [PATCH 2/5] Reformat Xero scopes table
Co-Authored-By: Claude Opus 4.7 (1M context)
---
.../xero/partner-certification/scopes.md | 26 +++++++++----------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/docs/integrations/accounting/xero/partner-certification/scopes.md b/docs/integrations/accounting/xero/partner-certification/scopes.md
index 7f74cfa78..0b92cad49 100644
--- a/docs/integrations/accounting/xero/partner-certification/scopes.md
+++ b/docs/integrations/accounting/xero/partner-certification/scopes.md
@@ -23,19 +23,19 @@ For full details, see Xero's [Granular Scopes FAQs](https://developer.xero.com/f
## Scopes by Codat use case
-| Xero Partnership Type | Codat Use Case | Current (broad) Xero Scopes | New granular Xero scopes |
-|---|---|---|---|
-| Financial Services — Bank Feeds | Reconciling bank transactions | `bankfeeds` | `bankfeeds` |
-| Financial Services — Lending | Lending — Loan qualification | `accounting.reports.read`
`accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.bankstatement.read` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.reports.balancesheets.read`
`accounting.reports.profitandloss.read`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.banksummary.read` |
-| Financial Services — Lending | Lending — Invoice finance | `accounting.reports.read`
`accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.bankstatement.read` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.balancesheets.read` |
-| App Store and Financial Services — Bank Feeds | Managing expenses | `accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`bankfeeds` | `accounting.banktransactions`
`accounting.contacts`
`accounting.attachments`
`bankfeeds` |
-| App Store | Dashboarding | Read-only configuration required. Please work with your implementation specialist to configure scopes. | Read-only configuration required. Please work with your implementation specialist to configure scopes. |
-| App Store | Automating payables | `accounting.transactions`
`accounting.contacts`
`accounting.attachments` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
-| App Store | Automating receivables | `accounting.transactions`
`accounting.contacts`
`accounting.attachments` | `accounting.invoices`
`accounting.payments`
`accounting.contacts`
`accounting.attachments` |
-| App Store | Integrating commerce data | `accounting.journals.read`
`accounting.transactions`
`accounting.contacts` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.journals.read` *(needs Advanced tier)*
`accounting.contacts` |
-| App Store | Managing payroll | `accounting.journals.read`
`accounting.transactions` | `accounting.manualjournals`
`accounting.journals.read` *(needs Advanced tier)* |
-| App Store and Financial Services | Spend Insights | `accounting.contacts`
`accounting.attachments`
`accounting.transactions` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
-| App Store and Financial Services | FX Insights | | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
+| Xero Partnership Type | Codat Use Case | Current (broad) Xero Scopes | New granular Xero scopes |
+| --------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Financial Services - Bank Feeds | Reconciling bank transactions | `bankfeeds` | `bankfeeds` |
+| Financial Services - Lending | Lending - Loan qualification | `accounting.reports.read`
`accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.bankstatement.read` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.reports.balancesheets.read`
`accounting.reports.profitandloss.read`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.banksummary.read` |
+| Financial Services - Lending | Lending - Invoice finance | `accounting.reports.read`
`accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.bankstatement.read` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments`
`accounting.reports.balancesheets.read` |
+| App Store and Financial Services - Bank Feeds | Managing expenses | `accounting.transactions`
`accounting.contacts`
`accounting.attachments`
`bankfeeds` | `accounting.banktransactions`
`accounting.contacts`
`accounting.attachments`
`bankfeeds` |
+| App Store | Dashboarding | Read-only configuration required. Please work with your implementation specialist to configure scopes. | Read-only configuration required. Please work with your implementation specialist to configure scopes. |
+| App Store | Automating payables | `accounting.transactions`
`accounting.contacts`
`accounting.attachments` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
+| App Store | Automating receivables | `accounting.transactions`
`accounting.contacts`
`accounting.attachments` | `accounting.invoices`
`accounting.payments`
`accounting.contacts`
`accounting.attachments` |
+| App Store | Integrating commerce data | `accounting.journals.read`
`accounting.transactions`
`accounting.contacts` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.journals.read` _(needs Advanced tier)_
`accounting.contacts` |
+| App Store | Managing payroll | `accounting.journals.read`
`accounting.transactions` | `accounting.manualjournals`
`accounting.journals.read` _(needs Advanced tier)_ |
+| App Store and Financial Services | Spend Insights | `accounting.contacts`
`accounting.attachments`
`accounting.transactions` | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
+| App Store and Financial Services | FX Insights | | `accounting.invoices`
`accounting.payments`
`accounting.banktransactions`
`accounting.contacts`
`accounting.attachments` |
### A note on the Xero Advanced tier
From d53d0222be8aa9f79716a4826e88cdf62280246f Mon Sep 17 00:00:00 2001
From: pmckinney-codat
Date: Wed, 20 May 2026 16:01:25 +0100
Subject: [PATCH 3/5] Add frontmatter and tweak wording in Xero scopes doc
Co-Authored-By: Claude Opus 4.7 (1M context)
---
.../accounting/xero/partner-certification/scopes.md | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/docs/integrations/accounting/xero/partner-certification/scopes.md b/docs/integrations/accounting/xero/partner-certification/scopes.md
index 0b92cad49..0dfbef23f 100644
--- a/docs/integrations/accounting/xero/partner-certification/scopes.md
+++ b/docs/integrations/accounting/xero/partner-certification/scopes.md
@@ -1,6 +1,7 @@
-# Xero scopes by use case
-
-Detailed guidance on the new granular access scopes required for the Xero partnership certification
+---
+title: "Xero scopes by use case"
+description: "Detailed guidance on the new granular access scopes required for the Xero partnership certification"
+---
[Checkpoint 7: Scopes](https://developer.xero.com/documentation/xero-app-store/app-partner-guides/certification-checkpoints/#required-for-all-integrations), part of the Xero App Partner certification program, requires that apps have the minimal access to data as required by their use case.
@@ -15,9 +16,9 @@ We have mapped out the Xero scopes that apply to each specific Codat use case in
Xero is replacing its broad OAuth 2.0 scopes — most notably `accounting.transactions` — with a set of more granular scopes, so your app requests only the data it needs.
-If you create a new Xero app on or after **2 March 2026**, you must use the new granular scopes from day one. If your app already exists, you can begin requesting the granular scopes from **April 2026**, and you must complete your migration by **September 2027**.
+If you create a new Xero app on or after **March 2, 2026**, you must use the new granular scopes from day one. If your app already exists, you can begin requesting the granular scopes from **April 2026**, and you must complete your migration by **September 2027**.
-Granular scopes are not applied to existing tokens automatically. Because your app is requesting a different set of permissions, each customer connection requires fresh, explicit consent, and you'll need customers to reauthenticate with the granular apps.
+Granular scopes aren't applied to existing tokens automatically. Because your app is requesting a different set of permissions, each customer connection requires fresh, explicit consent, and you'll need customers to reauthenticate with the granular apps.
For full details, see Xero's [Granular Scopes FAQs](https://developer.xero.com/faq/granular-scopes) and the announcement post, [Upcoming changes to Xero accounting API scopes](https://devblog.xero.com/upcoming-changes-to-xero-accounting-api-scopes-705c5a9621a0).
From 11d59fca1c94512d7c66d045387770a7f3d7403c Mon Sep 17 00:00:00 2001
From: pmckinney-codat
Date: Wed, 20 May 2026 16:08:01 +0100
Subject: [PATCH 4/5] Fix multi-entity update link in two Portal blog posts
Co-Authored-By: Claude Opus 4.7 (1M context)
---
blog/260430-portal-subsidiaries-page.md | 2 +-
blog/260506-always-visible-search.md | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/blog/260430-portal-subsidiaries-page.md b/blog/260430-portal-subsidiaries-page.md
index eef25b556..ae2b13e2b 100644
--- a/blog/260430-portal-subsidiaries-page.md
+++ b/blog/260430-portal-subsidiaries-page.md
@@ -21,7 +21,7 @@ We are introducing the following improvements:
- Dedicated subsidiaries table reuses the familiar Companies table, including search, sort, connection-status filter, and infinite scroll.
- Edit, delete, and link actions are available directly from each subsidiary row, matching the behavior on the top-level Companies page.
-These improvements apply to all parent companies in the Portal and complement the [hierarchical company table](/blog/multi-entity-portal-update) we shipped earlier this year.
+These improvements apply to all parent companies in the Portal and complement the [hierarchical company table](/updates/260217-multi-entity-portal-update) we shipped earlier this year.
## Who is this relevant for?
diff --git a/blog/260506-always-visible-search.md b/blog/260506-always-visible-search.md
index 313b6f0b3..78be00ba1 100644
--- a/blog/260506-always-visible-search.md
+++ b/blog/260506-always-visible-search.md
@@ -22,7 +22,7 @@ We are introducing the following improvements:
- Focusing the empty search input opens a popover that lists exactly which fields you can search by: **Company ID**, **Company name**, **Connection ID**, **Connected platform**, and **User who created it**.
- An updated placeholder ("Search company, platform, ID...") makes the supported search terms clearer at a glance.
-These improvements apply to the Companies and Subsidiaries pages and build on the [multi-entity company table](/blog/multi-entity-portal-update) we shipped earlier this year.
+These improvements apply to the Companies and Subsidiaries pages and build on the [multi-entity company table](/updates/260217-multi-entity-portal-update) we shipped earlier this year.
## Who is this relevant for?
From 5d43e7b88ce55c171f1810750c90bad2e063fbbf Mon Sep 17 00:00:00 2001
From: tfordcodat <133787407+tfordcodat@users.noreply.github.com>
Date: Wed, 20 May 2026 16:28:16 +0100
Subject: [PATCH 5/5] Update scopes.md
---
.../accounting/xero/partner-certification/scopes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/integrations/accounting/xero/partner-certification/scopes.md b/docs/integrations/accounting/xero/partner-certification/scopes.md
index 0dfbef23f..bb76b6dec 100644
--- a/docs/integrations/accounting/xero/partner-certification/scopes.md
+++ b/docs/integrations/accounting/xero/partner-certification/scopes.md
@@ -3,7 +3,7 @@ title: "Xero scopes by use case"
description: "Detailed guidance on the new granular access scopes required for the Xero partnership certification"
---
-[Checkpoint 7: Scopes](https://developer.xero.com/documentation/xero-app-store/app-partner-guides/certification-checkpoints/#required-for-all-integrations), part of the Xero App Partner certification program, requires that apps have the minimal access to data as required by their use case.
+[Checkpoint 5: Scopes](https://developer.xero.com/documentation/xero-app-store/app-partner-guides/certification-checkpoints/#required-for-all-integrations), part of the Xero App Partner certification program, requires that apps have the minimal access to data as required by their use case.
To comply, you must define the access scopes you need for your intended use case. During the app review, Xero will ask you to justify your use of scopes and explain why you are accessing the related data.