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.
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.

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.

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.

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.

Read the guide: Errors Codes.

Was this page helpful?