Status codes

CodeMeaningWhen you'll see it
200OKRequest succeeded.
201CreatedResource was created.
204No ContentSuccess, no body returned (e.g. DELETE).
400Bad RequestThe request is malformed.
401UnauthorizedMissing or invalid API key.
403ForbiddenThe key is valid but not allowed for this action.
404Not FoundResource doesn't exist.
409Conflicte.g. duplicate resource.
422Unprocessable EntityValidation failed.
429Too Many RequestsYou've hit the rate limit.
500Server ErrorSomething went wrong on our end.

Error response shape

All error responses share a common JSON shape:

ERROR JSON
{
  "message": "A short, human-readable summary.",
  "errors": {
    "email": ["The email field is required."]
  }
}

The errors object is only included for 422 validation responses.

422 — Validation

Returned when the request body fails validation rules.

422 Unprocessable Entity
{
  "message": "The given data was invalid.",
  "errors": {
    "email": ["The email field is required."],
    "password": ["The password must be at least 8 characters."]
  }
}

401 — Unauthenticated

401 Unauthorized
{
  "message": "Unauthenticated."
}

403 — Forbidden

The token is valid but the user is not allowed to perform this action.

403 Forbidden
{
  "message": "This action is unauthorized."
}

403 from the verified middleware

Bulk writers (/transactions/sync, /import/store, /import/kuda/store) require a verified email. The response includes a hint so the SPA can show a verification banner:

403 Forbidden (email not verified)
{
  "message": "Your email address is not verified.",
  "requires_verified_email": true
}

404 — Not Found

404 Not Found
{
  "message": "The requested resource was not found."
}

500 — Server Error

500 Server Error
{
  "message": "Something went wrong on our end. Please try again."
}

Retry 5xx responses using exponential backoff. If the issue persists, contact support with the request ID from the response headers.

© 2026 Pasona Finance Tracker API. All rights reserved.

API version: v1