Integrujte elektronický podpis do vášho stacku
Odošlite obálky, sledujte podpisy, prijímajte webhooks. Jednoduché REST API, OpenAPI 3.0, príklady curl/Node/Python — všetko na to, aby ste pripojili Certyneo k svojmu HRIS, CRM alebo obchodnému softvéru v priebehu niekoľkých hodín.
Rýchly štart
Tri kroky: vytvorte kľúč API z nastavení, zakódujte váš PDF v base64, odošlite. Odpoveď obsahuje `signUrl`, ktorý môžete zdieľať priamo s príjemcom.
# 1. Upload the PDF (multipart) and capture the returned document id.
DOC_ID=$(curl -s -X POST https://certyneo.com/api/v1/documents \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-F "file=@contrat.pdf" | jq -r .id)
# 2. Create a DRAFT envelope referencing the uploaded document.
ENV_ID=$(curl -s -X POST https://certyneo.com/api/v1/envelopes \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d "{
\"subject\": \"Contrat de prestation\",
\"documentIds\": [\"$DOC_ID\"],
\"recipients\": [
{ \"email\": \"client@example.com\", \"name\": \"Marie Dubois\", \"role\": \"SIGNER\" }
]
}" | jq -r .id)
# 3. Dispatch the envelope — this sends the invitation email/SMS.
curl -X POST https://certyneo.com/api/v1/envelopes/$ENV_ID/send \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx"// Plain fetch, no SDK to install.
const auth = { Authorization: `Bearer ${process.env.CERTYNEO_API_KEY}` };
// 1. Upload the PDF (multipart).
const fd = new FormData();
fd.append("file", new Blob([pdfBuffer], { type: "application/pdf" }), "contrat.pdf");
const doc = await fetch("https://certyneo.com/api/v1/documents", {
method: "POST", headers: auth, body: fd,
}).then((r) => r.json());
// 2. Create the DRAFT envelope.
const envelope = await fetch("https://certyneo.com/api/v1/envelopes", {
method: "POST",
headers: { ...auth, "Content-Type": "application/json" },
body: JSON.stringify({
subject: "Contrat de prestation",
documentIds: [doc.id],
recipients: [
{ email: "client@example.com", name: "Marie Dubois", role: "SIGNER" },
],
}),
}).then((r) => r.json());
// 3. Dispatch — this triggers the invitation channel for every recipient.
await fetch(`https://certyneo.com/api/v1/envelopes/${envelope.id}/send`, {
method: "POST", headers: auth,
});
console.log(envelope.id);import os, requests
auth = {"Authorization": f"Bearer {os.environ['CERTYNEO_API_KEY']}"}
# 1. Upload the PDF (multipart).
with open("contrat.pdf", "rb") as f:
doc = requests.post(
"https://certyneo.com/api/v1/documents",
headers=auth,
files={"file": ("contrat.pdf", f, "application/pdf")},
).json()
# 2. Create the DRAFT envelope.
envelope = requests.post(
"https://certyneo.com/api/v1/envelopes",
headers={**auth, "Content-Type": "application/json"},
json={
"subject": "Contrat de prestation",
"documentIds": [doc["id"]],
"recipients": [
{"email": "client@example.com", "name": "Marie Dubois", "role": "SIGNER"},
],
},
).json()
# 3. Dispatch — this triggers the invitation channel for every recipient.
requests.post(
f"https://certyneo.com/api/v1/envelopes/{envelope['id']}/send",
headers=auth,
)
print(envelope["id"])Vyskúšajte API zo svojich nástrojov
Kolekcia Postman a hárok RapidAPI sú generované zo špecifikácie OpenAPI, ktorá tiež dokumentuje túto stránku. Všetky tri zostávajú v súlade s reálnym API, endpoint za endpointom, namiesto aby sa rozišli pri prvom pridaní.
Kolekcia Postman
25 žiadostí usporiadaných podľa domény — obálky, dokumenty, šablóny, pečiatky, webové háčiky — s príkladom tela a odpovede pre každú. Vložte svoj kľúč do premennej apiKey kolekcie a potom spustite GET /health: nevyžaduje žiadne overenie a potvrdzuje, že vaša konfigurácia je správna pred prvým overením hovoru.
Obálky
Vytvorenie, odoslanie, sledovanie stavu, zrušenie. Obálka môže obsahovať viacero dokumentov a viacero signatárov (paralelne alebo sekvenčne).
Webhooky
Všetky udalosti obálky a príjemcu (`envelope.sent`, `recipient.signed`, `envelope.completed`…) dodané na URL podľa vášho výberu — úplný zoznam na /developers/webhooks. HMAC SHA-256 na každej užitočnej záťaži na overenie pôvodu.
Jednoduché overenie
Bearer token. Jeden kľúč na prostredie (test / prod). Môže byť okamžite zrušený. Limit 100 žiadostí/min/kľúč, burst 200, čistý 429 s hlavičkou Retry-After.
Dostupné endpointy
Verejné trasy 53: účet, dokumenty, obálky, šablóny, webhooks, elektronické pečate, kľúče API a fakturácia. Všetky akceptujú token typu Bearer a vrátia JSON.
| Metóda | Cesta | Popis |
|---|---|---|
| GET | /api/v1/account/me | Identita autentifikovaného volajúceho (id, e-mail, plán) : test identifikátorov bez požadovaného rozsahu |
| GET | /api/v1/sandbox | Spočítať údaje vytvorené testovacími kľúčmi (automaticky odstraňované po 30 dňoch) |
| DELETE | /api/v1/sandbox | Odstrániť všetky údaje vytvorené testovacími kľúčmi bez zásahu do skutočných údajov |
| POST | /api/v1/documents | Nahrať PDF (multipart) : vráti id dokumentu |
| GET | /api/v1/documents | Zoznam dokumentov |
| GET | /api/v1/documents/{id} | Čítať metadáta dokumentu |
| DELETE | /api/v1/documents/{id} | Odstrániť dokument |
| GET | /api/v1/envelopes | Zoznam obalov (filtrovať pomocou ?status= a ?limit=) |
| POST | /api/v1/envelopes | Vytvoriť obálku (stav DRAFT) : z templateId, alebo z documentIds s voliteľným poľom fields |
| GET | /api/v1/envelopes/{id} | Čítať stav obálky |
| PATCH | /api/v1/envelopes/{id} | Upraviť obálku DRAFT |
| DELETE | /api/v1/envelopes/{id} | Odstrániť obálku DRAFT (409 po odoslaní : zrušiť namiesto toho) |
| POST | /api/v1/envelopes/{id}/send | Odoslať obálku DRAFT : posiela pozvánky |
| POST | /api/v1/envelopes/{id}/void | Zrušiť odoslanú obálku, ktorá nie je ešte úplne podpísaná : čakajúci signatári sú upozornení |
| POST | /api/v1/envelopes/{id}/remind | Pripomenúť na požiadavku signatárom čakajúcim na odoslanú obálku (voliteľne konkrétny príjemca) |
| GET | /api/v1/envelopes/{id}/audit-trail | Stiahnuť PDF denníka dôkazu eIDAS |
| POST | /api/v1/envelopes/{id}/embed-url | Vracia URL podpisu príjemcu spolu s povolením rámceovania pre požadovaný pôvod. Vyvolať v čase kliknutia: povolenie platí dve hodiny. |
| GET | /api/v1/audit-anchors/{root} | Verejné : metadáta ukotvoneného audítneho balíka, alebo súbor dôkazu .ots s ?format=ots (bez autentifikácie) |
| POST | /api/v1/audit-anchors/verify | Verejné : overiť záznam auditu a jeho dôkaz voči ukotvenenému Merkleovu koreňu (bez autentifikácie, nič neodhalí) |
| GET | /api/v1/envelopes/{id}/signed-document | Stiahnuť podpísané PDF (po COMPLETED) |
| GET | /api/v1/envelopes/bulk | Zoznam vašich hromadných odoslaní |
| POST | /api/v1/envelopes/bulk | Hromadné poslanie: vytvorenie N obálok z šablóny a CSV (iba Standard/Business) |
| GET | /api/v1/envelopes/bulk/{id} | Postup hromadného poslania: počítadlá, chyby podľa riadka, vytvorené obálky |
| GET | /api/v1/templates | Zoznam znovupoužiteľných šablón obálok |
| POST | /api/v1/templates | Vytvorenie šablóny (dokumenty, úlohy, umiestnené polia) |
| GET | /api/v1/workspaces | Zoznam pracovných priestorov, v ktorých môžete vytvoriť obálku |
| POST | /api/v1/sepa-mandates | Generovanie PDF mandátu SEPA a jeho obálky DRAFT, polia už umiestnené |
| POST | /api/v1/payroll-adapters/normalize | Normalizácia CSV výplatnej pásky (Silae, Sage Paie, PayFit, Lucca) na formát hromadného poslania |
| POST | /api/v1/ag-copropriete | Vytvorenie obálky valného zhromaždenia vlastníkov jednotiek (uznesenia a podielové jednotky) |
| POST | /api/v1/ag-copropriete/{envelopeId}/votes | Zaznamenanie hlasov vlastníka jednotky pri uzneseniach zhromaždenia |
| POST | /api/v1/ag-copropriete/{envelopeId}/tally | Spracovanie zhromaždenia: výsledok podľa uznesenia, vážený podielmi |
| GET | /api/v1/videos/{videoId} | Stiahnutie zachovaného videa identity: právo na prístup GDPR (čl. 15) |
| GET | /api/v1/webhooks | Zoznam webhokov |
| POST | /api/v1/webhooks | Registrácia webhooku: vracia tajný kľúč podpisu iba raz |
| GET | /api/v1/webhooks/{id} | Čítanie predplatného webhooku |
| PATCH | /api/v1/webhooks/{id} | Zmena adresy URL, udalostí alebo aktívneho stavu |
| DELETE | /api/v1/webhooks/{id} | Odhlásenie webhooku |
| POST | /api/v1/seals | Aplikovanie kvalifikovaného elektronického pečiatka na dokument |
| GET | /api/v1/seals/{id} | Čítanie stavu pečiatka |
| GET | /api/v1/seals/{id}/certificate | Stiahnutie certifikátu pečiatka |
| GET | /api/v1/payslips/workspaces | Výplatné pásky: priestory, pre ktoré tento kľúč distribúuje, vlastnené alebo delegované klientom (účtovné kancelárie, správcovia výplaty) |
| GET | /api/v1/payslips/employees | Výplatné pásky: register zamestnancov, s tými, ktorí odmietli elektronické doručenie (povinná papierová výplatná páska) |
| PUT | /api/v1/payslips/employees | Výplatné pásky: pridať alebo aktualizovať zamestnancov z registra (nikdy ich neodstrániť) |
| POST | /api/v1/payslips | Uložiť výplatnú pásku (PDF) do trezoru zamestnanca: zapečatená, uchovávana 50 rokov, opakovaný pokus bez duplikátu |
| GET | /api/v1/payslips | Zoznam dodaných výplatných pásk s dôkazom ich zobrazenia |
| GET | /api/v1/keys | Zoznam kľúčov API |
| POST | /api/v1/keys | Vytvorenie kľúča API: tajomstvo sa zobrazí iba raz |
| PATCH | /api/v1/keys/{id} | Premenovanie alebo odvolanie kľúča |
| DELETE | /api/v1/keys/{id} | Odstránenie kľúča |
| GET | /api/v1/billing/usage | Spotreba aktuálneho obdobia a projekčné náklady |
| GET | /api/v1/status | Stav služby |
| GET | /api/v1/health | Kontrola zdravia: databáza, fronta a objektové úložisko |
| GET | /api/v1/openapi | Špecifikácia OpenAPI čitateľná pre stroje |
Modely obalkov
Šablóna zaznamená raz a navždy PDF, úlohy a umiestnenie polí podpisu, potom sa opätovne použije pri každom odoslaní: zadajte jej identifikátor v templateId namiesto documentIds a umiestnené polia sú skopírované do vytvorenej obálky.
- • Šablóny sa vytvárajú z ovládacieho panela (Šablóny → Nová šablóna), kde nahrajete dokument a potom myšou umiestnite polia — to je najjednoduchší spôsob. Rozhranie API tiež umožňuje ich vytvorenie prostredníctvom POST /api/v1/templates poskytnutím dokumentov, úloh a polí; pozor, polia sú tam umiestnené v absolútnych súradniciach (strana, x, y, šírka, výška), takže musíte poznať rozloženie PDF.
- • Na konte, ktorý ešte neregistroval žiadnu šablónu, GET /api/v1/templates vracia prázdny zoznam. Toto je normálne správanie, nie chyba autentifikácie.
- • Zoznam obsahuje iba šablóny patriace používateľovi, ktorý vlastní kľúč API. Šablóna vytvorená kolegom sa v ňom nenachádza, dokonca ani v rámci zdieľaného pracovného priestoru: vygenerujte kľúč z konta, ktoré vlastní šablónu.
- • templateId a documentIds sa vzájomne vylučujú: odošlite jeden alebo druhý, nikdy oba ani žiadny z nich.
- • Poskytnite aspoň toľko príjemcov SIGNER, koľko rolí podpisujúcich má šablóna, inak je vytvorenie odmietnuté s kódom 400. Pole signerCount vrátené zoznamom označuje očakávaný počet.
- • Úroveň podpisu šablóny je dedená obálkou, pokiaľ požiadavka výslovne neposkytne signatureLevel.
# 1. Discover the templates saved on this account.
curl -s https://certyneo.com/api/v1/templates \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx"
# {
# "data": [
# { "id": "cmdq7f4k80001s6y2h1xa9pl3", "name": "Contrat de prestation",
# "signerCount": 2, "documentCount": 1, "signatureLevel": "SIMPLE" }
# ],
# "pagination": { "page": 1, "pageSize": 20, "total": 1, "pages": 1 }
# }
#
# An empty "data" array means no template exists on this account yet —
# create one from the dashboard, it is not an authentication problem.
# 2. Create the envelope FROM the template: no documentIds and no field
# coordinates, both are carried by the template. Pass one SIGNER
# recipient per signer role, in the template's role order.
curl -X POST https://certyneo.com/api/v1/envelopes \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"subject": "Contrat de prestation",
"templateId": "cmdq7f4k80001s6y2h1xa9pl3",
"recipients": [
{ "email": "client@example.com", "name": "Marie Dubois", "role": "SIGNER" },
{ "email": "legal@example.com", "name": "Paul Martin", "role": "SIGNER" }
]
}'
# 3. The envelope is DRAFT at this point — POST /envelopes/{id}/send
# dispatches it, exactly as in the quick-start above.Z Power Automate alebo Zapier
Akcia "Vytvoriť obálku" z našich no-code konektorov pokrýva iba cestu podľa šablóny: pole Šablóna je v nej povinné. Pre ad hoc dokument, ktorý sa zmení pri každom spustení, použite akciu "Nahrať dokument" a potom akciu raw HTTP na POST /api/v1/envelopes s odovzdaným documentIds.
Odoslanie dokumentu : dve akceptované formy
POST /api/v1/documents akceptuje súbor dvoma spôsobmi podľa výberu. V oboch prípadoch platia rovnaké kontroly : povolené typy, limit 50 MB, overenie binárneho podpisu a antivirusová analýza.
- • V multipart/form-data s časťou pomenovanou file. Toto je klasická forma, form curl -F a väčšiny knižníc.
- • V nezpracovanom tele : bajty súboru tvoria telo požiadavky a hlavička Content-Type určuje jeho typ (napríklad application/pdf). Užitočné z nástroja, ktorý prenáša obsah tak ako je, bez obaľovania požiadavky — to robí konektor Power Automate.
- • V nezpracovanom tele nemá meno súboru miesto v tele : zadajte ho cez hlavičku X-File-Name alebo parameter ?fileName=. Bez neho sa dokument pomenuje podľa svojho typu.
- • Nepodporovaný typ odpovie 415 a pomenujem dve akceptované formy a telo oznamuje multipart, ale je nečitateľné, odpovie 400. Ani jedno nie je chyba servera.
# a. multipart/form-data — the classic shape.
curl -X POST https://certyneo.com/api/v1/documents \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-F "file=@contrat.pdf;type=application/pdf"
# b. raw body — the file bytes ARE the body, typed by Content-Type.
# The filename has nowhere to live in the body, so pass it as a header
# (or ?fileName=). Without it the document is named after its type.
curl -X POST https://certyneo.com/api/v1/documents \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/pdf" \
-H "X-File-Name: contrat.pdf" \
--data-binary "@contrat.pdf"
# Both return the same 201 with the document id to pass as documentIds.Umiestnenie polí podpisu
Bez šablóny, obálka vytvorená z documentIds nemá žiadne polia preumiestnené: podpisujúci dostane dokument bez miesta na podpis. Pole fields, odoslané v rovnakom volaní vytvorenia, umiestnuje každé pole s presnosťou na bod — to je ekvivalent na strane API toho, čo šablóna raz zaznamenáva.
- • Súradnice sú v bodoch PDF, pôvod v ľavom hornom rohu stránky a os Y smeruje nadol (stránka A4 má 595 × 842 bodov). x a y označujú ľavý horný roh poľa, width a height jeho veľkosť.
- • pageNumber začína na 1, documentIndex začína na 0. Číslo stránky za dokumentom nie je pri vytvorení zamietnuté: pole sa ignoruje v čase podpisu a nikde sa neobjavuje — to je prvá vec, ktorú je treba skontrolovať, keď v volaní chýba pole.
- • recipientEmail musí zodpovedať jednému z príjemcov v rovnakom volaní bez rozlišovania veľkých a malých písmen. V opačnom prípade vytvorenie zlyhá so zoznamom všetkých chybných riadkov, čo umožňuje ich oprávovanie naraz.
- • fields a templateId sa vzájomne vylučujú: šablóna už má svoju vlastnú rozloženie. Pole fields sa teda používa iba s documentIds.
- • Akceptované typy: SIGNATURE, INITIALS, DATE_SIGNED, TEXT, CHECKBOX a RADIO_GROUP. required je štandardne true; placeholder a dateFormat sú voliteľné, a options sa berie v úvahu iba pre RADIO_GROUP.
- • Obálka akceptuje maximálne 100 polí, 20 dokumentov a 50 príjemcov — limity vášho plánu môžu byť nižšie.
# Ad-hoc envelope WITH pre-placed fields — no template involved.
# Coordinates are PDF points, origin TOP-LEFT of the page, +Y downwards
# (A4 = 595 x 842 pt). x / y are the field box's top-left corner.
#
# The last field is positioned by ANCHOR instead of by eye: the server
# locates "Signature du client" in the PDF and computes the spot. x / y
# stay required there — they are the fallback if the text is not found.
curl -X POST https://certyneo.com/api/v1/envelopes \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"subject": "Contrat de prestation",
"documentIds": ["cmdq7f4k80001s6y2h1xa9pl3"],
"recipients": [
{ "email": "client@example.com", "name": "Marie Dubois", "role": "SIGNER" }
],
"fields": [
{ "recipientEmail": "client@example.com", "documentIndex": 0,
"pageNumber": 2, "fieldType": "SIGNATURE",
"x": 90, "y": 640, "width": 180, "height": 44 },
{ "recipientEmail": "client@example.com", "documentIndex": 0,
"pageNumber": 2, "fieldType": "DATE_SIGNED",
"x": 320, "y": 640, "width": 140, "height": 30,
"dateFormat": "DD/MM/YYYY" },
{ "recipientEmail": "client@example.com", "documentIndex": 0,
"pageNumber": 2, "fieldType": "TEXT",
"x": 90, "y": 700, "width": 200, "height": 30,
"placeholder": "Fonction", "required": false },
{ "recipientEmail": "client@example.com", "documentIndex": 0,
"pageNumber": 2, "fieldType": "SIGNATURE",
"anchorText": "Signature du client", "anchorPlacement": "below",
"anchorIndex": 0,
"x": 90, "y": 640, "width": 180, "height": 44 }
]
}'
# The envelope is DRAFT at this point — POST /envelopes/{id}/send
# dispatches it, exactly as in the quick-start above.Textové kotvy: umiestnenie poľa bez znalosti súradníc
Namiesto súradníc môže pole citovať text vytlačený v dokumente : anchorText ho nájde v PDF a server vypočíta polohu pri vytváraní. Toto je preferovaný spôsob, keď sa dokument regeneruje pri každom odoslaní — hromadná korešpondencia, generátor zmlúv — pretože rozloženie sa mení, zatiaľ čo poznámka „Podpis klienta" zostáva. anchorPlacement označuje, na ktorej strane textu sa pole nachádza (predvolene right, inak below, above alebo left) a anchorIndex vyberie výskyt, keď sa text objavuje viackrát.
x a y zostávajú povinné aj s kotvou : slúžia ako záložný plán. Nenájdená kotva nezpôsobí chybu pri vytváraní — pole si zachová doslovno zadanú polohu, bez chyby ani varovaniav odpovedi. Zadajte teda pravdepodobný záložný plán namiesto 0,0 a overte vykreslenie pri prvom odoslaní.
Integrovaný podpis: podpísať bez opustenia vašej aplikácie
Váš klient si prehliadne a podpíše svoj dokument priamo z vášho rozhrania. Ceremónia sa otvorí v okne nad vašou stránkou a klient sa po ukončení automaticky vráti k vám. Na strane servera nie je nič nové: vytvoríte obálku ako obvykle zadaním redirectUrl a potom zveriete SDK adresu URL podpisu príjemcu.
- • Zavolajte Certyneo.sign() priamo v svojom gestore kliknutia a predajte svoj serverový hovor cez getUrl. Await pred sign() vychádza z užívateľského gesta: Safari a Firefox potom blokujú okno. SDK ho otvorí okamžite a načíta ho, keď sa vaša prísľub vyrieši.
- • redirectUrl je návratný kanál. Vraciame na neho signatára so pridaním certyneo_status (completed alebo declined) a certyneo_envelope. Namieste tento istý skript na tejto návratnej stránke: ten upozorňuje okno portálu, ktoré ostalo otvorené vzadu.
- • V integrovanom režime sú naše vlastné výzvy na akciu potlačené. Váš klient nikdy nevidí pozvánku na vytvorenie účtu Certyneo.
- • Ak prehliadač odmietne okno, SDK sa automaticky prepne na plnú stranu presmerovanie. Cesta je pre signatára identická a vaša návratná stránka dostane presne rovnaké parametre.
- • Zámerne neexistuje spätné volanie „používateľ opustil": stav okna nie je čitateľný z vašej stránky a takéto spätné volanie by sa nesprávne spustilo. Podpis, ktorý nepride, zostáva v stave čakajúci kým webhook.
// 1. Your server creates and sends the envelope, then hands the browser the
// recipient's signing URL. Nothing new on the API side:
// POST /api/v1/envelopes { …, "redirectUrl": "https://your-app.com/quote/42/signed" }
// POST /api/v1/envelopes/{id}/send → recipients[].accessToken
// signingUrl = "https://certyneo.com/sign/" + accessToken
// 2. On your quote page — load the SDK once:
// <script src="https://certyneo.com/embed.js"></script>
document.querySelector("#sign").addEventListener("click", () => {
Certyneo.sign({
// Called AFTER the window is already open, so no popup blocker ever
// sees a delay between the click and window.open.
getUrl: () =>
fetch("/api/quote/42/signature", { method: "POST" })
.then((r) => r.json())
.then((d) => d.signingUrl),
onCompleted: (e) => showConfirmation(e.envelopeId),
onDeclined: () => showDeclined(),
onError: (e) => showError(e),
});
});
// 3. On https://your-app.com/quote/42/signed — your return page — load the
// same script and render a short confirmation. It relays the outcome to
// the portal window behind it, then closes itself.Udalosť prehliadača nie je dôkazom podpisu
onCompleted je signál zobrazenia, ktorý vydáva prehliadač, a preto ho môže falšovať ktokoľvek z jeho konzoly. Nikdy neprepínajte spis na „podpísaný" na základe toho: použite ho na obnovenie obrazovky a spoľahujte sa na webhook podpísanej envelope.completed prijatej vaším serverom pre skutočný stav. Toto je klasická pasca integrácií platieb a tu sa reprodukuje identicky.
Vyvíjajte na svojom počítači
S testovacím kľúčom redirectUrl akceptuje http://localhost (a 127.0.0.1): celú cestu nastavíte na svojom počítači skôr, ako nasadíte. Skutočný kľúč to odmietne, aby žiadna obálka produkcie nevrátila skutočného signatára na počítač, ktorý nie je jeho.
Zobraziť ceremóniu na vašej stránke
Režim rámca zobrazuje podpis vo vnútri vášho rozhrania bez okna. Vyžaduje jeden krok naviac ako režim okna: preukázať, že vám patrí stránka, ktorá ho zobrazí. To je to, čo bráni tretej strane, aby rámcovala naše ceremónie, aby olamala vašich klientov.
- • Deklarujte vašu stránku v Nastaveniach → Integrovaný podpis, potom publikujte uvedený záznam DNS. Presná adresa: subdoména alebo iný port sa počíta ako iná stránka.
- • Pri každom podpise si vyžiadajte novú URL cez POST /api/v1/envelopes/{id}/embed-url. Obsahuje autorizáciu na zobrazenie a platí dve hodiny, čo zodpovedá času kliknutia, nie vytvoreniu obálky.
- • Dva procesy nemôžu prebiehať v rámci: kvalifikovaný podpis, ktorého overenie identity sa odmietne rámcovať, a platba pri podpise. V oboch prípadoch sa podpisujúci orientuje na úplné okno.
- • Text „Poháňané spoločnosťou Certyneo" zmizne z rámca od plánu Business. Samotný režim rámca je zahrnutý už od plánu Standard.
// Mode cadre : la cérémonie s'affiche DANS votre page.
//
// 1. Déclarez votre site une fois pour toutes dans Réglages → Signature
// intégrée, et publiez l'enregistrement DNS qu'on vous y donne.
//
// 2. À chaque signature, votre serveur demande une URL fraîche. Elle porte
// l'autorisation qui permet au navigateur d'afficher la cérémonie chez
// vous, et vaut deux heures :
//
// POST /api/v1/envelopes/{id}/embed-url
// { "origin": "https://portail.exemple.fr" }
// -> { "signingUrl": "…", "expiresAt": "…" }
Certyneo.sign({
mode: "iframe",
el: "#zone-signature", // sélecteur ou nœud de votre page
getUrl: () =>
fetch("/api/devis/42/signature", { method: "POST" })
.then((r) => r.json())
.then((d) => d.signingUrl),
onCompleted: (e) => afficherConfirmation(e.envelopeId),
onDeclined: () => afficherRefus(),
});
// Le cadre parle à votre page par postMessage — pas besoin de page de retour,
// contrairement au mode fenêtre.Podpis bez odoslania e-mailu
Portál, ktorý zobrazuje ceremóniu doma, často nepotrebuje naše pozvanie: príde vedľa jeho vlastnej cesty a ponúka účet klientovi, ktorý ho nechce. Nastavte kanál upozornenia príjemcu na NONE a už mu nič nie je poslané — vy ho vezmete na jeho podpis.
- • Nastavenie je na základe príjemcu, nie na základe obálky: môžete utlmiť klienta, ktorého hostujete, a ponechať e-mail pre vonkajšieho spolupodpisujúceho, ktorý nemá portál.
- • Je vyhradený podpisovateľom a schvaľovateľom, jediným tým, ktorým máte odkaz na odovzdanie. Prečítate si ho z odpovede na vytvorenie a odoslanie, alebo si vyžiadate čerstvú URL v čase kliknutia na POST /api/v1/envelopes/{id}/embed-url.
- • Automatické nútenia sa pre tohto príjemcu zastavujú samy: nikdy sme mu nepisali, nezačíname nútením. Ostatní príjemcovia budú naďalej normálne nútení.
- • Certifikát podpisu to spomína, príjemcu po príjemcovi. Dôkazový súbor, ktorý by o tom mlčal, by pôsobil dojmom, že tento podpisovateľ od nás dostal pozvanie, ktoré nikdy neexistovalo.
POST /api/v1/envelopes
{
"subject": "Mandat de gestion",
"documentIds": ["doc_8f2c1a4b9e7d"],
"recipients": [
{
"email": "client@exemple.fr",
"name": "Camille Client",
"role": "SIGNER",
"notificationChannel": "NONE"
},
{
"email": "notaire@exemple.fr",
"name": "Maître Notaire",
"role": "SIGNER"
}
]
}
// La réponse rend le lien de chaque signataire :
//
// "recipients": [
// { "email": "client@exemple.fr", "accessToken": "…",
// "notificationChannel": "NONE" },
// { "email": "notaire@exemple.fr", "accessToken": "…",
// "notificationChannel": "EMAIL" }
// ]
//
// Le client ne reçoit rien : vous l'emmenez sur sa signature depuis votre
// portail. Le notaire, lui, reçoit son invitation comme d'habitude.Zobraziť meno svojho klienta ako odosielateľa
Predvolene signatár vidí meno držiteľa kľúča API. Ak necháte podpisovať dokumenty viacerých spoločností s jedným kľúčom, prejdite na pole sender pri vytváraní obálky: stránka podpisu a e-maily s pozvánkami a upozorneniami potom zobrazujú meno príslušnej spoločnosti.
- • Vyhradené pre plán Business a vyšší. V nižšom pláne je vytvorenie odmietnuté, aby sa signatár nevidel iný názov, ako sa očakáva.
- • Meno je iba zobrazenie: certifikát a audit trail uchovávajú skutočného odosielateľa a e-maily vždy pochádzajú z Certyneo.
- • Adresa je voliteľná. Bez nej signatár vidí iba meno, nikdy nie adresu držiteľa kľúča.
POST /api/v1/envelopes
{
"subject": "Devis 2026-118",
"documentIds": ["doc_8f2c1a4b9e7d"],
"recipients": [
{ "email": "client@exemple.fr", "name": "Camille Client", "role": "SIGNER" }
],
"sender": {
"name": "1.2.3. Panneaux Solaires",
"email": "devis@123-panneaux-solaires.fr"
}
}Overenie identity
Každé volanie nesie kľúč API v hlavičke Authorization. Kľúče sa generujú z Nastavenia → Kľúče API a zobrazia sa len raz.
GET /api/v1/account/me HTTP/1.1Host: certyneo.com
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx
# 200 OK
{ "data": { "id": "usr_…", "email": "you@example.com", "plan": "BUSINESS", "environment": "live" } }- • Formát: sk_live_… v produkcii, sk_test_… pre sandbox. Záhlavie: Authorization: Bearer <kľúč>.
- • Rozsahy: envelopes, documents, webhooks, seals — v režime čítania (:read) alebo zápisu (:write). Zápis implikuje čítanie; rozsah * dáva všetky práva.
- • Kľúče sk_test_ vytvárajú zdroje v sandbox režime, vylúčené z kvóty a fakturácie. Príjemcovi sa neposiela žiadny skutočný e-mail, pokiaľ jeho adresa nezodpovedá e-mailu odosielajúceho účtu — užitočné na otestovanie celého procesu na sebe.
- • Chyby: 401 neplatný kľúč, 403 nedostatočný rozsah, 429 prekročený limit rýchlosti, 402 dosiahnutá mesačná kvóta.
Formát odpovede
Bod, ktorý treba poznať pred napísaním vášho klienta: kolekcie sú zapuzdrené v objekte data, zatiaľ čo jednotné zdroje sa vracia plošne. Čítanie response.data.data na jednotnom zdroji teda vracia undefined.
// GET /api/v1/envelopes
// Collections are WRAPPED in a "data" array.
{
"data": [
{ "id": "env_abc123", "subject": "Contrat", "status": "SENT" }
]
}// GET /api/v1/envelopes/{id}
// Single resources are returned FLAT — no "data" envelope.
{
"id": "env_abc123",
"subject": "Contrat",
"status": "COMPLETED",
"recipients": [ /* … */ ]
}Limity na prenosovú rýchlosť
Limity zabezpečujú stabilnú kvalitu služby pre všetkých klientov. Ak potrebujete viac, kontaktujte nás.
- • 100 žiadostí za minútu na kľúč API
- • Burst tolerovaný až do 200 žiadostí za menej ako 10s
- • Odpoveď 429 s hlavičkou Retry-After udávajúcou zpoždenie v sekundách