| Genel |
| UNAUTHENTICATED | 401 | Oturum yok, süresi dolmuş ya da iptal; yeniden giriş. |
| INVALID_JSON | 400 | İstek gövdesi bozuk JSON, boş ya da nesne değil (tüm JSON gövdeli uçlar). |
| VALIDATION_ERROR | 400 / 422 | Alan doğrulaması: giriş/aktivasyonda error.field, şifre/profilde error.fieldErrors, başvuruda error.details[] (422). |
| INTERNAL_ERROR | 500 | Beklenmeyen hata (oturum, giriş, aktivasyon, şifre, profil, müsaitlik, sözleşmeler, belgeler, onay metinleri, bekleyen zimmet, neden kodları). |
| INTERNAL_SERVER_ERROR | 500 | Beklenmeyen hata (başvuru, telefon kontrolü, Başvurum, aday belge portalı, şehir/ilçe). |
| CONCURRENT_UPDATE | 409 | Eşzamanlı güncelleme; aynı anahtarla tekrar deneyin. |
| IDEMPOTENCY_KEY_REQUIRED | 400 | Idempotency-Key zorunlu. |
| IDEMPOTENCY_KEY_INVALID | 400 | Anahtar uzunluğu geçersiz. |
| IDEMPOTENCY_KEY_CONFLICT | 409 | Anahtar başka işlemde kullanılmış. |
| CAPTURED_AT_INVALID / CAPTURED_AT_IN_FUTURE | 400 | Çekim zamanı geçersiz / 1 dk'dan fazla ileri. |
| FIELD_TOO_LONG | 400 | Metin alanı sınırı aşıldı. |
| Giriş ve hesap |
| INVALID_CREDENTIALS | 401 | E-posta, telefon ya da şifre hatalı (error.remainingAttempts, error.lockedUntil). |
| ACCOUNT_TEMPORARILY_LOCKED | 423 | Çok sayıda hatalı giriş; error.lockedUntil. |
| ACCOUNT_NOT_ACTIVATED | 403 | Hesap aktive edilmemiş (e-posta bağlantısı). |
| ACCOUNT_NOT_ACTIVE | 403 | Hesap pasif ya da askıda. |
| PASSWORD_NOT_SET | 403 / 409 | Şifre belirlenmemiş (girişte 403, şifre değiştirmede 409). |
| TOKEN_REQUIRED | 400 | Aktivasyon token'ı yok. |
| ACTIVATION_NOT_FOUND | 404 | Aktivasyon bağlantısı geçersiz. |
| ACTIVATION_REVOKED / ACTIVATION_ALREADY_USED / ACTIVATION_EXPIRED | 410 | Bağlantı iptal / kullanılmış / süresi dolmuş. |
| ACCOUNT_ALREADY_ACTIVE | 409 | Hesap zaten aktif. |
| ACCOUNT_NOT_ACTIVATABLE | 403 (GET) / 409 (POST) | Hesap aktivasyona uygun değil. |
| ACCOUNT_NOT_FOUND | 404 | Kurye hesabı yok. |
| CURRENT_PASSWORD_INVALID | 400 | Mevcut şifre yanlış. |
| PASSWORD_REUSE_NOT_ALLOWED | 400 | Yeni şifre eskisiyle aynı. |
| Görev, konum ve arama |
| COURIER_NOT_FOUND | 404 | Kurye kaydı ya da tenant bulunamadı. |
| COURIER_DASHBOARD_LOAD_FAILED | 500 | Ana sayfa yüklenemedi. |
| COURIER_TASKS_LOAD_FAILED | 500 | Görev listesi yüklenemedi. |
| COURIER_TASK_NOT_FOUND | 404 | Görev bu kuryede değil ya da shipmentId geçersiz (detay, accept, start, location, finalize). |
| CURRENT_ASSIGNMENT_NOT_FOUND | 409 | Kuryenin güncel ataması yok. |
| COURIER_TASK_DETAIL_LOAD_FAILED | 500 | Görev detayı yüklenemedi. |
| COURIER_TASK_ACCEPT_FAILED / COURIER_TASK_START_FAILED / COURIER_LOCATION_SAVE_FAILED / COURIER_TASK_FINALIZE_FAILED | 500 | Beklenmeyen hata. |
| LOCATION_INVALID | 400 / 409 / 422 | Koordinat aralık dışı ya da sayı değil. |
| LOCATION_PAIR_REQUIRED | 400 / 422 | Enlem ve boylam birlikte gönderilmeli. |
| LOCATION_TIMESTAMP_INVALID | 400 / 409 | capturedAt geçersiz. |
| LOCATION_NOT_FRESH | 409 | Konum 5 dk'dan eski ya da 1 dk'dan fazla ileri tarihli. |
| LOCATION_PURPOSE_INVALID | 400 | purposeCode ACTIVE_TASK ya da ARRIVAL değil. |
| RUNNING_SHIPMENT_WORKFLOW_NOT_FOUND | 409 | Gönderinin çalışan iş akışı yok. |
| TASK_NOT_READY_FOR_DELIVERY | 409 | Görev dağıtıma hazır durumda değil. |
| TASK_NOT_STARTED | 409 | Görev başlatılmamış. |
| TASK_NOT_OUT_FOR_DELIVERY | 409 | Görev dağıtımda değil. |
| SHIPMENT_NOT_FOUND | 404 | Gönderi bulunamadı ya da bu kuryede değil. |
| RECIPIENT_PHONE_MISSING | 422 | Alıcı telefonu yok ya da 10 haneden kısa: OTP gönderilemez (istemci OTP adımını atlar) ve "Müşteriyi Ara" yapılamaz. |
| TASK_ALREADY_FINALIZED | 409 | Görev teslim edilmiş ya da sonuçlanmış; alıcı aranamaz. |
| RECIPIENT_CALL_FAILED | 500 | Arama kaydı yazılamadı; numara dönmez. |
| OTP |
| RECEIVER_TYPE_INVALID | 400 | Teslim alan tipi geçersiz. |
| OTP_RATE_LIMITED | 429 | reason: RESEND_TOO_SOON (60 sn) ya da HOURLY_LIMIT (saatte 5); Retry-After başlığı. |
| SMS_SEND_FAILED | 503 | SMS gönderilemedi. |
| OTP_NOT_FOUND | 404 | Doğrulama kaydı yok. |
| OTP_INVALID | 422 | Kod yanlış ya da 6 hane değil (remainingAttempts; biçim hatasında alan yok). |
| OTP_TOO_MANY_ATTEMPTS | 429 | 5 hatalı deneme; yeni kod isteyin. |
| OTP_EXPIRED | 410 | Kod süresi (120 sn) doldu ya da yeni kod istendi. |
| OTP_REQUEST_FAILED / OTP_VERIFY_FAILED | 500 | Beklenmeyen hata. |
| Kanıt |
| CATEGORY_INVALID | 400 | Kanıt kategorisi geçersiz. |
| EVIDENCE_TYPE_INVALID | 400 | Kanıt tipi geçersiz. |
| TEXT_REQUIRED / TEXT_TOO_LONG | 400 | Not metni boş / 4000 karakteri aşıyor. |
| NOTE_TOO_LONG | 400 | Not 2000 (kanıt) / 4000 (tutanak) karakteri aşıyor. |
| CONTENT_TYPE_INVALID | 415 | multipart/form-data ya da application/json değil. |
| FILE_REQUIRED / FILE_EMPTY | 400 | Dosya yok / boş (kanıt ve aday belge yükleme). |
| FILE_TOO_LARGE | 413 | Kanıtta 10 MB üstü (error.maxBytes); aday belgede tanımdaki maxFileSizeMb üstü. |
| FILE_TYPE_NOT_ALLOWED | 415 | İzinli tip değil. |
| PAGE_COUNT_INVALID | 400 | Sayfa sayısı 1–500 tam sayı değil. |
| REQUIREMENT_CODE_INVALID | 400 / 422 | 400: PHOTO dışı tipte ya da 80 karakter üstü; 422: bu gönderide tanımlı değil. |
| REQUIREMENT_CATEGORY_MISMATCH | 422 | Kategori gereksinimin kategorisiyle uyuşmuyor. |
| EVIDENCE_NOT_FOUND | 404 / 422 | Kanıt yok (finalize'da 422). |
| EVIDENCE_ALREADY_LINKED | 422 | Kanıt başka teslim denemesine bağlı. |
| EVIDENCE_IDS_INVALID | 400 | evidenceIds UUID dizisi değil ya da 50'den fazla. |
| EVIDENCE_NOT_DELETABLE | 409 | Bu tip kanıt silinemez. |
| EVIDENCE_NOT_OWNED | 403 | Kanıt bu kuryeye ait değil. |
| EVIDENCE_LOCKED | 409 | Tamamlanmış teslim denemesine bağlı kanıt silinemez. |
| EVIDENCE_FILE_NOT_FOUND | 404 | Dosya yok ya da kanıt VOID. |
| EVIDENCE_FILE_PATH_INVALID | 400 | Depolama yolu geçersiz. |
| EVIDENCE_STORAGE_NOT_SUPPORTED | 501 | Depolama sağlayıcısı desteklenmiyor. |
| EVIDENCE_LIST_FAILED / EVIDENCE_UPLOAD_FAILED / EVIDENCE_DELETE_FAILED / EVIDENCE_FILE_READ_FAILED | 500 | Beklenmeyen hata. |
| Tutanak |
| REPORT_TYPE_INVALID / REPORT_STATUS_INVALID | 400 | Tutanak tipi ya da durumu geçersiz. |
| SIGNATURE_INVALID | 400 | İmza data:image/png;base64,... değil. |
| SIGNATURE_TOO_LARGE | 413 | İmza PNG'si 2 MB üstü. |
| SIGNATURE_REQUIRED | 422 | SUBMITTED tutanakta iki imza da zorunlu. |
| SIGNER_NAME_REQUIRED / SIGNER_NAME_INVALID / SIGNER_ROLE_INVALID | 400 | İmzacı adı ya da rolü. |
| ATTACHMENTS_INVALID | 400 / 422 | Ek kanıt kimlikleri geçersiz / bu gönderiye ait değil ya da VOID. |
| REPORT_LIST_FAILED / REPORT_CREATE_FAILED | 500 | Beklenmeyen hata. |
| Anket |
| FORM_VERSION_MISMATCH | 409 | Anket sürümü değişti (formVersionId güncel değer; geçersiz UUID'de alan yok). |
| FORM_STATUS_INVALID / FORM_VALUES_INVALID | 400 | Anket durumu ya da değerler nesnesi geçersiz. |
| FORM_NOT_REQUIRED_FOR_SHIPMENT | 409 | Bu gönderide anket yok. |
| FORM_FIELD_INVALID | 422 | Alan kodu bilinmiyor ya da değer tipi/sınırı hatalı (fieldCode). |
| FORM_FIELD_REQUIRED | 422 | Zorunlu alan boş (fieldCode). |
| FORM_EVIDENCE_REQUIRED | 422 | Alan için fotoğraf eksik (fieldCode, minCount, actual). |
| FORM_ALREADY_SUBMITTED | 409 | Anket farklı değerlerle zaten tamamlanmış. |
| FORM_SAVE_FAILED | 500 | Beklenmeyen hata. |
| Teslim sonucu (finalize) |
| DELIVERY_REQUIREMENTS_LOAD_FAILED | 500 | Gereksinimler çözülemedi. |
| DELIVERY_REQUIREMENTS_MISSING | 422 | Teslim gereksinimleri eksik (missing[]). |
| FINALIZE_BODY_INVALID / FINALIZE_RESULT_INVALID / FINALIZE_RESULT_CONFLICT / FINALIZE_RESULT_REQUIRED | 400 | Sonuç alanları. |
| DELIVERY_REASON_REQUIRED | 422 | Teslim edilemedi için neden kodu zorunlu. |
| DELIVERED_REASON_NOT_ALLOWED | 422 | Teslim edildi'de reasonCode gönderilmez (yakınlık için receivedRelationCode). |
| DELIVERY_REASON_INVALID | 422 | Neden kodu tanımsız ya da pasif. |
| FINAL_V3_REASON_NOT_ALLOWED_FOR_TARGET_STATUS | 422 | Neden bu durum için izinli değil. |
| FINAL_V3_REASON_PATH_NOT_CONFIGURED | 422 | İş akışı yapılandırma hatası. |
| RECEIVED_RELATION_INVALID | 422 | Teslim alan yakınlık kodu 5010 için izinli değil. |
| OTP_NOT_VERIFIED | 422 | otpEvidenceId doğrulanmış OTP değil. |
| DELIVERY_ATTEMPT_NOT_FOUND_FOR_FINALIZE | 409 | Açık teslim denemesi yok. |
| DELIVERY_ATTEMPT_NOT_COMPLETABLE:<durum> | 409 | Deneme tamamlanabilir durumda değil. |
| FINALIZE_TRANSITION_NOT_AVAILABLE | 409 | İş akışında geçiş yok. |
| FINALIZE_IDEMPOTENCY_CONFLICT | 409 | Görev farklı sonuçla zaten kapatılmış. |
| FINAL_V3_TARGET_STATUS_NOT_FOUND | 409 | Hedef durum tanımı yok. |
| Zimmet |
| HANDOVER_SCAN_REQUIRED | 409 | Barkod boş. |
| HANDOVER_SCAN_NOT_FOUND | 409 | Bu gönderi size zimmetlenmemiş. |
| HANDOVER_ALREADY_ACCEPTED | 409 | Zaten kabul edildi (anahtarlı tekrarda 200 + replayed). |
| HANDOVER_CONTEXT_INVALID | 409 | Zimmet kaydı eksik. |
| HANDOVER_ALREADY_PENDING / CUSTODY_TRANSFER_SUBJECT_LOCKED | 409 | Gönderi başka bir kabul bekliyor. |
| CUSTODY_TRANSFER_* | kayda göre | Zimmet kaydı hataları; HTTP kayıttaki duruma göre değişebilir, error.message içerir. |
| COURIER_RETURN_PENDING | 409 | Birime iade başlatılmış; tekrar çıkılamaz. |
| COURIER_REDISPATCH_MANUAL_REASON | 409 | Neden operasyon kararı gerektiriyor; birime iade edin. |
| COURIER_REDISPATCH_NOT_ALLOWED | 409 | Tekrar çıkış hakkı yok; birime iade edin. |
| MAX_REDELIVERY_COUNT_REACHED | 409 | Dağıtıma çıkış hakkı doldu. |
| DISPATCH_TRANSITION_FAILED / DISPATCH_COURIER_UNAVAILABLE / REASSIGN_* | 409 | Dağıtıma çıkarma başarısız. |
| RETURN_SCAN_REQUIRED | 400 | İade için gönderi seçilmedi. |
| RETURN_SCAN_NOT_FOUND | 404 | Barkodla gönderi bulunamadı (error.shipmentNumber = okutulan değer). |
| RETURN_UNIT_NOT_FOUND | 404 | Hedef birim bulunamadı. |
| RETURN_TOO_MANY | 400 | Tek seferde en fazla 200 gönderi. |
| RETURN_NOT_WITH_COURIER | 409 | Açık iade başka kuryeye ait. |
| RETURN_RESULT_REQUIRED | 409 | Gönderi hâlâ dağıtımda; önce teslim sonucu girilmeli. |
| RETURN_UNIT_REQUIRED | 409 | Gönderinin teslimat birimi yok. |
| COURIER_HANDOVER_FAILED | 500 | Zimmet işleminde beklenmeyen hata. |
| COURIER_CUSTODY_OVERVIEW_FAILED / COURIER_CUSTODY_HISTORY_FAILED | 500 | Beklenmeyen hata. |
| Hesabım ve profil |
| COURIER_PROFILE_SUMMARY_LOAD_FAILED | 500 | Profil özeti yüklenemedi. |
| BANK_ACCOUNT_ALREADY_EXISTS | 409 | IBAN zaten kayıtlı. |
| INVALID_CHANGE_TYPE | 400 | ADDRESS, VEHICLE ya da WORK değil. |
| NO_CHANGE | 400 | Talep mevcut bilgilerle aynı. |
| REQUEST_NOT_FOUND | 404 | Profil değişiklik talebi yok. |
| REQUEST_NOT_CANCELLABLE | 409 | Yalnız PENDING talep iptal edilir. |
| SUPPORT_CATEGORY_INVALID | 400 | Destek kategorisi geçersiz. |
| TICKET_SUBJECT_REQUIRED / TICKET_DESCRIPTION_REQUIRED | 400 | Destek konusu ya da açıklaması. |
| COURIER_SUPPORT_LOAD_FAILED / COURIER_SUPPORT_CREATE_FAILED | 500 | Beklenmeyen hata. |
| APPLICATION_NOT_FOUND | 404 | Kuryeye bağlı kaynak başvuru yok. |
| Müsaitlik |
| INVALID_DAYS / INVALID_DAY_COUNT / INVALID_DAY_INDEX / DUPLICATE_DAY / INVALID_RANGES / TOO_MANY_RANGES / INVALID_TIME_FORMAT / INVALID_TIME_RANGE / OVERLAPPING_TIME_RANGES / RANGE_REQUIRED | 422 | Haftalık plan doğrulaması (error.details.field). |
| INVALID_EXCEPTIONS / TOO_MANY_EXCEPTIONS / INVALID_EXCEPTION_DATE / DUPLICATE_EXCEPTION_DATE / INVALID_EXCEPTION_TYPE / INVALID_EXCEPTION_TIME / INVALID_EXCEPTION_TIME_RANGE | 422 | Tarih istisnası doğrulaması. |
| Kurye ol başvurusu |
| APPLICATION_ALREADY_EXISTS | 409 | Bu telefonla daha önce başvuru yapılmış (error.details[0].field = "phone"); mevcut başvuru bilgisi dönmez. |
| RATE_LIMITED | 429 | Çok fazla istek (telefon kontrolü, başvuru); Retry-After (saniye). |
| GEOGRAPHY_MISMATCH | 422 | İlçe şehre bağlı değil (error.details[0].field = "districtId"). |
| INVALID_PHONE | 422 | Telefon geçersiz (error.details[0].field = "phone"). |
| PHONE_REQUIRED | 400 | Telefon parametresi yok. |
| INVALID_CONSENT_VERSION / CONSENT_VERSION_MISMATCH / REQUIRED_CONSENT_MISSING / CONSENT_NOT_VIEWED_TO_END / REQUIRED_CONSENT_NOT_ACCEPTED | 422 | Onay metni doğrulaması. |
| DRAFT_LEGAL_TEXTS_NOT_ALLOWED | 503 | Canlıda taslak hukuki metin aktif (error.details[], ör. code: DRAFT_LEGAL_TEXT_COUNT). |
| INVALID_CITY_ID / CITY_NOT_FOUND | 400 / 404 | Şehir kimliği. |
| Aday belge portalı |
| ACCESS_LINK_INVALID | 400 | publicId ya da token eksik. |
| ACCESS_TOKEN_INVALID | 401 | Token hatalı (hatalı deneme sayılır). |
| ACCESS_NOT_FOUND | 404 | Bağlantı bulunamadı. |
| ACCESS_REVOKED | 410 | Bağlantı iptal edildi (yeni bağlantı gönderildi ya da aday kuryeye dönüştürüldü). |
| ACCESS_EXPIRED | 410 | Bağlantının süresi doldu (expiresAt). Yeni bağlantılar varsayılan 14 gün geçerlidir; revizyon e-postası yeni bağlantı üretir. |
| ACCESS_LOCKED | 423 | Hatalı token deneme sınırı aşıldı; bağlantı kilitli. |
| DOCUMENT_PACKAGE_NOT_FOUND | 404 | Açık belge paketi yok. |
| DOCUMENT_REQUEST_NOT_FOUND | 404 | Belge talebi bu pakette yok. |
| DOCUMENT_NOT_UPLOADABLE | 409 | Belge onaylı, reddedilmiş, iptal ya da süresi dolmuş; yükleme yapılamaz. |
| INVALID_FORM_DATA | 400 | Multipart gövde okunamadı. |
| INVALID_DOCUMENT_SIDE | 400 | side belge tipine uygun değil. |
| INVALID_EXPIRY_DATE / EXPIRY_DATE_REQUIRED | 400 | Belge son kullanma tarihi geçersiz / zorunlu. |
| UNSUPPORTED_FILE_TYPE | 415 | Dosya tipi belge tanımında izinli değil. |
| DOCUMENTS_ALREADY_SUBMITTED | 409 | Paket zaten onaya gönderilmiş. |
| REJECTED_DOCUMENT_PRESENT | 409 | Reddedilmiş belge var (error.rejectedDocuments). |
| NO_DOCUMENTS_TO_SUBMIT | 409 | Gönderilecek yeni yüklenmiş belge yok. |
| REQUIRED_DOCUMENTS_MISSING | 422 | Zorunlu belge ya da yüz eksik (error.missingDocuments). |