Error Codes
Maintained by: Aether365 Team Audience: Developers and IT administrators Scope: Complete reference of Aether365 API error codes
All API errors return a consistent JSON structure:
json
{
"success": false,
"error": {
"code": "SNAKE_CASE_ERROR_CODE",
"message": "Human-readable description",
"details": {}
}
}Authentication
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
AUTH_MISSING_TOKEN | 401 | No Authorization header in the request | Include Authorization: Bearer <token> in every request |
AUTH_INVALID_TOKEN | 401 | JWT could not be verified | Check that the token is not malformed or truncated |
AUTH_EXPIRED_TOKEN | 401 | JWT has expired | Obtain a new token by signing in again or refreshing the session |
AUTH_INSUFFICIENT_SCOPE | 403 | The authenticated account does not have permission for this action | Verify you are using an account with the required role |
Authorisation
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
TENANT_ACCESS_DENIED | 403 | Request attempted to access another tenant's data | This should never occur in normal use - contact support if you see this |
AUTH_INSUFFICIENT_SCOPE | 403 | Insufficient permissions for this action | Verify you are using an account with the required role |
Tenant
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
TENANT_NOT_FOUND | 404 | No tenant account exists for this user | Create an account at app.aether365.io |
TENANT_NOT_CONNECTED | 400 | Microsoft 365 admin consent has not been completed | Connect a tenant via Settings > Connections |
Scans
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
SCAN_NOT_FOUND | 404 | Scan ID does not exist or belongs to another tenant | Check the scan ID |
SCAN_ALREADY_RUNNING | 409 | A scan is already in progress for this tenant | Wait for the current scan to complete |
SCAN_PLAN_LIMIT_REACHED | 429 | Scan quota exhausted | Wait until the next billing period or contact support |
SERVICE_UNAVAILABLE | 503 | Platform is in maintenance mode | Check status and try again when maintenance ends |
Connections
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
CONNECTION_NOT_FOUND | 404 | Connection ID does not exist | Check the connection ID |
CANNOT_REMOVE_LAST_CONNECTION | 409 | Cannot remove the only remaining connection | Add another connection before removing this one |
Team Members
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
MEMBER_LIMIT_REACHED | 429 | Member limit reached | Contact support to add more members |
MEMBER_ALREADY_EXISTS | 409 | Email already has an active or pending invitation | Check the current member list |
Scheduled Scans
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
SCAN_PLAN_LIMIT_REACHED | 429 | Custom schedule limit reached | Delete an existing schedule or contact support |
Validation
| Code | HTTP | Meaning |
|---|---|---|
VALIDATION_ERROR | 400 | Request body or query parameter is invalid. The details field lists the specific invalid fields. |
Server Errors
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
INTERNAL_ERROR | 500 | Unexpected server error | Retry the request. If the error persists, contact support with the request ID from the response headers. |
Rate Limits
When you exceed the API rate limit, the API returns:
json
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Retry after 60 seconds."
}
}HTTP status: 429 Too Many Requests Header: Retry-After: 60
Current rate limits: 120 requests per minute per API key.