Skip to main content
Flextell yanıtlarının hepsi JSON’dur ve başarı ya da başarısızlığı success alanı üzerinden işaretler.

Başarı yanıtı

{
  "success": true,
  "data": { ... }
}
Liste uçlarında data bir dizi, links ve meta da bulunur — bkz. Sayfalama.

Hata yanıtı

{
  "success": false,
  "error": "Tenant not found.",
  "data": {
    "message": "Tenant not found."
  }
}
Doğrulama hatalarında ek olarak alanlara göre kırılım verilir:
{
  "success": false,
  "error": "The given data was invalid.",
  "data": {
    "message": "The given data was invalid."
  },
  "errors": {
    "email": ["The email field is required."],
    "phone_number": ["The phone number format is invalid."]
  }
}
success
boolean
Hata yanıtlarında her zaman false.
error
string
Kısa, insan-okunur hata mesajı. UI’da göstermek için uygundur.
errors
object
Yalnızca 422 doğrulama hatalarında bulunur. Alan adından hata mesajları dizisine doğru bir map’tir.

HTTP status kodları

KodAnlamıNe yapmalı?
200 OKBaşarılı okuma
201 CreatedKaynak oluşturulduDönen data’daki ID’yi saklayın
204 No ContentBaşarılı silmeYanıt gövdesi yoktur
400 Bad RequestGeçersiz JSON, eksik X-Tenantİstek gövdesini ve header’larını kontrol edin
401 UnauthorizedToken yok, geçersiz veya süresi dolmuşToken yenilemeyi deneyin; başarısızsa yeniden yetkilendirin
403 ForbiddenToken’ın scope’u yetersiz veya kullanıcının permission’ı yokScopes ve Roller sayfalarına bakın
404 Not FoundKaynak yok veya kullanıcının o tenant’a/kayda erişimi yokID ve tenant’ı doğrulayın
409 ConflictÇakışan değişiklik (nadiren)Mevcut kaydı tekrar çekip işlem yapın
422 Unprocessable EntityDoğrulama hatasıerrors nesnesini okuyup alan alan gösterin
429 Too Many RequestsRate limit aşıldıRetry-After header’ına göre bekleyin
500 Internal Server ErrorSunucu tarafı beklenmeyen hataBiraz bekleyip tekrar deneyin; sürerse destek
503 Service UnavailableBakım / geçici kesintiRetry-After header’ı varsa ona uyun

Yaygın hata senaryoları

Token süresi doldu

HTTP/1.1 401 Unauthorized
Refresh token’ınızı kullanarak yenisini alın. Detay: Token Yenileme.

X-Tenant unutuldu

{
  "success": false,
  "error": "X-Tenant header is required."
}
İsteğinize X-Tenant header’ını ekleyin. Detay: Multi-Tenancy.

Scope yetersiz

HTTP/1.1 403 Forbidden
Kullanıcının uygulamanıza verdiği yetki o uç için yeterli değildir. Örneğin POST /customers için customers:write scope’u gerekir. Token’ınızın scope listesini Scopes ile karşılaştırın; gerekli scope’u uygulama oluştururken eklemediyseniz yeni bir uygulama oluşturmanız gerekir.

Doğrulama hatası (422)

{
  "success": false,
  "error": "The given data was invalid.",
  "errors": {
    "phone_number": ["The phone number has already been taken."]
  }
}
UI’da alan bazlı hata gösterin. Kullanıcı telefon numarasını düzenlesin ve isteği tekrar göndersin.

Hata yönetimi önerisi

async function call(endpoint, options) {
  const res = await fetch(endpoint, options);
  const body = await res.json().catch(() => ({}));

  if (res.ok) {
    return body.data;
  }

  if (res.status === 401) {
    await refreshTokens();
    return call(endpoint, options);
  }

  if (res.status === 422) {
    throw new ValidationError(body.error, body.errors);
  }

  if (res.status === 429) {
    const wait = Number(res.headers.get("Retry-After") || 1);
    await sleep(wait * 1000);
    return call(endpoint, options);
  }

  throw new ApiError(res.status, body.error || "Unknown error");
}