API Errors

Standard error envelope format for consistent error handling.


Every error returned by the Augno API uses a consistent envelope and includes a machine-readable code so clients can handle errors programmatically without parsing human-readable messages.

Error Envelope

All error responses are wrapped in an error object:

{
    "error": {
        "code": "validation_failed",
        "type": "invalid_request_error",
        "message": "The email address is not valid.",
        "param": "email",
        "doc_url": "https://docs.augno.com/api/errors#validation_failed",
        "is_transient": false,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Fields

FieldTypeDescription
codestringMachine-readable error code (see tables below).
typestringBroad error category: invalid_request_error, api_error, or idempotency_error.
messagestringHuman-readable explanation. Safe to display to end users.
paramstring | nullThe request parameter that caused the error, when applicable. Always present in the response (value is null when not applicable).
doc_urlstringLink to documentation about this error. Follows the pattern https://docs.augno.com/api/errors#{code}.
is_transientbooleanWhether the error is temporary and the request can be retried.
quotaobject | nullPlan limit details. Value is null for all error codes except limit_exceeded.
request_log_urlstring | nullA link to the dashboard page for this request's log entry. null when no request log is available.

quota Object

Present (non-null) only when code is limit_exceeded.

FieldTypeDescription
limitintegerMaximum number of resources allowed by the current plan.
usedintegerNumber of resources currently consumed.
reset_atstring | nullISO 8601 timestamp when the quota resets. null for static (non-metered) limits.

Error Types

TypeDescription
invalid_request_errorClient-side mistake — bad input, missing auth, not found, etc. Fix the request before retrying.
api_errorServer-side failure (5xx-class). Generally transient and safe to retry.
idempotency_errorIdempotency key conflict — concurrent duplicate request or key reuse with different parameters.

Error Codes

Authentication & Authorization — See API Keys

expired_token

HTTP StatusTypeTransient
401 Unauthorizedinvalid_request_errorNo

JWT access or refresh token has expired. The client should obtain a new token pair using their refresh token or re-authenticate.

api_key_expired

HTTP StatusTypeTransient
401 Unauthorizedinvalid_request_errorNo

API key has passed its expiration date. Generate a new API key to continue making requests.

api_key_revoked

HTTP StatusTypeTransient
401 Unauthorizedinvalid_request_errorNo

API key was explicitly revoked by the owner or Augno. Generate a new API key to continue making requests.

invalid_credentials

HTTP StatusTypeTransient
401 Unauthorizedinvalid_request_errorNo

The provided credentials are incorrect. Verify the email/password or API key and try again.

insufficient_permissions

HTTP StatusTypeTransient
403 Forbiddeninvalid_request_errorNo

The caller is authenticated but lacks the required role or permission for this operation.

payment_required

HTTP StatusTypeTransient
402 Payment Requiredinvalid_request_errorNo

The account's subscription is in a non-active state (past due, canceled, or unpaid). Resolve the billing issue before continuing.


Limits

limit_exceeded

HTTP StatusTypeTransient
403 Forbiddeninvalid_request_errorNo

A plan-imposed resource limit has been reached (e.g. maximum sandbox accounts). The response includes a quota object with the current limit, usage, and optional reset time. Upgrade the plan to increase the limit.

registration_closed

HTTP StatusTypeTransient
403 Forbiddeninvalid_request_errorNo

Public registration capacity has been reached for the requested plan code. Distinct from limit_exceeded, which applies to per-account resource quotas.


Validation

validation_failed

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

General input validation failure. Check the message and param fields for details on what needs to be corrected.

missing_field

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

A required field was not provided in the request body. The param field indicates which field is missing.

invalid_format

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

A field value does not match the expected format (e.g. invalid email address). The param field indicates which field is invalid.

method_not_allowed

HTTP StatusTypeTransient
405 Method Not Allowedinvalid_request_errorNo

The HTTP method is not supported for this endpoint. Check the API reference for allowed methods.


Parameters

parameter_missing

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

A required query or path parameter was not provided. The param field indicates which parameter is missing.

parameter_invalid

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

A parameter value is not valid (e.g. negative limit, out-of-range value). The param field indicates which parameter is invalid.

parameter_unknown

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

An unrecognized parameter was sent in the request. The param field indicates which parameter is unknown.

parameters_exclusive

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

Two mutually exclusive parameters were both provided. The param field indicates the conflicting parameter.


Resources

resource_not_found

HTTP StatusTypeTransient
404 Not Foundinvalid_request_errorNo

The requested resource does not exist. Verify the resource ID and try again.

resource_exists

HTTP StatusTypeTransient
409 Conflictinvalid_request_errorNo

A resource with the same unique constraint already exists (e.g. duplicate email address).

resource_conflict

HTTP StatusTypeTransient
409 Conflictinvalid_request_errorNo

A state conflict prevents the operation (e.g. optimistic locking failure, concurrent update). The client must resolve the conflict before retrying.

resource_gone

HTTP StatusTypeTransient
410 Goneapi_errorNo

The resource existed but has been permanently deleted. This is not a temporary condition.


Idempotency — See Idempotency

idempotency_in_progress

HTTP StatusTypeTransient
409 Conflictidempotency_errorYes

A request with the same idempotency key is currently being processed. Retry after a short delay.

Note: Reusing an idempotency key with different request parameters returns validation_failed with type idempotency_error.


Rate Limiting — See Rate Limiting

rate_limit_exceeded

HTTP StatusTypeTransient
429 Too Many Requestsinvalid_request_errorYes

The caller has exceeded the allowed request rate. Back off and retry after the duration indicated by the Retry-After header.


API Version — See API Versioning

api_version_required

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

The Augno-Version header is missing from the request. Include a valid API version in the header.

api_version_invalid

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

The requested API version string is not recognized. Check the message field for the list of supported versions.

api_version_too_old

HTTP StatusTypeTransient
400 Bad Requestinvalid_request_errorNo

The requested API version is below the minimum supported by the endpoint. Upgrade to a newer API version.


Server Errors

internal_error

HTTP StatusTypeTransient
500 Internal Server Errorapi_errorYes

An unexpected server-side failure occurred. This is generally transient and safe to retry.

service_unavailable

HTTP StatusTypeTransient
503 Service Unavailableapi_errorYes

A downstream service is temporarily unreachable. Retry after a short delay.

external_service_error

HTTP StatusTypeTransient
502 Bad Gatewayapi_errorYes

A third-party dependency returned an error. This is generally transient and safe to retry.

timeout

HTTP StatusTypeTransient
504 Gateway Timeoutapi_errorYes

The operation exceeded its deadline. Retry with exponential backoff.

connection_error

HTTP StatusTypeTransient
502 Bad Gatewayapi_errorYes

A network-level failure occurred when connecting to a downstream service. Retry after a short delay.

request_timeout

HTTP StatusTypeTransient
408 Request Timeoutapi_errorYes

The overall request exceeded its deadline. Retry with exponential backoff.

client_closed_request

HTTP StatusTypeTransient
499api_errorNo

The client disconnected before the server finished processing. The server cannot meaningfully retry on behalf of a disconnected client.

Transient Errors

Errors with "is_transient": true represent temporary conditions that may resolve on retry. The combination of code and type determines transience:

TypeTransient Codes
api_errorinternal_error, service_unavailable, external_service_error, timeout, connection_error, request_timeout
idempotency_erroridempotency_in_progress
invalid_request_errorrate_limit_exceeded

Notably not transient:

  • client_closed_request — the server cannot meaningfully retry on behalf of a disconnected client.
  • resource_conflict — represents a state conflict (e.g. duplicate username) that requires client-side resolution.

Examples

Validation Error (400)

{
    "error": {
        "code": "validation_failed",
        "type": "invalid_request_error",
        "message": "The email address is not valid.",
        "param": "email",
        "doc_url": "https://docs.augno.com/api/errors#validation_failed",
        "is_transient": false,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Authentication Error (401)

{
    "error": {
        "code": "invalid_credentials",
        "type": "invalid_request_error",
        "message": "The provided credentials are incorrect.",
        "param": null,
        "doc_url": "https://docs.augno.com/api/errors#invalid_credentials",
        "is_transient": false,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Payment Required (402)

{
    "error": {
        "code": "payment_required",
        "type": "invalid_request_error",
        "message": "Your subscription is past due. Please update your payment method to continue.",
        "param": null,
        "doc_url": "https://docs.augno.com/api/errors#payment_required",
        "is_transient": false,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Limit Exceeded (403)

{
    "error": {
        "code": "limit_exceeded",
        "type": "invalid_request_error",
        "message": "You have reached the maximum number of sandbox accounts for your plan.",
        "param": null,
        "doc_url": "https://docs.augno.com/api/errors#limit_exceeded",
        "is_transient": false,
        "quota": {
            "limit": 5,
            "used": 5,
            "reset_at": null
        },
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Resource Not Found (404)

{
    "error": {
        "code": "resource_not_found",
        "type": "invalid_request_error",
        "message": "No account found with that ID.",
        "param": null,
        "doc_url": "https://docs.augno.com/api/errors#resource_not_found",
        "is_transient": false,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Idempotency In Progress (409)

{
    "error": {
        "code": "idempotency_in_progress",
        "type": "idempotency_error",
        "message": "Request for the idempotency key 'req_abc123' is already being processed.",
        "param": null,
        "doc_url": "https://docs.augno.com/api/errors#idempotency_in_progress",
        "is_transient": true,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Idempotency Key Reuse (400)

{
    "error": {
        "code": "validation_failed",
        "type": "idempotency_error",
        "message": "Idempotency key 'req_abc123' was used with different request parameters; use a new key.",
        "param": null,
        "doc_url": "https://docs.augno.com/api/errors#validation_failed",
        "is_transient": false,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Rate Limited (429)

{
    "error": {
        "code": "rate_limit_exceeded",
        "type": "invalid_request_error",
        "message": "Too many requests. Please wait before trying again.",
        "param": null,
        "doc_url": "https://docs.augno.com/api/errors#rate_limit_exceeded",
        "is_transient": true,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}

Server Error (500)

{
    "error": {
        "code": "internal_error",
        "type": "api_error",
        "message": "Something went wrong.",
        "param": null,
        "doc_url": "https://docs.augno.com/api/errors#internal_error",
        "is_transient": true,
        "quota": null,
        "request_log_url": "https://augno.com/dashboard/request-logs/rq_fbv1ygmybo3eauykr74"
    }
}