Skip to main content

Error Codes

Reference for GoValid error codes and their meanings.

HTTP Status Codes

CodeMeaningCommon Cause
200OKRequest successful
201CreatedResource created successfully
400Bad RequestInvalid request body or parameters
401UnauthorizedMissing or invalid authentication
403ForbiddenInsufficient permissions
404Not FoundResource does not exist
409ConflictResource already exists
422Unprocessable EntityValidation error
429Too Many RequestsRate limit exceeded
500Internal Server ErrorServer error
503Service UnavailableTemporary maintenance

Authentication Errors

Error CodeMessageSolution
INVALID_CREDENTIALSEmail or password is incorrectCheck credentials, reset password
ACCOUNT_DISABLEDAccount has been disabledContact support
EMAIL_NOT_VERIFIEDEmail address not verifiedCheck inbox for verification email
TOKEN_EXPIREDAccess token has expiredRefresh token or log in again
INVALID_TOKENToken is invalidLog in again to get a new token
INVALID_2FA_CODE2FA code is incorrectCheck authenticator app, use backup code
2FA_REQUIREDTwo-factor authentication requiredEnable 2FA or provide 2FA code
API_KEY_EXPIREDAPI key has expiredCreate a new API key
API_KEY_REVOKEDAPI key has been revokedCreate a new API key

QR Code Errors

Error CodeMessageSolution
QR_NOT_FOUNDQR code does not existCheck the QR code ID
QR_EXPIREDQR code has expiredCreate a new QR code
QR_REMOVEDQR code has been removedContact the QR code owner
QR_PASSWORD_REQUIREDPassword is required to viewEnter the correct password
QR_PASSWORD_INVALIDPassword is incorrectCheck the password
QR_LIMIT_EXCEEDEDQR code limit exceededUpgrade plan or wait for reset
INVALID_QR_TYPEQR type is not validCheck available QR types
INVALID_SECURITY_LEVELSecurity level is not validCheck available security levels
BULK_LIMIT_EXCEEDEDBulk generation limit exceededReduce batch size or upgrade plan

Financial Errors

Error CodeMessageSolution
PAYMENT_FAILEDPayment processing failedCheck payment method, try again
INSUFFICIENT_CREDITSNot enough creditsTop up credits
PLAN_LIMIT_REACHEDPlan limit reachedUpgrade plan
SUBSCRIPTION_ACTIVESubscription already activeManage existing subscription
SUBSCRIPTION_NOT_FOUNDSubscription not foundCheck subscription status
INVOICE_NOT_FOUNDInvoice not foundCheck invoice ID
INVALID_COUPONCoupon code is invalidCheck coupon code and expiry
COUPON_EXPIREDCoupon code has expiredUse a valid coupon code

API Errors

Error CodeMessageSolution
RATE_LIMIT_EXCEEDEDToo many requestsWait and retry, check rate limits
INVALID_REQUESTRequest body is invalidCheck request format and fields
VALIDATION_ERRORField validation failedCheck field requirements
RESOURCE_NOT_FOUNDRequested resource not foundCheck the resource ID
PERMISSION_DENIEDInsufficient permissionsCheck API key permissions
INTERNAL_ERRORInternal server errorRetry, contact support if persists

Integration Errors

Error CodeMessageSolution
WEBHOOK_FAILEDWebhook delivery failedCheck webhook endpoint
WEBHOOK_INVALID_URLWebhook URL is invalidUse a valid HTTPS URL
OAUTH_ERROROAuth authentication failedRe-authorize the integration
PLUGIN_ERRORPlugin encountered an errorCheck plugin configuration

Security Errors

Error CodeMessageSolution
RISK_LOGIN_BLOCKEDLogin blocked due to riskVerify identity, contact support
DEVICE_NOT_TRUSTEDDevice is not trustedTrust the device or enter 2FA
SIGNATURE_INVALIDDigital signature is invalidQR code may have been tampered
ENCRYPTION_ERROREncryption/decryption failedContact support

Error Response Format

All API errors follow this format:

{
"error": "ERROR_CODE",
"message": "Human readable description",
"details": {
"field": "specific_field",
"issue": "description of the issue"
}
}

Example

{
"error": "VALIDATION_ERROR",
"message": "Request validation failed",
"details": {
"title": "Title is required",
"qr_type": "Invalid QR type. Must be one of: url, text, email, document"
}
}

Rate Limit Headers

When you receive a 429 error, check these headers:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed
X-RateLimit-RemainingRequests remaining in window
X-RateLimit-ResetUnix timestamp when limit resets
Retry-AfterSeconds to wait before retrying