[GH-ISSUE #8183] [Bug]: Pluggy.ai bank sync fails with HTTP 410 — deprecated /transactions endpoint removed #117688

Closed
opened 2026-06-11 13:08:22 -05:00 by GiteaMirror · 1 comment
Owner

Originally created by @salaroli on GitHub (Jun 10, 2026).
Original GitHub issue: https://github.com/actualbudget/actual/issues/8183

Verified issue does not already exist?

  • I have searched and found no existing issue

What happened?

Pluggy.ai has activated HTTP 410 Gone responses on the legacy paginated GET /transactions endpoint, which was previously marked as deprecated in the pluggy-sdk. As a result, all Pluggy.ai transaction sync attempts fail in actual-server, even though linking accounts still works (the /accounts endpoint is unaffected).

Pluggy now requires using GET /v2/transactions with cursor-based pagination.

Reference (pluggy-node SDK deprecation note):

"Deprecation note: the legacy page-based fetchTransactions(accountId, options) method (GET /transactions) is @deprecated and will be removed in a future major release. Migrate to fetchTransactionsCursor / fetchAllTransactions — the cursor endpoint is more stable for long lists and supports the full filter set."

The deprecation has now become a hard removal on Pluggy's side.

How can we reproduce the issue?

  1. Configure Pluggy.ai bank sync per docs (Client ID, Client Secret, Item ID).
  2. Link a bank account — works correctly, accounts are listed.
  3. Trigger a transaction sync on any linked Pluggy account.
  4. Server returns the data with no transactions; server logs show Response code 410 (Gone) from Pluggy.

Server logs

2026-06-10T17:48:31.311Z info: POST 200 /pluggyai/accounts
[Pluggy SDK] HTTP request failed: Response code 410 (Gone) {
  message: 'This endpoint is deprecated. Use GET /v2/transactions with cursor pagination instead.',
  code: 410,
  codeDescription: 'ENDPOINT_DEPRECATED',
  errorId: 'a74595a9-c7fb-47f3-bfe7-ea8cdee40968'
}
Error fetching transactions: This endpoint is deprecated. Use GET /v2/transactions with cursor pagination instead.
2026-06-10T17:49:55.064Z info: POST 200 /pluggyai/transactions

(Error repeats consistently across every /pluggyai/transactions call.)

Suggested fix

In packages/sync-server/src/app-pluggyai/app-pluggyai.js, replace the call to client.fetchTransactions(accountId, options) with client.fetchAllTransactions(accountId, options) from the pluggy-sdk. The cursor-based method already exists in the SDK, internally targets /v2/transactions, and handles pagination transparently.

Caveat: the return shape differs from the legacy method (no totalPages / total envelope — fetchAllTransactions returns the full result list directly). The downstream parsing in the same file will likely need to be adjusted accordingly.

This impacts all Brazilian users relying on Pluggy.ai bank sync, since the deprecation went from @deprecated to 410 Gone on Pluggy's side.

Where are you hosting Actual?

Docker

What browsers are you seeing the problem on?

Firefox

Operating System

Linux

Originally created by @salaroli on GitHub (Jun 10, 2026). Original GitHub issue: https://github.com/actualbudget/actual/issues/8183 ### Verified issue does not already exist? - [x] I have searched and found no existing issue ### What happened? Pluggy.ai has activated `HTTP 410 Gone` responses on the legacy paginated `GET /transactions` endpoint, which was previously marked as deprecated in the `pluggy-sdk`. As a result, all Pluggy.ai transaction sync attempts fail in `actual-server`, even though linking accounts still works (the `/accounts` endpoint is unaffected). Pluggy now requires using `GET /v2/transactions` with cursor-based pagination. Reference (pluggy-node SDK deprecation note): > "Deprecation note: the legacy page-based fetchTransactions(accountId, options) method (GET /transactions) is @deprecated and will be removed in a future major release. Migrate to fetchTransactionsCursor / fetchAllTransactions — the cursor endpoint is more stable for long lists and supports the full filter set." The deprecation has now become a hard removal on Pluggy's side. ### How can we reproduce the issue? 1. Configure Pluggy.ai bank sync per docs (Client ID, Client Secret, Item ID). 2. Link a bank account — works correctly, accounts are listed. 3. Trigger a transaction sync on any linked Pluggy account. 4. Server returns the data with no transactions; server logs show `Response code 410 (Gone)` from Pluggy. ### Server logs ``` 2026-06-10T17:48:31.311Z info: POST 200 /pluggyai/accounts [Pluggy SDK] HTTP request failed: Response code 410 (Gone) { message: 'This endpoint is deprecated. Use GET /v2/transactions with cursor pagination instead.', code: 410, codeDescription: 'ENDPOINT_DEPRECATED', errorId: 'a74595a9-c7fb-47f3-bfe7-ea8cdee40968' } Error fetching transactions: This endpoint is deprecated. Use GET /v2/transactions with cursor pagination instead. 2026-06-10T17:49:55.064Z info: POST 200 /pluggyai/transactions ``` (Error repeats consistently across every `/pluggyai/transactions` call.) ### Suggested fix In `packages/sync-server/src/app-pluggyai/app-pluggyai.js`, replace the call to `client.fetchTransactions(accountId, options)` with `client.fetchAllTransactions(accountId, options)` from the `pluggy-sdk`. The cursor-based method already exists in the SDK, internally targets `/v2/transactions`, and handles pagination transparently. Caveat: the return shape differs from the legacy method (no `totalPages` / `total` envelope — `fetchAllTransactions` returns the full result list directly). The downstream parsing in the same file will likely need to be adjusted accordingly. This impacts all Brazilian users relying on Pluggy.ai bank sync, since the deprecation went from `@deprecated` to `410 Gone` on Pluggy's side. ### Where are you hosting Actual? Docker ### What browsers are you seeing the problem on? Firefox ### Operating System Linux
GiteaMirror added the bug label 2026-06-11 13:08:22 -05:00
Author
Owner

@coderabbitai[bot] commented on GitHub (Jun 10, 2026):

⚠️ Possible Duplicate Issue(s)
🔗 Related PRs

actualbudget/actual#7930 - [AI] Fix off by one error in enable banking [merged]
actualbudget/actual#8068 - When resetting SimpleFIN credentials, parse error and error_code if response body exists [merged]
actualbudget/actual#8086 - [AI] Skip unimportable Enable Banking transactions instead of failing the whole sync [merged]
actualbudget/actual#8111 - [AI] Fix bank sync deadlock from nested mutator [merged]


📝 Issue Planner

Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

  • Create Plan

🧪 Issue enrichment is currently in open beta.

You can configure auto-planning by selecting labels in the issue_enrichment configuration.

To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

issue_enrichment:
  auto_enrich:
    enabled: false

💬 Have feedback or questions? Drop into our discord!

<!-- gh-comment-id:4673000031 --> @coderabbitai[bot] commented on GitHub (Jun 10, 2026): <!-- This is an auto-generated issue plan by CodeRabbit --> <details> <summary>⚠️ Possible Duplicate Issue(s)</summary> - https://github.com/actualbudget/actual/issues/8087 </details> <details> <summary>🔗 Related PRs</summary> actualbudget/actual#7930 - [AI] Fix off by one error in enable banking [merged] actualbudget/actual#8068 - When resetting SimpleFIN credentials, parse error and error_code if response body exists [merged] actualbudget/actual#8086 - [AI] Skip unimportable Enable Banking transactions instead of failing the whole sync [merged] actualbudget/actual#8111 - [AI] Fix bank sync deadlock from nested mutator [merged] </details> --- <details> <summary>📝 Issue Planner</summary> <sub>Check the box below or use the `@coderabbitai plan` command to generate an implementation plan and prompts that you can use with your favorite coding assistant.</sub> - [ ] <!-- {"checkboxId": "8d4f2b9c-3e1a-4f7c-a9b2-d5e8f1c4a7b9"} --> Create Plan </details> --- <details> <summary> 🧪 Issue enrichment is currently in open beta.</summary> You can configure auto-planning by selecting labels in the issue_enrichment configuration. To disable automatic issue enrichment, add the following to your `.coderabbit.yaml`: ```yaml issue_enrichment: auto_enrich: enabled: false ``` </details> 💬 Have feedback or questions? Drop into our [discord](https://discord.gg/coderabbit)!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#117688