Talebi Teslim Etme▾
Talep ile Aktarım

Talebi Teslim Etme(completeErpRequest)

POST/erp-requests/{id}/complete

Talebi tamamla — veriyi teslim et

Son güncelleme: 21 Eylül 2026 · Sözleşme sürümü 1.0.0

Teslimat: veriyi doğrudan bu uca bırakın; sunucu içeride işler ve talebi tamamlar. counterparties talebi → { counterparties: [...] } (≤10.000; 1.000'lik parçalarla rehbere işlenir, kısmi başarı delivery.accepted/rejected/errors) · statement talebi → satırlar ÖNCE POST …/statement/rows ile ≤20.000'lik parçalar hâlinde sırayla gönderilir (parçalı teslimat; toplam 250.000 satıra kadar), sonra { statement: { total_parts } } ile bitirilir (dönem/cari/para birimi talepten; satırlar arka planda ayrıştırılıp muhasebe personelinin açık sihirbazındaki "Şirketiniz ekstresi" kartına düşer — kart "hazırlanıyor" gösterir, hazır olunca dosyaya döner; ayrıştırma düşerse talep failed + sebep; karşılaştırma işini personel karşı taraf Excel'ini ekleyip başlatır; dosya bir gün kullanılmazsa silinir) · balances talebi → { balances: { records: [...], response_deadline?, currency? } } (≤5.000; taslak + kayıtlar tek transaction — bir kayıt reddedilirse hiçbiri yazılmaz; response_deadline yoksa bugün + 15 gün, paketin saklama süresi daha kısaysa o kadar; taslağı muhasebe personeli panelden gönderir). Gövde türü talep türüyle uyuşmazsa 422 request_kind_mismatch; birden fazla biçim / bilinmeyen alan / şema dışı satır 400 validation_error (kalıcı ret — talep failed, sebep alan yoluyla panelde); tavan üstü 413 (satırlar tek tek doğrulanmadan, dizi uzunluğuna bakılarak). Yalnız claim eden anahtar (ya da pending'den örtük claim; claim eden anahtar iptal edildiyse başka anahtar devralabilir). Kalıcı ret (400 doğrulama, 402 kota, 413 tavan, 422 kural, tür/parametre uyuşmazlığı) talebi failed yapar ve sebebi panelde gösterir — aynı veriyi yeniden göndermeyin, fail çağırmayın, muhasebe personeli düzeltip yeni talep bırakır; geçici hata (429, 5xx, ağ) rezervasyonu pending'e döndürür — fail ÇAĞIRMAYIN, aynı Idempotency-Key ile sonraki turda yeniden deneyin. Yetkisiz/yabancı istek (401/403/404), bozuk JSON ve eksik Idempotency-Key talebe dokunmaz. Ekstre bitirici yalnız parça sayımını doğrular (parça hiç yoksa / eksikse 409 parts_missing / parts_incomplete — kalıcı ret DEĞİL: kalan parçaları gönderip complete'i yineleyin; total_parts parçalarla uyuşmazsa 422 total_parts_mismatch kalıcı ret); ağır iş worker'dadır, web sürecinde Excel üretilmez. dry_run → would.complete süre ve sahipliği de hesaba katar (expired/cancelled/failed ya da başka anahtarın claim'i → false). Talep başına tek teslimat: tekrar çağrı aynı sonucu döner. Zaten completed → 200 (aynı sonuç). Başka uç gerekmez: talep ile aktarım yönteminin tek veri ucu budur.

Servis

MetotPOST
Adreshttps://mutabakat.ai/api/v1/erp-requests/{id}/complete
Kapsamtalebin türüne göre counterparties:write / statements:write / balance:write (sıra: kayıt 404 → kapsam 403)
Idempotency-KeyZorunlu
dry_runDestekleniyor (?dry_run=true)

İstek Parametreleri

AlanTürZorunluAçıklama
id (yol)string (uuid)EvetTalep kimliği
dry_run (sorgu)"true"Hayırtrue ise hiçbir şey yazılmaz; doğrulama + "ne olacak" raporu döner (yalnız bu yazım).
Idempotency-Key (başlık)stringHayırAynı anahtar + aynı gövde 24 saat boyunca aynı yanıtı verir (Idempotency-Replayed: true); aynı anahtar farklı gövde 409. Toplu yazma uçlarında zorunlu.

İstek Gövdesi

İçerik türü application/json.

AlanTürZorunluAçıklama
counterpartiesobject[]HayırCari listesi (kayıt biçimi: Cari rehberi bölümündeki satırla aynı); en fazla 10.000
counterparties[].external_idstring | nullHayır
counterparties[].namestringEvet
counterparties[].tax_numberstring | nullHayır
counterparties[].emailstring | nullHayır
counterparties[].contact_namestring | nullHayır
counterparties[].notesstring | nullHayır
statementobjectHayırEkstre bitirici: total_parts = …/statement/rows ile gönderilen parça sayısı (ilk parçada bildirilenle aynı olmalı). Satırlar bu gövdede DEĞİL; para birimi talepten.
statement.total_partsintegerEvet
balancesobjectHayırDönem bakiyeleri (kayıt biçimi: Bakiye mutabakatı bölümündeki kayıtla aynı); en fazla 5.000; response_deadline yoksa bugün + 15 gün (paket saklama süresi daha kısaysa o kadar)
balances.recordsobject[]Evet
balances.records[].counterpartyobjectEvet
balances.records[].counterparty.idstring (uuid)Hayır
balances.records[].counterparty.external_idstringHayır
balances.records[].counterparty.tax_numberstringHayır
balances.records[].counterparty.namestringHayır
balances.records[].counterparty.emailstring | nullHayır
balances.records[].counterparty.contact_namestring | nullHayır
balances.records[].amountstringEvet
balances.records[].direction"debit" | "credit"Evet
balances.response_deadlinestringHayır
balances.currencystringHayır

Örnek gövde

{
  "statement": {
    "total_parts": 1
  }
}

Yanıt

200Tamamlandı

AlanTürAçıklama
dataErpRequest
deliveryobject | object | objectYalnız teslimat gövdesinde. counterparties: { accepted, rejected, errors[] } · statement: { row_count, title, status: "processing" } · balances: { campaign_id, records_accepted, title }
request_idRequestId

Hata Kodları

Bu uç için dönebilecek HTTP durumları: 400 · 401 · 402 · 403 · 404 · 409 · 413 · 422 · 429 · 500 · 503. Zarf biçimi ve kod listesi için Hata Kodları sayfasına bakın.

Örnek İstek

curl -X POST https://mutabakat.ai/api/v1/erp-requests/<id>/complete \
  -H "Authorization: Bearer $MAI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"statement":{"total_parts":1}}'