API Dokumentace
Programové rozhraní pro vytváření požadavků na elektronický podpis dokumentů bankovní identitou.
1. Jak to funguje
API požadavekPOST /api/v1/sign
→
PlatbaBankovní převod
→
Výzvy k podpisuEmail podepisujícím
→
PodpisBankovní identita
→
HotovoPDF s podpisy
Odešlete PDF dokument s pozicemi podpisů a emaily podepisujících.
API vrátí platební údaje (účet, VS, QR kód). Zadavateli odešleme email s údaji k platbě.
Po připsání platby automaticky rozešleme podepisujícím osobám výzvu k podpisu emailem.
Každá podepisující osoba se podepíše přes svou bankovní identitu.
Po podpisu všemi účastníky obdrží všichni finální PDF s podpisy.
2. Autentizace
Každý požadavek musí obsahovat HTTP hlavičku Authorization s platným API klíčem:
Authorization: Bearer VAS_API_KLIC
⚠
API klíč uchovávejte v bezpečí. Nikdy ho nevkládejte do klientského kódu (JavaScript, mobilní aplikace). Vždy volajte API ze serveru.
Pro získání API klíče nás kontaktujte na info@signuj.cz .
3. Endpoint
POST
https://signuj.cz/api/v1/sign
Typ obsahu: multipart/form-data (kvůli nahrávání PDF souboru).
4. Parametry
Povinné parametry
Parametr Typ Popis
pdf povinný
file
PDF dokument k podpisu. Max 25 MB.
signatures povinný
string (JSON)
JSON pole podpisů. Min 1, max 4. Viz formát podpisů .
email povinný
string
Email zadavatele. Na tento email zašleme platební údaje a finální podepsaný dokument.
Volitelné parametry
Parametr Typ Popis
company volitelný
string
Celé jméno nebo název firmy (pro fakturaci).
ic volitelný
string
IČ (7–9 číslic).
dic volitelný
string
DIČ (formát CZ/SK + 7–9 číslic).
street volitelný
string
Ulice a č.p.
city volitelný
string
Město.
zip volitelný
string
PSČ (5 číslic).
pdf_name volitelný
string
Vlastní název dokumentu. Pokud neuvedete, použije se název souboru.
doc_password volitelný
string
Heslo pro přístup k dokumentu při podepisování (4–16 znaků). Heslo musíte podepisujícím doručit sami (např. SMS).
5. Formát podpisů
Parametr signatures je JSON pole objektů. Každý objekt definuje jeden podpis:
[
{
"email" : "jan.novak@firma.cz" ,
"page" : 1 ,
"rect" : {
"x" : 50 ,
"y" : 100 ,
"w" : 190 ,
"h" : 50
}
},
{
"email" : "petra.svobodova@firma.cz" ,
"page" : 2 ,
"rect" : {
"x" : 300 ,
"y" : 680 ,
"w" : 190 ,
"h" : 50
}
}
]
Pole Typ Popis
email
string
Emailová adresa podepisující osoby.
page
integer
Číslo stránky (od 1).
rect
object
Pozice a rozměry podpisu v PDF bodech.
rect.x
number
Horizontální pozice levého dolního rohu (od levého okraje).
rect.y
number
Vertikální pozice levého dolního rohu (od spodního okraje).
rect.w
number
Šířka podpisu.
rect.h
number
Výška podpisu.
ℹ
PDF body (points) — 1 bod = 1/72 palce.
Standardní stránka A4 = 595 × 842 bodů.
Souřadnice x, y začínají v levém dolním rohu stránky.
Doporučená velikost podpisu: 190 × 50 bodů.
6. Odpověď
Úspěšná odpověď 200
{
"ok" : true ,
"id" : "a1b2c3d4e5f6a1b2c3d4e5f6" ,
"status" : "new" ,
"signatures_count" : 2 ,
"price" : {
"per_signature_czk" : 9 ,
"total_czk" : 18
},
"payment" : {
"account" : "2102763112/2010" ,
"iban" : "CZ6320100000002102763112" ,
"bic" : "FIOBCZPP" ,
"variable_symbol" : "7712345678" ,
"amount_czk" : 18 ,
"message" : "Signuj.cz a1b2c3d4e5f6a1b2c3d4e5f6" ,
"qr_url" : "https://api.paylibo.com/..."
},
"ready_url" : "https://signuj.cz/ready.php?id=a1b2c3d4e5f6a1b2c3d4e5f6" ,
"status_url" : "https://signuj.cz/sign_status.php?id=a1b2c3d4e5f6a1b2c3d4e5f6"
}
Pole Popis
idUnikátní identifikátor požadavku.
statusnew — čeká na platbu.
price.per_signature_czkCena za jeden podpis v Kč.
price.total_czkCelková cena v Kč.
payment.accountČíslo účtu pro platbu.
payment.ibanIBAN pro zahraniční platby.
payment.bicBIC/SWIFT kód banky.
payment.variable_symbolVariabilní symbol — nutný pro spárování platby.
payment.amount_czkČástka k platbě v Kč.
payment.qr_urlURL obrázku QR kódu pro platbu (300×300 px).
ready_urlOdkaz na stránku s nastavením a platbou (pro uživatele).
status_urlURL pro dotazování na aktuální stav požadavku (GET).
✅
Na email zadavatele automaticky odešleme platební údaje.
Po připsání platby se automaticky rozešlou výzvy k podpisu — není potřeba žádná další akce.
7. Chybové stavy
HTTP kód Příčina
400 Chybné nebo chybějící parametry (podrobnosti v error).
401 Chybí hlavička Authorization.
403 Neplatný nebo deaktivovaný API klíč.
405 Použita jiná HTTP metoda než POST.
413 PDF soubor je příliš velký (max 25 MB).
500 Interní chyba serveru.
Chybová odpověď vždy vrací JSON:
{
"ok" : false ,
"error" : "Popis chyby v češtině"
}
8. Příklady
cURL
curl -X POST https://signuj.cz/api/v1/sign \
-H "Authorization: Bearer VAS_API_KLIC" \
-F "pdf=@smlouva.pdf" \
-F 'signatures=[{"email":"jan@firma.cz","page":1,"rect":{"x":50,"y":100,"w":190,"h":50}}]' \
-F "email=zadavatel@firma.cz" \
-F "company=Firma s.r.o." \
-F "ic=12345678" Kopírovat
cURL — dva podpisy na různých stranách
curl -X POST https://signuj.cz/api/v1/sign \
-H "Authorization: Bearer VAS_API_KLIC" \
-F "pdf=@smlouva.pdf" \
-F 'signatures=[
{"email":"jan@firma.cz","page":3,"rect":{"x":50,"y":100,"w":190,"h":50}},
{"email":"petra@firma.cz","page":3,"rect":{"x":300,"y":100,"w":190,"h":50}}
]' \
-F "email=admin@firma.cz" \
-F "pdf_name=Nájemní smlouva 2026" Kopírovat
PHP
$ch = curl_init('https://signuj.cz/api/v1/sign' );
$signatures = json_encode([
[
'email' => 'jan@firma.cz' ,
'page' => 1 ,
'rect' => ['x' => 50 , 'y' => 100 , 'w' => 190 , 'h' => 50 ],
],
]);
curl_setopt_array($ch, [
CURLOPT_POST => true ,
CURLOPT_RETURNTRANSFER => true ,
CURLOPT_HTTPHEADER => ['Authorization: Bearer VAS_API_KLIC' ],
CURLOPT_POSTFIELDS => [
'pdf' => new CURLFile('/cesta/k/smlouva.pdf' , 'application/pdf' ),
'signatures' => $signatures,
'email' => 'zadavatel@firma.cz' ,
'company' => 'Firma s.r.o.' ,
],
]);
$response = curl_exec($ch);
$data = json_decode($response, true );
if ($data['ok' ]) {
echo "ID: " . $data['id' ] . "\n" ;
echo "Cena: " . $data['price' ]['total_czk' ] . " Kč\n" ;
echo "VS: " . $data['payment' ]['variable_symbol' ] . "\n" ;
}Kopírovat
JavaScript (Node.js)
const fs = require('fs' );
const form = new FormData();
form.append('pdf' , fs.createReadStream('smlouva.pdf' ));
form.append('email' , 'zadavatel@firma.cz' );
form.append('signatures' , JSON.stringify([
{ email : 'jan@firma.cz' , page : 1 , rect : { x : 50 , y : 100 , w : 190 , h : 50 } }
]));
const res = await fetch('https://signuj.cz/api/v1/sign' , {
method : 'POST' ,
headers : { 'Authorization' : 'Bearer VAS_API_KLIC' },
body : form,
});
const data = await res.json();
console.log(data);Kopírovat
Python
import requests, json
signatures = json.dumps([
{"email" : "jan@firma.cz" , "page" : 1 ,
"rect" : {"x" : 50 , "y" : 100 , "w" : 190 , "h" : 50 }}
])
resp = requests.post(
"https://signuj.cz/api/v1/sign" ,
headers={"Authorization" : "Bearer VAS_API_KLIC" },
files={"pdf" : open("smlouva.pdf" , "rb" )},
data={
"signatures" : signatures,
"email" : "zadavatel@firma.cz" ,
},
)
data = resp.json()
print(data)Kopírovat
9. Životní cyklus požadavku
Status Popis
newPožadavek vytvořen, čeká na platbu.
paidPlatba přijata. Výzvy k podpisu budou automaticky odeslány.
sentVýzvy k podpisu odeslány, čeká se na podpisy.
signedVšichni podepsali. Finální dokument odeslán všem.
Zjištění stavu — status_url
Pro zjištění aktuálního stavu požadavku použijte status_url vrácenou v odpovědi. Vyžaduje autentizaci API klíčem stejně jako ostatní endpointy.
GET
https://signuj.cz/sign_status.php?id={id}
Authorization: Bearer VAS_API_KLIC
Odpověď status endpointu 200
{
"ok" : true ,
"status" : "signed" ,
"signatures_count" : 2 ,
"price_czk" : 18 ,
"signers" : [
{
"signature_no" : 1 ,
"email" : "jan@firma.cz" ,
"status" : "signed" ,
"signed_at" : "2026-03-22 14:30:00"
},
{
"signature_no" : 2 ,
"email" : "petra@firma.cz" ,
"status" : "signed" ,
"signed_at" : "2026-03-22 15:12:00"
}
]
}
Pole Popis
statusAktuální stav požadavku: new, paid, sent, signed.
signatures_countCelkový počet podpisů v dokumentu.
price_czkCelková cena v Kč (0 u free API).
signersPole s detaily jednotlivých podepisujících.
signers[].signature_noPořadové číslo podpisu (1–4).
signers[].emailEmail podepisující osoby.
signers[].statusStav podpisu: pending, sent, signed.
signers[].signed_atDatum a čas podpisu (pouze pokud již podepsáno).
✅
Pro polling doporučujeme interval 30–60 sekund . Status signed znamená, že dokument je kompletně podepsán a byl odeslán všem účastníkům.
Chybové stavy status endpointu
HTTP kód Příčina
401 Chybí hlavička Authorization.
403 Neplatný nebo deaktivovaný API klíč.
404 Požadavek s daným id nebyl nalezen.
Příklady — zjištění stavu
cURL
curl -H "Authorization: Bearer VAS_API_KLIC" \
https://signuj.cz/sign_status.php?id=a1b2c3d4e5f6a1b2c3d4e5f6 Kopírovat
PHP
$id = 'a1b2c3d4e5f6a1b2c3d4e5f6' ;
$ch = curl_init('https://signuj.cz/sign_status.php?id=' . urlencode($id));
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true ,
CURLOPT_HTTPHEADER => ['Authorization: Bearer VAS_API_KLIC' ],
]);
$response = curl_exec($ch);
$data = json_decode($response, true );
if ($data['ok' ] && $data['status' ] === 'signed' ) {
echo "Dokument je kompletně podepsán.\n" ;
} else {
echo "Stav: " . $data['status' ] . "\n" ;
}Kopírovat
JavaScript (Node.js)
const id = 'a1b2c3d4e5f6a1b2c3d4e5f6' ;
const res = await fetch(
`https://signuj.cz/sign_status.php?id=${id}` ,
{ headers : { 'Authorization' : 'Bearer VAS_API_KLIC' } }
);
const data = await res.json();
console.log(data.status);
console.log(data.signers); Kopírovat
Python
import requests
id = "a1b2c3d4e5f6a1b2c3d4e5f6"
resp = requests.get(
f"https://signuj.cz/sign_status.php?id={id} " ,
headers={"Authorization" : "Bearer VAS_API_KLIC" },
)
data = resp.json()
print(data["status" ])
print(data["signers" ]) Kopírovat
10. Limity
Limit Hodnota
Max velikost PDF 25 MB
Max počet podpisů na dokument 4
Max počet stránek 2 000
Cena za podpis 9 Kč
Podporovaná měna CZK