[Bug]: Nordigen requisition expiration shows a generic error #483

Closed
opened 2026-02-28 19:05:48 -06:00 by GiteaMirror · 8 comments
Owner

Originally created by @Jackenmen on GitHub (Jul 5, 2023).

Verified issue does not already exist?

  • I have searched and found no existing issue

What happened?

When I try to sync an account with an expired End User Agreement (EUA), I get a generic "Failed syncing account ACCOUNT NAME" error with no details on what is wrong and no way to remediate it. I'm not sure if anything changed but Actual used to (or maybe still does) provide a button to relink the account when sync failed, I think it would be great if it did that in this specific case (I'm not sure if it should suggest it in any other case since it probably wouldn't help in other ones?).

It would be even better if more details were shown instead of a generic error message when it comes to other errors that one can encounter.

What error did you receive?

Just a generic "Failed syncing account ACCOUNT NAME" in the client.
In server logs, I get:

Something went wrong {
    summary: 'End User Agreement (EUA) 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d has expired',
    detail: 'EUA was valid for 90 days and it expired at 2023-07-05 09:42:48.189388. The end user must connect the account once more with new EUA and Requisition',
    status_code: 400
}

Note that this happened on Actual 23.6.0 as it isn't currently recommended to use 23.7.0.

Where are you hosting Actual?

Fly.io

What browsers are you seeing the problem on?

Chrome

Operating System

Linux

Originally created by @Jackenmen on GitHub (Jul 5, 2023). ### Verified issue does not already exist? - [X] I have searched and found no existing issue ### What happened? When I try to sync an account with an expired End User Agreement (EUA), I get a generic "Failed syncing account ACCOUNT NAME" error with no details on what is wrong and no way to remediate it. I'm not sure if anything changed but Actual used to (or maybe still does) provide a button to relink the account when sync failed, I think it would be great if it did that in this specific case (I'm not sure if it should suggest it in any other case since it probably wouldn't help in other ones?). It would be even better if more details were shown instead of a generic error message when it comes to other errors that one can encounter. ### What error did you receive? Just a generic "Failed syncing account ACCOUNT NAME" in the client. In server logs, I get: ``` Something went wrong { summary: 'End User Agreement (EUA) 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d has expired', detail: 'EUA was valid for 90 days and it expired at 2023-07-05 09:42:48.189388. The end user must connect the account once more with new EUA and Requisition', status_code: 400 } ``` Note that this happened on Actual 23.6.0 as it isn't currently recommended to use 23.7.0. ### Where are you hosting Actual? Fly.io ### What browsers are you seeing the problem on? Chrome ### Operating System Linux
GiteaMirror added the bank syncbug labels 2026-02-28 19:05:48 -06:00
Author
Owner

@MatissJanis commented on GitHub (Jul 5, 2023):

Can you try this in v23.7.1? Should be much better experience in the latest version.

@MatissJanis commented on GitHub (Jul 5, 2023): Can you try this in v23.7.1? Should be much better experience in the latest version.
Author
Owner

@Jackenmen commented on GitHub (Jul 11, 2023):

It is better, yeah:
image

I do still think that:
a) the prompt should allow you to relink the account, not just unlink it
b) the error message should just clearly say that it's about expiration

  • based on the error statuses for the Accounts endpoint (https://developer.gocardless.com/bank-account-data/statuses), it should be enough to check for 400
    • 400 is also returned for an invalid account ID but we use the account ID directly from the requisition data so we should never run into that
  • note that we do already check for the status field of a requisition before sending a request to the accounts endpoint but it does not seem to get triggered here
    • my presumption is that the status gets updated only after a failed request
@Jackenmen commented on GitHub (Jul 11, 2023): It is better, yeah: ![image](https://github.com/actualbudget/actual/assets/6032823/5f0e9f31-2aff-4b7c-8781-c7acbdcbfdec) I do still think that: a) the prompt should allow you to **re**link the account, not just unlink it b) the error message should just clearly say that it's about expiration - based on the error statuses for the Accounts endpoint (https://developer.gocardless.com/bank-account-data/statuses), it should be enough to check for `400` - `400` is also returned for an invalid account ID but we use the account ID directly from the requisition data so we should never run into that - note that we do already check for the `status` field of a requisition *before* sending a request to the accounts endpoint but it does not seem to get triggered here - my presumption is that the status gets updated only *after* a failed request
Author
Owner

@Jackenmen commented on GitHub (Jul 11, 2023):

I looked into server logs after I checked this again today and it seems that it just 404s now, unlike what it did before (as documented in the issue description). This happens for the requisition endpoint so it seems that Nordigen eventually makes the requisition data unavailable and this should probably be treated similarly to expiration.

@Jackenmen commented on GitHub (Jul 11, 2023): I looked into server logs after I checked this again today and it seems that it just 404s now, unlike what it did before (as documented in the issue description). This happens for the requisition endpoint so it seems that Nordigen eventually makes the requisition data unavailable and this should probably be treated similarly to expiration.
Author
Owner

@MatissJanis commented on GitHub (Jul 18, 2023):

👋 You'll want to contact Nordigen to get this fixed. Under normal circumstances when the access expires we get back a ITEM_LOGIN_REQUIRED error. At which point we allow the user to reautheticate.

Screenshot 2023-07-18 at 15 28 02
@MatissJanis commented on GitHub (Jul 18, 2023): 👋 You'll want to contact Nordigen to get this fixed. Under normal circumstances when the access expires we get back a `ITEM_LOGIN_REQUIRED` error. At which point we allow the user to reautheticate. <img width="376" alt="Screenshot 2023-07-18 at 15 28 02" src="https://github.com/actualbudget/actual/assets/886567/2c450295-dc1d-4ac0-8df1-610148548ba0">
Author
Owner

@Jackenmen commented on GitHub (Jul 18, 2023):

You'll want to contact Nordigen to get this fixed. Under normal circumstances when the access expires we get back a ITEM_LOGIN_REQUIRED error. At which point we allow the user to reautheticate.

That error code is actual-server's, not Nordigen's:
354152dbb5/src/app-nordigen/app-nordigen.js (L181-L189)

which could mean that my previous comment:

note that we do already check for the status field of a requisition before sending a request to the accounts endpoint but it does not seem to get triggered here

  • my presumption is that the status gets updated only after a failed request

is relevant but I can't really check since my previous requisition has expired long enough that it is now removed from Nordigen's database and showing as 404 (which I think should be handled as well as Actual shouldn't impose a time limit on how long it shows this button).

Either way, I think that 404s should be handled even if they may need a different action (I don't know if the existing requisition is required for something in the reauth process). It would IMO be a lot better UX than having an unlink button that doesn't guide you to the link process again. The simplest solution would probably be to just have the Relink button show the regular bank connect prompt and have it unlink the previous account if that's successful.

@Jackenmen commented on GitHub (Jul 18, 2023): > You'll want to contact Nordigen to get this fixed. Under normal circumstances when the access expires we get back a `ITEM_LOGIN_REQUIRED` error. At which point we allow the user to reautheticate. That error code is actual-server's, not Nordigen's: https://github.com/actualbudget/actual-server/blob/354152dbb596f0f6ad0985ad032830f13dec5d97/src/app-nordigen/app-nordigen.js#L181-L189 which could mean that my previous comment: > note that we do already check for the `status` field of a requisition _before_ sending a request to the accounts endpoint but it does not seem to get triggered here > * my presumption is that the status gets updated only _after_ a failed request is relevant but I can't really check since my previous requisition has expired long enough that it is now removed from Nordigen's database and showing as 404 (which I think should be handled as well as Actual shouldn't impose a time limit on how long it shows this button). Either way, I think that 404s should be handled even if they may need a different action (I don't know if the existing requisition is required for something in the reauth process). It would IMO be a lot better UX than having an unlink button that doesn't guide you to the link process again. The simplest solution would probably be to just have the Relink button show the regular bank connect prompt and have it unlink the previous account if that's successful.
Author
Owner

@andreapx commented on GitHub (Oct 11, 2023):

Hi @Jackenmen have you solved this problem?
I get the EUA expired error, how did you manage to renew it?
Thanks!

@andreapx commented on GitHub (Oct 11, 2023): Hi @Jackenmen have you solved this problem? I get the EUA expired error, how did you manage to renew it? Thanks!
Author
Owner

@andreapx commented on GitHub (Oct 11, 2023):

Can you try this in v23.7.1? Should be much better experience in the latest version.

I'm on 23.10.0 and I don't see that message, I just see a popup saying Failed syncing account “ACCOUNT MANE”.
I see the EUA expired message only in the log.

@andreapx commented on GitHub (Oct 11, 2023): > Can you try this in v23.7.1? Should be much better experience in the latest version. I'm on 23.10.0 and I don't see that message, I just see a popup saying _Failed syncing account “ACCOUNT MANE”_. I see the EUA expired message only in the log.
Author
Owner

@danielo515 commented on GitHub (Aug 30, 2024):

So, I'm on version 24.8.0 and I'm getting the same error with the same root cause:

EUA was valid for 90 days and it expired at 2024-08-21

Why unless offer Unlink account don't you offer the Reauthorize button anyway? How I am supposed to reauthorize then? What are the consequences of Unlinking the account?

@danielo515 commented on GitHub (Aug 30, 2024): So, I'm on version `24.8.0` and I'm getting the same error with the same root cause: ``` EUA was valid for 90 days and it expired at 2024-08-21 ``` Why unless offer Unlink account don't you offer the Reauthorize button anyway? How I am supposed to reauthorize then? What are the consequences of Unlinking the account?
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#483