<@U04SE163WC8> Does Xero Connector can fetch finan...
# ask-ai
k
Based on the information available in the knowledge sources, the current
source-xero
connector does not explicitly mention support for fetching financial data such as Balance Sheet, Cash Flow, and Profit and Loss statements directly from the Xero API endpoints you referenced. However, there is an open GitHub issue requesting the addition of Journals, Quotes, and Reports data streams to the
source-xero
connector. This issue includes a user-contributed Python script that fetches Profit and Loss data, which indicates that there is interest and some groundwork laid for fetching financial data. Here is the relevant part of the user-contributed script for fetching Profit and Loss data:
Copy code
python
def get_contact_account_numbers(accounting_api: Any, xero_tenant_id: str) -> dict[str, str]:
    # Grab all the contacts
    account_codes = {}
    contacts = accounting_api.get_contacts(xero_tenant_id, where="IsCustomer==True")
    for contact in contacts.contacts:
        account_codes[contact.contact_id] = contact.account_number
    return account_codes

def get_chart_of_accounts(accounting_api: Any, xero_tenant_id: str) -> list[dict]:
    accounts = accounting_api.get_accounts(xero_tenant_id)
    rows = []
    for account in accounts.accounts:
        rows.append({
            "last_updated": arrow.now(UPTICK_HQ_TIMEZONE).isoformat(),
            "name": account.name,
            "code": account.code,
        })
    return rows

def get_profit_and_loss(
    accounting_api: Any,
    xero_tenant_id: str,
    chart_of_accounts: list[dict[Any, Any]],
    months: int = 12,
    tracking_category: str | None = None,
    header_labels: list[str] | None = None,
) -> list[dict]:
    START_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).floor("month").shift(months=-months)
    END_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).ceil("month")

    tracking_category_params = {"tracking_category_id": tracking_category} if tracking_category else {}

    if header_labels is None:
        header_labels = []

    account_to_account_and_code_map = {}
    for account in chart_of_accounts:
        account_to_account_and_code_map[account["name"]] = f"{account['code']} - {account['name']}"

    data = []

    for from_date, to_date in arrow.Arrow.span_range("month", START_SPAN.datetime, END_SPAN.datetime):
        timeframe = "MONTH"
        report = accounting_api.get_report_profit_and_loss(
            xero_tenant_id,
            from_date.date(),
            to_date.date(),
            timeframe,
            **tracking_category_params,
        )

        headers = []
        for xero_row in report.reports[0].rows:
            if xero_row.row_type == RowType.HEADER:
                headers = [cell.value for cell in xero_row.cells]
For more details, you can refer to the [GitHub issue](https://github.com/airbytehq/airbyte/issues/31395).
Based on the information available in the knowledge sources, the current
source-xero
connector does not explicitly mention support for fetching financial data such as Balance Sheet, Cash Flow, and Profit and Loss statements directly from the Xero API endpoints you referenced. However, there is an open GitHub issue requesting the addition of Journals, Quotes, and Reports data streams to the
source-xero
connector. This issue includes a user-contributed Python script that fetches Profit and Loss data, which indicates that there is interest and some groundwork laid for fetching financial data. Here is the relevant part of the user-contributed script for fetching Profit and Loss data:
Copy code
python def get_contact_account_numbers(accounting_api: Any, xero_tenant_id: str) -> dict[str, str]:     # Grab all the contacts     account_codes = {}     contacts = accounting_api.get_contacts(xero_tenant_id, where="IsCustomer==True")     for contact in contacts.contacts:         account_codes[contact.contact_id] = contact.account_number     return account_codes  def get_chart_of_accounts(accounting_api: Any, xero_tenant_id: str) -> list[dict]:     accounts = accounting_api.get_accounts(xero_tenant_id)     rows = []     for account in accounts.accounts:         rows.append({             "last_updated": arrow.now(UPTICK_HQ_TIMEZONE).isoformat(),             "name": account.name,             "code": account.code,         })     return rows  def get_profit_and_loss(     accounting_api: Any,     xero_tenant_id: str,     chart_of_accounts: list[dict[Any, Any]],     months: int = 12,     tracking_category: str | None = None,     header_labels: list[str] | None = None, ) -> list[dict]:     START_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).floor("month").shift(months=-months)     END_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).ceil("month")      tracking_category_params = {"tracking_category_id": tracking_category} if tracking_category else {}      if header_labels is None:         header_labels = []      account_to_account_and_code_map = {}     for account in chart_of_accounts:         account_to_account_and_code_map[account["name"]] = f"{account['code']} - {account['name']}"      data = []      for from_date, to_date in arrow.Arrow.span_range("month", START_SPAN.datetime, END_SPAN.datetime):         timeframe = "MONTH"         report = accounting_api.get_report_profit_and_loss(             xero_tenant_id,             from_date.date(),             to_date.date(),             timeframe,             **tracking_category_params,         )          headers = []         for xero_row in report.reports[0].rows:             if xero_row.row_type == RowType.HEADER:                 headers = [cell.value for cell in xero_row.cells]
For more details, you can refer to the [GitHub issue](https://github.com/airbytehq/airbyte/issues/31395). Additionally, please note that the Xero connector is subject to Xero's API rate limits, which could impact performance when fetching large amounts of data. More information on this can be found in the [performance considerations](https://docs.airbyte.com/integrations/sources/xero#performance-considerations). If you need these specific financial data streams, you might consider contributing to the connector or collaborating with the community to extend its capabilities.
Based on the information available in the knowledge sources, the Xero connector for Airbyte currently does not explicitly mention support for fetching financial data such as Balance Sheet, Cash Flow, and Profit and Loss statements directly from the Xero API endpoints you referenced. However, there is an open GitHub issue requesting the addition of Journals, Quotes, and Reports data streams to the
source-xero
connector, which includes fetching Profit and Loss data. A user has also shared a Python script to fetch Profit and Loss data, indicating that there is interest and some groundwork laid for this functionality. Here is the relevant Python code snippet shared by a user for fetching Profit and Loss data:
Copy code
python
def get_contact_account_numbers(accounting_api: Any, xero_tenant_id: str) -> dict[str, str]:
    # Grab all the contacts
    account_codes = {}
    contacts = accounting_api.get_contacts(xero_tenant_id, where="IsCustomer==True")
    for contact in contacts.contacts:
        account_codes[contact.contact_id] = contact.account_number
    return account_codes

def get_chart_of_accounts(accounting_api: Any, xero_tenant_id: str) -> list[dict]:
    accounts = accounting_api.get_accounts(xero_tenant_id)
    rows = []
    for account in accounts.accounts:
        rows.append({
            "last_updated": arrow.now(UPTICK_HQ_TIMEZONE).isoformat(),
            "name": account.name,
            "code": account.code,
        })
    return rows

def get_profit_and_loss(
    accounting_api: Any,
    xero_tenant_id: str,
    chart_of_accounts: list[dict[Any, Any]],
    months: int = 12,
    tracking_category: str | None = None,
    header_labels: list[str] | None = None,
) -> list[dict]:
    START_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).floor("month").shift(months=-months)
    END_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).ceil("month")

    tracking_category_params = {"tracking_category_id": tracking_category} if tracking_category else {}

    if header_labels is None:
        header_labels = []

    account_to_account_and_code_map = {}
    for account in chart_of_accounts:
        account_to_account_and_code_map[account["name"]] = f"{account['code']} - {account['name']}"

    data = []

    for from_date, to_date in arrow.Arrow.span_range("month", START_SPAN.datetime, END_SPAN.datetime):
        timeframe = "MONTH"
        report = accounting_api.get_report_profit_and_loss(
            xero_tenant_id,
            from_date.date(),
            to_date.date(),
            timeframe,
            **tracking_category_params,
        )

        headers = []
        for xero_row in report.reports[0].rows:
            if xero_row.row_type == RowType.HEADER:
                headers = [cell.value for cell in xero_row.cells]
For more details, you can refer to the [GitHub issue](https://github.com/airbytehq/airbyte/issues/31395).
Based on the information available in the knowledge sources, the Xero connector for Airbyte currently does not explicitly mention support for fetching financial data such as Balance Sheet, Cash Flow, and Profit and Loss statements directly from the Xero API endpoints you referenced. However, there is an open GitHub issue requesting the addition of Journals, Quotes, and Reports data streams to the
source-xero
connector, which includes fetching Profit and Loss data. A user has also shared a Python script to fetch Profit and Loss data, indicating that there is interest and some groundwork laid for this functionality. Here is the relevant Python code snippet shared by a user for fetching Profit and Loss data:
Copy code
python def get_contact_account_numbers(accounting_api: Any, xero_tenant_id: str) -> dict[str, str]:     # Grab all the contacts     account_codes = {}     contacts = accounting_api.get_contacts(xero_tenant_id, where="IsCustomer==True")     for contact in contacts.contacts:         account_codes[contact.contact_id] = contact.account_number     return account_codes  def get_chart_of_accounts(accounting_api: Any, xero_tenant_id: str) -> list[dict]:     accounts = accounting_api.get_accounts(xero_tenant_id)     rows = []     for account in accounts.accounts:         rows.append({             "last_updated": arrow.now(UPTICK_HQ_TIMEZONE).isoformat(),             "name": account.name,             "code": account.code,         })     return rows  def get_profit_and_loss(     accounting_api: Any,     xero_tenant_id: str,     chart_of_accounts: list[dict[Any, Any]],     months: int = 12,     tracking_category: str | None = None,     header_labels: list[str] | None = None, ) -> list[dict]:     START_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).floor("month").shift(months=-months)     END_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).ceil("month")      tracking_category_params = {"tracking_category_id": tracking_category} if tracking_category else {}      if header_labels is None:         header_labels = []      account_to_account_and_code_map = {}     for account in chart_of_accounts:         account_to_account_and_code_map[account["name"]] = f"{account['code']} - {account['name']}"      data = []      for from_date, to_date in arrow.Arrow.span_range("month", START_SPAN.datetime, END_SPAN.datetime):         timeframe = "MONTH"         report = accounting_api.get_report_profit_and_loss(             xero_tenant_id,             from_date.date(),             to_date.date(),             timeframe,             **tracking_category_params,         )          headers = []         for xero_row in report.reports[0].rows:             if xero_row.row_type == RowType.HEADER:                 headers = [cell.value for cell in xero_row.cells]
For more details, you can refer to the [GitHub issue](https://github.com/airbytehq/airbyte/issues/31395). Additionally, please note that the Xero connector is subject to Xero's API rate limits, which could impact performance when fetching large datasets. More information on this can be found in the [performance considerations](https://docs.airbyte.com/integrations/sources/xero#performance-considerations). If you need these specific financial data streams, you might need to extend the connector or collaborate with the community to add this functionality. You can also check the [Airbyte documentation](https://docs.airbyte.com/integrations/sources/xero) for any updates or additional information.
v
@kapa.ai Can i add supporting these streams on my own?
k
A message from kapa.ai
Yes, you can add support for these streams on your own by contributing to the Airbyte project. Here are the steps you can follow to add new streams to the Xero connector: 1. Fork the Airbyte Repository: Start by forking the [Airbyte repository on GitHub](https://github.com/airbytehq/airbyte). 2. Clone Your Fork: Clone your forked repository to your local machine.
Copy code
bash     git clone <https://github.com/YOUR_GITHUB_USERNAME/airbyte.git>     cd airbyte
3. Create a New Branch: Create a new branch for your changes.
Copy code
bash     git checkout -b add-xero-financial-streams
4. Modify the Xero Connector: Navigate to the Xero connector directory and start adding the new streams. You will need to modify the source code to include the new endpoints for Balance Sheet, Cash Flow, and Profit and Loss statements. 5. Implement the New Streams: Use the Xero API documentation to implement the new streams. You can refer to the Python code snippet shared in the [GitHub issue](https://github.com/airbytehq/airbyte/issues/31395) for fetching Profit and Loss data as a starting point. 6. Test Your Changes: Ensure that you thoroughly test your changes. You can use the
./gradlew
command to build and test the project.
Copy code
bash     ./gradlew clean build
7. Submit a Pull Request: Once you are satisfied with your changes, push your branch to your fork and submit a pull request to the main Airbyte repository.
Copy code
bash     git push origin add-xero-financial-streams
Then, go to the Airbyte repository on GitHub and create a pull request from your branch. 8. Engage with the Community: Be prepared to engage with the Airbyte community and maintainers for any feedback or changes requested during the review process. For more detailed guidance on contributing to Airbyte, you can refer to the [Airbyte contribution guide](https://docs.airbyte.com/contributing-to-airbyte/). By following these steps, you can add support for the financial data streams you need and contribute to the Airbyte project.
v
@kapa.ai do i need to use refresh token in the latest 1.0.0 version of Xero source connector?
k
A message from kapa.ai
Based on the information available in the knowledge sources, the latest 1.0.0 version of the Xero source connector for Airbyte does require the use of a refresh token for the Airbyte Open Source setup. Here are the details: ### For Airbyte Open Source: To set up the Xero connector, you need to follow the OAuth 2.0 authentication flow, which includes obtaining a refresh token. Here are the prerequisites and steps: #### Prerequisites: - Tenant ID - Start Date - Client ID - Client Secret - Refresh Token - Access Token - Token Expiry Date You can follow the [instructions](https://developer.xero.com/documentation/guides/oauth2/auth-flow/) to obtain all the required tokens and credentials. #### Setup Steps: 1. Create an application in the [Xero development center](https://developer.xero.com/app/manage/). 2. Use the obtained credentials (Client ID, Client Secret, Refresh Token, Access Token, Token Expiry Date) to configure the Xero connector in Airbyte. ### For Airbyte Cloud: The setup process is simplified and uses OAuth 2.0 directly through the Airbyte Cloud interface. You do not need to manually handle the refresh token in this case. #### Setup Steps: 1. [Log into your Airbyte Cloud](https://cloud.airbyte.com/workspaces) account. 2. In the left navigation bar, click Sources. In the top-right corner, click + new source. 3. On the source setup page, select Xero from the Source type dropdown and enter a name for this connector. 4. Click
Authenticate your Xero account
. 5. Log in and
Allow access
. 6. Enter your Xero Organisation's [Tenant ID](https://developer.xero.com/documentation/guides/oauth2/auth-flow/#xero-tenants). 7. Enter the Start Date in the format
YYYY-MM-DDTHH:mm:ssZ
. For more detailed information, you can refer to the [Xero connector documentation](https://docs.airbyte.com/integrations/sources/xero#xero). ### Summary: - Airbyte Open Source: Yes, you need to use a refresh token. - Airbyte Cloud: No, the refresh token is handled automatically through the OAuth 2.0 flow. For further details, you can check the [Xero connector documentation](https://docs.airbyte.com/integrations/sources/xero#xero).
v
@kapa.ai So how token refresh works on this version?
k
A message from kapa.ai
In the latest version of the Xero source connector (1.0.0) for Airbyte, the token refresh mechanism works by using the OAuth 2.0 flow to automatically refresh the access token when it expires. Here’s how it works: ### Token Refresh Mechanism 1. Initial Setup: During the initial setup, you provide the necessary credentials, including the
client_id
,
client_secret
, and
refresh_token
. 2. Access Token Request: When the connector needs to access the Xero API, it first checks if the current access token is valid. If the access token has expired, the connector will use the refresh token to obtain a new access token. 3. Refresh Token Request: The connector sends a request to the token refresh endpoint with the
client_id
,
client_secret
, and
refresh_token
. The request typically looks like this:
Copy code
bash     curl -X POST \      -H "Content-Type: application/json" \      -d '{"client_id": "<client_id>", "client_secret": "<client_secret>", "refresh_token": "<refresh_token>", "grant_type": "refresh_token" }' \      <https://identity.xero.com/connect/token>
4. Response Handling: The response from the token refresh endpoint includes a new access token and potentially a new refresh token. The connector updates its stored tokens with these new values. Example response:
Copy code
json     {       "access_token": "<new_access_token>",       "expires_in": 1800,       "token_type": "Bearer",       "refresh_token": "<new_refresh_token>"     }
5. Automatic Update: The connector automatically updates the stored access token and refresh token, ensuring that it can continue to make authenticated requests to the Xero API without manual intervention. ### Configuration Example Here is an example configuration for the Xero connector in Airbyte:
Copy code
yaml authenticator:   type: "OAuthAuthenticator"   token_refresh_endpoint: "<https://identity.xero.com/connect/token>"   client_id: "{{ config['client_id'] }}"   client_secret: "{{ config['client_secret'] }}"   refresh_token: "{{ config['refresh_token'] }}"   access_token_name: "access_token"   expires_in_name: "expires_in"   refresh_request_body:     client_id: "{{ config['client_id'] }}"     client_secret: "{{ config['client_secret'] }}"     refresh_token: "{{ config['refresh_token'] }}"     grant_type: "refresh_token"
### Documentation Links For more detailed information, you can refer to the following documentation: - [Xero Connector Documentation](https://docs.airbyte.com/integrations/sources/xero#xero) - [OAuth 2.0 Authentication Flow](https://developer.xero.com/documentation/guides/oauth2/auth-flow/) By following these steps, the Xero connector will handle token refreshes automatically, ensuring continuous access to the Xero API.
v
@kapa.ai Can Xero connector fetch reports which is described here? https://developer.xero.com/documentation/api/accounting/reports
k
A message from kapa.ai
Based on the information available in the knowledge sources, the Xero connector for Airbyte currently does not explicitly mention support for fetching reports directly from the Xero API endpoints described in the [Xero Accounting Reports API](https://developer.xero.com/documentation/api/accounting/reports). However, there is an open GitHub issue requesting the addition of Journals, Quotes, and Reports data streams to the
source-xero
connector. This indicates that there is interest in adding support for these types of data, including reports such as Profit and Loss. ### Relevant GitHub Issue The GitHub issue [#31395](https://github.com/airbytehq/airbyte/issues/31395) discusses the need to add Journals, Quotes, and Reports data streams to the Xero connector. A user has also shared a Python script to fetch Profit and Loss data, which is part of the reports you are interested in. ### Python Code Snippet for Profit and Loss Here is the relevant Python code snippet shared by a user for fetching Profit and Loss data:
Copy code
python
def get_profit_and_loss(
    accounting_api: Any,
    xero_tenant_id: str,
    chart_of_accounts: list[dict[Any, Any]],
    months: int = 12,
    tracking_category: str | None = None,
    header_labels: list[str] | None = None,
) -> list[dict]:
    START_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).floor("month").shift(months=-months)
    END_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).ceil("month")

    tracking_category_params = {"tracking_category_id": tracking_category} if tracking_category else {}

    if header_labels is None:
        header_labels = []

    account_to_account_and_code_map = {}
    for account in chart_of_accounts:
        account_to_account_and_code_map[account["name"]] = f"{account['code']} - {account['name']}"

    data = []

    for from_date, to_date in arrow.Arrow.span_range("month", START_SPAN.datetime, END_SPAN.datetime):
        timeframe = "MONTH"
        report = accounting_api.get_report_profit_and_loss(
            xero_tenant_id,
            from_date.date(),
            to_date.date(),
            timeframe,
            **tracking_category_params,
        )

        headers = []
        for xero_row in report.reports[0].rows:
            if xero_row.row_type == RowType.HEADER:
                headers = [cell.value for cell in xero_row.cells]
### Adding Support for Reports If you need to fetch other types of reports (e.g., Balance Sheet, Cash Flow), you might need to extend the connector or collaborate with the community to add this functionality. You can follow the steps mentioned in the previous response to contribute to the Airbyte project.
Based on the information available in the knowledge sources, the Xero connector for Airbyte currently does not explicitly mention support for fetching reports directly from the Xero API endpoints described in the [Xero Accounting Reports API](https://developer.xero.com/documentation/api/accounting/reports). However, there is an open GitHub issue requesting the addition of Journals, Quotes, and Reports data streams to the
source-xero
connector. This indicates that there is interest in adding support for these types of data, including reports such as Profit and Loss. ### Relevant GitHub Issue The GitHub issue [#31395](https://github.com/airbytehq/airbyte/issues/31395) discusses the need to add Journals, Quotes, and Reports data streams to the Xero connector. A user has also shared a Python script to fetch Profit and Loss data, which is part of the reports you are interested in. ### Python Code Snippet for Profit and Loss Here is the relevant Python code snippet shared by a user for fetching Profit and Loss data:
Copy code
python def get_profit_and_loss(     accounting_api: Any,     xero_tenant_id: str,     chart_of_accounts: list[dict[Any, Any]],     months: int = 12,     tracking_category: str | None = None,     header_labels: list[str] | None = None, ) -> list[dict]:     START_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).floor("month").shift(months=-months)     END_SPAN = arrow.now(UPTICK_HQ_TIMEZONE).ceil("month")      tracking_category_params = {"tracking_category_id": tracking_category} if tracking_category else {}      if header_labels is None:         header_labels = []      account_to_account_and_code_map = {}     for account in chart_of_accounts:         account_to_account_and_code_map[account["name"]] = f"{account['code']} - {account['name']}"      data = []      for from_date, to_date in arrow.Arrow.span_range("month", START_SPAN.datetime, END_SPAN.datetime):         timeframe = "MONTH"         report = accounting_api.get_report_profit_and_loss(             xero_tenant_id,             from_date.date(),             to_date.date(),             timeframe,             **tracking_category_params,         )          headers = []         for xero_row in report.reports[0].rows:             if xero_row.row_type == RowType.HEADER:                 headers = [cell.value for cell in xero_row.cells]
### Adding Support for Reports If you need to fetch other types of reports (e.g., Balance Sheet, Cash Flow), you might need to extend the connector or collaborate with the community to add this functionality. You can follow the steps mentioned in the previous response to contribute to the Airbyte project. ### Documentation Links For more detailed information, you can refer to the following documentation: - [Xero Connector Documentation](https://docs.airbyte.com/integrations/sources/xero#xero) - [Xero Accounting Reports API](https://developer.xero.com/documentation/api/accounting/reports) - [GitHub Issue #31395](https://github.com/airbytehq/airbyte/issues/31395) By following these steps and utilizing the provided resources, you can work towards adding support for fetching the reports you need from the Xero API.
v
@kapa.ai hello! why refresh token removed in 1.0.0 version of Xero source connector?
k
A message from kapa.ai
Hello! In the 1.0.0 version of the Xero source connector, the authentication schema has been updated to use
access_token
instead of OAuth 2.0, which previously required a refresh token. This change simplifies the authentication process and aligns with the updated Xero API authentication flow. ### Key Changes in Version 1.0.0 - Authentication Schema: The connector now uses
access_token
for authentication. - OAuth 2.0 Flow: The previous OAuth 2.0 flow, which required a refresh token, has been replaced. ### How to Obtain an Access Token You can obtain an access token by following the steps outlined in the Xero documentation or using tools like Postman. Here’s a brief overview: 1. Using Postman: - Move to the Authorization tab of an empty HTTP request and select OAuth 2.0. - Set the token type as
access token
. - Set the header prefix as
Bearer
. - Set the grant type as
Authorization code
. - Check
Authorize using browser
. - Set the Auth URL as
<https://login.xero.com/identity/connect/authorize>
. - Set the Access token URL as
<https://identity.xero.com/connect/token>
. - Set Client ID, Client Secret, and Scope as defined in your Xero settings. - Set state as any number, e.g.,
123
. - Set Client Authentication as
Send as Basic Auth Header
. - Click
Get New Access Token
to retrieve the access token. 2. Authorize Your Source: - Go to the setup page for the source. - Enter your Xero application's access token. - Click the
Reset saved source
button. For more detailed information, you can refer to the [Xero Migration Guide](https://docs.airbyte.com/integrations/sources/xero-migrations#upgrading-to-100). ### Summary The removal of the refresh token in version 1.0.0 of the Xero source connector is part of an update to streamline the authentication process by using
access_token
directly. This change simplifies the setup and aligns with the latest Xero API authentication practices. For further details, you can check the [Xero connector documentation](https://docs.airbyte.com/integrations/sources/xero#xero).
a
Hi @Vadym Maltsev, curious to know which xero connection type you used to set up your connector, and whether the access_token is failing to refresh after some time and simply expiring
v
@Abdul Rahman Zantout hello! Currently i'm using custom Xero connector which is made from version 1.0.0 and switched from PCKE to Oauth 2.0 authorization back.
manifest.yaml
a
Amazing, thank you @Vadym Maltsev this is of huge help