[GH-ISSUE #4039] [Bug]: White screen after clicking "Continue" after setting up account linking with GoCardless #15950

Closed
opened 2026-04-14 19:05:07 -05:00 by GiteaMirror · 17 comments
Owner

Originally created by @takkaria on GitHub (Dec 25, 2024).
Original GitHub issue: https://github.com/actualbudget/actual/issues/4039

Verified issue does not already exist?

  • I have searched and found no existing issue

What happened?

I repeatedly tried to set up my bank account syncing via GoCardless. I exceeded a limit by my institution while doing this, apparently –

(in the JS console, network tab, I can see a request to https://precise-dragon.pikapod.net/gocardless/get-accounts while setting up sync returned:)

{
    "status": "ok",
    "data": {
        "error_code": "INTERNAL_ERROR",
        "error_type": "Daily request limit set by the Institution has been exceeded"
    }
}

But this error doesn't make it to the UI. Instead, the UI says the setup went fine and if I click the 'continue' button I can set up which accounts get synced - but if I do that, I get a white screen.

The JS console error then is

Uncaught TypeError: Cannot read properties of undefined (reading 'sort')

at this line:

externalAccounts.sort((a, b) => a.name.localeCompare(b.name));

in SelectLinkedAccountsModal.jsx:34.

I can see that GoCardless (by listing requisitions using the API) has successfully authorised the account by something has clearly fallen over in the process.

How can we reproduce the issue?

  1. Click 'add account' on sidebar
  2. Choose to link using GoCardless
  3. Go through GoCardless registration setup
  4. Get back to Actual, wait for "waiting for GoCardless..." to disappear and the Continue button to appear
  5. Click the Continue button

Where are you hosting Actual?

Pikapods

What browsers are you seeing the problem on?

Chrome, Safari

Operating System

Mac OSX

Originally created by @takkaria on GitHub (Dec 25, 2024). Original GitHub issue: https://github.com/actualbudget/actual/issues/4039 ### Verified issue does not already exist? - [X] I have searched and found no existing issue ### What happened? I repeatedly tried to set up my bank account syncing via GoCardless. I exceeded a limit by my institution while doing this, apparently – (in the JS console, network tab, I can see a request to `https://precise-dragon.pikapod.net/gocardless/get-accounts` while setting up sync returned:) ``` { "status": "ok", "data": { "error_code": "INTERNAL_ERROR", "error_type": "Daily request limit set by the Institution has been exceeded" } } ``` But this error doesn't make it to the UI. Instead, the UI says the setup went fine and if I click the 'continue' button I can set up which accounts get synced - but if I do that, I get a white screen. The JS console error then is ``` Uncaught TypeError: Cannot read properties of undefined (reading 'sort') ``` at this line: ```javascript externalAccounts.sort((a, b) => a.name.localeCompare(b.name)); ``` in SelectLinkedAccountsModal.jsx:34. I can see that GoCardless (by listing requisitions using the API) has successfully authorised the account by something has clearly fallen over in the process. ### How can we reproduce the issue? 1. Click 'add account' on sidebar 2. Choose to link using GoCardless 3. Go through GoCardless registration setup 4. Get back to Actual, wait for "waiting for GoCardless..." to disappear and the Continue button to appear 5. Click the Continue button ### Where are you hosting Actual? Pikapods ### What browsers are you seeing the problem on? Chrome, Safari ### Operating System Mac OSX
GiteaMirror added the bug label 2026-04-14 19:05:07 -05:00
Author
Owner

@bramhoven commented on GitHub (Jan 2, 2025):

I have this same issue for one of my accounts. I can link another account with the same institution without a problem.

<!-- gh-comment-id:2567900268 --> @bramhoven commented on GitHub (Jan 2, 2025): I have this same issue for one of my accounts. I can link another account with the same institution without a problem.
Author
Owner

@joppevos commented on GitHub (Jan 10, 2025):

I can confirm that I am experiencing the same issue. I tried with two different bank accounts. one, Revolut, works successfully, while the other, ABN AMRO, results in the same error.

<!-- gh-comment-id:2582100594 --> @joppevos commented on GitHub (Jan 10, 2025): I can confirm that I am experiencing the same issue. I tried with two different bank accounts. one, Revolut, works successfully, while the other, ABN AMRO, results in the same error.
Author
Owner

@bramhoven commented on GitHub (Jan 10, 2025):

I tried it again today and it seemed to work. I did move my Actual installation to a different machine with new GoCardless secrets. I do not know if that fixed it or something has been reset/fixed

<!-- gh-comment-id:2582184805 --> @bramhoven commented on GitHub (Jan 10, 2025): I tried it again today and it seemed to work. I did move my Actual installation to a different machine with new GoCardless secrets. I do not know if that fixed it or something has been reset/fixed
Author
Owner

@RACSOB0Y commented on GitHub (Mar 2, 2025):

I am running Actual server on Portainer, and have discovered this bug also. The docker logs for me include this at the end:

data: {
        summary: 'Rate limit exceeded',
        detail: 'The rate limit for this resource is 4/day. Please try again in 81276 seconds',
        status_code: 429
      }
<!-- gh-comment-id:2692505000 --> @RACSOB0Y commented on GitHub (Mar 2, 2025): I am running Actual server on Portainer, and have discovered this bug also. The docker logs for me include this at the end: ``` data: { summary: 'Rate limit exceeded', detail: 'The rate limit for this resource is 4/day. Please try again in 81276 seconds', status_code: 429 } ```
Author
Owner

@barinali commented on GitHub (Mar 13, 2025):

I experience the same problem with my N26 accounts from the very beginning. It has not ever worked on several attempts several days.

The log in the console upon successfully linking the accounts from GoCardless Open Banking API;

23:02:24.047 SelectLinkedAccountsModal.jsx:43 Uncaught TypeError: Cannot read properties of undefined (reading 'sort')
    at cVe (SelectLinkedAccountsModal.jsx:43:20)
    at kE (react-dom.production.min.js:167:137)
<!-- gh-comment-id:2722790158 --> @barinali commented on GitHub (Mar 13, 2025): I experience the same problem with my N26 accounts from the very beginning. It has not ever worked on several attempts several days. The log in the console upon successfully linking the accounts from GoCardless Open Banking API; ``` 23:02:24.047 SelectLinkedAccountsModal.jsx:43 Uncaught TypeError: Cannot read properties of undefined (reading 'sort') at cVe (SelectLinkedAccountsModal.jsx:43:20) at kE (react-dom.production.min.js:167:137) ```
Author
Owner

@NeilSCGH commented on GitHub (Mar 25, 2025):

Same problem here. (running Actual with docker)
I also have Daily request limit set by the Institution has been exceeded

And after clicking the continue button, the browser console also shows:

TypeError: Cannot read properties of undefined (reading 'sort') at ...
Uncaught TypeError: Cannot read properties of undefined (reading 'sort') at ...

The daily limit is not an error from Actual, but it would be better to print a pretty error message in the UI + preventing from clicking the continue button, instead of failing silently.

Without doing anything (nothing but waiting 3 days), https://github.com/actualbudget/actual/issues/3888#issuecomment-2507944242 that was facing a similar issue managed to connect Actual to N26.

More container logs here:

Error /gocardless/get-accounts RateLimitError: Daily request limit set by the Institution has been exceeded
    at handleGoCardlessError (file:///app/src/app-gocardless/services/gocardless-service.js:55:13)
    at Object.getDetailedAccount (file:///app/src/app-gocardless/services/gocardless-service.js:412:7)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async file:///app/src/app-gocardless/services/gocardless-service.js:152:25
    at async Promise.all (index 1)
    at async Object.getRequisitionWithAccounts (file:///app/src/app-gocardless/services/gocardless-service.js:150:30)
    at async file:///app/src/app-gocardless/app-gocardless.js:70:9 {
  details: h [AxiosError]: Request failed with status code 429
      at te (file:///app/node_modules/nordigen-node/dist/index.esm.js:13:914)
      at IncomingMessage.<anonymous> (file:///app/node_modules/nordigen-node/dist/index.esm.js:17:16315)
      at IncomingMessage.emit (node:events:529:35)
      at endReadableNT (node:internal/streams/readable:1400:12)
      at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
    code: 'ERR_BAD_REQUEST',
<!-- gh-comment-id:2751819018 --> @NeilSCGH commented on GitHub (Mar 25, 2025): Same problem here. (running Actual with docker) I also have `Daily request limit set by the Institution has been exceeded` And after clicking the continue button, the browser console also shows: ``` TypeError: Cannot read properties of undefined (reading 'sort') at ... Uncaught TypeError: Cannot read properties of undefined (reading 'sort') at ... ``` The daily limit is not an error from Actual, but it would be better to print a pretty error message in the UI + preventing from clicking the continue button, instead of failing silently. Without doing anything (nothing but waiting 3 days), https://github.com/actualbudget/actual/issues/3888#issuecomment-2507944242 that was facing a similar issue managed to connect Actual to N26. More container logs here: ``` Error /gocardless/get-accounts RateLimitError: Daily request limit set by the Institution has been exceeded at handleGoCardlessError (file:///app/src/app-gocardless/services/gocardless-service.js:55:13) at Object.getDetailedAccount (file:///app/src/app-gocardless/services/gocardless-service.js:412:7) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async file:///app/src/app-gocardless/services/gocardless-service.js:152:25 at async Promise.all (index 1) at async Object.getRequisitionWithAccounts (file:///app/src/app-gocardless/services/gocardless-service.js:150:30) at async file:///app/src/app-gocardless/app-gocardless.js:70:9 { details: h [AxiosError]: Request failed with status code 429 at te (file:///app/node_modules/nordigen-node/dist/index.esm.js:13:914) at IncomingMessage.<anonymous> (file:///app/node_modules/nordigen-node/dist/index.esm.js:17:16315) at IncomingMessage.emit (node:events:529:35) at endReadableNT (node:internal/streams/readable:1400:12) at process.processTicksAndRejections (node:internal/process/task_queues:82:21) { code: 'ERR_BAD_REQUEST', ```
Author
Owner

@philipp-mlr commented on GitHub (Apr 2, 2025):

Same issue linking N26 Bank with GoCardless:

{
  "status": "ok",
  "data": {
    "error_code": "INTERNAL_ERROR",
    "error_type": "Daily request limit set by the Institution has been exceeded"
  }
}
<!-- gh-comment-id:2772670822 --> @philipp-mlr commented on GitHub (Apr 2, 2025): Same issue linking N26 Bank with GoCardless: ``` { "status": "ok", "data": { "error_code": "INTERNAL_ERROR", "error_type": "Daily request limit set by the Institution has been exceeded" } } ```
Author
Owner

@barinali commented on GitHub (Apr 5, 2025):

I installed v25.4.0 immediately once I saw it available, as I had the impression that it'd have improved the experience around this issue. It indeed did. Now, instead of seeing a white screen, I see an empty accounts dialog, as can be seen in the screenshot below.

Image

I am trying to connect my N26 account every 2-3 days to safely dodge rate limits per day. However, whenever I try, it immediately hits rate limits as below.

POST https://redacted-host.tld/gocardless/get-accounts

{
  "status": "ok",
  "data": {
    "error_code": "INTERNAL_ERROR",
    "error_type": "Daily request limit set by the Institution has been exceeded"
  }
}
<!-- gh-comment-id:2780882905 --> @barinali commented on GitHub (Apr 5, 2025): I installed v25.4.0 immediately once I saw it available, as I had the impression that it'd have improved the experience around this issue. It indeed did. Now, instead of seeing a white screen, I see an empty accounts dialog, as can be seen in the screenshot below. ![Image](https://github.com/user-attachments/assets/d937d20e-6707-4c98-9228-c6c4250e19a8) I am trying to connect my N26 account every 2-3 days to safely dodge rate limits per day. However, whenever I try, it immediately hits rate limits as below. POST https://redacted-host.tld/gocardless/get-accounts ``` { "status": "ok", "data": { "error_code": "INTERNAL_ERROR", "error_type": "Daily request limit set by the Institution has been exceeded" } } ```
Author
Owner

@NeilSCGH commented on GitHub (Apr 6, 2025):

I updated Actual to v25.4.0, but it didn't help for me.

I think i've found why the Daily request limit set by the Institution has been exceeded.
A long time ago, I've created multiple spaces in N26 to make some tests, and then deleted it, but GoCardLess still find them. The result is that now I have 22 entries in GoCardLess for my N26 account.

When Actual encounters the Daily limit error, the logs show that Actual was trying to reach every entries, and it seems that it was trying to contact them multiple times.
So in my case it creates more than 30 request to N26, and it triggers the daily limit.

EDIT:
When recreating any request that was in the log with this curl request:

curl -X GET 'https://bankaccountdata.gocardless.com/api/v2/accounts/___REDACTED___/details' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'User-Agent: Nordigen-Node-v2' \
  -H 'Authorization: Bearer ___REDACTED___' \
  -H 'Accept-Encoding: gzip, compress, deflate, br'

I have a good 200 response, that contains:

{
    "account": {
        "resourceId": "___REDACTED___",
        "currency": "EUR",
        "ownerName": "___REDACTED___",
        "name": "Test1",
        "product": "Space",
        "cashAccountType": "CACC",
        "status": "deleted",
        "usage": "PRIV"
    }
}

But after multiple requests, I finally have this error message:

{
    "summary": "Rate limit exceeded",
    "detail": "The rate limit for this resource is 4/day. Please try again in 84995 seconds",
    "status_code": 429
}

So it seems to be a limit of 4 request per account ID per day (the id that is REDACTED above).
I did'nt managed to find an account id that is already blocked, every account id I've tried was only reached 1 time. So I don't know the exact request that triggered the 429 error with Actual.

Here is some related GoCardLess doc.

<!-- gh-comment-id:2781368530 --> @NeilSCGH commented on GitHub (Apr 6, 2025): I updated Actual to v25.4.0, but it didn't help for me. I think i've found why the `Daily request limit set by the Institution has been exceeded`. A long time ago, I've created multiple spaces in N26 to make some tests, and then deleted it, but GoCardLess still find them. The result is that now I have 22 entries in GoCardLess for my N26 account. When Actual encounters the Daily limit error, the logs show that Actual was trying to reach every entries, and it seems that it was trying to contact them multiple times. So in my case it creates more than 30 request to N26, and it triggers the daily limit. EDIT: When recreating any request that was in the log with this curl request: ``` curl -X GET 'https://bankaccountdata.gocardless.com/api/v2/accounts/___REDACTED___/details' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -H 'User-Agent: Nordigen-Node-v2' \ -H 'Authorization: Bearer ___REDACTED___' \ -H 'Accept-Encoding: gzip, compress, deflate, br' ``` I have a good 200 response, that contains: ``` { "account": { "resourceId": "___REDACTED___", "currency": "EUR", "ownerName": "___REDACTED___", "name": "Test1", "product": "Space", "cashAccountType": "CACC", "status": "deleted", "usage": "PRIV" } } ``` But after multiple requests, I finally have this error message: ``` { "summary": "Rate limit exceeded", "detail": "The rate limit for this resource is 4/day. Please try again in 84995 seconds", "status_code": 429 } ``` So it seems to be a limit of 4 request per account ID per day (the id that is ___REDACTED___ above). I did'nt managed to find an account id that is already blocked, every account id I've tried was only reached 1 time. So I don't know the exact request that triggered the 429 error with Actual. [Here is](https://bankaccountdata.zendesk.com/hc/en-gb/articles/11529584398236-Bank-API-Rate-Limits-and-Rate-Limit-Headers) some related GoCardLess doc.
Author
Owner

@rubenmamo commented on GitHub (Apr 8, 2025):

I too have a similar error, I see this in the log:

     data: {
        summary: "Couldn't update account details",
        detail: 'Daily request limit set by the Institution has been exceeded.',
        status_code: 429,
        type: 'RateLimitError'
      }

It would be nice if the UI exposed the error to the user instead of swallowing the error and just showing a white screen

<!-- gh-comment-id:2787152110 --> @rubenmamo commented on GitHub (Apr 8, 2025): I too have a similar error, I see this in the log: ``` data: { summary: "Couldn't update account details", detail: 'Daily request limit set by the Institution has been exceeded.', status_code: 429, type: 'RateLimitError' } ``` It would be nice if the UI exposed the error to the user instead of swallowing the error and just showing a white screen
Author
Owner

@barinali commented on GitHub (Apr 10, 2025):

I have tried to connect my N26 account again for the first time since my last comment here. I could finally succeed! The only differences I could mention before trying to connect again;

  • waiting enough for the rate limit to go off
  • manually deleting all the existing requisitions via endpoints on GoCardless UI. However, this may be unnecessary.
<!-- gh-comment-id:2795327458 --> @barinali commented on GitHub (Apr 10, 2025): I have tried to connect my N26 account again for the first time since my last comment here. I could finally succeed! The only differences I could mention before trying to connect again; - waiting enough for the rate limit to go off - manually deleting all the existing requisitions via endpoints on [GoCardless UI](https://bankaccountdata.gocardless.com/api/docs#/requisitions/delete%20requisition%20by%20id). However, this may be unnecessary.
Author
Owner

@JanC commented on GitHub (Apr 18, 2025):

hi,
I'm running into the same issue. Do you know Is that rate limit coming from n26 or from GoCardless?

I tried to wait several days but I'm getting this error consistently.

<!-- gh-comment-id:2815365631 --> @JanC commented on GitHub (Apr 18, 2025): hi, I'm running into the same issue. Do you know Is that rate limit coming from n26 or from GoCardless? I tried to wait several days but I'm getting this error consistently.
Author
Owner

@mattdmoore commented on GitHub (May 1, 2025):

Same issue for me with N26, been trying for a couple of days now but I think I'll wait until next week and see if I get lucky like some others did. Insane decision from GoCardless/N26(?) to put in rate limits this strict, totally unusable.

<!-- gh-comment-id:2845918944 --> @mattdmoore commented on GitHub (May 1, 2025): Same issue for me with N26, been trying for a couple of days now but I think I'll wait until next week and see if I get lucky like some others did. Insane decision from GoCardless/N26(?) to put in rate limits this strict, totally unusable.
Author
Owner

@JanC commented on GitHub (May 2, 2025):

I tried using other apps (Spendee / Bankin) and they connect just fine also using psd2 so I'm pretty sure this rate limit is coming from GoCardless.

That being said, I wonder if a solution could be to not fetch the details of account that are already closed. I think that's the reason why it fails

<!-- gh-comment-id:2846478016 --> @JanC commented on GitHub (May 2, 2025): I tried using other apps (Spendee / Bankin) and they connect just fine also using psd2 so I'm pretty sure this rate limit is coming from GoCardless. That being said, I wonder if a solution could be to not fetch the details of account that are already closed. I think that's the reason why it fails
Author
Owner

@lorenzenv commented on GitHub (May 15, 2025):

Hey folks, I managed to get this working. The key was to change the GoCardless integration to use accountSelection: true when creating the requisition; this way, GoCardless handles the account selection upfront on their end. Then Actual's backend only has to fetch details for the accounts I specifically chose, which avoids hitting the bank's rate limits by not trying to process all accounts initially..

<!-- gh-comment-id:2884196011 --> @lorenzenv commented on GitHub (May 15, 2025): Hey folks, I managed to get this working. The key was to change the GoCardless integration to use `accountSelection: true` when creating the requisition; this way, GoCardless handles the account selection upfront on their end. Then Actual's backend only has to fetch details for the accounts I specifically chose, which avoids hitting the bank's rate limits by not trying to process all accounts initially..
Author
Owner

@JanC commented on GitHub (May 18, 2025):

Hey folks, I managed to get this working. The key was to change the GoCardless integration to use accountSelection: true when creating the requisition; this way, GoCardless handles the account selection upfront on their end. Then Actual's backend only has to fetch details for the accounts I specifically chose, which avoids hitting the bank's rate limits by not trying to process all accounts initially..

hey,
I can confirm that this works for me as well 👍 I see your PR https://github.com/actualbudget/actual/pull/4993 was closed though, is that intentional?

<!-- gh-comment-id:2888856174 --> @JanC commented on GitHub (May 18, 2025): > Hey folks, I managed to get this working. The key was to change the GoCardless integration to use `accountSelection: true` when creating the requisition; this way, GoCardless handles the account selection upfront on their end. Then Actual's backend only has to fetch details for the accounts I specifically chose, which avoids hitting the bank's rate limits by not trying to process all accounts initially.. hey, I can confirm that this works for me as well 👍 I see your PR https://github.com/actualbudget/actual/pull/4993 was closed though, is that intentional?
Author
Owner

@lorenzenv commented on GitHub (May 19, 2025):

Hey @JanC ,

that was not on purpose actually. I re-forked the repo to deploy to fly.io and must have closed my other fork by mistake which closed the PR.

Unfortunately I don't seem to have the permissions to open it again.

Edit: I just created a new PR with the same change.

<!-- gh-comment-id:2890728047 --> @lorenzenv commented on GitHub (May 19, 2025): Hey @JanC , that was not on purpose actually. I re-forked the repo to deploy to fly.io and must have closed my other fork by mistake which closed the PR. Unfortunately I don't seem to have the permissions to open it again. Edit: I just created a new PR with the same change.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#15950