docufykit.com, imzalı Türkiye belge doğrulama akışlarına odaklanır. Yüklenen belgeleri yapılandırılmış authority adapter üzerinden doğrular, desteklenen belge tiplerinden yapılandırılmış alanları çıkarır ve nihai sonucu imzalı webhook’lar ile REST sorguları üzerinden döner.
Bu ürün genel dosya işleme için değil, Türkiye’deki imzalı belgelerin doğrulanması ve veri çıkarımı için tasarlanmıştır.
Temel URL ve kimlik bilgileri
- Ortamınıza atanmış temel URL’yi kullanın. Production için
https://api.docufykit.comkullanın. - Her istemci uygulamasının kendine ait bir API anahtarı vardır.
- Tekrarlanan isteklerin aynı doğrulamayı yeniden oluşturmaması için her create isteğinde
Idempotency-Keygönderin.
İlk API isteği
Önce bir doğrulama oluşturun. API size belge baytları için imzalı bir yükleme hedefi döner.
curl -X POST "https://api.docufykit.com/v1/verifications" \
-H "X-API-Key: <api-anahtarınız>" \
-H "Idempotency-Key: 4dd2b36b-8f7c-4f8a-8fb5-1f2d27c3c0f1" \
-H "Content-Type: application/json" \
-d '{
"document_type": "YOK_STUDENT",
"process_type": "async",
"external_reference_id": "student-12345",
"original_filename": "belge.pdf",
"file_size_bytes": 160585,
"metadata": {
"customer_user_id": "usr_12345"
}
}'
Önemli alanlar:
document_type: bugün opsiyoneldir, ancak beklenen şemayı biliyorsanız önerilirprocess_type:syncveyaasync, varsayılansyncexternal_reference_id: sizin mutabakat kimliğinizoriginal_filename: yalnızca izlenebilirlik içinfile_size_bytes: beklenen dosya boyutumetadata: sonuçlarda ve webhook’larda size geri dönen serbest JSON alanı
İmzalı yükleme akışı
- Doğrulamayı oluşturun ve
verification_idile imzalı yükleme hedefini alın. - Ham dosyayı doğrudan imzalı URL’ye yükleyin.
- Yüklemenin tamamlandığını onaylayın.
- Nihai sonucu webhook ile alın veya REST üzerinden sorgulayın.
Dosyayı yükleyin
curl -X PUT "<imzali-yukleme-urlsi>" \
--upload-file "/absolute/path/to/belge.pdf"
Yükleme tamamlandı onayı
curl -X POST "https://api.docufykit.com/v1/verifications/<verification_id>/upload-complete" \
-H "X-API-Key: <api-anahtarınız>"
Doğrulamayı sorgulama
curl "https://api.docufykit.com/v1/verifications/<verification_id>" \
-H "X-API-Key: <api-anahtarınız>"
Yüklemeden sonra ne olur
Yükleme onayı geldikten sonra docufykit:
- yüklenen nesneyi storage’dan okur
- dosyayı doğrular
- belge gerçekliğini yapılandırılmış authority adapter üzerinden kontrol eder
- analiz ve yapılandırılmış veri çıkarımı yapar
- deterministik karar kurallarını uygular
- nihai sonucu kaydeder
- uygulamada etkin bir uç nokta varsa webhook gönderir
Yüklenen belge authenticity kontrollerinden geçmiyorsa geçerli bir sonuç olarak kabul edilmez.
Webhook kurulumu
Webhook yapılandırması her istemci uygulaması için tutulur. Müşteriler uç nokta ve imza gizli anahtarını portaldan ayarlar.
Mevcut terminal event’ler:
verification.completedverification.review_requiredverification.failed
Webhook başlıkları
Her giden istekte şunlar bulunur:
Content-Type: application/jsonUser-Agent: docufykit-webhooks/1.0X-Webhook-EventX-Webhook-IdX-Webhook-TimestampX-Webhook-Signature
Webhook imza doğrulama örneği
İmza formatı:
sha256=HMAC_SHA256(secret, timestamp + "." + delivery_id + "." + raw_body)
Doğrulamayı yeniden serialize edilmiş JSON ile değil, ham request body baytlarıyla yapın.
import crypto from "node:crypto";
function verifyDocufykitWebhook({
secret,
timestamp,
deliveryId,
rawBody,
signature,
}: {
secret: string;
timestamp: string;
deliveryId: string;
rawBody: Buffer;
signature: string;
}) {
const payload = Buffer.concat([
Buffer.from(timestamp, "utf8"),
Buffer.from(".", "utf8"),
Buffer.from(deliveryId, "utf8"),
Buffer.from(".", "utf8"),
rawBody,
]);
const expected =
"sha256=" +
crypto.createHmac("sha256", secret).update(payload).digest("hex");
const actual = Buffer.from(signature, "utf8");
const wanted = Buffer.from(expected, "utf8");
return (
actual.length === wanted.length &&
crypto.timingSafeEqual(actual, wanted)
);
}
Retry davranışı ve yeniden gönderim
Webhook teslimatı uygulama ortamına göre değişir.
Sandbox
- Başarısız webhook yalnızca bir kez gönderilir.
- Otomatik retry yoktur.
dead_letterdurumu yoktur.- Başarısız teslimatlar manuel replay yapılana kadar
failedolarak kalır.
Production
Uç noktanız 2xx dönmezse platform otomatik retry yapar:
- 30 saniye
- 2 dakika
- 10 dakika
- 1 saat
- 6 saat
- 24 saat
Son denemeden sonra teslimat dead_letter durumuna geçer.
Müşteriler şunları yapabilir:
- portal üzerinden son webhook request/response çiftini incelemek
- failed ve dead-letter teslimatları görmek
- deliveries sayfasından manuel replay başlatmak
Reason code referansı
Reason code’lar son durumun makine tarafından okunabilir açıklamalarıdır.
awaiting_upload: doğrulama oluşturuldu ve yükleme bekleniyorprocessing: yükleme onayı alındı ve arka plan işleme başladısource_verifier_not_configured: gerçeklik doğrulaması gerekliydi ama yapılandırılmamıştısource_verification_failed: extraction başlamadan gerçeklik doğrulaması başarısız olduauthenticity_missing_qrcode: belge QR kodu yoktu veya okunamadıauthenticity_source_missing: yukarı akıştaki kaynak belge bulunamadıauthenticity_hash_mismatch: yüklenen dosya kaynak belgeyle eşleşmediauthenticity_lookup_failed: yukarı akış doğrulama sorgusu operasyonel olarak başarısız oldulocal_analysis_failed: karar aşamasından önce yerel analiz başarısız oldudocument_type_unknown: platform belge tipini sınıflandıramadımanual_review_required: nihai sonuç için manuel inceleme gerekiyorverified_yok_student:YOK_STUDENTbelgesi gerçeklik, extraction ve karar kurallarını geçtiyok_student_structured_data_missing:YOK_STUDENTiçin yapılandırılmış veri eksikyok_student_payload_invalid: yapılandırılmış veri var ama geçersizyok_student_schema_invalid:YOK_STUDENTşema doğrulaması başarısız
Sandbox ve production farkı
sandbox ve production aynı belge doğrulama ve extraction motorunu kullanır, ancak operasyonel davranışları aynı değildir.
sandbox- entegrasyon testi ve müşteri QA için
- yalnızca tek webhook denemesi
- otomatik webhook retry yok
- dead-letter kuyruğu yok
- düşük kota
- tüm planlarda ortak ve daha sıkı sandbox rate limitleri
production- canlı trafik için
- otomatik webhook retry planı
- dead-letter desteği
- plan bazlı daha yüksek kota
- plan bazlı standart rate limitleri
Her ortam için ayrı uygulama, ortam önekli API anahtarı ve ayrı webhook URL’si kullanın.