MaxiFilo REST API

Filo yönetimi, servis talepleri ve evrak işlemleri için RESTful API

Base URL: https://uat-api.maxifilo.com.tr/api

API Açıklaması

MaxiFilo REST API, araç filosu yönetimi, servis talep takibi, evrak ve fatura işlemlerini programatik olarak gerçekleştirmenizi sağlar. Token tabanlı kimlik doğrulama kullanır.

REST Mimarisi

  • HTTP metodları: GET (okuma), POST (oluşturma/güncelleme)
  • JSON request/response formatı
  • Bearer token ile yetkilendirme
  • RESTful URL yapısı: /v1/kaynak/alt_kaynak

JSON Response Formatı

Başarılı yanıtlar data objesi içerir. Hata durumunda error veya message alanı döner. Sayfalama için meta.pagination kullanılır.


Authentication

API erişimi için önce POST /v1/token ile access token alın. Sonraki tüm isteklerde Authorization: Bearer {access_token} header'ı kullanın.

POST/v1/token

Auth: Gerekmez

Kullanıcı adı ve şifre ile access token alır.

Request Body
{
  "kullanici_adi": "test",
  "sifre": "Test_123123"
}
Başarılı Response
{
  "data": {
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
    "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
    "expires_in": 28800,
    "token_type": "Bearer",
    "cari_id": 123,
    "kullanici_id": 456
  }
}

JWT payload: cari_id, kullanici_id, type (access/refresh), exp. Action log kayıtları kullanici_id'yi token'dan alır — request body'den değil.

POST/v1/token/refresh

Auth: Gerekmez

Refresh token ile yeni access token alır.

Request Body
{
  "refresh_token": "{{refresh_token}}"
}
Authorization kullanımı:
Authorization: Bearer {access_token}

Ortak Endpoint

Kimlik doğrulaması gerektirmeyen ortak servisler.

GET/v1/health
Açıklama

Sunucu sağlık kontrolü. API'nin ayakta olduğunu doğrulamak için kullanılır. Monitoring ve load balancer sağlık kontrollerinde kullanılabilir.

Yetkilendirme

Yok Bearer token gerekmez.

Olası Yanıtlar

200 OK — Sunucu çalışıyor


Tanımlar

Sistemdeki referans verilerini (dropdown, filtre vb.) almak için kullanılan endpoint'ler. Tüm tanım endpoint'leri Bearer Token gerektirir ve aynı response formatını kullanır.

GET/v1/tanimlar/talep_turleri
Açıklama

Servis talebinin türünü belirten tanımlar (Bakım, Hasar, Arıza vb.). SERVIS_BOLUM tablosundan beslenir. Dosya arama filtresinde talep_turu_id olarak kullanılır.

Yetkilendirme

Bearer Token Zorunlu

Örnek Yanıt
{
  "data": [
    {
      "id": "BAKIM",
      "name": "Bakım"
    },
    {
      "id": "HASAR",
      "name": "Hasar"
    },
    {
      "id": "ARIZA",
      "name": "Arıza"
    }
  ]
}
Hata Kodları

401 Unauthorized — Token eksik veya geçersiz

GET/v1/tanimlar/surecler
Açıklama

Talep süreç durumları (Araç Bekliyor, Onayda, vb.). SUREC tablosundan beslenir. Dosya aramada surec_id filtresi olarak kullanılır.

Yetkilendirme

Bearer Token Zorunlu

Örnek Yanıt
{
  "data": [
    {
      "id": 1,
      "name": "Araç Bekliyor"
    },
    {
      "id": 2,
      "name": "Onayda"
    }
  ]
}
Hata Kodları

401 Unauthorized

GET/v1/tanimlar/servis_bolumleri
Açıklama

Servis bölümleri listesi. Talep türlerinden farklı olarak servis içi organizasyonel sınıflandırma için kullanılır.

Yetkilendirme

Bearer Token Zorunlu

Hata Kodları

401 Unauthorized

GET/v1/tanimlar/servisler
Açıklama

Servis (cari) listesi. CARI tablosundan CARI_TURU = ALIM, DURUM = 1. Yanıt: id, name, servis_vkn (talep create'te kullanılır), il_id, il, ilce_id, ilce, adres, tel, ceptel, mail.

Yetkilendirme

Bearer Token Zorunlu

Hata Kodları

401 Unauthorized

GET/v1/tanimlar/yakit_turleri
Açıklama

Araç yakıt türleri (Benzin, Dizel, LPG, Elektrik vb.). Yanıt: id, name, sort_code. Araç create/update eşleştirmesi sort_code üzerinden yapılır.

Yetkilendirme

Bearer Token Zorunlu

Hata Kodları

401 Unauthorized

GET/v1/tanimlar/vites_turleri
Açıklama

Vites türleri (Manuel, Otomatik, Yarı Otomatik). VITES tablosundan. Dosya detayında araç bilgisi olarak kullanılır.

Yetkilendirme

Bearer Token Zorunlu

Hata Kodları

401 Unauthorized

GET/v1/tanimlar/hizmet_turleri
Açıklama

Hizmet türleri listesi. HIZMET tablosundan. Servis hizmet sınıflandırması için kullanılır.

Yetkilendirme

Bearer Token Zorunlu

Hata Kodları

401 Unauthorized

GET/v1/tanimlar/evrak_turleri
Açıklama

Evrak türleri (Ekspertiz Raporu, Fatura, vb.). Evraklar ve fotoğraflar endpoint'lerindeki evrak_tipi_id ile eşleştirilir.

Yetkilendirme

Bearer Token Zorunlu

Hata Kodları

401 Unauthorized

GET/v1/tanimlar/resim_turleri
Açıklama

Fotoğraf/resim türleri kategorileri. EVRAK tablosundan (EVRAK_BOLUM_ID=1). Fotoğraflar endpoint'inde sınıflandırma için kullanılır.

Yetkilendirme

Bearer Token Zorunlu

Hata Kodları

401 Unauthorized

GET/v1/tanimlar/markalar

Araç marka listesi. MARKA tablosundan.

GET/v1/tanimlar/modeller?marka_id=1

Markaya göre model listesi. marka_id query parametresi zorunlu. Yanıt: id, name, marka_id, tsrb_kodu (araç create/update'te aynen gönderilir).

GET/v1/tanimlar/segmentler

Araç segment listesi.

GET/v1/tanimlar/model_yillari

Model yılı listesi. Yanıt: id, name, model_yili

GET/v1/tanimlar/katalog_iscilikler

Web popup_katalog_iscilik.php ile aynı liste. Token cari_id + genel kayıtlar (CARI_ID null/0/-1).

Opsiyonel: q veya arama (kod/ad arama). Yanıt: id, kod, ad, grup, fiyat


Dosya Endpointleri

Servis dosyası arama, detay, oluşturma, güncelleme, evrak/fotoğraf, talep notu, ekspertiz, süreç ve fatura işlemleri. Tüm endpoint'ler Bearer Token gerektirir. Token'daki cari_id ile filo kapsamı belirlenir. Okuma (listeleme) işlemleri /v1/dosya/... altında; yazma ve iş akışı endpoint'leri /v1/talep/... path'i ile aynı controller'lara yönlenir.

Ortak Alanlar (oluşturma / güncelleme)
AlanTipAçıklama
servis_bolumstringZorunlu — ARIZA, BAKIM, CAM, HASAR, LASTIK, RUCU, YOLYARDIM
servis_vknstringZorunlu — Servis cari TCK/VKN. CARI.TCK ile aranır; bulunamazsa Servis bulunamadı.
servis_idGönderilmez — yanıtta döner
plakastringZorunlu — Min 4 karakter. Token cari_id kapsamında ARAC tablosundan marka/model/yıl ve araç bilgileri otomatik alınır; araç yoksa 422Araç bulunamadı.
talepstringZorunlu — Şikayet / talep açıklaması
demand_idstringZorunlu — Ziraat FYS demand_id → SYSTEM_SHARED_TALEP_ID
demand_codestringZorunlu — Ziraat FYS demand_code → SYSTEM_SHARED_CODE
maintenance_quote_idstringZorunlu — Ziraat FYS maintenance_quote_id → MAINTENANCE_QUOTE_ID
quote_id / quota_idGönderilmez — oluşturulan talep id quote_id'dir
kmstringOpsiyonel — JSON'da string gönderin (örn. "194452.85"); ondalık kısım atılır, tam sayı km olarak kaydedilir
yakit_turu / vites_turu / sasi_no / motor_nomixedGönderilmez — plakadan ARAC kaydından doldurulur
surucu_ad / surucu_soyad / surucu_tel / surucu_mailstringOpsiyonel
tahmini_teslim_tarih / talep_edilen_teslim_tarihdateYYYY-MM-DD — bugünden önce olamaz (oluşturma)
tahmini_teslim_saat / talep_edilen_teslim_saatstringOpsiyonel — örn. 14:00
cekici_talebi / arac_serviste / ikame_talebiint/bool0 veya 1 (ikame_var da kabul edilir)
bakim_periyotnumberOpsiyonel — BAKIM taleplerinde; null geçilebilir
fatura_cari_id / sube_idintOpsiyonel — fatura_cari_id yoksa token cari_id kullanılır
iletisim_ad / iletisim_soyad / iletisim_tel / iletisim_il_id / iletisim_ilce_id / iletisim_adresmixedOpsiyonel — iletişim bilgileri
randevu_idintOpsiyonel — randevudan dönüştürme
HASAR Alanları (servis_bolum = HASAR)
AlanTipAçıklama
sigorta_tipi_idint1 veya 2 için ek validasyon
kaza_ihbar_turu_id / hasar_sekli_idintZorunlu (HASAR)
hasar_tarih / hasar_saatdate / stringZorunlu (HASAR)
hasar_il_id / hasar_ilce_idintZorunlu (HASAR)
hasar_muallaknumber / stringZorunlu (HASAR) — 45000, 45.000, 45000 TL
ehliyet_yeterliintZorunlu (HASAR) — 1 = evet
sigorta_sekli / sigorta_dosya_no / sigorta_firma_idmixedsigorta_tipi_id = 2 (Trafik) için zorunlu
police_no / police_bas_tarih / police_bit_tarihmixedTrafik sigortası için zorunlu
sigortali_tck / sigortali_ad / sigortali_soyad / sigortali_telstringTrafik sigortası için zorunlu
eksper / eksper_tel / eksper_mailstringOpsiyonel
kusur_orani / rucu / rucu_oran / rucu_aciklamamixedOpsiyonel
GET/v1/dosya/ara
Açıklama

Servis taleplerini filtreleyerek arar. Token'daki cari_id ile yetkili filo kapsamındaki talepler döner. Tarih filtreleri çift (başlangıç + bitiş) olarak uygulanır.

Yetkilendirme

Bearer Token Zorunlu

Query Parametreleri
ParametreTipAçıklama
talep_tarihi_baslangicdateTalep tarihi başlangıç (YYYY-MM-DD)
talep_tarihi_bitisdateTalep tarihi bitiş
teslim_tarihi_baslangicdateTeslim edildi tarihi başlangıç
teslim_tarihi_bitisdateTeslim edildi tarihi bitiş
tahmini_teslim_tarihi_baslangicdateTahmini teslim tarihi başlangıç
tahmini_teslim_tarihi_bitisdateTahmini teslim tarihi bitiş
arac_gelis_tarihi_baslangicdateAraç servise geliş tarihi başlangıç
arac_gelis_tarihi_bitisdateAraç servise geliş tarihi bitiş
dosya_nostringDosya numarası (LIKE arama)
plakastringAraç plakası (LIKE arama)
surec_idintSüreç ID (tanimlar/surecler'den)
servis_idintServis (cari) ID
talep_turu_idstringTalep türü (BAKIM, HASAR, ARIZA vb.)
pageintSayfa no (default: 1)
page_sizeintSayfa boyutu (default: 20, max: 100)
Örnek Yanıt
{
  "data": [
    {
      "id": 269,
      "dosya_no": "123123123",
      "arac": {
        "plaka": "41ZN123",
        "marka": "AUDI",
        "model": "A1 1.2 TFSI",
        "km": 45000,
        "talep_tarihi": "2025-01-15",
        "tahmini_teslim_tarihi": "2025-01-25"
      },
      "servis": {
        "servis_id": 10,
        "servis_adi": "RAK Otomotiv"
      },
      "surec_id": 3,
      "surec_adi": "Araç Bekliyor",
      "talep_turu_id": "ARIZA"
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "page_size": 20,
      "total_count": 45,
      "total_pages": 3
    }
  }
}
Hata Kodları

401 Unauthorized — 403 Forbidden (Geçerli filo kimliği yok) — 400 Bad Request

GET/v1/dosya/detay/{id}
Açıklama

Tek bir servis talebinin tüm detayını getirir. Araç bilgileri, servis, sürücü, şikayetler, yedek parçalar, işçilikler, talep notları dahil.

Path Parametresi

{id} — Dosya ID (numara) veya dosya_no (string)

Yetkilendirme

Bearer Token Zorunlu

Yanıt Alanları

id, dosya_no, talep_tarihi, arac_gelis_tarihi, tahmini_teslim_tarihi, teslim_tarihi, arac (plaka, marka, model, km, sasi_no, motor_no, yakit_turu, vites_turu), servis, talep_tipi, talep_sureci, surucu, sikayet_talep, cekici_talebi, ikame_var, yedek_parcalar (parca_kodu, parca_adi, adet, fiyat, iskonto, tedarikci_adi vb.), iscilikler, talep_notlari (id, system_shared_id, talep_notu, tarih, ekleyen)

Hata Kodları

401 Unauthorized — 403 Forbidden — 404 Not Found — 422 Validation Error (geçersiz id)

GET/v1/dosya/evraklar/{id}
Açıklama

Talep numarasına ait evrakları (PDF, resim vb.) base64 formatında döner. EVRAK_BOLUM_ID ≠ 1 olanlar (ekspertiz raporu, fatura örneği vb. belgeler). Sayfalama: page, page_size (default 50, max 100).

Path Parametresi

{id} — Talep ID veya dosya_no

Yanıt Yapısı (her öğe)

evrak_adi, evrak_tipi_id, evrak_tipi_adi, uzanti, base64

Base64 Decode

İkili veri metin olarak taşınır. Decode ile orijinal dosyaya dönüştürülebilir:

// Tarayıcı (JavaScript)
var binary = atob(base64String);

// Node.js
var buffer = Buffer.from(base64String, 'base64');

// Python
import base64
binary = base64.b64decode(base64_string)
Hata Kodları

401 Unauthorized — 404 Not Found — 422 Validation Error

GET/v1/dosya/fotograflar/{id}
Açıklama

Talep numarasına ait fotoğrafları base64 formatında döner. EVRAK_BOLUM_ID=1 (resim türü). Evraklar endpoint'i ile aynı yapı. Sayfalama desteklenir.

Path Parametresi

{id} — Talep ID veya dosya_no

Yanıt Yapısı

evrak_adi, evrak_tipi_id, evrak_tipi_adi, uzanti, base64

Hata Kodları

401 Unauthorized — 404 Not Found — 422 Validation Error

GET/v1/dosya/faturalar/{id}
Açıklama

Talep numarasına ait faturaları ve her faturaya bağlı evrakları (base64) döner. CARI_HAREKET tablosundan finans kalemleri 1,2 (fatura vb.). Sayfalama: page, page_size (default 20, max 100).

Path Parametresi

{id} — Talep ID veya dosya_no

Örnek Yanıt
{
  "data": [
    {
      "id": 1001,
      "kod": "CH001",
      "fatura_no": "FTR2025001",
      "fatura_tarih": "2025-01-20",
      "tutar": 5250.50,
      "kdv_tutar": 945.09,
      "evraklar": [
        {
          "evrak_adi": "fatura.pdf",
          "base64": "JVBERi0xLjQK..."
        }
      ]
    }
  ]
}
Hata Kodları

401 Unauthorized — 404 Not Found — 422 Validation Error

GET/v1/talep/{id}

Token cari kapsamındaki tek dosyanın özet detayını döner. Tam detay için GET /v1/dosya/detay/{id} kullanın.

Yanıt: id, kod, dosya_no, surec_id, arac, servis, servis_bolum, surucu, talep, teslim tarihleri, ikame_talebi, cekici_talebi, arac_serviste

POST/v1/talep

Yeni servis talebi oluşturur. plaka ile token cari_id kapsamında ARAC kaydı aranır; bulunamazsa talep oluşturulmaz. servis_vkn zorunludur — ilgili cari aranır (yoksa Servis bulunamadı). bakim_periyot opsiyonel / null geçilebilir. Web talepKaydet ile aynı: açık plaka kontrolü, KM geçmişi, audit log, dosya sorumlusu atama, ikame talebi (ikame_talebi=1) ve randevu güncelleme dahil. E-posta gönderilmez.

HTTP 201 — oluşturulan talep detayı döner.

{
  "servis_bolum": "BAKIM",
  "servis_vkn": "0000000000",
  "plaka": "34ABC123",
  "talep": "Motor sesi geliyor.",
  "km": "194452.85",
  "tahmini_teslim_tarih": "2026-07-10",
  "ikame_talebi": 0
}
PUT/v1/talep/{id}

Mevcut talebi günceller. kod alanı zorunludur (detay yanıtındaki kod değeri). servis_vkn gönderilirse ilgili cari aranır (yoksa Servis bulunamadı); gönderilmezse mevcut servis korunur. Plaka değişirse araç bilgileri yine ARAC tablosundan alınır. Teslim edilmiş talepler (surec_id >= 10) güncellenemez.

{
  "kod": "abc123...",
  "servis_bolum": "BAKIM",
  "servis_vkn": "0000000000",
  "plaka": "34ABC123",
  "talep": "Güncellenmiş açıklama."
}
POSTDELETE/v1/talep/{id}/evraklar

POST — Yeni evrak yükler. Payload'daki shared_system_id TALEP_RESIM.SYSTEM_SHARED_ID olarak kaydedilir. Aynı shared_system_id bu talepte varsa dosya içeri alınmaz (durum: zaten_mevcut). Yeni kayıt için HTTP 201; yalnızca mevcut kayıtlar varsa HTTP 200.

DELETE — Gönderilen ID'leri siler (DB + disk). Body: evrak_ids dizisi.

AlanTipAçıklama
dosyalararrayZorunlu — en az bir dosya
dosyalar[].shared_system_idstringZorunlu — karşı sistem belge ID. Aynı ID tekrar gelirse kaydedilmez
dosyalar[].evrak_tipi_idintZorunlu — evrak türü ID
dosyalar[].dosya_adistringZorunlu — uzantı içermeli (pdf, jpg vb.)
dosyalar[].base64stringZorunlu — düz base64 veya data:...;base64,...
{
  "dosyalar": [
    {
      "shared_system_id": "15",
      "evrak_tipi_id": 11,
      "dosya_adi": "ruhsat.pdf",
      "base64": "JVBERi0xLj..."
    }
  ]
}

Yanıt: durum, mesaj, islenen_dosyalar[] (shared_system_id, evrak_tipi_id, dosya_adi, uzanti, durum: kabul_edildi / zaten_mevcut / reddedildi)

{
  "durum": "basarili",
  "mesaj": "Payload başarıyla alındı ve işleniyor.",
  "islenen_dosyalar": [
    {
      "shared_system_id": "15",
      "evrak_tipi_id": 11,
      "dosya_adi": "ruhsat.pdf",
      "uzanti": "pdf",
      "durum": "kabul_edildi"
    }
  ]
}

DELETE body örneği:

{
  "evrak_ids": [692, 693]
}
POSTDELETE/v1/talep/{id}/fotograflar

POST — Yeni fotoğraf yükler. Evrak ile aynı: shared_system_id zorunlu, aynı ID tekrar gelirse içeri alınmaz. TALEP.RESIM_VAR = 1 güncellenir. Yeni kayıt için HTTP 201.

DELETE — Gönderilen ID'leri siler (DB + disk). Body: resim_ids dizisi.

AlanTipAçıklama
dosyalararrayZorunlu
dosyalar[].shared_system_idstringZorunlu — karşı sistem belge ID. Aynı ID tekrar gelirse kaydedilmez
dosyalar[].resim_tipi_idintZorunlu/v1/tanimlar/resim_turleri
dosyalar[].dosya_adistringZorunlu — jpg, png, webp vb.
dosyalar[].base64stringZorunlu — düz base64
{
  "dosyalar": [
    {
      "shared_system_id": "15",
      "resim_tipi_id": 2,
      "dosya_adi": "on_taraf.png",
      "base64": "iVBORw0KGgo..."
    }
  ]
}

Yanıt evrak ile aynı yapı: durum, mesaj, islenen_dosyalar[] (shared_system_id, resim_tipi_id, dosya_adi, uzanti, durum).

DELETE body örneği:

{
  "resim_ids": [690, 691]
}
GETPOSTPUT/v1/talep/{id}/notlar

GET /v1/talep/{id}/notlar — Talebe ait notları listeler. Her kayıtta Maxi id ve system_shared_id döner. system_shared_id Maxi not ID'sidir.

GET /v1/talep/{id}/notlar/{notId} — Tek not detayı.

POST /v1/talep/{id}/notlar — Yeni not kaydeder. Kayıt sonrası SYSTEM_SHARED_ID Maxi'nin kendi not ID'si olarak yazılır. HTTP 201.

PUT /v1/talep/{id}/notlar/{notId} — Not metnini günceller. system_shared_id boşsa Maxi ID yazılır.

Silme (DELETE) yok.

AlanTipAçıklama
talep_notustringZorunlu (POST / PUT) — 2–255 karakter

POST / PUT body:

{
  "talep_notu": "ZFS talep notu"
}

Yanıt öğesi: id (Maxi not ID), system_shared_id (Maxi not ID, string), talep_id, talep_notu, tarih, ekleyen

{
  "id": 987654,
  "system_shared_id": "987654",
  "talep_id": 439,
  "talep_notu": "ZFS talep notu",
  "tarih": "2026-08-14 14:18",
  "ekleyen": "Sistem"
}
GETPUT/v1/talep/{id}/ekspertiz

GET — Parça (PARCA) ve işçilik (ISCILIK) satırları + özet tutarlar. Her satırda system_shared_id, onay_durumu, durum döner.

PUT — Onay güncelleme. Gönderilen satırlarda onay_durumu ve system_shared_id güncellenir (DURUM=1). onay_durumu=0 (onaysız) veya payload’da olmayan satırlar ONAY_DURUMU=3 (red) + DURUM=1 yapılır. Diğer kalem alanları (fiyat, kod vb.) gönderilebilir; şu an işlenmez. POST kaydet ve DELETE kapatılmıştır.

Gelen tüm aktif kalemler onay_durumu=1 ise ve dosyada bekleyen bir ONAY_SURECI (DURUM_ID=4) varsa basamaklar otomatik onaylanır, süreç tamamlanır ve dosya Tamire Başlandı yapılır. Herhangi bir kalem onaylı değilse onay sürecine dokunulmaz.

Zorunlu (her satır): id, system_shared_id, onay_durumu. Opsiyonel: quote_id + diğer kalem alanları.

onay_durumu: 0=Onaysız, 1=Onay tamamlandı, 2=Onay bekliyor, 3=Red.

PUT — Zorunlu Alanlar
AlanTipAçıklama
quote_idintOpsiyonel — path {id} ile aynı olmalı
parcalar[].id / iscilikler[].idintZorunlu — mevcut satır ID
parcalar[].system_shared_id / iscilikler[].system_shared_idstringZorunluSYSTEM_SHARED_ID
parcalar[].onay_durumu / iscilikler[].onay_durumuintZorunlu — 0 / 1 / 2 / 3
PUT — Opsiyonel Parça Alanları (parcalar[])
AlanTipAçıklama
parca_kodustringOpsiyonel — şu an işlenmez
alt_parca_kodustringOpsiyonel
parca_adistringOpsiyonel
markastringOpsiyonel
adetnumberOpsiyonel
orjinal_fiyatnumberOpsiyonel
tedarik_fiyatinumberOpsiyonel
iskonto / kdvnumberOpsiyonel
tedarikciintOpsiyonel — 1=Servis, 2=Sigorta, 3=Filo, 4=Maxi
PUT — Opsiyonel İşçilik Alanları (iscilikler[])
AlanTipAçıklama
iscilik_kodustringOpsiyonel — şu an işlenmez
iscilik_adistringOpsiyonel
adetnumberOpsiyonel
servis_fiyat / filo_fiyatnumberOpsiyonel
iskonto / kdvnumberOpsiyonel
katalog_iscilik_idintOpsiyonel
{
  "quote_id": 12345,
  "parcalar": [{
    "id": 696,
    "system_shared_id": "1500",
    "parca_kodu": "OEM001",
    "alt_parca_kodu": "ALT001-GUN",
    "parca_adi": "Kaput",
    "marka": "Orijinal",
    "adet": 1,
    "orjinal_fiyat": 1300,
    "tedarik_fiyati": 1100,
    "iskonto": 10,
    "kdv": 20,
    "tedarikci": 1,
    "onay_durumu": 1
  }],
  "iscilikler": [{
    "id": 697,
    "system_shared_id": "2681",
    "iscilik_kodu": "IS001",
    "iscilik_adi": "Boya",
    "adet": 1,
    "servis_fiyat": 450,
    "filo_fiyat": 550,
    "iskonto": 5,
    "kdv": 20,
    "katalog_iscilik_id": 1502,
    "onay_durumu": 1
  }]
}
POST/v1/talep/{id}/surec/{islem}

Manuel süreç ilerletme — web TalepSurec.php ile aynı kurallar. Zorunlu body: kod. surec_alt için ek: surec_alt_id.

islem değerleri:

  • arac_serviste — KM + tahmini teslim tarihi zorunlu
  • yedek_parca_bekliyor, yedek_parca_tamamlandi
  • surec_alt, arac_musteriye_verildi, arac_servise_tekrar_alindi
POST /v1/talep/439/surec/arac_serviste
{ "kod": "..." }
GETPOSTPUT/v1/talep/{id}/fatura

Talep fatura işlemleri — web TalepFatura.php ile aynı kurallar. Teslim şartı: surec_id >= 10. Mevcut CARI_HAREKET (HAREKET_ID=1) teslimde oluşmuş olmalıdır.

GET — Fatura bilgisi, cari hareketler, detay satırları ve ekspertiz özet tutarları.

POST — İlk fatura kaydı. Zorunlu body: kod, fatura_no (16 hane), fatura_tarih (YYYY-MM-DD veya DD.MM.YYYY). Opsiyonel: fatura_aciklama. Tutar ve KDV teslimde oluşmuş CARI_HAREKET / ekspertiz özetinden otomatik alınır (web modalındaki readonly alanlar gibi).

PUT — Mevcut faturayı güncelle: kod, fatura_no, fatura_tarih, fatura_aciklama. Kontrol edilmiş fatura düzenlenemez.

POST /v1/talep/{id}/fatura/ekspertizden-yeniden-olustur — CARI_HAREKET sil/yeniden oluştur (PARCA + ISCILIK). Body: kod.

Fatura belgesi (PDF/resim) — web popup_cari_hareket_resim_yukle. Teslim + fatura kaydı sonrası. Disk: img/maxifleet/cari_hareket/{yıl}/{cari_hareket_id}/

  • GET /v1/talep/{id}/fatura/belgeler — Belge listesi + base64. Query: cari_hareket_id (opsiyonel)
  • POST /v1/talep/{id}/fatura/belgeler — Yükle. Body: kod, dosyalar[] (dosya_adi, base64). jpg/png/pdf vb.
  • DELETE /v1/talep/{id}/fatura/belgeler — Body: kod, belge_ids[]
  • GET /v1/dosya/faturalar/{talepNo} — Dosya bazlı fatura + ekler (base64)
POST /v1/talep/439/fatura
{
  "kod": "...",
  "fatura_no": "ABC1234567890123",
  "fatura_tarih": "2026-06-28",
  "fatura_aciklama": ""
}
GETPOST/v1/fatura-kontrol

Fatura kontrol / onay — web onay-islemleri/dosya-fatura ve FaturaKontrol.php. Token cari_id kapsamındaki, henüz kontrol edilmemiş (KONTROL_EDILDI = 0) cari hareket faturaları.

GET /v1/fatura-kontrol — Onay bekleyen liste. Sayfalama: page, page_size (varsayılan 50).

Query filtreleri: islem_no, talep_no, plaka, fatura_no, servis_id, finans_kalemi_id, kayit_tarih_baslangic / kayit_tarih_bitis, fatura_tarih_baslangic / fatura_tarih_bitis (YYYY-MM-DD).

POST /v1/fatura-kontrol/{id}/onayla — Faturayı kontrol edildi işaretle. {id} = CARI_HAREKET.ID (işlem no). Body gerekmez. kullanici_id JWT'den alınır.

GET /v1/fatura-kontrol?page=1&page_size=50&plaka=34MDK4983

POST /v1/fatura-kontrol/273/onayla

Araç Endpointleri

Filo araç listeleme, detay, oluşturma ve güncelleme. Bearer Token zorunludur. cari_id ve ruhsat sahibi token'dan alınır. Marka/model tsrb_kodu ile backend'de eşleştirilir. Tanım listeleri için Tanımlar bölümünü kullanın (segmentler, model_yillari, yakit_turleri, vites_turleri).

Araç Alanları
AlanTipAçıklama
cari_id / cariint / stringToken'dan gelir, yanıtta döner
ruhsat_sahibi_id / ruhsat_sahibiint / stringHer zaman token cari'si ile aynıdır (gönderilmez)
plakastringZorunlu (oluşturma), min 3 karakter
tsrb_kodustringZorunlu (oluşturma). /tanimlar/modeller yanıtındaki tsrb_kodu aynen gönderilir
marka_id / markaint / stringYanıtta döner (TSRB'den hesaplanır)
model_id / modelint / stringYanıtta döner (TSRB'den hesaplanır)
segment_id / segmentint / stringZorunlu (oluşturma). Varsayılan / belirtilmemiş: -3
model_yiliintZorunlu (oluşturma)
yakit_sort_code / sort_codestringZorunlu (oluşturma). Tanımlardaki sort_code ile eşleşir (örn. R, D, H, BL, E, NONE)
yakit_id / yakitint / stringYanıtta döner (sort_code'dan çözülür)
vites_id / vitesint / stringZorunlu (oluşturma)
sasi_nostringZorunlu (oluşturma)
motor_nostringZorunlu (oluşturma)
durumintZorunlu (oluşturma): 0 = Pasif, 1 = Aktif
son_kmintZorunlu (oluşturma), 0 ve üzeri
tamamlanma_yuzdesifloatOtomatik hesaplanır (create/update), yanıtta döner
GET/v1/arac

Token cari kapsamındaki araçları listeler.

Query: plaka, durum (0/1), page, page_size

GET/v1/arac/{id}

Tek araç detayını getirir. Araç token cari kapsamında değilse 404 döner.

POST/v1/arac

Zorunlu alanlar: plaka, tsrb_kodu, model_yili, motor_no, sasi_no, durum, segment_id, yakit_sort_code, vites_id, son_km. tsrb_kodu = modeller tanımındaki değer (aynen). segment_id varsayılanı -3 (belirtilmemiş). Yakıt eşleştirmesi yakit_sort_code ile yapılır; NONE = belirtilmemiş. Ruhsat sahibi token cari_id'den otomatik doldurulur.

{
  "plaka": "34ABC123",
  "tsrb_kodu": "0031007",
  "model_yili": 2022,
  "motor_no": "CAX123456",
  "sasi_no": "WVWZZZ1KZAW123456",
  "durum": 1,
  "segment_id": -3,
  "yakit_sort_code": "D",
  "vites_id": 1,
  "son_km": 45000
}
PUT/v1/arac/{id}

Mevcut aracı günceller. Gönderilen alanlar güncellenir; gönderilmeyenler korunur. segment_id: -3 = belirtilmemiş (geçerli).

{
  "tsrb_kodu": "0031007",
  "son_km": 48000,
  "durum": 1,
  "segment_id": -3
}

Global Response Formatı

Başarılı
{
  "success": true,
  "message": "İşlem başarılı",
  "data": {},
  "meta": {
    "timestamp": "2025-02-26T12:00:00+00:00",
    "pagination": { ... }
  }
}
Hata
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Hata mesajı"
  },
  "meta": {
    "timestamp": "2025-02-26T12:00:00+00:00"
  }
}

HTTP Status Kodları

KodAçıklama
200OK - Başarılı
201Created - Oluşturuldu
400Bad Request - Geçersiz istek
401Unauthorized - Yetkisiz (token eksik/geçersiz)
404Not Found - Kaynak bulunamadı
422Validation Error - Doğrulama hatası
500Internal Server Error - Sunucu hatası