Looking for the previous documentation?Go to v1.docs.pluggy.ai

Error Codes

The HTTP status codes the Pluggy API returns, what each means, and the shape of an error body.

View as Markdown

Error body#

Every error, on every endpoint, has this shape:

FieldMeaning
codeThe HTTP status, repeated. Always present.
messageA sentence for a person. Always present; not stable.
codeDescriptionA stable identifier for the specific error, when the endpoint distinguishes several. Branch on this, not on message.
dataExtra detail for some errors — for instance, the Items that already exist when creating one would duplicate a connection.

Status codes#

StatusMeaningUsually because
400 Bad RequestThe request is invalid.A missing or malformed field (INVALID_PARAMETERS).
401 UnauthorizedThe credential is missing, wrong or expired.An API Key past its 2 hours, or wrong clientId/clientSecret on POST /auth (CLIENT_KEYS_UNAUTHORIZED, CLIENT_DISABLED).
403 ForbiddenThe credential cannot reach this resource.A Connect Token used outside its scope — see AuthenticationAPI.
404 Not FoundNo such resource.An id that does not exist.
405 Method Not AllowedThe endpoint does not support this verb.
406 Not AcceptableA format other than JSON was requested.
409 ConflictThe request contradicts the current state of the resource.A conflict updating an Item — see PATCH /items/{id}API.
429 Too Many RequestsA rate limit was exceeded.See Rate LimitsAPI for the limits and the Retry-After header.
500 Internal Server ErrorSomething failed on our side.Retry later.
503 Service UnavailableTemporarily offline for maintenance.Retry later.

Each endpoint's page in this reference lists the statuses it returns and, where the API distinguishes them, the codeDescription values.

Invalid parameters#

codeDescriptionStatusMessageWhat to do
INVALID_PARAMETERS400Names the parameter and the problem — for instance accountId must be a UUID or property pageSize should not exist.A path, query or body parameter is missing, malformed, or not accepted by the endpoint. Fix the parameter named in the message; retrying the same request returns the same error.

Creating and updating an Item#

These come back from POST /itemsAPI and PATCH /items/{id}API. Where the text below shows a :placeholder, the real message carries the value — a frequency, a wait, a parameter name.

codeDescriptionStatusMessageWhat to do
PARAMETERS_NOT_PROVIDED400parameters were not providedSend the connection's credentials to sync the item.
ITEM_ALREADY_UPDATING400An update is already in progress, wait until the last execution endsThis item is syncing. Wait for the execution to finish — success or error — before triggering another.
ITEM_IS_ALREADY_UPDATING400There is an active item for the set of credentials that hasn't finished executingThe same set of credentials is syncing on another item. Wait for it, so two sessions are not opened with the institution at once.
CLIENT_IS_UPDATING_BEFORE_ALLOWED_FREQUENCY409Client updates on this item are allowed at most every :minUpdateFrequencyAllowedInHours hours. Last update was at :lastUpdatedAtWait until the minimum frequency has passed since the last update. The limit is per team and adjustable — ask support if your use case needs a shorter one.
LAST_EXECUTION_HAD_LOGIN_ERROR400Last execution had a login error, you must update the parametersThe last sync failed to log in. Send new credentials before updating again.
TOO_MANY_CONSECUTIVE_LOGIN_FAILURES400must wait at least :readableBackoffTime after :maxConsecutiveFailedLoginAttempts consecutive login errors, last attempt was at :lastExecutionEndedAt (can retry after: :canRetryAfterDate)A cooldown after repeated login errors, so the user's account is not locked by the institution. Retry after the time in the message.
TOO_MANY_CONSECUTIVE_ERRORS400There has been more than 5 failing syncronizations, please contact supportThe connection failed too many times in a row. Report it to support with the itemId.
ITEM_IN_ERROR_COOLDOWN409This set of credentials recently failed to connect and is in a cooldown period, please try again laterThese credentials failed recently and are in a cooldown. Retry after it passes.
CONNECTOR_OFFLINE409this connector is offline in this momentThe connector is not accepting executions right now. Try again later — see status.pluggy.ai.
CONNECTOR_REQUIRED_PARAMETER_VALIDATION_ERROR400The parameter :parameter is required to be renewed for item update.The connector now requires that parameter again. Send it to update the connection.
ITEM_ORIGINAL_CONNECTED_WITH_DIFFERENT_ACCOUNT409Item was originally connected with a different account, please use the original accountThe credentials now point at a different account than the one the item was created with. Use the original account, or create a new item.
ITEM_CREATION_LIMIT_EXCEEDED409Client exceeded item creation limit (:itemsLimit items) for the current subscription level.You reached the item limit of your subscription. Delete unused items or contact support.
CLIENT_HAS_ITEM_UPDATES_DISABLED409Client has item updates disabledUpdates were disabled for the team. Contact support.
CREATE_ITEMS_API_FREE_DISABLED400Free subscription can only create items through our Connect WidgetOn the free subscription, items are created through the Connect Widget.
SANDBOX_CLIENT_ITEM_UPDATE_NOT_ALLOWED400Current client subscription level can only update Sandbox (Pluggy Bank) itemsYour subscription level only allows updating Sandbox (Pluggy Bank) items.
TRIAL_CLIENT_ITEM_CREATE_NOT_ALLOWED400Trial clients can only create Sandbox (Pluggy Bank) itemsDuring the trial, items can only be created on Sandbox (Pluggy Bank) connectors and on the MeuPluggy connector. Use those while on trial, or upgrade your subscription to connect other institutions.
MEU_PLUGGY_ITEM_UPDATE_NOT_ALLOWED400MeuPluggy item cant be updatedMeuPluggy items are kept up to date by MeuPluggy itself and cannot be updated with PATCH /items/{id}. Read the data with the item's endpoints; there is nothing to trigger.

Who has to act#

Most of these share status 400, so branch on codeDescription, not on the status. Only some of them need the end user, and only the "wait and retry" ones go away by retrying: the rest need a change in your request, your subscription or a support ticket. In every case, keep showing the data you already have.

This table covers every code above and every MFA error below.

codeDescriptionRequires the userWho acts
PARAMETERS_NOT_PROVIDEDYesThe user — enters the connection's credentials.
LAST_EXECUTION_HAD_LOGIN_ERRORYesThe user — enters new credentials.
CONNECTOR_REQUIRED_PARAMETER_VALIDATION_ERRORYesThe user — provides the parameter named in the message again.
ITEM_ORIGINAL_CONNECTED_WITH_DIFFERENT_ACCOUNTYesThe user — reconnects with the original account, or creates a new item.
ITEM_MFA_EXPIREDYesThe user — starts a new update and enters a new MFA value.
MFA_PARAMERTER_WAS_ALREADY_USED_ERRORYesThe user — enters a new MFA value.
ITEM_ALREADY_UPDATINGNoNobody — wait for the running execution and retry.
ITEM_IS_ALREADY_UPDATINGNoNobody — wait for the other item's execution and retry.
CLIENT_IS_UPDATING_BEFORE_ALLOWED_FREQUENCYNoNobody — wait for the minimum frequency and retry.
TOO_MANY_CONSECUTIVE_LOGIN_FAILURESNoNobody — wait for the cooldown in the message and retry.
ITEM_IN_ERROR_COOLDOWNNoNobody — wait for the cooldown and retry.
CONNECTOR_OFFLINENoNobody — retry when the connector is back online.
ITEM_MFA_PARAMETER_EXPECTED_MISMATCHNoYour integration — send the value under the parameter name in the message.
ITEM_MFA_NOT_FOUNDNoYour integration — only send MFA while the item is waiting for it.
ITEM_MFA_ALREADY_PROVIDEDNoYour integration — nothing to send; the MFA was already received.
MISSING_MFA_PARAMETER_DATANoYour integration — the request had no MFA parameters; send them.
MISSING_MFA_PARAMETER_VALUENoYour integration — a parameter was sent empty; send the value (if the user left the field blank, ask them for it before sending).
TOO_MANY_CONSECUTIVE_ERRORSNoPluggy support — report it with the itemId.
ITEM_CREATION_LIMIT_EXCEEDEDNoYour subscription — delete unused items or contact support.
CLIENT_HAS_ITEM_UPDATES_DISABLEDNoPluggy support.
CREATE_ITEMS_API_FREE_DISABLEDNoYour subscription — create items through the Connect Widget, or upgrade.
SANDBOX_CLIENT_ITEM_UPDATE_NOT_ALLOWEDNoYour subscription.
TRIAL_CLIENT_ITEM_CREATE_NOT_ALLOWEDNoYour subscription — use Sandbox connectors during the trial, or upgrade.
MEU_PLUGGY_ITEM_UPDATE_NOT_ALLOWEDNoYour integration — don't send updates for MeuPluggy items.

Open Finance updates do not need the user

For an Open Finance item, an update with PATCH /items/{id}API never needs the user: it reads the data under the consent the user already gave. The exception is an item that already requires the user's action before the update, which you can see on the item itself:

  • status is WAITING_USER_ACTION (the user still has to authorise at the institution), or executionStatus is USER_AUTHORIZATION_PENDING;
  • executionStatus is USER_AUTHORIZATION_REVOKED (the user revoked the consent at the institution), USER_AUTHORIZATION_EXPIRED (the consent expired) or USER_AUTHORIZATION_NOT_GRANTED (the consent was never authorised);
  • consentExpiresAt is in the past: the next update ends in USER_AUTHORIZATION_EXPIRED.

In those cases the user has to go through the institution's authorisation again — see Consents.

MFA errors#

Returned when sending a multi-factor parameter to an Item — see Updating an Item.

codeDescriptionStatusMessageWhat to do
ITEM_MFA_NOT_FOUND404item has no mfa input requestThe item is not waiting for an MFA input, so none can be submitted.
ITEM_MFA_ALREADY_PROVIDED400item has no mfa input request, it was already providedNothing to do — the MFA was already submitted.
ITEM_MFA_EXPIRED400Item's MFA parameter expired, please start a new updateThe MFA window closed. Start a new update to sync the connection.
ITEM_MFA_PARAMETER_EXPECTED_MISMATCH400Item is expecting ':parameter' MFA param nameThe item is waiting for a different parameter. Use the name in the message.
MFA_PARAMERTER_WAS_ALREADY_USED_ERROR400MFA parameter has to be updated from last executionThe value sent is the one already used in the last execution. Ask the user for a new one.
MISSING_MFA_PARAMETER_DATA400Missing MFA parameter dataThe request had no MFA parameters. Send the parameter the item is waiting for.
MISSING_MFA_PARAMETER_VALUE400Missing ':parameter' MFA parameter valueThe parameter named in the message was sent empty. Send its value.

MFA_PARAMERTER_WAS_ALREADY_USED_ERROR

That spelling is not a typo in this page: the API returns PARAMERTER. Match it exactly if you branch on it.

Transactions#

codeDescriptionStatusMessageWhat to do
ENDPOINT_DEPRECATED410This endpoint is deprecated. Use GET /v2/transactions with cursor pagination instead.GET /transactions is closed for applications created on or after 2026-06-02 00:00 Brasília time (03:00 UTC), and available to everyone else only until 2026-12-31. Use GET /v2/transactionsAPI — see the migration tableAPI.

Read the guide: Errors Codes.

Was this page helpful?