# Ek A — Hata Kodları

`error_code` alanı sürümler arasında kararlıdır. Bunu makine
tanımlayıcısı olarak ele alın ve `message`'ı yalnızca insanlara
gösterin.



_242 kod, `agent/scripts/gen_error_codes.py` ile agent kaynağından üretildi; elle düzenlemeyin._

### Kimlik doğrulama ve oturum

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `AUTH_2FA_INVALID` | 400 / 401 | `auth`, `exceptions`, `profile` | Invalid 2FA code |
| `AUTH_2FA_LOCKED` | 429 | `auth`, `exceptions` | Too many failed 2FA attempts, temporary lock |
| `AUTH_CAPTCHA_FAILED` | 400 | `auth` | reCAPTCHA verification failed (low score or invalid token) |
| `AUTH_EXPIRED` | 401 | `auth`, `exceptions` | Zaman damgası kayması > 300 sn veya oturum çerezi süresi doldu. |
| `AUTH_FAILED` | 401 / 403 / 404 | `api_keys`, `auth`, `backups` +20 | Geçersiz API anahtarı, imza veya oturum çerezi. |
| `AUTH_LOCKED` | 429 | `auth` | Bu kimlik için çok fazla başarısız giriş; `Retry-After` saniyesi sonra yeniden deneyin. |
| `AUTH_RATE_LIMITED` | 429 | `exceptions` | Auth rate limited |
| `AUTH_REQUIRED` | 401 | `license` | Endpoint kimlik doğrulaması gerektiriyor ve hiç sağlanmadı. |
| `CROSS_ORIGIN_DENIED` | 403 | `main` | Request origin is not allowed for this action |

### API anahtarları

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `API_KEY_LIMIT` | 403 | `exceptions` | Api key limit |
| `API_KEY_NOT_FOUND` | 404 | `exceptions` | Api key not found |
| `API_KEY_REVOKED` | 403 | `exceptions` | Api key revoked |
| `HMAC_FORBIDDEN_FOR_CREDENTIAL_MUTATION` | 403 | `accounts`, `client_accounts`, `exceptions` +1 | Credential change needs a session cookie: account, sub-account and root password (403) |
| `SCOPE_DENIED` | 403 | `audit_logs`, `exceptions` | API key not found |
| `SCOPE_LOOKUP_FAILED` | 500 | `audit_logs` | Could not resolve API key scopes |

### İstek doğrulama ve çerçeve

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `BUNDLE_MISMATCH` | 403 | `main` | Yalnızca tarayıcı: bundle parmak izi eşleşmiyor. SDK'lar muaftır. |
| `HTTP_405` | 405 | `node_apps`, `python_apps` | Method Not Allowed |
| `HTTP_<status>` | 404 / 405 | `main` | Plain HTTP errors from the framework (unknown route, method not allowed) wrapped in the standard envelope; the code carries the status. |
| `IDEMPOTENCY_KEY_INVALID` | 400 | `main` | Header değeri `^[A-Za-z0-9_-]{8,64}$` ile eşleşmiyor. |
| `IDEMPOTENCY_KEY_REUSED` | 409 | `main` | Aynı kimlik aynı anahtarı **farklı bir metot, yol ya da gövde ile** tekrar oynattı. |
| `NOT_FOUND` | 404 | `exceptions`, `node_apps`, `profile` | A named resource does not exist. |
| `PAYLOAD_TOO_LARGE` | 413 | `main` | Request body too large ( MB >  MB limit) |
| `VALIDATION_ERROR` | 400 / 422 | `auth`, `cron`, `emails` +7 | Pydantic şema reddi. `details` alan seviyesi nedenleri taşır. |

### Firewall ve güvenlik servisleri

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `ATTACK_MODE_ACTIVE` | 409 | `exceptions` | Under-attack mode is already active (409) |
| `ATTACK_MODE_INACTIVE` | 409 | `exceptions` | Under-attack mode is not currently active (409) |
| `BANNED_WORD` | 403 | `exceptions` | Banned word |
| `FAIL2BAN_ERROR` | 500 | `exceptions` | Fail2Ban service error |
| `FAIL2BAN_JAIL_NOT_FOUND` | 404 | `exceptions` | Fail2Ban jail not found |
| `IP_ADD_FAILED` | 500 | `system_ip_service` | Failed to add IP  to : |
| `IP_DELETE_FAILED` | 500 | `system_ip_service` | Failed to remove IP  from : |
| `IP_NOT_ALLOWED` | 403 | `exceptions`, `main` | Kaynak IP, API anahtarının izin listesinde değil. |
| `IP_WHITELISTED` | 409 | `exceptions` | Adres izin listesinde; engel allow kuralının altında kalır ve hiç eşleşmez. Önce izin listesinden çıkarın (409). |
| `IP_WHITELIST_SELF_LOCKOUT` | 400 | `system` | Admin IP list does not cover the caller (400; force=true overrides) |
| `RATE_LIMIT` | 429 | `main`, `node_apps` | Seviye limiti aşıldı; `Retry-After` değerine uyun. |
| `RATE_LIMIT_APPLY_FAILED` | 500 | `exceptions` | Çekirdek kuralın ipset / iptables nesnelerini reddetti; hiçbir şey kaydedilmedi (500). |
| `SELF_LOCKOUT` | 422 | `validators` | Deny/block covers the caller's own address (422) |
| `WAF_CONFIG_ERROR` | 500 | `exceptions`, `modsecurity_service` | ModSecurity configuration syntax error |
| `WAF_MODULE_ERROR` | 500 | `exceptions` | Webserver ModSecurity module load error |
| `WAF_NOT_INSTALLED` | 503 | `exceptions`, `modsecurity_service` | ModSecurity is not installed |
| `WAF_RULE_NOT_FOUND` | 404 | `exceptions`, `modsecurity_service` | WAF rule ID not found |
| `WAF_TEST_UNAVAILABLE` | 409 | `exceptions` | No ModSecurity config test for the running webserver (409) |
| `WORDLIST_NOT_FOUND` | 404 | `exceptions` | Wordlist not found |

### Hesaplar, planlar ve bayiler

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `ACCOUNT_EXISTS` | 409 | `exceptions` | Kullanıcı adı zaten sağlanmış. |
| `ACCOUNT_NOT_FOUND` | 404 | `auth`, `exceptions`, `profile` | Kullanıcı adı bilinmiyor. |
| `ACCOUNT_SUSPENDED` | 403 | `exceptions` | Hesap askıda; askı kalkana kadar cron işleri değiştirilemez ve çalıştırılamaz, hesaba alan adı (ek, alt, park) eklenemez. |
| `ACCOUNT_TERMINATED` | 400 | `auth` | Hedef hesap sonlandırılmış; bu hesaba geçiş yapılamaz. |
| `DISK_LIMIT` | 403 | `exceptions` | Disk quota exceeded |
| `DISK_QUOTA_EXCEEDED` | 403 | `exceptions` | Disk quota exceeded |
| `PLAN_EXISTS` | 409 | `exceptions` | Plan exists |
| `PLAN_IN_USE` | 409 | `exceptions` | Hosting paketi ya da bayi ACL paketi hâlâ hesaplara atanmış durumda ve silinemez; `details` sayıyı taşır. |
| `PLAN_LIMIT` | 403 | `exceptions` | Plan limit exceeded |
| `PLAN_NOT_FOUND` | 404 | `exceptions` | Hosting plan not found |
| `RESELLER_LIMIT` | 403 | `exceptions` | Reseller resource limit exceeded |
| `RESELLER_NOT_FOUND` | 404 | `exceptions` | Reseller not found |

### Alan adları, DNS, SSL ve PHP

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `ADDON_DOMAIN_LIMIT` | 403 | `exceptions` | Addon domain limit exceeded |
| `DNS_ERROR` | 500 | `exceptions` | PowerDNS API hatası. |
| `DNS_RECORD_NOT_FOUND` | 404 | `exceptions` | Dns record not found |
| `DNS_RECORD_PROTECTED` | 409 | `exceptions` | Bölgenin SOA kaydı ve son NS kaydı sunucu tarafından yönetilir: SOA düzenlenemez ve silinemez, son NS silinemez. |
| `DNS_ZONE_EXISTS` | 409 | `exceptions` | Dns zone exists |
| `DNS_ZONE_NOT_FOUND` | 404 | `exceptions` | Dns zone not found |
| `DOMAIN_EXISTS` | 409 | `exceptions` | Domain bu sunucuda zaten bağlı. |
| `DOMAIN_NOT_FOUND` | 404 | `exceptions` | Domain bilinmiyor. |
| `DOMAIN_NOT_OWNED` | 403 | `emails`, `exceptions`, `logs` | Domain '' is not registered to account ''. |
| `PARKED_DOMAIN_EXISTS` | 409 | `exceptions` | Parked domain already exists |
| `PARKED_DOMAIN_LIMIT` | 403 | `exceptions` | Parked domain limit |
| `REDIRECT_NOT_FOUND` | 404 | `exceptions` | Redirect not found |
| `SSL_EMAIL_REQUIRED` | 400 | `exceptions` | Ssl email required |
| `SSL_ERROR` | 500 | `exceptions` | Let's Encrypt veya özel sertifika işlemi başarısız oldu. |
| `SSL_EXISTS` | 409 | `exceptions` | Ssl exists |
| `SSL_NOT_FOUND` | 404 | `exceptions` | Ssl not found |
| `SUBDOMAIN_LIMIT` | 403 | `exceptions` | Subdomain limit exceeded |
| `VHOST_CONFIG_ERROR` | 500 | `exceptions` | Custom VHost configuration error (syntax invalid or apply failed) |

### Veritabanları

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `DATABASE_EXISTS` | 409 | `exceptions` | Veritabanı adı çakışması. |
| `DATABASE_LIMIT` | 403 | `exceptions` | Plan veritabanı limitine ulaşıldı. |
| `DATABASE_NOT_FOUND` | 404 | `databases`, `exceptions` | Database '' not found. |
| `DATABASE_SSO_DISABLED` | 503 | `exceptions` | Database sso disabled |
| `DATABASE_USER_EXISTS` | 409 | `exceptions` | Database user exists |
| `DATABASE_USER_NOT_FOUND` | 404 | `exceptions` | Database user not found |
| `INTERNAL_DB_PROTECTED` | 403 | `exceptions` | Internal db protected |
| `PMA_INSTALL_FAILED` | 500 | `phpmyadmin_service` | phpMyAdmin installation failed |
| `PMA_NOT_INSTALLED` | 500 | `databases`, `phpmyadmin_service` | phpMyAdmin is not installed |
| `PMA_SSO_FAILED` | 500 | `databases` | Could not provision a phpMyAdmin session. |
| `REMOTE_DB_DENIED` | 403 | `exceptions` | Remote database access denied |
| `REMOTE_DB_HOST_EXISTS` | 409 | `exceptions` | Remote db host exists |

### E-posta

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `EMAIL_EXISTS` | 409 | `exceptions` | Email hesabı zaten mevcut. |
| `EMAIL_FORWARDER_EXISTS` | 409 | `exceptions` | Bu hedefe yönlendirici zaten var. |
| `EMAIL_FORWARDER_NOT_FOUND` | 404 | `exceptions` | Bu posta kutusunda böyle bir yönlendirici yok. |
| `EMAIL_INACTIVE` | 409 | `emails`, `exceptions` | E-posta hesabı pasif; önce etkinleştirin. |
| `EMAIL_LIMIT` | 403 | `exceptions` | Paketin e-posta hesabı sınırına ulaşıldı. |
| `EMAIL_NOT_CONFIGURED` | 400 / 500 | `auth`, `profile` | Admin email address is not configured for 2FA |
| `EMAIL_NOT_FOUND` | 404 | `emails`, `exceptions`, `spam` | Bu hosting hesabında böyle bir e-posta hesabı yok. |
| `EMAIL_SEND_FAILED` | 500 | `notifications` | Failed to send test email. Check SMTP settings. |
| `MAIL_QUEUE_MESSAGE_NOT_FOUND` | 404 | `exceptions` | Posta kuyruğunda bu kimlikte ileti yok. |
| `SMTP_NOT_CONFIGURED` | 400 | `profile` | SMTP settings must be configured before using email 2FA |
| `SMTP_PASSWORD_REQUIRED` | 400 | `notifications` | SMTP sunucusu, portu, kullanıcısı ya da şifrelemesi değişti ama parola alanında hâlâ maskeli kayıtlı parola vardı: parolayı yeniden yazın. |
| `SMTP_TARGET_FORBIDDEN` | 400 | `notifications` | SMTP relay host/port refused (non-submission port or metadata address) |

### FTP

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `FTP_ACCOUNT_EXISTS` | 409 | `exceptions` | FTP hesabı zaten mevcut. |
| `FTP_ACCOUNT_NOT_FOUND` | 404 | `exceptions` | Ftp account not found |
| `FTP_LIMIT` | 403 | `exceptions` | Plan FTP hesabı limitine ulaşıldı. |
| `FTP_NOT_ORPHAN` | 409 | `exceptions` | Ftp not orphan |

### Dosyalar

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `FILE_EXISTS` | 409 | `exceptions` | File exists |
| `FILE_NOT_FOUND` | 404 | `exceptions`, `node_apps` | Dosya veya dizin mevcut değil. |
| `FILE_TOO_LARGE` | 400 / 413 | `branding_assets`, `exceptions`, `node_apps` +2 | Uploaded file exceeds size limit |
| `PATH_TRAVERSAL` | 403 | `exceptions` | `..`, null byte veya symlink kaçışı tespit edildi. |
| `PROTECTED_PATH` | 403 | `exceptions` | Protected path |
| `UNSUPPORTED_ARCHIVE` | 422 | `exceptions` | Unsupported archive |

### Cron

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `CRON_JOB_EXISTS` | 409 | `exceptions` | Cron job exists |
| `CRON_JOB_NOT_FOUND` | 404 | `exceptions` | Cron job not found |
| `CRON_RUN_TIMEOUT` | 408 | `exceptions` | Manuel çalıştırma 85 saniye içinde bitmedi ve durduruldu; zamanlanmış çalışmalar etkilenmez. |

### Yedekler

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `BACKUP_DISABLED` | 403 | `exceptions` | Yedekleme sistemi sunucu ayarlarında kapalı; açılana kadar yedek, geri yükleme ve zamanlama reddedilir. |
| `BACKUP_ERROR` | 500 | `exceptions` | Yedek oluşturma veya geri yükleme başarısız oldu. |
| `BACKUP_FILE_MISSING` | 410 | `exceptions` | Yedek listede var ama arşiv dosyası diskten silinmiş; yalnız silinebilir. |
| `BACKUP_IN_PROGRESS` | 409 | `exceptions` | Bir yedek, geri yükleme ya da zamanlanmış yedek sürüyor; güncelleme yeniden başlatmasıyla onu keserdi. İleti işi ve başladığı saati adlandırır — iş bitince kurun. |
| `BACKUP_NOT_FOUND` | 404 | `exceptions` | Backup not found |
| `BACKUP_SCHEDULE_LIMIT` | 403 | `exceptions` | Backup schedule limit |
| `BACKUP_SCHEDULE_NOT_FOUND` | 404 | `exceptions` | Backup schedule not found |
| `BUNNY_AUTH_FAILED` | 400 | `system` | Bunny.net hesap API anahtarını reddetti (400). |
| `BUNNY_FETCH_FAILED` | 502 | `system` | Depolama bölgesi listesi Bunny.net'ten alınamadı (502). |
| `GOOGLE_DRIVE_AUTH_FAILED` | 400 | `system` | Google yetki kodu değişimini reddetti ya da oturum açma state'i eşleşmedi (400). |
| `GOOGLE_DRIVE_NO_CREDENTIALS` | 500 | `remote_backup_service` | Google Drive hedefinde ne OAuth yenileme belirteci ne de servis hesabı dosyası var. |
| `ONEDRIVE_AUTH_FAILED` | 400 | `system` | Microsoft yetki kodu değişimini reddetti ya da oturum açma state'i eşleşmedi (400). |
| `REMOTE_BACKUP_AUTH_FAILED` | 500 | `remote_backup_service` | No access token returned from Microsoft |
| `REMOTE_BACKUP_DOWNLOAD_FAILED` | 500 | `remote_backup_service` | Sağlayıcı indirmeyi reddetti ya da kesti. |
| `REMOTE_BACKUP_HOST_FORBIDDEN` | 422 | `exceptions` | Hedef sunucu özel, loopback ya da metadata adresine çözülüyor; reddedilir (422). |
| `REMOTE_BACKUP_NOT_FOUND` | 404 | `remote_backup_service` | Dosya uzak hedefte yok. |
| `REMOTE_BACKUP_UPLOAD_FAILED` | 500 | `remote_backup_service` | Sağlayıcı yüklemeyi reddetti ya da kesti; yerel arşiv tamdır. |
| `REMOTE_DESTINATION_DISABLED` | 409 | `exceptions` | Uzak hedef kapalı; açın ya da başka bir hedef seçin. |
| `REMOTE_DESTINATION_EXISTS` | 500 | `remote_backup_service` | Aynı kimlikte bir hedef zaten var. |
| `REMOTE_DESTINATION_IN_USE` | 409 | `exceptions` | Bir yedek zamanlaması hedefi hâlâ kullanıyor; önce zamanlamayı düzenleyin ya da silin (details.schedules). |
| `REMOTE_DESTINATION_NOT_FOUND` | 404 | `remote_backup_service` | Çağıranın deposunda bu kimlikte uzak hedef yok. |
| `REMOTE_PROVIDER_UNKNOWN` | 500 | `remote_backup_service` | Kayıtlı hedef, agent'ın tanımadığı bir sağlayıcı türü taşıyor. |
| `YANDEX_DISK_AUTH_FAILED` | 400 | `system` | Yandex yetki kodu değişimini reddetti ya da oturum açma state'i eşleşmedi (400). |

### Eklentiler ve LiteSpeed

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `PLUGIN_ACTIVATION_ERROR` | 500 | `plugins` | Etkinleştirme pipeline'ı başarısız oldu (vhost taşıma, paket kurulum, …). |
| `PLUGIN_DEACTIVATION_ERROR` | 500 | `plugins` | Devre dışı bırakma geri alma işlemi başarısız oldu. |
| `PLUGIN_DISABLED` | 503 | `node_apps`, `python_apps` | Node.js Hosting plugin is not active. Enable it at Admin → Plugins to use this feature. |
| `PLUGIN_LIST_ERROR` | 500 | `plugins` | Plugin list error |
| `PLUGIN_NOT_FOUND` | 404 | `plugins` | Bilinmeyen plugin id'si. |
| `PLUGIN_TASK_IN_PROGRESS` | 409 | `plugins` | Eşzamanlı etkinleştirme denemesi reddedildi. |
| `PLUGIN_TASK_NOT_FOUND` | 404 | `plugins` | Async task id'si bilinmiyor veya süresi doldu. |
| `PLUGIN_UPDATE_ERROR` | 500 | `plugins` | Plugin update error |
| `PLUGIN_UPDATE_NOT_SUPPORTED` | 400 | `plugins` | Plugin `update()` implemente etmiyor. |
| `PLUGIN_VALIDATION_ERROR` | 400 | `plugins` | İstenen operasyon için kötü mod / seri numarası / durum. |

### Python ve Node.js uygulamaları

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `NODE_APP_EXISTS` | 409 | `exceptions` | Node app exists |
| `NODE_APP_LIMIT` | 403 | `exceptions` | Node app limit |
| `NODE_APP_NOT_FOUND` | 404 | `exceptions` | Node app not found |
| `NODE_APP_START_ERROR` | 500 | `exceptions` | Node app start error |
| `NODE_NPM_ERROR` | 500 | `exceptions` | Node npm error |
| `NODE_SCRIPT_DENIED` | 403 | `exceptions` | Node script denied |
| `NODE_VERSION_NOT_FOUND` | 400 | `exceptions` | Node version not found |
| `NODE_WORKER_LIMIT` | 403 | `exceptions` | Node worker limit |
| `PYTHON_APP_EXISTS` | 409 | `exceptions` | Python app with this name already exists for account |
| `PYTHON_APP_LIMIT` | 403 | `exceptions` | Maximum Python apps reached for this account |
| `PYTHON_APP_NOT_FOUND` | 404 | `exceptions` | Python app not found |
| `PYTHON_APP_START_ERROR` | 500 | `exceptions` | Application server failed to start |
| `PYTHON_MANAGE_CMD_DENIED` | 403 | `exceptions` | manage.py command not in allowed list |
| `PYTHON_PIP_ERROR` | 500 | `exceptions` | pip install/uninstall failed |
| `PYTHON_VENV_ERROR` | 500 | `exceptions` | Virtualenv creation/management failed |
| `PYTHON_VERSION_NOT_FOUND` | 400 | `exceptions` | Requested Python version not installed on server |
| `PYTHON_WORKER_LIMIT` | 403 | `exceptions` | Worker count exceeds plan limit |

### Güncellemeler ve taşıma

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `MIGRATION_API_ERROR` | 502 | `exceptions` | Migration api error |
| `MIGRATION_BACKUP_INVALID` | 400 | `exceptions` | Taşıma sırasında kaynak WHost sunucusundan alınan yedek arşivi okunamadı. |
| `MIGRATION_CONNECTION_FAILED` | 400 | `exceptions` | Migration connection failed |
| `MIGRATION_CREDENTIALS_EXPIRED` | 400 | `migration` | SSH credentials have expired or were not found. Please re-scan the server. |
| `MIGRATION_INVALID_STATE` | 400 | `exceptions` | Migration invalid state |
| `MIGRATION_JOB_NOT_FOUND` | 404 | `exceptions` | Migration job not found |
| `MIGRATION_PANEL_UNKNOWN` | 400 | `exceptions` | Cannot detect cPanel/DA on source server |
| `MIGRATION_SCAN_FAILED` | 500 | `exceptions` | Migration scan failed |
| `MIGRATION_SECURITY_ERROR` | 400 | `exceptions` | Migration security error |
| `MIGRATION_SSH_FAILED` | 400 | `exceptions` | SSH connection to source server failed |
| `MIGRATION_UPLOAD_RESTORE_UNAVAILABLE` | 409 | `exceptions` | Yüklenen yedek dosyasından geri yükleme sunulmuyor; hesapları SSH üzerinden taşıyın (`POST /migration/scan`, ardından `POST /migration/start`). |
| `OS_UPGRADE_IN_PROGRESS` | 409 | `exceptions` | OS paket yükseltmesi zaten çalışıyor (kilit dosyası tutuluyor). |
| `UPDATE_ALREADY_LATEST` | 400 | `exceptions` | Yükseltme mevcut olmadığında yanıt gövdesinde döndürülür. |
| `UPDATE_CHECK_REQUIRED` | 400 | `exceptions` | Bu agent sürecinde henüz hiç güncelleme kontrolü yapılmamışken kurulum istendiğinde döndürülür; önce /system/update/check çağrılır. |
| `UPDATE_DOWNGRADE_REJECTED` | 400 | `exceptions` | Update downgrade rejected |
| `UPDATE_INSTALL_FAILED` | 500 | `exceptions` | WHost güncelleme pipeline'ı iptal edildi; geri alma tamamlandı. |
| `UPDATE_INVALID_VERSION` | 400 | `exceptions` | Update invalid version |
| `UPDATE_IN_PROGRESS` | 409 | `exceptions` | Bir kurulum zaten çalışıyor: ikinci kurulum reddedilir, kurulumun yeniden başlatmasına kadar yedek ve geri yükleme de reddedilir. |

### Lisans

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `LICENSE_ACTIVATION_FAILED` | 400 | `exceptions` | Lisans anahtarı lisans servisi tarafından reddedildi. |
| `LICENSE_ADDON_REQUIRED` | 403 | `whitelabel` | Yazma işlemi mevcut lisansın taşımadığı bir eklenti gerektiriyor (whitelabel); saklı değerler olduğu gibi bırakılır (403) |
| `LICENSE_NOT_ACTIVATED` | 403 | `exceptions`, `license_gate` | Lisans anahtarı hiç etkinleştirilmemiş. |
| `LICENSE_SERVER_UNREACHABLE` | 503 | `exceptions` | License server unreachable (grace period may apply) |
| `LICENSE_SUSPENDED` | 403 | `exceptions`, `license_check`, `license_gate` | Lisans askıya alınmış, süresi dolmuş veya geçersiz. |
| `LICENSE_VERIFY_FAILED` | 400 | `exceptions` | License verification failed (explicit FAILED from server) |
| `SERVER_UNREACHABLE` | — | `wlicense_client` | Server unreachable |

### Webhook'lar

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `DELIVERY_NOT_FOUND` | 404 | `webhooks` | Unknown webhook delivery id (404) |
| `DELIVERY_PAYLOAD_MISSING` | 400 | `webhooks` | Delivery cannot be retried: original payload no longer stored (400) |
| `WEBHOOK_DISABLED` | 409 | `webhooks` | Webhook ucu devre dışı ya da sessize alınmış; test olayı veya yeniden deneme için önce etkinleştirilmesi gerekir (409) |
| `WEBHOOK_NOT_FOUND` | 404 | `webhooks` | Unknown webhook endpoint id (404) |
| `WEBHOOK_VALIDATION` | 400 | `webhooks` | Webhook endpoint refused: private/loopback URL, unknown event, weak secret (16-128 printable ASCII), malformed muted_until (400) |

### Bildirimler ve profil

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `NOTIFICATION_NOT_FOUND` | 404 | `firewall`, `notifications` | Notification not found |
| `NOTIFICATION_SEND_FAILED` | 500 | `profile` | Notification could not be sent (SMTP error etc.) |
| `PROFILE_PASSWORD_MISMATCH` | 400 | `profile` | Current password is wrong |

### Arka plan görevleri

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `TASK_NOT_FOUND` | 404 | `node_apps`, `python_apps` | Deploy task id unknown to this account (python-apps / node-apps) |
| `TOO_MANY_TASKS` | 429 | `node_apps`, `python_apps` | Concurrent deploy limit reached for the account (429) |

### Sistem ve servisler

| Kod | HTTP | Kaynak | Açıklama |
|-----|------|--------|----------|
| `APACHE_CONFIG_TEST_FAILED` | 500 | `exceptions` | Apache config test failed |
| `APACHE_NOT_RUNNING` | 503 | `exceptions` | Apache not running |
| `APACHE_STATUS_ENABLE_FAILED` | 500 | `system` | Apache status enable failed |
| `APACHE_STATUS_ERROR` | 500 | `system` | Apache status error |
| `APACHE_STATUS_NOT_AVAILABLE` | 503 | `exceptions` | Apache status not available |
| `CODE_EXPIRED` | 400 | `profile` | Verification code has expired. Please resend. |
| `CONFIRM_REQUIRED` | 400 | `emails` | Server-wide queue wipe requires the confirm=ALL query parameter. |
| `DEPENDENCY_MISSING` | 500 | `profile` | pyotp is not installed |
| `FEATURE_DISABLED` | 409 | `exceptions` | Özellik agent yapılandırmasında kapalı; etkinleştirilene kadar istek reddedilir (409) |
| `FEATURE_UNAVAILABLE` | 403 | `firewall` | Firewall management is handled at the server level and is not available per account. |
| `FORBIDDEN` | 403 | `dns`, `php`, `spam` +1 | Domain does not belong to your account |
| `HOSTNAME_UPDATE_FAILED` | 500 | `system` | Hostname update failed |
| `IMAGE_DIMENSIONS_TOO_LARGE` | 400 | `branding_assets` | Yüklenen görsel 25 megapikselden büyük; hiçbir piksel çözülmeden başlığından reddedilir. |
| `INTERNAL_ERROR` | 500 | `system` | Failed to change root password |
| `INVALID_FILE_TYPE` | 400 | `branding_assets`, `profile`, `python_apps` | Uploaded file has invalid MIME type or malformed SVG |
| `INVALID_HOSTNAME` | 422 | `system` | Hostname is not a valid FQDN (422) |
| `INVALID_IMAGE` | 400 | `branding_assets` | Yüklenen dosya içeriğinin bildirdiği görsel türü olarak çözülemiyor (kesik ya da bozuk dosya). |
| `INVALID_IP` | 422 | `system` | Server address is not a routable unicast IPv4 (422) |
| `INVALID_JSON` | 400 | `main` | Request body is not valid JSON |
| `INVALID_LOGO_TYPE` | 400 | `whitelabel` | Invalid logo type parameter (valid: light, dark, favicon, favicon_dark) |
| `INVALID_OPERATION` | 400 | `profile` | Email 2FA setup is not in progress |
| `INVALID_QUEUE_ID` | 400 | `emails` | Invalid queue id |
| `INVALID_REQUEST` | 400 | `node_apps`, `python_apps` | Either 'archive' (file upload) or 'server_path' is required |
| `INVALID_TOKEN` | 400 | `auth` | Parola sıfırlama belirteci geçersiz, süresi dolmuş ya da kullanılmış. |
| `INVALID_VIDEO` | 400 | `branding_assets` | Yüklenen giriş sayfası videosu okunabilir bir MP4 değil: kutu yapısı bozuk ya da kesik, video izi yok ya da karesi 1-4096 px dışında (400). |
| `IONCUBE_NOT_INSTALLED` | 503 | `exceptions` | IonCube Loader not installed for PHP version |
| `LIMIT_REACHED` | 403 | `domains` | Addon domain limit reached |
| `LOGIN_VIDEO_NOT_FOUND` | 404 | `whitelabel` | Giriş sayfasının yüklü bir videosu ya da kapağı yok; kaldırılacak bir şey bulunmuyor (404). |
| `LOGIN_VIDEO_REQUIRED` | 400 | `whitelabel` | Yüklü videosu olmayan bir giriş sayfası için kapak görseli gönderildi; önce videoyu ya da videoyla birlikte kapağı gönderin (400). |
| `LOGO_NOT_FOUND` | 404 | `whitelabel` | Bu türde yüklü bir whitelabel logosu yok; kaldırılacak bir şey bulunmuyor (404) |
| `MISSING_RECIPIENT` | 400 | `notifications` | No recipient email address configured |
| `NGINX_CONFIG_FAILED` | 500 | `system` | Hostname change rolled back — Nginx config failed: |
| `NO_FILE` | 400 | `whitelabel` | No file provided in upload request |
| `PERMISSION_DENIED` | 403 | `auth`, `exceptions` | Çağıran kimlik doğrulaması yapmış ama gerekli izne sahip değil. |
| `PORT_IN_USE` | 422 | `system` | SSH port is held by the panel or another listener (422) |
| `REBOOT_SCHEDULE_FAILED` | 500 | `system` | Reboot schedule failed |
| `REMOTE_STORE_ENCRYPTION_FAILED` | 500 | `remote_backup_service` | Hedefin kimlik bilgileri şifrelenemedi; hiçbir şey kaydedilmedi. |
| `REMOTE_STORE_UNREADABLE` | 500 | `exceptions` | Diskteki uzak hedef deposu geçerli JSON değil; üzerine hiçbir şey yazılmadı. Dosyayı onarın ya da geri yükleyin. |
| `SERVICE_ERROR` | 500 | `exceptions` | systemd servis yönetimi hatası. |
| `SETUP_NOT_INITIATED` | 400 | `profile` | Call /2fa/setup first |
| `SYSTEM_ERROR` | 500 | `exceptions`, `main`, `profile` | Dahili sunucu hatası (catch-all; agent log'unu kontrol edin). |
| `TWO_FACTOR_ALREADY_ENABLED` | 409 | `profile` | 2FA is already enabled |
| `TWO_FACTOR_NOT_ENABLED` | 400 | `profile` | 2FA is not currently enabled |
| `UNSUPPORTED_MEDIA_TYPE` | 415 | `branding_assets`, `profile`, `whitelabel` | Yüklenen dosya, bildirilen türe değil içeriğine bakılarak, bu yüklemenin kabul ettiği türlerden biri değil: PNG, JPEG ya da WebP olmayan bir avatar ya da whitelabel görseli (logolarda SVG de olur) ya da MP4 olmayan veya video izi H.264 olmayan bir giriş sayfası videosu (415). |
| `UPLOAD_TOO_LARGE` | 413 | `python_apps` | Upload is  MB — exceeds  MB limit. Upload via SSH/SFTP to /home// and use server_path mode. |
| `WEBMAIL_NOT_INSTALLED` | 503 | `emails`, `exceptions` | Bu sunucuda Roundcube webmail kurulu değil. |
| `WEBMAIL_SSO_NOT_CONFIGURED` | 503 | `exceptions` | Webmail tek oturum açma köprüsü (Dovecot master kullanıcısı) yapılandırılmamış. |
| `WEBSERVER_NOT_APACHE` | 422 | `exceptions` | Webserver not apache |



---
