Halı Takip API

Halı Yıkama Firmaları İçin Çok Kiracılı RESTful JSON API

v1.0 JWT Auth UTF-8 JSON Çok Kiracılı

Genel Bakış #

Halı Takip Sistemi API'si, halı yıkama firmaları için çok kiracılı (multi-tenant) sipariş, müşteri, halı kaydı ve ödeme yönetimi sağlar. Tüm endpoint'ler JSON formatında çalışır ve JWT (Bearer) tabanlı kimlik doğrulama kullanır.

Base URL/api/v1
Sürümv1.0
AuthBearer JWT (HS256)
İçerikapplication/json; charset=utf-8
Rate Limit60/dk · 1000/saat
CORSTüm origin'ler (varsayılan)
Hızlı Başlangıç:
  1. POST /auth/login ile JWT token al
  2. Tüm istekleri Authorization: Bearer <token> header'ı ile gönder
  3. Token süresi dolduğunda POST /auth/refresh ile yenile

Kimlik Doğrulama #

API, JWT (JSON Web Token) tabanlı kimlik doğrulama kullanır. Login endpoint'inden alınan access token (1 saat) ve refresh token (7 gün) kullanılır.

1. Giriş Yap

POST /api/v1/auth/login
Content-Type: application/json

{
  "email": "admin@halitakip.com",
  "password": "admin123"
}

cURL

curl -X POST 'http://localhost/api/v1/auth/login' \
  -H 'Content-Type: application/json' \
  -d '{"email":"admin@halitakip.com","password":"admin123"}'

Yanıt

{
  "success": true,
  "message": "Giriş başarılı",
  "data": {
    "access_token": "eyJ0eXAiOiJKV1Q...",
    "refresh_token": "eyJ0eXAiOiJKV1Q...",
    "token_type": "Bearer",
    "expires_in": 3600,
    "user": {
      "id": 1,
      "name": "Sistem Yöneticisi",
      "email": "admin@halitakip.com",
      "role": "super_admin",
      "firm_id": null,
      "firm": null
    }
  }
}

2. Korumalı İstek

GET /api/v1/firms
Authorization: Bearer eyJ0eXAiOiJKV1Q...

3. Token Yenile

POST /api/v1/auth/refresh
Content-Type: application/json

{ "refresh_token": "eyJ0eXAiOiJKV1Q..." }

Yanıt Formatı #

Başarılı Yanıt

{
  "success": true,
  "message": "Başarılı",
  "data": { ... }
}

Sayfalanmış Liste

{
  "success": true,
  "data": [ ... ],
  "meta": {
    "current_page": 1,
    "per_page": 20,
    "total": 145,
    "last_page": 8,
    "has_more": true
  }
}

Hata

{
  "success": false,
  "message": "Bir hata oluştu"
}

Doğrulama Hatası (422)

{
  "success": false,
  "message": "Doğrulama hatası",
  "errors": {
    "email": "E-posta zorunludur",
    "password": "Şifre en az 6 karakter olmalıdır"
  }
}

Roller #

Sistem 5 farklı rolü destekler. Her endpoint hangi rollerin erişebileceğini belirtir.

KodAdAçıklama

Yetkiler (Permissions) #

Sistem rol bazlı varsayılan yetkilerin yanı sıra kullanıcı bazlı override (özel yetki) destekler. Her kullanıcının role'ünden gelen varsayılan yetkileri vardır; firma yöneticisi users.custom_permissions JSON array ile bu yetkileri ezebilir.

Override: users.custom_permissions NULL ise rol varsayılanı kullanılır. Array doluysa sadece o yetkiler aktif olur.

Rol Varsayılan Yetkileri

RolVarsayılan Yetkiler

Tüm Yetki Anahtarları (18 anahtar, 5 kategori)

Kullanım Örneği

Bir çalışana sadece müşteri ve sipariş görüntüleme yetkisi verme:

POST /api/v1/users
Authorization: Bearer <token>
Content-Type: application/json

{
  "name": "Sınırlı Çalışan",
  "email": "sinirli@firma.com",
  "password": "******",
  "role": "employee",
  "firm_id": 1,
  "custom_permissions": ["customers.view", "orders.view"]
}

HTTP Durum Kodları #

KodAnlamı

Webhook #

Sipariş durumu değiştiğinde firma ayarlarındaki webhook_url adresine POST isteği gönderilir.

Yapılandırma

Firma Ayarları → Bildirim → webhook_url ve webhook_secret

İstek Headers

POST <webhook_url>
Content-Type: application/json
X-Webhook-Signature: <HMAC-SHA256(payload, secret)>
X-Webhook-Event: order.status_changed

İstek Body

{
  "event": "order.status_changed",
  "order_id": 123,
  "order_no": "SP25042500001",
  "new_status": "pending_delivery",
  "status_label": "Teslim Edilecek",
  "customer": { "name": "Ahmet Yılmaz", "phone": "05001234567" },
  "note": "Yıkama tamamlandı",
  "timestamp": "2026-04-25T12:30:00+03:00"
}

İmza Doğrulama (PHP)

$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $payload, $webhookSecret);

if (hash_equals($expected, $signature)) {
    // Güvenilir payload
    $data = json_decode($payload, true);
}

Sipariş Durum Kodları

KodTürkçe
pending_pickupTeslim Alınacak (başlangıç durumu)
pending_deliveryTeslim Edilecek (işlem tamamlandı, müşteriye iletilecek)
deliveredTeslim Edildi (son durum)
cancelledİptal Edildi (terminal — linear akış dışı)

Makine Okunur Formatlar #

API dokümantasyonuna programatik olarak erişebilirsiniz. AI asistanları bu URL'leri kullanarak API yapısını otomatik anlayabilir.

FormatURLİçerik
JSON /api/v1/docs Yapılandırılmış JSON: tüm endpoint'ler, parametreler, örnekler, roller
Markdown /api/v1/docs.md Tek sayfalık tam Markdown — AI asistanlara link iletmek için ideal
HTML /docs Bu sayfa (insan-dostu görüntüleme)
AI ile Kullanım: ChatGPT, Claude, vb. asistanlara /api/v1/docs.md URL'sini paylaşın — tüm API yapısını otomatik anlar ve entegrasyon kodu üretebilir.