Tek istekte belge gönderme
Harici entegrasyon için önerilen yol: PDF, alıcı bilgisi, imza/form alanları ve ayarları tek istekte gönderin.
Create → PDF → configuration → send adımlarını sunucu yürütür.
Auth: API anahtarı. Scope: documents:create.
Gelişmiş (adım adım) yüzey hâlâ durur: Belge gönderme akışı.
Şablondan gönderim: Şablon gönderme akışı.
Base path: /api/v1
Uç
POST /developer/documents/send
workspaceId gövdede istenmez; token workspace’i kullanılır.
Form alanları
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
file | Evet | İmzalanacak belge (.pdf) | |
payload | JSON string | Evet | Alıcı, alan ve ayar nesnesi |
Content-Type: multipart/form-data
curl örneği
curl -X POST "https://api.dijital-imza.com/api/v1/developer/documents/send" \
-H "Authorization: Bearer dijital_imza_…" \
-F "[email protected];type=application/pdf" \
-F "[email protected];type=application/json"
payload.json örneği (önerilen — ayrık imza; PDF üzerinde konum gerekmez):
{
"displayFileName": "sozlesme.pdf",
"description": "İki taraflı sözleşme",
"privateNote": "ERP #12345",
"settings": {
"isOrderedFlow": true,
"useUniqueDeliveryKey": true,
"showOtherRecipientsFields": false,
"showOtherRecipientsFieldsAsRendered": false,
"documentLanguageCode": "tr",
"timestampProvider": "dijital-imza"
},
"recipients": [
{
"id": "r1",
"fullName": "Ayşe Yılmaz",
"email": "[email protected]",
"phone": "+905551112233",
"role": "Signee",
"order": 1,
"channels": ["email", "sms"],
"copyNotificationChannels": ["email"],
"recipientProfile": {
"verification": {
"phoneOtpVerification": true
}
},
"fields": [
{
"type": "SIGNATURE",
"pageNumber": 0,
"label": "İmza",
"required": true,
"config": {
"isDetached": true
}
}
]
}
]
}
Entegrasyonlarda en sık kullanılan model ayrık imzadır: pageNumber: 0 ve config.isDetached: true. x / y göndermeniz gerekmez; imza belge sonuna basılır.
Konumlu imza alanı (PDF sayfasına yerleştirme):
{
"type": "SIGNATURE",
"pageNumber": 1,
"x": 120,
"y": 640,
"width": 180,
"height": 48,
"label": "İmza",
"required": true
}
Ayarlar (settings)
| Alan | Tip | Varsayılan | Açıklama |
|---|---|---|---|
isOrderedFlow | boolean | false | true: alıcılar order sırasıyla |
useUniqueDeliveryKey | boolean | false | Alıcıya özel tahmin edilemez link |
showOtherRecipientsFields | boolean | false | Diğer alıcı alanlarını göster |
showOtherRecipientsFieldsAsRendered | boolean | false | Diğer alanları PDF benzeri render |
documentLanguageCode | string | auto | auto, tr, en, es, ar, de, ro, pt, ru, bs |
timestampProvider | string | — | örn. dijital-imza, tubitak |
displayFileName boşsa PDF dosya adı kullanılır (uyarı döner). pages gönderilmez; sayfalar alanlardaki pageNumber değerlerinden türetilir.
Alıcılar (recipients)
En az 1, en fazla 5 alıcı.
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
id | string | Hayır | Boşsa sunucu r1, r2 üretir |
fullName | string | Evet | Görünen ad |
email / phone | string | Kanala göre | email / sms için gerekli |
role | string | Evet | Tipik: Signee, Approver, Viewer |
order | number | Hayır | Hepsi 0 ise 1’den sıra atanır |
channels | string[] | Evet | email, sms, kiosk, open_on_device |
copyNotificationChannels | string[] | Hayır | Yalnızca email, sms |
kioskDeviceId | guid | kiosk ise | Hedef kiosk |
scheduledSendAtUtc | string | Hayır | ISO 8601 UTC |
recipientProfile | object | Hayır | Kimlik / vekil / OTP |
fields | array | Evet* | Bu alıcıya ait alanlar (*en az bir alıcıda ≥1 alan) |
open_on_device diğer kanallar veya scheduledSendAtUtc ile birlikte seçilemez.
Kiosk gönderimi
GET /developer/kiosksile cihaz listesini alın (scope:documents:read).- Yanıttaki
iddeğerini alıcınınkioskDeviceIdalanına yazın. channelsiçine yalnızcakioskkoyun (open_on_deviceile birlikte seçilemez).
{
"id": "r1",
"fullName": "Ayşe Yılmaz",
"role": "Signee",
"order": 1,
"channels": ["kiosk"],
"kioskDeviceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"fields": [
{
"type": "SIGNATURE",
"pageNumber": 1,
"x": 120,
"y": 640,
"width": 180,
"height": 48,
"required": true
}
]
}
Alanlar (fields)
Koordinatlar PDF sayfasında sol-üst köşeden piksel cinsindendir. Sayfa numarası 1 tabanlıdır.
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
type | string | Evet | SIGNATURE, BIOMETRIC_SIGNATURE, ELECTRONIC_SIGNATURE, INPUT, … |
pageNumber | number | Evet | Konumlu: ≥ 1; ayrık: 0 |
x, y | number | Konumlu | Sol-üst |
width, height | number | Konumlu | 0’dan büyük |
label | string | Hayır | Etiket |
required | boolean | Hayır | Zorunlu alan |
config | object | Hayır | Tip özel props (isDetached, biometricSignatureType, …) |
Ayrık imza (PDF dışı doldurma): pageNumber: 0 — config.isDetached sunucuda açılır. width/height yoksa 180×48 varsayılır (uyarı).
Örnek ayrık alan:
{
"type": "SIGNATURE",
"pageNumber": 0,
"label": "İmza",
"required": true,
"config": { "isDetached": true }
}
Alan tipi tablosu: Geliştirici belgeleri.
Hata ve uyarı
Doğrulama tüm hataları toplar; ilk hatada kesilmez. Gönderim yapılmaz.
| HTTP | status | Anlam |
|---|---|---|
| 400 | false | errors[] — PDF yok, geçersiz JSON, alıcı/kanal/alan kuralı, ara adım hatası |
| 200 | true | Gönderildi; data.warnings[] gönderimi engellemez |
Örnek hatalar: PDF boş veya .pdf değil; alıcı yok / 5’ten fazla; email kanalı var e-posta yok; hiç alan yok; konumlu alanda width/height ≤ 0.
Örnek uyarılar: displayFileName PDF adından alındı; alıcı id üretildi; order 1’den atandı.
Ara adım (yükleme / konfigürasyon / gönderim) başarısız olursa oluşturulan taslak silinir; yarım belge kalmaz.
Yanıt data
| Alan | Tip | Açıklama |
|---|---|---|
operationId | guid | Oluşan belge |
status | string | Genelde Dispatched |
publicShortCode | string | Kısa kod |
displayFileName | string | Görünen ad |
enqueuedJobCount | number | Kuyruğa alınan iş |
initialRecipientAccessCode | string | İlk alıcı erişim kodu |
openOnThisDeviceForActiveRecipient | boolean | Bu cihazda aç |
warnings | string[] | Engellemeyen notlar |
İmza linki: {appBase}/r/{code} — İmzalama akışı.
Durum: Durum takibi.