REST API
QuickSign argümansız çalıştırıldığında REST API açılır (varsayılan http://localhost:5000). Tüm uçların makine tarafından okunabilir şeması GET /openapi/v1.json adresindedir; bu şemayı Postman, Insomnia veya kod üreticilerine verebilirsiniz.
Uçlar
| Grup | Uç | Açıklama |
|---|---|---|
| Durum | GET / | Uygulama adı, sürüm, çalışma süresi, sayaçlar |
| Durum | GET /api/info | Firma ve iletişim bilgisi |
| Tanılama | GET /api/sign/check | PKCS#11 kütüphaneleri, takılı token'lar, sertifikalar |
| Tanılama | POST /api/sign/test | Verilen TCKN + PIN ile 4 boyutta deneme imzası |
| İmza | POST /api/sign/file | Tek dosya imzala (multipart veya JSON) |
| İmza | POST /api/sign/sync | İmzala, sonucu bekle (çoklu imzacı) |
| İmza | POST /api/sign/async | İş kuyruğuna at, iş numarası dön |
| İmza | GET /api/sign/jobs/{jobId} | İşin durumu ve sonucu |
POST /sign/pdf/base64 | PDF'e PAdES imzası + görünür imza metni | |
POST /base64pdfimzala | Eski Java esigner uyumlu PDF imzası | |
| Zaman damgası | POST /api/timestamp/file | Dosyayı damgala |
| Zaman damgası | POST /api/timestamp/hash | Hazır hash'i damgala |
| Token | GET / POST /api/sign/tokens | Kayıtlı token'ları listele / kaydet |
| Token | PATCH / DELETE /api/sign/tokens/{id} | Güncelle / sil |
| Şablon | GET / POST /api/sign/templates | Şablonları listele / oluştur |
| Şablon | GET / PUT / DELETE /api/sign/templates/{id} | Şablon detayı / güncelle / sil |
Yanıt biçimi
Uçların çoğu aynı zarfı döner:
{
"Success": true,
"Data": { "...": "..." },
"Error": null,
"StatusCode": 200
}Hata durumunda Success false, Error açıklayıcı bir mesaj olur ve HTTP durum kodu StatusCode ile aynıdır. İstek gövdelerinde alan adları büyük/küçük harfe duyarlı değildir; örneklerde camelCase kullanılmıştır.
| HTTP | Anlamı |
|---|---|
400 | Geçersiz istek (eksik alan, bozuk base64, yanlış hash uzunluğu) |
404 | Kayıt bulunamadı (iş, token, şablon) |
422 | İmza yapılamadı (PIN hatalı, sertifika bulunamadı, token takılı değil) |
503 | Donanım yanıt vermedi; birkaç saniye sonra tekrar deneyin |
İmzacı ve PIN
Her imzacı tckn veya kayıtlı bir alias ile belirtilir. PIN şu sırayla çözülür:
- Token kaydında saklanan PIN (Token yönetimi)
- İstekteki
pinalanı - İkisi de yoksa istek reddedilir
İmza sertifikası, takılı token'lar arasında konu (subject) bilgisinde bu TCKN'yi taşıyan sertifika aranarak bulunur.
Tek dosya imzalama
POST /api/sign/file — en basit kullanım. Dosyayı doğrudan yükleyin:
curl -F "[email protected]" -F "tckn=12345678901" -F "pin=1234" \
http://localhost:5000/api/sign/fileForm alanları: file (zorunlu), tckn veya alias, pin, detached (true varsayılan), algorithm (SHA256 varsayılan).
Aynı uç JSON (base64) da kabul eder:
curl -X POST http://localhost:5000/api/sign/file \
-H "Content-Type: application/json" \
-d '{"file":"<BASE64>","tckn":"12345678901","pin":"1234"}'Yanıt:
{
"Success": true,
"Data": {
"JobId": "a1b2c3d4...",
"Signature": "MIIHRgYJKoZIhvcNAQcC...",
"SignerCount": 1,
"Detached": true,
"SignerDetails": [
{
"Tckn": "12345678901",
"FullName": "ALİ YILMAZ",
"TemplateName": "sol-alt",
"Position": "bottom-left",
"RenderedText": "Bu belge 01.01.2026 tarihinde\nALİ YILMAZ tarafından\nimzalanmıştır."
}
]
}
}Signature Base64 kodlu DER CMS imzadır; ayrık imzada (detached: true) .p7s olarak orijinal dosyanın yanında saklanır. SignerDetails içindeki metin ve konum, imzacıya atanmış şablondan üretilir ve kendi belge görünümünüzde kullanılabilir.
Senkron imza (çoklu imzacı)
POST /api/sign/sync — imza tamamlanana kadar bekler. Birden çok imzacı sırayla imzalar.
curl -X POST http://localhost:5000/api/sign/sync \
-H "Content-Type: application/json" \
-d '{
"data": "<BASE64>",
"isBase64": true,
"signers": [
{ "alias": "muhasebe" },
{ "tckn": "09876543210", "pin": "5678", "templateId": 6 }
],
"detached": true,
"algorithm": "SHA256"
}'| Alan | Açıklama |
|---|---|
data | İmzalanacak içerik |
isBase64 | data base64 mü (varsayılan true) |
signers[] | İmzacılar: tckn veya alias, isteğe bağlı pin ve templateId |
signers[].templateId | Yoksa token'a atanmış şablon; 0 ise şablon kullanılmaz |
detached | Ayrık imza (varsayılan true) |
algorithm | SHA256 (varsayılan), SHA384, SHA512, SHA1 |
Asenkron imza
Uzun süren veya çok imzacılı işler için POST /api/sign/async aynı gövdeyi alır ve hemen bir iş numarası döner:
{ "Success": true, "Data": { "JobId": "a1b2c3d4...", "Status": "pending", "SignerCount": 2, "Detached": true, "CreatedAt": 1792494498329 } }Sonucu GET /api/sign/jobs/{jobId} ile sorgulayın. Status değerleri: pending, processing, done, failed. done olduğunda Signature ve SignerDetails, failed olduğunda Error doludur.
curl http://localhost:5000/api/sign/jobs/a1b2c3d4...PDF imzası (PAdES)
POST /sign/pdf/base64 PDF'in kendisini imzalar: imza PDF'in içine gömülür (PAdES), Adobe Acrobat'ta doğrulanır ve her imzacı için sayfaya görünür bir imza metni basılır.
curl -X POST http://localhost:5000/sign/pdf/base64 \
-H "Content-Type: application/json" \
-d '{
"base64": "<PDF_BASE64>",
"credentials": [
{ "tckn": "12345678901", "pin": "1234" },
{ "tckn": "09876543210", "pin": "5678" }
]
}'Bu uç eski istemcilerle uyum için zarfsız yanıt döner:
{ "SignedBase64": "<imzalı PDF, base64>", "SignerCount": 2 }İmza metni “{adSoyad} tarafından, {tarih} tarihinde e-imza ile imzalanmıştır.” biçimindedir; imzacılar sırasıyla sol alt, sağ alt, sol üst, sağ üst köşelere, beşinci ve sonrakiler alt ortaya yerleşir.
Hatalar HTTP 422 ile ve makine tarafından ayırt edilebilir kodlarla döner:
{ "errorId": 1001, "code": "WRONG_PIN", "message": "PIN hatalı. 1 deneme hakkınız kaldı." }errorId | code | Anlamı |
|---|---|---|
1000 | SIGN_ERROR | İmza yapılamadı (ayrıntı message alanında) |
1001 | WRONG_PIN | PIN hatalı; kalan deneme hakkı mesajda |
1002 | PIN_LOCKED | Art arda hatalı PIN; token korunması için istek reddedildi |
POST /base64pdfimzala eski Java esigner servisinin aynı adlı ucuyla birebir uyumludur ({"Base64Pdf": "...", "cred": [{"TcKimlikNo": "...", "Password": "..."}]}) ve düz metin yanıt döner. Yeni entegrasyonlarda /sign/pdf/base64 kullanın.
Zaman damgası
Token gerekmez. Dosyayı yükleyin; yanıt .tst dosyası olarak iner:
curl -OJ -F "[email protected]" http://localhost:5000/api/timestamp/fileİçeriği göndermeden yalnız hash'i damgalamak için:
curl -X POST http://localhost:5000/api/timestamp/hash \
-H "Content-Type: application/json" \
-d '{"hash":"<hex veya base64>","algorithm":"SHA256"}'{
"Success": true,
"Data": {
"Token": "<base64 RFC 3161 token>",
"TokenSize": 2693,
"Hash": "F80B17ED...",
"HashAlgorithm": "SHA256",
"Timestamp": "2026-06-27T11:19:42.0000000+00:00",
"SerialNumber": "00FA553425799E448E8F",
"Tsa": "http://zd.turktrust.com.tr"
}
}Sağlayıcı seçimi ve .asics paketleri için Zaman damgası kılavuzuna bakın.
Token yönetimi
Token'ları kaydetmek isteğe bağlıdır ama iki kolaylık sağlar: kısa ad (alias) ile imzacı seçmek ve PIN'i şifreli saklayıp her istekte göndermemek.
# kaydet
curl -X POST http://localhost:5000/api/sign/tokens \
-H "Content-Type: application/json" \
-d '{"tckn":"12345678901","alias":"muhasebe","pin":"1234","templateId":1}'
# listele (IsBusy: token o an imza atıyor mu)
curl http://localhost:5000/api/sign/tokens
# PIN'i sil, bundan sonra PIN istekten alınsın
curl -X PATCH http://localhost:5000/api/sign/tokens/1 \
-H "Content-Type: application/json" -d '{"clearPin":true}'
# kaydı sil
curl -X DELETE http://localhost:5000/api/sign/tokens/1PATCH alanları: alias, pin, templateId, clearPin, clearAlias, clearTemplate. Yanıtlarda PIN hiçbir zaman dönmez; yalnızca HasPin bilgisi yer alır.
Tanılama uçları
GET /api/sign/check sistemde kurulu PKCS#11 kütüphanelerini, takılı token'ları ve sertifikaları listeler — kurulum sorunlarında ilk bakılacak yerdir.
POST /api/sign/test verilen TCKN ve PIN ile 350 bayttan 5 MB'a kadar dört farklı boyutta deneme imzası atar ve her biri için süreyi ve sonucu döner:
curl -X POST http://localhost:5000/api/sign/test \
-H "Content-Type: application/json" -d '{"tckn":"12345678901","pin":"1234"}'Sorunuzun cevabını bulamadınız mı? [email protected]