Geliştirici belgeleri API

Base path: /api/v1/developer/documents

MethodPathScope
GET/developer/documents?page=&pageSize=documents:read
GET/developer/documents/{operationId}documents:read
GET/developer/templates?page=&pageSize=documents:read
GET/developer/templates/{templateOperationId}documents:read
GET/developer/kiosksdocuments:read
GET/developer/documents/{operationId}/final-pdfdocuments:read
GET/developer/documents/{operationId}/certificate-pdfdocuments:read
GET/developer/documents/{operationId}/timestamp-filedocuments:read
GET/developer/documents/{operationId}/resend-optionsdocuments:read
POST/developer/documents/senddocuments:create
POST/developer/documentsdocuments:create
POST/developer/documents/{operationId}/pdfdocuments:create
PUT/developer/documents/{operationId}/configurationdocuments:create
POST/developer/documents/{operationId}/senddocuments:create
POST/developer/documents/from-template/{templateOperationId}/senddocuments:create
POST/developer/documents/{operationId}/resenddocuments:create
DELETE/developer/documents/{operationId}documents:delete

Önerilen entegrasyon: Tek istekte belge gönderme (POST /developer/documents/send).


Kiosk listesi — GET /developer/kiosks

Workspace’e bağlı kiosk cihazlarını döner. Scope: documents:read. Yanıttaki id alanı gönderimde kioskDeviceId olarak kullanılır.

Oluşturma, PIN ve eşleştirme Developer API’de yoktur (panel /kiosk).


İndirme (binary)

Başarılı yanıt CustomResponse değildir; dosya akışıdır. Hata durumunda JSON CustomResponse (400).

Completed sonrası:

  • GET /developer/documents/{operationId}/final-pdf
  • GET /developer/documents/{operationId}/certificate-pdf
  • GET /developer/documents/{operationId}/timestamp-file

Yeniden gönderim

Yalnızca Dispatched belgeler.

  • GET /developer/documents/{operationId}/resend-options — alıcı uygunluğu
  • POST /developer/documents/{operationId}/resend — body: recipientId, channels, kioskDeviceId?

Kiosk yeniden gönderiminde kioskDeviceId için GET /developer/kiosks kullanın.

İmza deneyimi özeti: İmzalama akışı.


Tek istekte gönder — POST /developer/documents/send

multipart/form-data: file (PDF) + payload (JSON). workspaceId token’dan alınır. Alıcıların fields[] dizisi ve channels aynı nesnede gider.

Müşteri entegrasyonlarında sık kullanılan ayrık imza örneği (pageNumber: 0, config.isDetached: true):

{
  "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"],
      "fields": [
        {
          "type": "SIGNATURE",
          "pageNumber": 0,
          "label": "İmza",
          "required": true,
          "config": { "isDetached": true }
        }
      ]
    }
  ]
}

Rehber, curl ve hata/uyarı modeli: Tek istekte belge gönderme.


Referans: alan (element) tipleri

Konfigürasyonda her alan elementType ile belirtilir. Büyük/küçük harf duyarsızdır; önerilen kanonik değerler:

elementTypeAnlamı
INPUT / input / textTek satır metin
TEXT_AREA / text_areaÇok satırlı metin
SELECT / selectAçılır liste
CHECKBOX / checkboxOnay kutusu
RADIO / radioRadyo seçenek
SIGNATURE / signatureKlasik çizim imza
BIOMETRIC_SIGNATURE / biometric_signatureBiyometrik imza
ELECTRONIC_SIGNATURE / electronic_signatureElektronik imza (masaüstü istemci)
IMAGE / imageResim yükleme
NOTE / noteBilgilendirme notu (salt görüntü)
IYS_CONSENT / iys_consentİYS onay kutusu
MONEY_CURRENCY / money_currencyPara / birim

Element ortak alanları:

AlanTipZorunluAçıklama
externalIdstringEvetAlan kimliği (benzersiz)
pageNumbernumberEvetKonumlu alanlarda PDF sayfa (≥ 1); ayrıkta 0
recipientExternalIdstringHayır*Atanan alıcının externalId (*imza alanlarında gerekli)
elementTypestringEvetYukarıdaki tiplerden biri
x, ynumberHayırKonumlu konum (piksel); ayrıkta 0
width, heightnumberÖnerilirBoyut (ör. imza 180×48)
zIndexnumberHayırKatman sırası
configobjectHayırProps (required, label, isDetached, …)

Sık config anahtarları:

AnahtarTipAçıklama
requiredbooleanZorunlu alan
labelstringEtiket
placeholderstringYer tutucu (metin alanları)
isDetachedbooleantrue: PDF dışı doldurma; final PDF sonuna basılır
biometricSignatureTypestringYalnızca biyometrik: basic veya forensic

Element örnekleri

Aşağıdan elementType seçin; yalnızca seçilen tipin elements[] örneği gösterilir. Hepsi aynı alıcıya (r1) atanmış varsayılır.

Tek satır metin alanı.

config anahtarıTipZorunluAçıklama
typestringHayırtext | number | email | tel | url | password | date
validationTypestringHayırnone | email | phone | number | custom
regexPatternstringHayırvalidationType=custom iken regex
minLengthnumberHayırMinimum karakter
maxLengthnumberHayırMaksimum karakter
placeholderstringHayırYer tutucu metin
defaultValuestring | booleanHayırBaşlangıç değeri (checkbox/İYS için boolean olabilir)
requiredbooleanHayırAlan zorunlu mu
labelstringHayırGörünen etiket
isDetachedbooleanHayırtrue: PDF dışı doldurma; final PDF sonuna ek sayfada basılır (pageNumber: 0)
Örnek elements[] öğesi
{
  "externalId": "e-input-1",
  "pageNumber": 1,
  "recipientExternalId": "r1",
  "elementType": "INPUT",
  "x": 40,
  "y": 40,
  "width": 220,
  "height": 28,
  "config": {
    "required": true,
    "label": "Ad Soyad",
    "placeholder": "Adınızı yazın",
    "type": "text"
  }
}

Ayrık bileşenler (config.isDetached)

PDF üzerine konum vermeden imza, metin vb. istemek için kullanılır. Alıcı /r/{code} ekranında alanı PDF dışı doldurma adımlarında doldurur; nihai PDF’te değerler belgenin sonuna ek sayfada alt alta basılır.

KuralDeğer
config.isDetachedtrue
pageNumber0
x / y0 veya atlanabilir
width / heightönerilir
pagesPDF sayfa meta bilgisi yine gönderilir

Örnek — yalnızca ayrık imza:

{
  "operationType": "document",
  "displayFileName": "sozlesme.pdf",
  "recipients": [
    {
      "externalId": "r1",
      "fullName": "Ayşe Yılmaz",
      "email": "[email protected]",
      "role": "Signee",
      "order": 1
    }
  ],
  "pages": [{ "pageNumber": 1, "width": 595, "height": 842 }],
  "elements": [
    {
      "externalId": "e-sig-detached",
      "pageNumber": 0,
      "recipientExternalId": "r1",
      "elementType": "SIGNATURE",
      "x": 0,
      "y": 0,
      "width": 180,
      "height": 48,
      "config": {
        "isDetached": true,
        "required": true,
        "label": "İmza"
      }
    }
  ]
}

Referans: gönderim kanalları (channels)

POST .../send içindeki deliveryPlans[].channels:

KodAnlamıGereksinim
emailE-posta ile imza linkiAlıcıda email dolu
smsSMS ile kısa linkAlıcıda phone dolu
kioskEşleşmiş kioskkioskDeviceId (GUID)
open_on_deviceBu cihazda açGenelde ilk / aktif alıcı

copyNotificationChannels yalnızca email ve sms kabul eder.


Referans: diğer sabitler

AlanGeçerli değerler
operationTypedocument, template
Alıcı roleSignee, Approver, Viewer (serbest string; tipik değerler)
isOrderedFlowtrue sıralı; false paralel
timestampProviderdijital-imza, tubitak, freetsa, sectigo, opentimestamps
documentLanguageCodeauto, tr, en, es, ar, de

workspaceId create isteğinde token workspace’i ile aynı olmalıdır.

Roller ve sıralı akış

roleTipik
Signeeİmza / zorunlu alanlar
ApproverOnay
ViewerGörüntüleme

isOrderedFlow: true iken alıcılar order sırasıyla ilerler.


Create — POST /developer/documents

İstek alanları

AlanTipZorunluAçıklama
workspaceIdguidEvetToken workspace ile aynı olmalı
operationTypestringHayırVarsayılan document; template da geçerli
descriptionstringHayırİşlem açıklaması

Örnek istek

{
  "workspaceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "operationType": "document",
  "description": "Sözleşme — örnek"
}

Yanıt data (özet)

AlanTipAçıklama
operationIdguidSonraki adımlarda kullanılır
operationTypestringİşlem türü
statusstringGenelde Draft
publicShortCodestringKısa erişim kodu

PDF — POST /developer/documents/{operationId}/pdf

multipart/form-data; alan adı file (PDF). JSON body değildir.


Configuration — PUT /developer/documents/{operationId}/configuration

Gerçek model: düz recipients + pages + elements (pages içinde nested elements yok).

Üst alanlar

AlanTipZorunluAçıklama
operationTypestringEvetdocument veya template
displayFileNamestringEvetGörünen dosya adı
descriptionstringHayırAçıklama
privateNotestringHayırYalnızca sistem kullanıcısı görür
useUniqueDeliveryKeybooleanHayırtrue: alıcıya özel tahmin edilemez link
showOtherRecipientsFieldsbooleanHayırDiğer alıcı alanlarını göster
showOtherRecipientsFieldsAsRenderedbooleanHayırDiğer alanları PDF benzeri render
isOrderedFlowbooleanHayırSıralı / paralel
documentLanguageCodestringHayırauto / tr / en / …
timestampProviderstringHayırZaman damgası sağlayıcısı
saveAsDraftbooleanHayırtrue: Draft kalır; false: Configured
recipientsarrayEvetAlıcı listesi
pagesarrayEvetSayfa meta
elementsarrayEvetForm / imza alanları

recipients[] alanları

AlanTipZorunluAçıklama
externalIdstringEvetElement eşlemesi için kimlik
fullNamestringEvetGörünen ad
emailstringHayır*E-posta kanalı için gerekli
phonestringHayır*SMS / OTP için gerekli
rolestringEvetÖrn. Signee
ordernumberEvetSıra (sıralı akışta kritik)
colorstringHayırUI renk kodu
recipientProfileobjectHayırKimlik / vekil / doğrulama

recipientProfile / verification

AlanTipAçıklama
firstName, lastNamestringAsıl kişi adı
personCategorystringTurkishCitizen / Foreign / Stateless
identityDocumentKindstringTcKimlik / PassportOrYkn / …
tcKimlikNostringTC kimlik
useRepresentativeForDeliverybooleanBildirimleri vekile yönlendir
representativeobjectVekil bilgileri
verification.phoneOtpVerificationbooleanOTP

pages[]

AlanTipZorunluAçıklama
pageNumbernumberEvet≥ 1
widthnumberHayırSayfa genişliği (px)
heightnumberHayırSayfa yüksekliği (px)

Örnek istek (imza + doğrulama + biyometrik)

{
  "operationType": "document",
  "displayFileName": "sozlesme.pdf",
  "description": "İki taraflı imza akışı",
  "privateNote": "İç not",
  "useUniqueDeliveryKey": true,
  "showOtherRecipientsFields": false,
  "showOtherRecipientsFieldsAsRendered": false,
  "isOrderedFlow": true,
  "documentLanguageCode": "tr",
  "timestampProvider": "dijital-imza",
  "saveAsDraft": false,
  "recipients": [
    {
      "externalId": "r1",
      "fullName": "Ayşe Yılmaz",
      "email": "[email protected]",
      "phone": "+905551112233",
      "role": "Signee",
      "order": 1,
      "recipientProfile": {
        "verification": {
          "phoneOtpVerification": true
        }
      }
    },
    {
      "externalId": "r2",
      "fullName": "Mehmet Demir",
      "email": "[email protected]",
      "phone": "+905559998877",
      "role": "Signee",
      "order": 2
    }
  ],
  "pages": [{ "pageNumber": 1, "width": 595, "height": 842 }],
  "elements": [
    {
      "externalId": "e-sig-1",
      "pageNumber": 1,
      "recipientExternalId": "r1",
      "elementType": "SIGNATURE",
      "x": 120,
      "y": 640,
      "width": 180,
      "height": 48,
      "config": { "required": true, "label": "İmza" }
    },
    {
      "externalId": "e-bio-2",
      "pageNumber": 1,
      "recipientExternalId": "r2",
      "elementType": "BIOMETRIC_SIGNATURE",
      "x": 120,
      "y": 720,
      "width": 180,
      "height": 48,
      "config": {
        "required": true,
        "label": "Biyometrik imza",
        "biometricSignatureType": "basic"
      }
    }
  ]
}

Şablon listesi — GET /developer/templates

Workspace’teki UI şablonlarını (/mytemplates) listeler. Yanıt şekli belge listesi ile aynıdır; items[].operationId şablon kimliğidir (templateOperationId).

Scope: documents:read.

Şablon detayı — GET /developer/templates/{templateOperationId}

Şablon iskeletini alıcılarla döndürür. from-template gönderiminden önce çağırın: kaç kişi, hangi role / order, vekil var mı, recipientExternalId (GUID) nedir.

Scope: documents:read. Yanıt şekli belge detayı ile aynıdır (operationType: template).

Şablondan gönder — POST /developer/documents/from-template/{templateOperationId}/send

Panelde oluşturulan şablondan tek istekte yeni belge üretir ve gönderimi başlatır. Create → PDF → configuration adımları gerekmez.

Scope: documents:create. Token workspace’i şablonun workspace’i ile aynı olmalıdır.

İstek alanları

AlanTipZorunluAçıklama
isOrderedFlowbooleanHayırSıralı imza akışı
privateNotestringHayırBoşsa şablondaki not kullanılır
recipientsarrayEvetŞablondaki alıcıları iletişim bilgileriyle doldurur
deliveryPlansarrayEvetAlıcı bazlı kanal planı (send ile aynı)

recipients[]

AlanTipZorunluAçıklama
recipientExternalIdstringGUID iseŞablon alıcı GUID (externalId); r1 gibi string çalışmaz
ordernumberHayırexternalId yoksa sıra ile eşleme
rolestringHayırexternalId yoksa rol ile eşleme
fullNamestringEvetAd soyad
emailstringKanala göreE-posta
phonestringKanala göreTelefon
recipientProfileobjectHayırUyruk, kimlik, vekil, doğrulama (configuration ile aynı şema)

Örnek istek

recipientExternalId: "r1" çalışmaz (configuration örneğidir). Şablon alıcı eşlemesi:

  1. recipientExternalId = şablon alıcı GUID (DocumentRecipient.Id / panel externalId), veya
  2. order ve role birlikte şablondakiyle aynı

deliveryPlans sayısı şablon alıcı sayısına eşitse sıra ile eşlenir (GUID zorunlu değil).

Tek alıcılı şablon örneği (privateNote, uyruk, vekil, OTP dahil):

{
  "isOrderedFlow": true,
  "privateNote": "ERP sipariş #4521 — iç not",
  "recipients": [
    {
      "order": 1,
      "role": "Signee",
      "fullName": "Ayşe Yılmaz",
      "email": "[email protected]",
      "phone": "+905551112233",
      "recipientProfile": {
        "firstName": "Ayşe",
        "lastName": "Yılmaz",
        "principalEmail": "[email protected]",
        "principalPhone": "+905551112233",
        "personCategory": "TurkishCitizen",
        "identityDocumentKind": "TcKimlik",
        "tcKimlikNo": "12345678901",
        "useRepresentativeForDelivery": true,
        "representative": {
          "personCategory": "TurkishCitizen",
          "identityDocumentKind": "TcKimlik",
          "tcKimlikNo": "10987654321",
          "firstName": "Mehmet",
          "lastName": "Demir",
          "email": "[email protected]",
          "phone": "+905559998877"
        },
        "verification": {
          "phoneOtpVerification": true
        }
      }
    }
  ],
  "deliveryPlans": [
    { "channels": ["email", "sms"] }
  ]
}

personCategory: TurkishCitizen | Foreign | Stateless. Vekil yoksa useRepresentativeForDelivery ve representative alanlarını göndermeyin.

İki alıcılı şablon: recipients ve deliveryPlans içinde şablondaki kadar kayıt gönderin (order: 1, order: 2 …).

Yanıt data

AlanTipAçıklama
operationIdguidÜretilen yeni belge operasyon kimliği
enqueuedJobCountnumberKuyruğa alınan gönderim işi
initialRecipientAccessCodestringİlk alıcı erişim kodu (open_on_device)
openOnThisDeviceForActiveRecipientbooleanBu cihazda aç yönlendirmesi

Şablon kimliği path’tedir; yanıt operationId üretilen belgenindir. Durum: GET /developer/documents/{operationId}.

Send — POST /developer/documents/{operationId}/send

İstek alanları

AlanTipZorunluAçıklama
isOrderedFlowbooleanHayırSıralı / paralel
deliveryPlansarrayEvetAlıcı bazlı kanal planı

deliveryPlans[]

AlanTipZorunluAçıklama
recipientExternalIdstringEvetConfiguration’daki alıcı externalId
channelsstring[]Evetemail / sms / kiosk / open_on_device
kioskDeviceIdguidHayır*kiosk kanalında zorunlu
scheduledSendAtUtcstringHayırİleri tarihli gönderim (ISO 8601 UTC)
copyNotificationChannelsstring[]HayırTamamlanınca kopya: yalnızca email / sms

Örnek istek

{
  "isOrderedFlow": true,
  "deliveryPlans": [
    {
      "recipientExternalId": "r1",
      "channels": ["email", "sms"],
      "copyNotificationChannels": ["email"]
    },
    {
      "recipientExternalId": "r2",
      "channels": ["email"],
      "scheduledSendAtUtc": "2026-08-20T09:00:00Z"
    }
  ]
}

Kiosk örneği:

{
  "recipientExternalId": "r1",
  "channels": ["kiosk"],
  "kioskDeviceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Yanıt data

AlanTipAçıklama
enqueuedJobCountnumberKuyruğa alınan iş adedi
initialRecipientAccessCodestringİlk / aktif alıcı erişim kodu (/r/{code})
openOnThisDeviceForActiveRecipientbooleanBu cihazda aç yönlendirmesi gerekli mi
{
  "enqueuedJobCount": 2,
  "initialRecipientAccessCode": "ABC12XYZ",
  "openOnThisDeviceForActiveRecipient": false
}

Imza linki: {appBase}/r/{initialRecipientAccessCode} — bkz. İmzalama akışı.

Liste yanıtı (data)

AlanTipAçıklama
items[].operationIdguidİşlem kimliği
items[].displayFileNamestringDosya adı
items[].statusstringDraft / Configured / Dispatched / Completed / Rejected
items[].publicShortCodestringKısa kod
items[].createdAtUtcstringZaman (UTC)
totalCountnumberToplam kayıt
pagenumberSayfa
pageSizenumberSayfa boyutu

Detay yanıtı (data)

GET /developer/documents/{operationId} ve GET /developer/templates/{templateOperationId} aynı data şeklini döner.

AlanTipAçıklama
operationIdguidİşlem / şablon kimliği
workspaceIdguidWorkspace
operationTypestringdocument / template
statusstringDurum
displayFileNamestringGörünen ad
descriptionstringAçıklama
privateNotestringİç not
isOrderedFlowbooleanSıralı akış
publicShortCodestringKısa kod
recipientCountnumberAlıcı adedi
recipientsarrayAlıcı özetleri (aşağıda)

recipients[] (detay)

AlanTipAçıklama
recipientExternalIdstringAlıcı GUID — from-template body’de eşleme için
ordernumberSıra
rolestringSignee / Viewer / Approver vb.
fullNamestringKayıtlı ad (şablonda boş olabilir)
email / phonestringKayıtlı iletişim
personCategorystringUyruk (varsa)
useRepresentativeForDeliverybooleanVekil akışı
representativeFullName / Email / PhonestringVekil özeti
defaultDeliveryChannelsstring[]Şablon varsayılan kanalları
deliveryStatusstringPending / Sent / Failed
isStepCompletedbooleanAlıcı adımı tamamlandı mı
completedAtUtcstringTamamlanma zamanı (UTC)

Şablondan gönderirken her recipients[] öğesi için body’de bir kayıt doldurun (order+role veya recipientExternalId).

Geliştirici belgeleri | Dokümantasyon | Argelabs Dijital İmza