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
| Metot | POST |
| Adres | https://mutabakat.ai/api/v1/erp-requests/{id}/complete |
| Kapsam | talebin türüne göre counterparties:write / statements:write / balance:write (sıra: kayıt 404 → kapsam 403) |
| Idempotency-Key | Zorunlu |
| dry_run | Destekleniyor (?dry_run=true) |
İstek Parametreleri
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| id (yol) | string (uuid) | Evet | Talep kimliği |
| dry_run (sorgu) | "true" | Hayır | true ise hiçbir şey yazılmaz; doğrulama + "ne olacak" raporu döner (yalnız bu yazım). |
| Idempotency-Key (başlık) | string | Hayır | Aynı 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.
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| counterparties | object[] | Hayır | Cari listesi (kayıt biçimi: Cari rehberi bölümündeki satırla aynı); en fazla 10.000 |
| counterparties[].external_id | string | null | Hayır | |
| counterparties[].name | string | Evet | |
| counterparties[].tax_number | string | null | Hayır | |
| counterparties[].email | string | null | Hayır | |
| counterparties[].contact_name | string | null | Hayır | |
| counterparties[].notes | string | null | Hayır | |
| statement | object | Hayır | Ekstre 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_parts | integer | Evet | |
| balances | object | Hayır | Dö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.records | object[] | Evet | |
| balances.records[].counterparty | object | Evet | |
| balances.records[].counterparty.id | string (uuid) | Hayır | |
| balances.records[].counterparty.external_id | string | Hayır | |
| balances.records[].counterparty.tax_number | string | Hayır | |
| balances.records[].counterparty.name | string | Hayır | |
| balances.records[].counterparty.email | string | null | Hayır | |
| balances.records[].counterparty.contact_name | string | null | Hayır | |
| balances.records[].amount | string | Evet | |
| balances.records[].direction | "debit" | "credit" | Evet | |
| balances.response_deadline | string | Hayır | |
| balances.currency | string | Hayır |
Örnek gövde
{
"statement": {
"total_parts": 1
}
}Yanıt
200Tamamlandı
| Alan | Tür | Açıklama |
|---|---|---|
| data | ErpRequest | |
| delivery | object | object | object | Yalnız teslimat gövdesinde. counterparties: { accepted, rejected, errors[] } · statement: { row_count, title, status: "processing" } · balances: { campaign_id, records_accepted, title } |
| request_id | RequestId |
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}}'