{"id":29102,"date":"2026-10-19T19:17:08","date_gmt":"2026-10-19T17:17:08","guid":{"rendered":"https:\/\/staging.e-signature.eu\/?page_id=29102"},"modified":"2026-10-21T22:22:32","modified_gmt":"2026-10-21T20:22:32","slug":"api-v3-documentatie","status":"publish","type":"page","link":"https:\/\/staging.e-signature.eu\/nl\/api-elektronische-handtekening\/api-v3-documentatie\/","title":{"rendered":"API V3-documentatie"},"content":{"rendered":"<style>\n.esig-api{--ink:#1f2937;--muted:#6b7280;--line:#e5e7eb;--soft:#f8fafc;--brand:#1d4ed8;--code:#0f172a;\n font-family:inherit;color:var(--ink);line-height:1.6;max-width:1100px;margin:0 auto;font-size:16px}\n.esig-api h2{font-size:1.6em;margin:2.2em 0 .6em;padding-top:.6em;border-top:1px solid var(--line)}\n.esig-api h3{font-size:1.2em;margin:1.8em 0 .5em}\n.esig-api h4{font-size:1em;margin:1.4em 0 .4em;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}\n.esig-api p,.esig-api li{max-width:820px}\n.esig-api code{font-family:SFMono-Regular,Consolas,Menlo,monospace;font-size:.88em;background:#eef2ff;color:#1e3a8a;padding:.1em .35em;border-radius:4px;word-break:break-word}\n.esig-api pre{background:var(--code);color:#e2e8f0;padding:16px 18px;border-radius:8px;overflow-x:auto;font-size:13.5px;line-height:1.5;margin:.8em 0 1.4em}\n.esig-api pre code{background:none;color:inherit;padding:0;font-size:inherit;word-break:normal}\n.esig-api table{border-collapse:collapse;width:100%;margin:.8em 0 1.4em;font-size:.94em;display:block;overflow-x:auto}\n.esig-api th,.esig-api td{border:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top}\n.esig-api th{background:var(--soft);font-weight:600}\n.esig-api{display:grid;grid-template-columns:230px minmax(0,1fr);gap:40px;max-width:1240px}\n.esig-api-main{min-width:0}\n.esig-api-nav{position:relative}\n.esig-api-nav-in{position:sticky;top:var(--esig-top,110px);z-index:20}\n.esig-api-nav-in.is-fixed{position:fixed}\n.esig-api-toc{max-height:calc(100vh - var(--esig-top,110px) - 20px);overflow-y:auto;background:var(--soft);border:1px solid var(--line);border-radius:8px;padding:14px 16px;font-size:.92em}\n.esig-api-toc strong{display:block;margin-bottom:.4em}\n.esig-api-toc ol{margin:0;padding-left:1.3em}.esig-api-toc li{margin:.3em 0;max-width:none}\n.esig-api-main a{color:var(--brand)!important;text-decoration:underline!important;text-underline-offset:2px;text-decoration-thickness:1px}.esig-api-main a:hover{text-decoration-thickness:2px}\n.esig-api-details{border:1px solid var(--line);border-radius:8px;padding:10px 16px;margin:.8em 0 1.4em;background:var(--soft)}.esig-api-details summary{cursor:pointer;font-weight:600;color:var(--brand)}.esig-api-details[open] summary{margin-bottom:.6em}.esig-api-details h4{margin:1em 0 .3em;text-transform:none;letter-spacing:0;color:var(--ink)}.esig-api-details ul{margin:.2em 0 .6em}\n.esig-api-toc a{text-decoration:none;color:var(--ink)}.esig-api-toc a:hover{color:var(--brand);text-decoration:underline}\n.esig-api-toc a.is-active{color:var(--brand);font-weight:600;background:#e8efff;border-radius:4px;padding:1px 5px;margin-left:-5px}.esig-api-toc li.is-active::marker{color:var(--brand);font-weight:600}\n.esig-api-toggle{position:absolute;opacity:0;pointer-events:none}\n.esig-api-toc-btn{display:none}\n.esig-api h2{scroll-margin-top:calc(var(--esig-top,110px) + 10px)}\n@media (max-width:900px){\n .esig-api{display:block}\n .esig-api-nav{margin:0 0 1.2em}\n .esig-api-nav-in{top:var(--esig-top,0px)}\n .esig-api-toc-btn{display:flex;align-items:center;justify-content:space-between;background:var(--soft);border:1px solid var(--line);border-radius:8px;padding:10px 14px;font-weight:600;cursor:pointer}\n .esig-api-toc-btn::after{content:\"\u25be\";font-size:1.1em}\n .esig-api-toggle:checked + .esig-api-toc-btn::after{content:\"\u25b4\"}\n .esig-api-toc{display:none;position:static;max-height:60vh;margin-top:6px;box-shadow:0 6px 16px rgba(0,0,0,.08);background:#fff}\n .esig-api-toc strong{display:none}\n .esig-api-toggle:checked ~ .esig-api-toc{display:block}\n .esig-api h2{scroll-margin-top:calc(var(--esig-top,0px) + 60px)}\n}\n.esig-api .ep{display:flex;flex-wrap:wrap;align-items:center;gap:10px;background:var(--soft);border:1px solid var(--line);border-radius:8px;padding:10px 14px;margin:.6em 0 1em;font-family:SFMono-Regular,Consolas,Menlo,monospace;font-size:.95em}\n.esig-api .m{font-weight:700;color:#fff;border-radius:4px;padding:2px 8px;font-size:.85em}\n.esig-api .GET{background:#059669}.esig-api .POST{background:#1d4ed8}.esig-api .PATCH{background:#d97706}.esig-api .DELETE{background:#dc2626}\n.esig-api .note{border-left:4px solid var(--brand);background:#eff6ff;padding:10px 14px;border-radius:0 6px 6px 0;margin:1em 0}\n.esig-api .warn{border-left:4px solid #d97706;background:#fffbeb;padding:10px 14px;border-radius:0 6px 6px 0;margin:1em 0}\n.esig-api .badge{display:inline-block;font-size:.75em;font-weight:700;background:#dbeafe;color:#1e40af;border-radius:999px;padding:1px 8px;margin-left:4px;vertical-align:middle}\n.esig-api .req{color:#dc2626;font-weight:700}\n<\/style>\n<div class=\"esig-api\">\n<nav class=\"esig-api-nav\" aria-label=\"Inhoud\">\n<div class=\"esig-api-nav-in\"><input type=\"checkbox\" id=\"esig-api-toc\" class=\"esig-api-toggle\"><label for=\"esig-api-toc\" class=\"esig-api-toc-btn\">Inhoud<\/label><\/p>\n<div class=\"esig-api-toc\"><strong>Inhoud<\/strong><\/p>\n<ol>\n<li><a href=\"#overview\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Overzicht<\/a><\/li>\n<li><a href=\"#auth\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Authenticatie<\/a><\/li>\n<li><a href=\"#conventions\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Conventies<\/a><\/li>\n<li><a href=\"#credits\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Credits<\/a><\/li>\n<li><a href=\"#flow\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Hoe een ondertekeningsaanvraag werkt<\/a><\/li>\n<li><a href=\"#request\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Een ondertekeningsaanvraag aanmaken<\/a><\/li>\n<li><a href=\"#placement\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Plaatsing van de handtekeningen<\/a><\/li>\n<li><a href=\"#object\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Het object ondertekeningsaanvraag<\/a><\/li>\n<li><a href=\"#endpoints\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Andere endpoints<\/a><\/li>\n<li><a href=\"#callbacks\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Callbacks (webhooks)<\/a><\/li>\n<li><a href=\"#errors\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Fouten<\/a><\/li>\n<li><a href=\"#retention\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Bewaring<\/a><\/li>\n<li><a href=\"#changelog\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Changelog<\/a><\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/nav>\n<div class=\"esig-api-main\">\n<p style=\"color:#6b7280;margin-top:0\">REST API van e-Signature.eu \u2014 elektronische handtekeningen (SES, AES, QES)<\/p>\n<h2 id=\"overview\">1. Overzicht<\/h2>\n<p>Met de REST API van e-Signature.eu verstuurt uw applicatie documenten ter elektronische ondertekening (eenvoudig SES, geavanceerd AES of gekwalificeerd QES volgens eIDAS) zonder via onze website te gaan. U stuurt de pdf en de ondertekenaars; wij verzorgen de identiteitscontrole, de ondertekening en de opvolging; u ontvangt het ondertekende document via de API of een callback.<\/p>\n<table style=\"display:table;width:100%\">\n<tbody>\n<tr>\n<td style=\"width:180px;min-width:140px;white-space:nowrap\">Basis-URL<\/td>\n<td><code>https:\/\/api.e-signature.eu\/v3\/signature\/<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Deze documentatie beschrijft API <span class=\"badge\">v3<\/span>. Gebruikt u al API <span class=\"badge\">v2<\/span> (<code>https:\/\/api.e-signature.eu\/v2\/signature\/<\/code>)? Zie de <a href=\"#changelog\">Changelog<\/a>.<\/p>\n<h2 id=\"auth\">2. Authenticatie<\/h2>\n<p>Uw gegevens staan in <strong>Mijn account &gt; API-handtekeningen<\/strong> zodra u bent aangemeld op e-signature.eu:<\/p>\n<ul>\n<li><strong>User ID<\/strong>: in de URL, als parameter <code>userid<\/code> van elke oproep;<\/li>\n<li><strong>API token<\/strong>: in de HTTP-header <code>x-api-key<\/code> van elke oproep.<\/li>\n<\/ul>\n<pre><code>curl -X GET \"https:\/\/api.e-signature.eu\/v3\/signature\/requestBalance?userid=123\" \\\n  -H \"x-api-key: YOUR_API_TOKEN\"<\/code><\/pre>\n<p>Houd uw token geheim: het geeft via de API volledige toegang tot uw account. Oproepen moeten vanaf uw server gebeuren, nooit vanuit een browser of mobiele app.<\/p>\n<h2 id=\"conventions\">3. Conventies<\/h2>\n<h3>Verzoeken en antwoorden<\/h3>\n<ul>\n<li>Alleen HTTPS. De request bodies zijn JSON (<code>Content-Type: application\/json<\/code>).<\/li>\n<li>Elk antwoord is JSON, in een van deze twee vormen:<\/li>\n<\/ul>\n<pre><code>{ \"success\": true,  \"result\": { ... } }\n{ \"success\": false, \"error\": \"Readable error message\" }<\/code><\/pre>\n<h3>Limieten<\/h3>\n<table>\n<thead>\n<tr>\n<th>Limiet<\/th>\n<th>Waarde<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Oproepen<\/td>\n<td>10 per minuut per account en IP-adres (daarboven HTTP 403, opnieuw proberen na een minuut)<\/td>\n<\/tr>\n<tr>\n<td>Document<\/td>\n<td>E\u00e9n pdf per aanvraag, maximaal 30 MB, niet versleuteld \/ zonder wachtwoord<\/td>\n<\/tr>\n<tr>\n<td>Download van ondertekende documenten<\/td>\n<td>30 dagen na afronding (zie <a href=\"#retention\">Bewaring<\/a>)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"credits\">4. Credits<\/h2>\n<p>Aanvragen worden betaald met uw prepaid credits van e-signature.eu. De prijs van een methode vraagt u op met <a href=\"#getMethods\"><code>getMethods<\/code><\/a> (uw specifieke prijzen worden meegerekend). Uw saldo staat in <a href=\"#requestBalance\"><code>requestBalance<\/code><\/a> en in elk aanvraagobject (<code>credits_balance<\/code>).<\/p>\n<h3 id=\"auto-recharge\">Automatisch opladen van credits<\/h3>\n<p>Om nooit zonder credits te vallen, kan uw account zich automatisch opladen. Dit stelt u \u00e9\u00e9n keer in via <strong>Mijn account &gt; API-handtekeningen<\/strong>, niet via de API:<\/p>\n<ol>\n<li>Kies een <strong>drempel<\/strong> (in credits) en het te bestellen <strong>creditpakket<\/strong>.<\/li>\n<li>Sla een betaalmethode op bij onze betaalprovider Mollie (kaart, of SEPA-domicili\u00ebring via Bancontact, iDEAL\u2026). E\u00e9n keer wordt een verificatiebetaling van \u20ac 0,01 gevraagd.<\/li>\n<li>Telkens wanneer credits worden afgeschreven en uw saldo onder de drempel zakt, wordt een bestelling van het gekozen pakket aangemaakt en automatisch betaald met de opgeslagen betaalmethode. De factuur wordt u per e-mail bezorgd.<\/li>\n<\/ol>\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th>Automatisch opladen<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Activering<\/td>\n<td>Een afschrijving van credits (bv. een nieuwe aanvraag) waardoor het saldo onder de drempel zakt<\/td>\n<\/tr>\n<tr>\n<td>Toevoeging van de credits<\/td>\n<td>Zodra de betaling is bevestigd: onmiddellijk per kaart, na enkele werkdagen per SEPA-domicili\u00ebring<\/td>\n<\/tr>\n<tr>\n<td>Lopende opladingen<\/td>\n<td>E\u00e9n tegelijk<\/td>\n<\/tr>\n<tr>\n<td>Veiligheidslimiet<\/td>\n<td>Een maximaal aantal automatische opladingen per 30 dagen<\/td>\n<\/tr>\n<tr>\n<td>Mislukte betaling<\/td>\n<td>De bestelling wordt als mislukt gemarkeerd, automatisch opladen wordt uitgeschakeld en u wordt per e-mail verwittigd<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"note\">Het opladen wordt door een afschrijving geactiveerd. Een aanvraag die meer kost dan uw huidige saldo wordt geweigerd (HTTP 403, <code>You do not have enough credits<\/code>) en activeert geen oplading: kies een drempel hoger dan de kosten van uw grootste aanvragen, en houd een marge bij betaling per SEPA-domicili\u00ebring. Uw saldo blijft altijd beschikbaar via <a href=\"#requestBalance\"><code>requestBalance<\/code><\/a> en <code>credits_balance<\/code>.<\/div>\n<h2 id=\"flow\">5. Hoe een ondertekeningsaanvraag werkt<\/h2>\n<ol>\n<li>U maakt de aanvraag aan met de pdf, de ondertekenaars en de toegelaten ondertekeningsmethoden. De credits worden afgeschreven.<\/li>\n<li>Elke ondertekenaar ontvangt een e-mail met een persoonlijke ondertekeningslink (of u bezorgt zelf de <code>signature_link<\/code> wanneer <code>send_email<\/code> <code>false<\/code> is).<\/li>\n<li>De ondertekenaar bevestigt zijn identiteit met een van de toegelaten methoden (itsme\u00ae, Evrotrust, Veriff, OTP\u2026) en ondertekent.<\/li>\n<li>Wanneer iedereen heeft ondertekend, is de aanvraag <code>finished<\/code>: de ondertekende pdf (PAdES) is beschikbaar via <code>getRequest<\/code> en wordt meegestuurd in de callback.<\/li>\n<\/ol>\n<h3>Volgorde van ondertekening<\/h3>\n<p>Standaard ondertekenen alle ondertekenaars parallel. Om een volgorde vast te leggen, zet u <code>sign_first: true<\/code> bij de ondertekenaars van de <strong>eerste groep<\/strong>: zij worden meteen uitgenodigd, eventueel met meerderen tegelijk. De andere ondertekenaars worden pas uitgenodigd wanneer de hele eerste groep heeft ondertekend. Maximaal twee groepen.<\/p>\n<h3>Twee integratiemodi<\/h3>\n<table>\n<thead>\n<tr>\n<th>Modus<\/th>\n<th>Werking<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>E-mailmodus<\/strong> (<code>send_email: true<\/code>, standaard)<\/td>\n<td>Wij sturen namens u de uitnodigingen, herinneringen en afrondingsmails naar de ondertekenaars.<\/td>\n<\/tr>\n<tr>\n<td><strong>Ingebedde modus<\/strong> (<code>send_email: false<\/code>)<\/td>\n<td>Bij het aanmaken wordt geen e-mail verstuurd: de <code>signature_link<\/code> van elke ondertekenaar staat in het antwoord en u leidt uw gebruikers ernaartoe vanuit uw eigen interface.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"note\">Ook met <code>send_email: false<\/code> stuurt een herinnering of annulering vanuit het online dashboard een e-mail naar de openstaande ondertekenaars.<\/div>\n<h3>Vraag de API niet herhaaldelijk op<\/h3>\n<p>Roep <code>getRequest<\/code> niet herhaaldelijk op om de status van een aanvraag te volgen: gebruik de <a href=\"#callbacks\">callbacks<\/a>, die automatisch bij elke wijziging worden verstuurd. Te veel oproepen activeren een automatische beperking die de verwerking van uw verzoeken tijdelijk opschort.<\/p>\n<h2 id=\"request\">6. Een ondertekeningsaanvraag aanmaken<\/h2>\n<div class=\"ep\"><span class=\"m POST\">POST<\/span><span>\/v3\/signature\/request?userid={userid}<\/span><\/div>\n<pre><code>{\n  \"title\": \"Sales agreement 2026-114\",\n  \"lang\": \"en\",\n  \"methods\": [\n    \"itsme-qes-signature\",\n    \"evrotrust-signature\"\n  ],\n  \"signature_place\": \"position_auto\",\n  \"reminder\": 3,\n  \"send_email\": true,\n  \"email_notification\": false,\n  \"note_html\": \"Please sign the agreement before Friday.\",\n  \"signature_redirect\": \"https:\/\/www.example.com\/thank-you\",\n  \"external_reference\": \"QUOTE-2026-114\",\n  \"metadata\": {\n    \"crm_deal_id\": 8812\n  },\n  \"callback_url\": \"https:\/\/erp.example.com\/hooks\/esignature\",\n  \"signers\": [\n    {\n      \"firstname\": \"Ann\",\n      \"lastname\": \"Peeters\",\n      \"email\": \"ann.peeters@example.com\",\n      \"phone\": \"+32475111222\",\n      \"sign_first\": true\n    },\n    {\n      \"firstname\": \"Marc\",\n      \"lastname\": \"Dubois\",\n      \"email\": \"marc.dubois@example.com\",\n      \"sign_first\": false\n    }\n  ],\n  \"pdf_file_base64\": \"JVBERi0xLjcKJeLjz9MK...\"\n}<\/code><\/pre>\n<h3 id=\"methods\">Ondertekeningsmethoden<\/h3>\n<table>\n<thead>\n<tr>\n<th>Methode<\/th>\n<th>Niveau<\/th>\n<th>Dekking<\/th>\n<th>Prijs<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>itsme-qes-signature<\/code> \u2014 itsme\u00ae<\/td>\n<td>QES (gekwalificeerd)<\/td>\n<td>32 Europese landen<\/td>\n<td>1 credit \/ ondertekenaar<\/td>\n<\/tr>\n<tr>\n<td><code>evrotrust-signature<\/code> \u2014 Evrotrust<\/td>\n<td>QES (gekwalificeerd)<\/td>\n<td>69 landen<\/td>\n<td>1 credit \/ ondertekenaar<\/td>\n<\/tr>\n<tr>\n<td><code>veriff-advanced-signature<\/code> \u2014 Veriff<\/td>\n<td>AES (geavanceerd)<\/td>\n<td>198 landen<\/td>\n<td>0,7 credit \/ ondertekenaar<\/td>\n<\/tr>\n<tr>\n<td><code>otp-email-non-qualified<\/code> \u2014 OTP per e-mail of sms<\/td>\n<td>SES (eenvoudig)<\/td>\n<td>Wereldwijd<\/td>\n<td>0,4 credit \/ ondertekenaar<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dit zijn de standaardprijzen: <a href=\"#getMethods\"><code>getMethods<\/code><\/a> geeft de beschikbare methoden en de prijzen voor uw account. Alleen een gekwalificeerde elektronische handtekening (QES) is volgens de eIDAS-verordening wettelijk gelijkwaardig aan een handgeschreven handtekening. <code>otp-email-non-qualified<\/code> dekt e-mail en sms: de code wordt per sms verstuurd als de ondertekenaar een <code>phone<\/code> heeft, anders per e-mail, tegen dezelfde prijs.<\/p>\n<h3>Velden van de request body<\/h3>\n<table>\n<thead>\n<tr>\n<th>Veld<\/th>\n<th>Verplicht<\/th>\n<th>Type<\/th>\n<th>Beschrijving<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>title<\/code><\/td>\n<td><span class=\"req\">ja<\/span><\/td>\n<td>string<\/td>\n<td>Naam van het document. Letters, cijfers en koppeltekens blijven behouden; als de naam al in uw account bestaat, wordt een achtervoegsel <code>-1<\/code>, <code>-2<\/code>\u2026 toegevoegd.<\/td>\n<\/tr>\n<tr>\n<td><code>lang<\/code><\/td>\n<td><span class=\"req\">ja<\/span><\/td>\n<td>string<\/td>\n<td>Taal van de e-mails en ondertekeningspagina\u2019s: <code>fr<\/code>, <code>nl<\/code>, <code>en<\/code>, <code>de<\/code>, <code>es<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><code>methods<\/code><\/td>\n<td><span class=\"req\">ja<\/span><\/td>\n<td>array<\/td>\n<td>Toegelaten ondertekeningsmethoden, zie <a href=\"#methods\">Ondertekeningsmethoden<\/a>. Zijn er meerdere toegelaten, dan kiest elke ondertekenaar.<\/td>\n<\/tr>\n<tr>\n<td><code>signers<\/code><\/td>\n<td><span class=\"req\">ja<\/span><\/td>\n<td>array<\/td>\n<td>Ondertekenaars, zie hieronder.<\/td>\n<\/tr>\n<tr>\n<td><code>pdf_file_base64<\/code><\/td>\n<td><span class=\"req\">ja<\/span><\/td>\n<td>string<\/td>\n<td>De pdf, base64-gecodeerd. E\u00e9n bestand, maximaal 30 MB, niet versleuteld.<\/td>\n<\/tr>\n<tr>\n<td><code>signature_place<\/code><\/td>\n<td>nee<\/td>\n<td>string<\/td>\n<td><code>position_auto<\/code> (standaard) of <code>position_manual<\/code>, zie <a href=\"#placement\">Plaatsing van de handtekeningen<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><code>reminder<\/code><\/td>\n<td>nee<\/td>\n<td>number<\/td>\n<td>Automatische herinnering om de N dagen, 0 tot 14. Standaard 0 (geen herinnering).<\/td>\n<\/tr>\n<tr>\n<td><code>send_email<\/code><\/td>\n<td>nee<\/td>\n<td>boolean<\/td>\n<td>Standaard <code>true<\/code> (e-mailmodus). Met <code>false<\/code> (ingebedde modus) wordt geen uitnodigings- of afrondingsmail verstuurd: bezorg zelf de <code>signature_link<\/code>. Niet combineerbaar met <code>sign_first: true<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><code>email_notification<\/code><\/td>\n<td>nee<\/td>\n<td>boolean<\/td>\n<td>Standaard <code>false<\/code>. Met <code>true<\/code> ontvangt u een e-mail bij elke ondertekening.<\/td>\n<\/tr>\n<tr>\n<td><code>note_html<\/code><\/td>\n<td>nee<\/td>\n<td>string<\/td>\n<td>Bericht toegevoegd aan de e-mails voor de ondertekenaars (e-mailmodus). HTML-tags zijn toegestaan, bv. <code>Note with &lt;strong&gt;HTML&lt;\/strong&gt;<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><code>signature_redirect<\/code><\/td>\n<td>nee<\/td>\n<td>string (URL)<\/td>\n<td>Pagina die de ondertekenaar na het ondertekenen ziet. Moet een geldige URL zijn (lege tekst wordt geweigerd). Standaard: bevestigingspagina op e-signature.eu.<\/td>\n<\/tr>\n<tr>\n<td><code>external_reference<\/code><\/td>\n<td>nee<\/td>\n<td>string<\/td>\n<td>Uw eigen referentie (offerte, contract\u2026), maximaal 255 tekens. Komt terug in elk antwoord en elke callback.<\/td>\n<\/tr>\n<tr>\n<td><code>metadata<\/code><\/td>\n<td>nee<\/td>\n<td>object<\/td>\n<td>Vrij JSON-object, maximaal 4 KB, ongewijzigd teruggestuurd.<\/td>\n<\/tr>\n<tr>\n<td><code>callback_url<\/code><\/td>\n<td>nee<\/td>\n<td>string (URL)<\/td>\n<td>Callback-URL alleen voor deze aanvraag (publieke HTTPS). Standaard: de URL van uw account.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Velden van een ondertekenaar<\/h3>\n<table>\n<thead>\n<tr>\n<th>Veld<\/th>\n<th>Verplicht<\/th>\n<th>Type<\/th>\n<th>Beschrijving<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>lastname<\/code><\/td>\n<td><span class=\"req\">ja<\/span><\/td>\n<td>string<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>email<\/code><\/td>\n<td><span class=\"req\">ja<\/span><\/td>\n<td>string<\/td>\n<td>Geldig e-mailadres<\/td>\n<\/tr>\n<tr>\n<td><code>firstname<\/code><\/td>\n<td>nee<\/td>\n<td>string<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>phone<\/code><\/td>\n<td>nee<\/td>\n<td>string<\/td>\n<td>Internationaal formaat met <code>+<\/code> en de landcode (<code>+32\u2026<\/code>); spaties worden verwijderd. Een ongeldig nummer wordt genegeerd. Met de OTP-methode wordt de code per sms verstuurd als er een nummer is, anders per e-mail.<\/td>\n<\/tr>\n<tr>\n<td><code>sign_first<\/code><\/td>\n<td>nee<\/td>\n<td>boolean<\/td>\n<td>Standaard <code>false<\/code>. Zie <a href=\"#flow\">Volgorde van ondertekening<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><code>sign_page<\/code>, <code>sign_left<\/code>, <code>sign_bottom<\/code><\/td>\n<td>met <code>position_manual<\/code><\/td>\n<td>number<\/td>\n<td>Zie <a href=\"#placement\">Plaatsing van de handtekeningen<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Kosten<\/h3>\n<p>Prijs van de duurste methode in <code>methods<\/code> \u00d7 aantal ondertekenaars. De credits worden afgeschreven bij het aanmaken van de aanvraag. De credits van ondertekenaars die niet hebben ondertekend, worden terugbetaald als de aanvraag wordt geannuleerd of stopgezet.<\/p>\n<h3>Antwoord <code>201 Created<\/code><\/h3>\n<pre><code>{\n  \"success\": true,\n  \"result\": {\n    \"id_sign\": 4521,\n    \"lang\": \"en\",\n    \"doc_name\": \"Sales-agreement-2026-114\",\n    \"send_email\": true,\n    \"from_api\": true,\n    \"signature_redirect\": \"https:\/\/www.example.com\/thank-you\",\n    \"status_id\": \"pending\",\n    \"date_status\": \"2026-10-20 10:15:02\",\n    \"last_reminder\": null,\n    \"timezone\": \"Europe\/Brussels\",\n    \"credits\": 2,\n    \"credits_balance\": 38.4,\n    \"signers\": {\n      \"1\": {\n        \"firstname\": \"Ann\",\n        \"lastname\": \"Peeters\",\n        \"email\": \"ann.peeters@example.com\",\n        \"phone\": \"+32475111222\",\n        \"sign_first\": true,\n        \"status\": \"pending\",\n        \"signature_link\": \"https:\/\/www.e-signature.eu\/en\/sign\/?key=\u2026\"\n      },\n      \"2\": {\n        \"firstname\": \"Marc\",\n        \"lastname\": \"Dubois\",\n        \"email\": \"marc.dubois@example.com\",\n        \"sign_first\": false,\n        \"status\": \"pending\",\n        \"signature_link\": \"https:\/\/www.e-signature.eu\/en\/sign\/?key=\u2026\"\n      }\n    },\n    \"external_reference\": \"QUOTE-2026-114\",\n    \"metadata\": {\n      \"crm_deal_id\": 8812\n    }\n  }\n}<\/code><\/pre>\n<h2 id=\"placement\">7. Plaatsing van de handtekeningen<\/h2>\n<h3><code>position_auto<\/code> (standaard)<\/h3>\n<p>Plaats de markeringen <code>#SIG01<\/code>, <code>#SIG02<\/code>\u2026 (ook toegestaan: <code>#SIG01#<\/code>) als tekst in uw document, op de plaats waar elke ondertekenaar moet tekenen (<code>#SIG01<\/code> = eerste ondertekenaar van de array <code>signers<\/code>). De handtekening wordt linksboven de markering geplaatst. Komt dezelfde markering meerdere keren voor, dan geldt de eerste. Een markering wordt overgeslagen als haar handtekeningzone een reeds geplaatste (of bestaande) handtekening zou bedekken: de ondertekenaar krijgt dan de volgende vrije markering. Een markering zo dicht bij de paginarand dat de handtekening moet worden verschoven, wordt alleen in laatste instantie gebruikt.<\/p>\n<div class=\"note\">Tip: schrijf de markeringen in <strong>witte tekst<\/strong> (op een witte achtergrond), zodat ze onzichtbaar zijn in de ondertekende pdf. Ze moeten echte tekst blijven, geen afbeelding, om te worden herkend.<\/div>\n<h4>Document nog niet ondertekend<\/h4>\n<p>Bevat het document geen markering, of ontbreekt de markering van een ondertekenaar, dan wordt aan het einde van het document een <strong>handtekeningenpagina met de markeringen<\/strong> toegevoegd en worden alle handtekeningen op die pagina geplaatst (6 ondertekenaars op de eerste toegevoegde pagina, daarna 10 per extra pagina).<\/p>\n<h4>Document al ondertekend<\/h4>\n<p>Aan een pdf die al elektronisch is ondertekend, kan geen pagina worden toegevoegd: dat zou de bestaande handtekeningen ongeldig maken. Met <code>position_auto<\/code> worden de handtekeningen op de <strong>vrije markeringen<\/strong> geplaatst, d.w.z. de markeringen waarvan de handtekeningzone geen bestaande handtekening bedekt. Vrije markeringen worden in volgorde aan de ondertekenaars toegewezen (<code>#SIG01<\/code>, <code>#SIG02<\/code>\u2026).<\/p>\n<div class=\"warn\">Bevat het ondertekende document niet genoeg vrije markeringen voor alle ondertekenaars, dan wordt de aanvraag geweigerd (HTTP 400): gebruik <code>position_manual<\/code>.<\/div>\n<h3><code>position_manual<\/code><\/h3>\n<p>Geef voor elke ondertekenaar de positie van de handtekening op, in centimeter:<\/p>\n<table>\n<thead>\n<tr>\n<th>Veld<\/th>\n<th>Waarde<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>sign_page<\/code><\/td>\n<td>Paginanummer, vanaf 1 (geheel getal)<\/td>\n<\/tr>\n<tr>\n<td><code>sign_left<\/code><\/td>\n<td>Afstand van de linkerrand van de pagina tot de linkerkant van de handtekening, in cm (decimalen toegestaan)<\/td>\n<\/tr>\n<tr>\n<td><code>sign_bottom<\/code><\/td>\n<td>Afstand van de onderrand van de pagina tot de bovenkant van de handtekening, in cm (decimalen toegestaan)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code>{ \"lastname\": \"Peeters\", \"email\": \"ann.peeters@example.com\", \"sign_page\": 3, \"sign_left\": 2.5, \"sign_bottom\": 6 }<\/code><\/pre>\n<p><code>sign_left<\/code> en <code>sign_bottom<\/code> geven de <strong>linkerbovenhoek<\/strong> van de handtekening. De handtekening wordt onder en rechts van dit punt geplaatst.<\/p>\n<p>De limieten hangen af van de werkelijke grootte van de pagina en van de grootte van de visuele stempel: de volledige handtekening moet minstens 2 cm van elke rand van de pagina blijven. Zijn er meerdere ondertekeningsmethoden toegelaten, dan geldt de grootste stempel. Valt een waarde buiten de limieten, dan vermeldt de foutmelding het toegestane bereik voor die pagina.<\/p>\n<p>Een handtekening mag geen andere handtekening van de aanvraag bedekken, noch een bestaande handtekening als het document al ondertekend is.<\/p>\n<h2 id=\"object\">8. Het object ondertekeningsaanvraag<\/h2>\n<p>Teruggegeven door <code>request<\/code>, <code>getRequest<\/code>, <code>cancel<\/code>, <code>skip<\/code>, <code>remind<\/code>, <code>delete<\/code> en verstuurd in de callbacks.<\/p>\n<table>\n<thead>\n<tr>\n<th>Veld<\/th>\n<th>Beschrijving<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>id_sign<\/code><\/td>\n<td>ID van de aanvraag<\/td>\n<\/tr>\n<tr>\n<td><code>doc_name<\/code><\/td>\n<td>Naam van het document<\/td>\n<\/tr>\n<tr>\n<td><code>status_id<\/code><\/td>\n<td><code>pending<\/code> lopend \u00b7 <code>finished<\/code> door iedereen ondertekend \u00b7 <code>skipped<\/code> stopgezet, gedeeltelijk ondertekend \u00b7 <code>cancelled<\/code> \u00b7 <code>deleted<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>signers<\/code><\/td>\n<td>Object met de ondertekenaars, per sleutel (<code>\"1\"<\/code>, <code>\"2\"<\/code>\u2026) \u2014 zie hieronder<\/td>\n<\/tr>\n<tr>\n<td><code>lang<\/code>, <code>send_email<\/code>, <code>signature_redirect<\/code>, <code>timezone<\/code><\/td>\n<td>Zoals bij het aanmaken ingesteld<\/td>\n<\/tr>\n<tr>\n<td><code>from_api<\/code><\/td>\n<td><code>true<\/code> als de aanvraag via de API is aangemaakt<\/td>\n<\/tr>\n<tr>\n<td><code>date_status<\/code><\/td>\n<td>Datum van de laatste statuswijziging (tijdzone van de aanvraag)<\/td>\n<\/tr>\n<tr>\n<td><code>last_reminder<\/code><\/td>\n<td>Datum van de laatste herinnering, of <code>null<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>credits<\/code><\/td>\n<td>Credits van de aanvraag (gereserveerd zolang ze loopt, gebruikt na afronding)<\/td>\n<\/tr>\n<tr>\n<td><code>credits_balance<\/code><\/td>\n<td>Huidig saldo van uw account<\/td>\n<\/tr>\n<tr>\n<td><code>pdf_file_base64<\/code><\/td>\n<td>Ondertekende pdf, wanneer de aanvraag niet meer loopt<\/td>\n<\/tr>\n<tr>\n<td><code>external_reference<\/code>, <code>metadata<\/code><\/td>\n<td>Zoals verstuurd bij het aanmaken<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Ondertekenaar<\/h3>\n<table>\n<thead>\n<tr>\n<th>Veld<\/th>\n<th>Beschrijving<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>firstname<\/code>, <code>lastname<\/code>, <code>email<\/code>, <code>phone<\/code>, <code>sign_first<\/code><\/td>\n<td>Zoals verstuurd bij het aanmaken<\/td>\n<\/tr>\n<tr>\n<td><code>status<\/code><\/td>\n<td><code>pending<\/code> \u00b7 <code>signed<\/code> \u00b7 <code>skipped<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>signature_link<\/code><\/td>\n<td>Persoonlijke ondertekeningslink, zolang de ondertekenaar niet heeft ondertekend<\/td>\n<\/tr>\n<tr>\n<td><code>signing_time<\/code>, <code>signing_method<\/code><\/td>\n<td>Na ondertekening: datum en gebruikte methode<\/td>\n<\/tr>\n<tr>\n<td><code>verified_firstname<\/code>, <code>verified_lastname<\/code><\/td>\n<td>Na ondertekening: identiteit gecontroleerd door de ondertekeningsmethode<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre><code>{\n  \"1\": {\n    \"firstname\": \"Ann\",\n    \"lastname\": \"Peeters\",\n    \"email\": \"ann.peeters@example.com\",\n    \"status\": \"signed\",\n    \"signing_time\": \"2026-10-20 11:02:47\",\n    \"signing_method\": \"itsme-qes-signature\",\n    \"verified_firstname\": \"Ann\",\n    \"verified_lastname\": \"Peeters\"\n  }\n}<\/code><\/pre>\n<h2 id=\"endpoints\">9. Andere endpoints<\/h2>\n<p>Alle endpoints krijgen <code>userid<\/code> in de URL en <code>x-api-key<\/code> in de headers. <code>id_sign<\/code> wordt in de URL meegegeven.<\/p>\n<h3 id=\"list\">De aanvragen oplijsten<\/h3>\n<div class=\"ep\"><span class=\"m GET\">GET<\/span><span>\/v3\/signature\/list?userid={userid}&amp;status_id=pending<\/span><\/div>\n<p><code>status_id<\/code> (optioneel): <code>pending<\/code>, <code>finished<\/code> of <code>skipped<\/code>. <code>external_reference<\/code> (optioneel): alleen de aanvragen met deze referentie.<\/p>\n<pre><code>{\n  \"success\": true,\n  \"result\": [\n    {\n      \"id_sign\": 4521,\n      \"status_id\": \"pending\",\n      \"external_reference\": \"QUOTE-2026-114\"\n    },\n    {\n      \"id_sign\": 4498,\n      \"status_id\": \"finished\"\n    }\n  ]\n}<\/code><\/pre>\n<h3 id=\"getRequest\">Een aanvraag opvragen<\/h3>\n<div class=\"ep\"><span class=\"m GET\">GET<\/span><span>\/v3\/signature\/getRequest?userid={userid}&amp;id_sign=4521<\/span><\/div>\n<p>Geeft het <a href=\"#object\">object ondertekeningsaanvraag<\/a> terug, met de ondertekende pdf zodra de aanvraag is afgerond. Gebruik de <a href=\"#callbacks\">callbacks<\/a> om de status te volgen, niet herhaalde oproepen.<\/p>\n<h3 id=\"remind\">Een herinnering sturen<\/h3>\n<div class=\"ep\"><span class=\"m PATCH\">PATCH<\/span><span>\/v3\/signature\/remind?userid={userid}&amp;id_sign=4521<\/span><\/div>\n<p>Stuurt een herinneringsmail naar de ondertekenaars met <code>status: pending<\/code> van de groep die momenteel is uitgenodigd (eerst de groep <code>sign_first<\/code>). Alleen voor aanvragen <code>pending<\/code>. Werkt ook voor aanvragen aangemaakt met <code>send_email: false<\/code>.<\/p>\n<h3 id=\"skip\">Een aanvraag stopzetten (met behoud van de reeds geplaatste handtekeningen)<\/h3>\n<div class=\"ep\"><span class=\"m PATCH\">PATCH<\/span><span>\/v3\/signature\/skip?userid={userid}&amp;id_sign=4521<\/span><\/div>\n<p>Mogelijk wanneer minstens \u00e9\u00e9n ondertekenaar heeft ondertekend en minstens \u00e9\u00e9n nog niet. De aanvraag wordt <code>skipped<\/code>, de gedeeltelijk ondertekende pdf is beschikbaar en de credits van de niet-ondertekenaars worden terugbetaald.<\/p>\n<h3 id=\"cancel\">Een aanvraag annuleren<\/h3>\n<div class=\"ep\"><span class=\"m DELETE\">DELETE<\/span><span>\/v3\/signature\/cancel?userid={userid}&amp;id_sign=4521<\/span><\/div>\n<p>Mogelijk zolang niemand heeft ondertekend; gebruik <a href=\"#skip\"><code>skip<\/code><\/a> om een gedeeltelijk ondertekende aanvraag af te sluiten. Het antwoord bevat de aanvraag met <code>status_id: cancelled<\/code>; daarna worden de aanvraag en het document uit uw dashboard verwijderd, werken de ondertekeningslinks niet meer en worden de credits terugbetaald.<\/p>\n<h3 id=\"delete\">Een aanvraag verwijderen<\/h3>\n<div class=\"ep\"><span class=\"m DELETE\">DELETE<\/span><span>\/v3\/signature\/delete?userid={userid}&amp;id_sign=4521<\/span><\/div>\n<p>Alleen aanvragen <code>finished<\/code> of <code>skipped<\/code>. Verwijdert de documenten en de aanvraag. Het antwoord bevat de aanvraag nog \u00e9\u00e9n keer, met <code>status_id: deleted<\/code>: download de ondertekende pdf v\u00f3\u00f3r het verwijderen.<\/p>\n<h3 id=\"requestAuditTrail\">De audit trail downloaden<\/h3>\n<div class=\"ep\"><span class=\"m GET\">GET<\/span><span>\/v3\/signature\/requestAuditTrail?userid={userid}&amp;id_sign=4521<\/span><\/div>\n<p>Niet beschikbaar zolang de aanvraag loopt (HTTP 412). Geeft het aanvraagobject terug met <code>audit_trail_base64<\/code>: een pdf met de geschiedenis van de aanvraag (data, methoden, gecontroleerde identiteiten).<\/p>\n<h3 id=\"requestBalance\">Het creditsaldo opvragen<\/h3>\n<div class=\"ep\"><span class=\"m GET\">GET<\/span><span>\/v3\/signature\/requestBalance?userid={userid}<\/span><\/div>\n<pre><code>{ \"success\": true, \"result\": { \"credits_balance\": 38.4 } }<\/code><\/pre>\n<h3 id=\"getMethods\">De ondertekeningsmethoden oplijsten<\/h3>\n<div class=\"ep\"><span class=\"m GET\">GET<\/span><span>\/v3\/signature\/getMethods?userid={userid}&amp;lang=en<\/span><\/div>\n<p>Methoden toegelaten in <code>methods<\/code>, met de prijs in credits per ondertekenaar <strong>voor uw account<\/strong>. <code>lang<\/code> (optioneel) vertaalt de labels.<\/p>\n<pre><code>{\n  \"success\": true,\n  \"result\": [\n    {\n      \"id\": \"itsme-qes-signature\",\n      \"label\": \"itsme\u00ae | QES\",\n      \"credits\": 1\n    },\n    {\n      \"id\": \"evrotrust-signature\",\n      \"label\": \"Evrotrust | QES\",\n      \"credits\": 1\n    },\n    {\n      \"id\": \"veriff-advanced-signature\",\n      \"label\": \"Veriff | AES\",\n      \"credits\": 0.7\n    },\n    {\n      \"id\": \"otp-email-non-qualified\",\n      \"label\": \"OTP by Email\/SMS | SES\",\n      \"credits\": 0.4\n    }\n  ]\n}<\/code><\/pre>\n<h2 id=\"callbacks\">10. Callbacks (webhooks)<\/h2>\n<p>Stel uw callback-URL in via <strong>Mijn account &gt; API-handtekeningen<\/strong> (HTTPS, publiek bereikbaar). U kunt ook per aanvraag een <code>callback_url<\/code> opgeven. De callback is een <code>POST<\/code> met een JSON-body met de volledige huidige status van de aanvraag (zelfde formaat als <code>getRequest<\/code>), verstuurd voor aanvragen die via de API zijn aangemaakt.<\/p>\n<h3>Eventvelden<\/h3>\n<table>\n<thead>\n<tr>\n<th>Veld<\/th>\n<th>Beschrijving<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>event<\/code><\/td>\n<td>Type event (zie hieronder)<\/td>\n<\/tr>\n<tr>\n<td><code>event_id<\/code><\/td>\n<td>Unieke ID van het event (<code>evt_\u2026<\/code>). <strong>Identiek bij elke nieuwe poging<\/strong> voor hetzelfde event: gebruik het om dubbels te negeren.<\/td>\n<\/tr>\n<tr>\n<td><code>event_at<\/code><\/td>\n<td>Datum van het event (UTC, ISO 8601)<\/td>\n<\/tr>\n<tr>\n<td><code>changes<\/code><\/td>\n<td>Statuswijzigingen van ondertekenaars, bv. <code>[{\"signer_key\": 1, \"from\": \"pending\", \"to\": \"signed\"}]<\/code> (alleen als een ondertekenaar is gewijzigd)<\/td>\n<\/tr>\n<tr>\n<td><code>external_reference<\/code>, <code>metadata<\/code><\/td>\n<td>Zoals verstuurd bij het aanmaken van de aanvraag<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Types events<\/h3>\n<table>\n<thead>\n<tr>\n<th>Event<\/th>\n<th>Wanneer<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>signer.signed<\/code><\/td>\n<td>Een ondertekenaar heeft ondertekend, de aanvraag loopt nog<\/td>\n<\/tr>\n<tr>\n<td><code>signer.declined<\/code>, <code>signer.skipped<\/code>, <code>signer.expired<\/code><\/td>\n<td>Een ondertekenaar heeft geweigerd, werd overgeslagen of is verlopen<\/td>\n<\/tr>\n<tr>\n<td><code>request.completed<\/code><\/td>\n<td>Alle ondertekenaars hebben ondertekend: de ondertekende pdf is inbegrepen (<code>pdf_file_base64<\/code>)<\/td>\n<\/tr>\n<tr>\n<td><code>request.stopped<\/code><\/td>\n<td>De aanvraag werd stopgezet: de gedeeltelijk ondertekende pdf is inbegrepen<\/td>\n<\/tr>\n<tr>\n<td><code>request.cancelled<\/code><\/td>\n<td>De aanvraag werd geannuleerd<\/td>\n<\/tr>\n<tr>\n<td><code>request.deleted<\/code><\/td>\n<td>De aanvraag werd verwijderd<\/td>\n<\/tr>\n<tr>\n<td><code>request.expired<\/code><\/td>\n<td>De aanvraag is verlopen<\/td>\n<\/tr>\n<tr>\n<td><code>request.declined<\/code><\/td>\n<td>Aangetekende zending geweigerd door de ontvanger<\/td>\n<\/tr>\n<tr>\n<td><code>request.updated<\/code><\/td>\n<td>Elke andere wijziging: herinnering verstuurd, ondertekenaar gewijzigd, nieuwe ondertekeningslinks\u2026<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>De body bevat altijd de volledige huidige status: uw integratie kan steunen op <code>status_id<\/code> en de status van elke ondertekenaar, niet alleen op het type event.<\/p>\n<h3>Headers<\/h3>\n<table>\n<thead>\n<tr>\n<th>Header<\/th>\n<th>Voorbeeld<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>X-Esig-Api-Version<\/code><\/td>\n<td><code>3<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>X-Esig-Event<\/code><\/td>\n<td><code>signer.signed<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>X-Esig-Event-Id<\/code><\/td>\n<td><code>evt_4f0c2b9e1d7a3c55e8b1a2f0<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>X-Esig-Delivery-Attempt<\/code><\/td>\n<td><code>1<\/code>, <code>2<\/code>, \u2026<\/td>\n<\/tr>\n<tr>\n<td><code>X-Esig-Signature<\/code><\/td>\n<td><code>t=1792407600,v1=5d41402abc4b2a76b9719d911017c592\u2026<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>De handtekening controleren<\/h3>\n<p>Uw ondertekeningsgeheim staat in <strong>Mijn account &gt; API-handtekeningen<\/strong>, waar u het ook opnieuw kunt aanmaken. <code>v1<\/code> is de HMAC-SHA256 van <code>\"&lt;t&gt;.&lt;raw request body&gt;\"<\/code> met uw geheim, hexadecimaal gecodeerd. Gebruik de <strong>ruwe<\/strong> body, v\u00f3\u00f3r elke JSON-verwerking, en weiger callbacks ouder dan 5 minuten.<\/p>\n<h4>PHP<\/h4>\n<pre><code>$body   = file_get_contents( 'php:\/\/input' );\n$header = $_SERVER['HTTP_X_ESIG_SIGNATURE'] ?? '';\npreg_match( '\/t=(\\d+),v1=([a-f0-9]{64})\/', $header, $m );\n$valid = $m\n    &amp;&amp; abs( time() - (int) $m[1] ) &lt;= 300\n    &amp;&amp; hash_equals( hash_hmac( 'sha256', $m[1] . '.' . $body, $secret ), $m[2] );<\/code><\/pre>\n<h4>Node.js<\/h4>\n<pre><code>const crypto = require('crypto');\nfunction verify(rawBody, header, secret) {\n  const m = \/t=(\\d+),v1=([a-f0-9]{64})\/.exec(header || '');\n  if (!m || Math.abs(Date.now() \/ 1000 - Number(m[1])) &gt; 300) return false;\n  const expected = crypto.createHmac('sha256', secret).update(`${m[1]}.${rawBody}`).digest('hex');\n  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(m[2]));\n}<\/code><\/pre>\n<h4>C# (.NET)<\/h4>\n<pre><code>using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions;\nstatic bool Verify(string rawBody, string header, string secret) {\n    var m = Regex.Match(header ?? \"\", @\"t=(\\d+),v1=([a-f0-9]{64})\");\n    if (!m.Success || Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - long.Parse(m.Groups[1].Value)) &gt; 300) return false;\n    using var h = new HMACSHA256(Encoding.UTF8.GetBytes(secret));\n    var expected = Convert.ToHexString(h.ComputeHash(Encoding.UTF8.GetBytes(m.Groups[1].Value + \".\" + rawBody))).ToLowerInvariant();\n    return CryptographicOperations.FixedTimeEquals(Encoding.ASCII.GetBytes(expected), Encoding.ASCII.GetBytes(m.Groups[2].Value));\n}<\/code><\/pre>\n<h3>Antwoorden en nieuwe pogingen<\/h3>\n<ul>\n<li>Antwoord met <strong>HTTP 2xx<\/strong> zodra de callback is ontvangen en verwerk hem zo nodig asynchroon.<\/li>\n<li>Bij een netwerkfout, time-out (30 s), HTTP 429 of 5xx wordt de callback elk uur opnieuw verstuurd met hetzelfde <code>event_id<\/code>, tot 24 pogingen. Andere 4xx-antwoorden gelden als definitief. Wijzigt de aanvraag opnieuw v\u00f3\u00f3r een geslaagde levering, dan bevat de volgende callback een nieuw event en de volledige huidige status. De huidige status blijft altijd beschikbaar via <code>getRequest<\/code>.<\/li>\n<li>Doorverwijzingen worden gevolgd (de methode <code>POST<\/code> blijft behouden). <code>localhost<\/code> en priv\u00e9-adressen kunnen niet worden gebruikt.<\/li>\n<\/ul>\n<h2 id=\"errors\">11. Fouten<\/h2>\n<p>Fouten worden teruggegeven met <code>\"success\": false<\/code> en een leesbaar bericht <code>error<\/code>. Baseer uw logica op de HTTP-code: de berichten kunnen worden verbeterd.<\/p>\n<table>\n<thead>\n<tr>\n<th>HTTP-code<\/th>\n<th>Betekenis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>200 \/ 201<\/td>\n<td>OK \/ aanvraag aangemaakt<\/td>\n<\/tr>\n<tr>\n<td>400<\/td>\n<td>Ontbrekend of ongeldig veld (het bericht noemt het veld)<\/td>\n<\/tr>\n<tr>\n<td>400<\/td>\n<td>Ontbrekende <code>id_sign<\/code>, of ongeldige filter <code>status_id<\/code><\/td>\n<\/tr>\n<tr>\n<td>401<\/td>\n<td>Ongeldige <code>userid<\/code> of <code>x-api-key<\/code><\/td>\n<\/tr>\n<tr>\n<td>403<\/td>\n<td>Onvoldoende credits, of limiet van oproepen bereikt (10 per minuut)<\/td>\n<\/tr>\n<tr>\n<td>404<\/td>\n<td>Onbekende <code>id_sign<\/code> voor dit account<\/td>\n<\/tr>\n<tr>\n<td>412<\/td>\n<td>Actie niet mogelijk in de huidige status (bv. annuleren na een handtekening, een lopende aanvraag verwijderen)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"errors-by-endpoint\">Fouten per endpoint<\/h3>\n<table>\n<thead>\n<tr>\n<th>Endpoint<\/th>\n<th>HTTP-code<\/th>\n<th>Bericht<\/th>\n<th>Oorzaak<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Alle endpoints<\/td>\n<td>401<\/td>\n<td><code>Please provide a valid x-api-key in headers &amp; userid in url parameters.<\/code><\/td>\n<td>Ongeldige <code>userid<\/code> of <code>x-api-key<\/code><\/td>\n<\/tr>\n<tr>\n<td>Alle endpoints<\/td>\n<td>403<\/td>\n<td><code>Rate limit exceeded: 10 requests per minute is allowed. Please try again after a minute.<\/code><\/td>\n<td>Meer dan 10 oproepen per minuut<\/td>\n<\/tr>\n<tr>\n<td><code>request<\/code><\/td>\n<td>400<\/td>\n<td>Zie <a href=\"#validation\">Validatieberichten<\/a><\/td>\n<td>Ontbrekend of ongeldig veld, pdf of positie<\/td>\n<\/tr>\n<tr>\n<td><code>request<\/code><\/td>\n<td>403<\/td>\n<td><code>You do not have enough credits<\/code><\/td>\n<td>Saldo lager dan de kosten van de aanvraag<\/td>\n<\/tr>\n<tr>\n<td><code>list<\/code><\/td>\n<td>400<\/td>\n<td><code>Incorrect value for status_id.<\/code><\/td>\n<td>Onbekende filter <code>status_id<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>getRequest<\/code>, <code>remind<\/code>, <code>skip<\/code>, <code>cancel<\/code>, <code>delete<\/code>, <code>requestAuditTrail<\/code><\/td>\n<td>400<\/td>\n<td><code>please provide id_sign parameter.<\/code><\/td>\n<td><code>id_sign<\/code> ontbreekt<\/td>\n<\/tr>\n<tr>\n<td><code>getRequest<\/code>, <code>remind<\/code>, <code>skip<\/code>, <code>cancel<\/code>, <code>delete<\/code>, <code>requestAuditTrail<\/code><\/td>\n<td>404<\/td>\n<td><code>invalid id_sign value.<\/code><\/td>\n<td>Onbekende <code>id_sign<\/code> voor dit account<\/td>\n<\/tr>\n<tr>\n<td><code>remind<\/code><\/td>\n<td>412<\/td>\n<td><code>request can not be remind to user(s): wrong status<\/code><\/td>\n<td>De aanvraag loopt niet<\/td>\n<\/tr>\n<tr>\n<td><code>skip<\/code><\/td>\n<td>412<\/td>\n<td><code>request can not be skipped: wrong status<\/code><\/td>\n<td>Nog niemand heeft ondertekend, iedereen heeft ondertekend, of de aanvraag loopt niet meer<\/td>\n<\/tr>\n<tr>\n<td><code>cancel<\/code><\/td>\n<td>412<\/td>\n<td><code>request can not be cancelled: someone already signed the PDF<\/code><\/td>\n<td>Minstens \u00e9\u00e9n ondertekenaar heeft ondertekend<\/td>\n<\/tr>\n<tr>\n<td><code>delete<\/code><\/td>\n<td>412<\/td>\n<td><code>request can not be deleted: wrong status_id<\/code><\/td>\n<td>De aanvraag loopt nog<\/td>\n<\/tr>\n<tr>\n<td><code>requestAuditTrail<\/code><\/td>\n<td>412<\/td>\n<td><code>Can not download Audit Trail while the signature request is pending<\/code><\/td>\n<td>De aanvraag loopt nog<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"validation\">Validatieberichten bij het aanmaken (<code>request<\/code>, HTTP 400)<\/h3>\n<p>Het bericht noemt het veld of het probleem; <code>\u2026<\/code> staat voor een waarde uit uw verzoek. Baseer uw code op de HTTP-code en toon het bericht om het verzoek te helpen corrigeren.<\/p>\n<details class=\"esig-api-details\">\n<summary>Alle validatieberichten tonen<\/summary>\n<h4>Request body<\/h4>\n<ul>\n<li><code>Request body can not be empty<\/code><\/li>\n<\/ul>\n<h4><code>title<\/code>, <code>lang<\/code><\/h4>\n<ul>\n<li><code>Field 'title' must be of type string and can not be empty<\/code><\/li>\n<li><code>Field 'lang' is an invalid language code<\/code><\/li>\n<\/ul>\n<h4><code>signers<\/code><\/h4>\n<ul>\n<li><code>field 'signers' is omitted or is empty<\/code><\/li>\n<li><code>Firstname, Lastname &amp; email address must be of type string and can not be empty<\/code><\/li>\n<li><code>\u2026 is not an email address<\/code><\/li>\n<li><code>field 'sign_first' is not a boolean value<\/code><\/li>\n<li><code>field 'sign_first' can not be 'true' when field 'send_email' is 'false'<\/code><\/li>\n<\/ul>\n<h4><code>methods<\/code><\/h4>\n<ul>\n<li><code>You must set at least one signing method<\/code><\/li>\n<li><code>\u2026 is not a valid method<\/code><\/li>\n<\/ul>\n<h4>Opties<\/h4>\n<ul>\n<li><code>Field 'reminder' should be of type numeric between 0 &amp; 14 (days)<\/code><\/li>\n<li><code>Field 'send_email' should be of type boolean<\/code><\/li>\n<li><code>Field 'email_notification' should be of type boolean<\/code><\/li>\n<li><code>Field 'note_html' should be of type string<\/code><\/li>\n<li><code>Field 'signature_redirect' is not a valid url<\/code><\/li>\n<\/ul>\n<h4><code>external_reference<\/code>, <code>metadata<\/code>, <code>callback_url<\/code><\/h4>\n<ul>\n<li><code>Field 'external_reference' must be a string<\/code><\/li>\n<li><code>Field 'external_reference' can not exceed 255 characters<\/code><\/li>\n<li><code>Field 'metadata' must be a JSON object<\/code><\/li>\n<li><code>Field 'metadata' can not exceed 4096 bytes<\/code><\/li>\n<li><code>Field 'callback_url' must be a publicly reachable HTTPS URL<\/code><\/li>\n<\/ul>\n<h4>PDF<\/h4>\n<ul>\n<li><code>Field 'pdf_file_base64' should be of type string and not empty<\/code><\/li>\n<li><code>Field 'pdf_file_base64' doesn't contains a base64 encoded string<\/code><\/li>\n<li><code>Field 'pdf_file_base64' doesn't contains a base64 encoded PDF file<\/code><\/li>\n<li><code>Your file is too big &gt; 30 MB<\/code><\/li>\n<li><code>Couldn't load your PDF document<\/code><\/li>\n<li><code>PDF file is encrypted and password protected. Please unprotected your PDF file.<\/code><\/li>\n<li><code>Couldn't get pages from PDF document<\/code><\/li>\n<\/ul>\n<h4>Plaatsing van de handtekeningen<\/h4>\n<ul>\n<li><code>field 'signature_place' is incorrect<\/code><\/li>\n<li><code>field 'sign_page' is empty or is not an integer<\/code><\/li>\n<li><code>field 'sign_left' is empty or is not a number (cm)<\/code><\/li>\n<li><code>field 'sign_bottom' is empty or is not a number (cm)<\/code><\/li>\n<li><code>Field 'sign_left' for signer \u2026 must be between \u2026 and \u2026 cm (page \u2026 is \u2026 x \u2026 cm, signature \u2026 x \u2026 cm, margin \u2026 cm)<\/code><\/li>\n<li><code>Field 'sign_bottom' for signer \u2026 must be between \u2026 and \u2026 cm (\u2026)<\/code><\/li>\n<li><code>Field 'sign_page' for signer \u2026 is too big: the document has \u2026 page(s)<\/code><\/li>\n<li><code>Page \u2026 is too small for the signature of \u2026 (\u2026)<\/code><\/li>\n<li><code>The signature of \u2026 on page \u2026 overlaps an existing signature of the document (\u2026)<\/code><\/li>\n<li><code>The signatures of \u2026 and \u2026 overlap on page \u2026 (\u2026)<\/code><\/li>\n<li><code>The existing signatures of the document could not be read: the position of the signature of \u2026 can not be checked<\/code><\/li>\n<\/ul>\n<h4>Document al ondertekend (<code>position_auto<\/code>)<\/h4>\n<ul>\n<li><code>Your PDF file is already signed: pages can not be added without invalidating the existing signatures. It contains \u2026 free marker(s) for \u2026 signer(s): place the signatures manually (signature_place: position_manual).<\/code><\/li>\n<li><code>Your PDF file is already signed: pages can not be added without invalidating the existing signatures. The free markers could not be determined: place the signatures manually (signature_place: position_manual).<\/code><\/li>\n<\/ul>\n<h4>Verwerking<\/h4>\n<ul>\n<li><code>Couldn't extract markers from PDF document: \u2026<\/code><\/li>\n<li><code>Unknown error: Request could not be saved into the Database<\/code><\/li>\n<li>Foutmelding van de ondertekeningsprovider (eID Easy)<\/li>\n<\/ul>\n<\/details>\n<h2 id=\"retention\">12. Bewaring<\/h2>\n<p>Ondertekende documenten kunnen gedurende <strong>30 dagen<\/strong> na afronding worden gedownload, via <code>getRequest<\/code> of de callback <code>request.completed<\/code>. De audit trail wordt bewaard gedurende de periode vastgelegd in onze <a href=\"https:\/\/www.e-signature.eu\/en\/dpa\/\">DPA<\/a>. Archiveer het ondertekende document en de audit trail binnen 30 dagen aan uw kant.<\/p>\n<h2 id=\"changelog\">13. Changelog<\/h2>\n<h3>API <span class=\"badge\">v3<\/span> \u2014 verschillen met API <span class=\"badge\">v2<\/span><\/h3>\n<p>API <span class=\"badge\">v2<\/span> (<code>https:\/\/api.e-signature.eu\/v2\/signature\/<\/code>) blijft beschikbaar en ongewijzigd. Endpoints, parameters en authenticatie zijn in beide versies identiek: om over te stappen op API <span class=\"badge\">v3<\/span> vervangt u de basis-URL door <code>https:\/\/api.e-signature.eu\/v3\/signature\/<\/code>. U kunt endpoint per endpoint overstappen.<\/p>\n<p class=\"note\">De vorige URL\u2019s (<code>https:\/\/www.e-signature.eu\/wp-json\/signature\/<\/code> voor API <span class=\"badge\">v2<\/span> en <code>https:\/\/www.e-signature.eu\/wp-json\/esig\/v3\/signature\/<\/code> voor API <span class=\"badge\">v3<\/span>) blijven geldig. We raden aan de URL\u2019s van <code>api.e-signature.eu<\/code> te gebruiken.<\/p>\n<table>\n<thead>\n<tr>\n<th>Onderwerp<\/th>\n<th>API <span class=\"badge\">v2<\/span><\/th>\n<th>API <span class=\"badge\">v3<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Basis-URL<\/td>\n<td><code>\/v2\/signature\/<\/code><\/td>\n<td><code>\/v3\/signature\/<\/code><\/td>\n<\/tr>\n<tr>\n<td>Uw eigen referenties<\/td>\n<td>\u2014<\/td>\n<td>Nieuwe velden <code>external_reference<\/code> en <code>metadata<\/code>, teruggegeven in elk antwoord en elke callback; filter <code>list<\/code> op <code>external_reference<\/code><\/td>\n<\/tr>\n<tr>\n<td>Callback-URL<\/td>\n<td>E\u00e9n URL per account<\/td>\n<td>Ook per aanvraag (<code>callback_url<\/code>)<\/td>\n<\/tr>\n<tr>\n<td>Inhoud van de callback<\/td>\n<td>Volledige status van de aanvraag<\/td>\n<td>Volledige status van de aanvraag + <code>event<\/code>, <code>event_id<\/code>, <code>event_at<\/code>, <code>changes<\/code><\/td>\n<\/tr>\n<tr>\n<td>Beveiliging van de callback<\/td>\n<td>\u2014<\/td>\n<td>HMAC-SHA256-handtekening in de header <code>X-Esig-Signature<\/code><\/td>\n<\/tr>\n<tr>\n<td>Nieuwe pogingen van de callback<\/td>\n<td>Elk uur bij een netwerkfout, tot ontvangst<\/td>\n<td>Elk uur bij een netwerkfout, time-out, HTTP 429 of 5xx, tot 24 pogingen, zelfde <code>event_id<\/code><\/td>\n<\/tr>\n<tr>\n<td>Ontbrekende <code>id_sign<\/code>, ongeldige filter <code>status_id<\/code><\/td>\n<td>HTTP 401<\/td>\n<td>HTTP 400<\/td>\n<\/tr>\n<tr>\n<td>Onbekende <code>id_sign<\/code><\/td>\n<td>HTTP 401<\/td>\n<td>HTTP 404<\/td>\n<\/tr>\n<tr>\n<td>Audit trail van een lopende aanvraag<\/td>\n<td>HTTP 401<\/td>\n<td>HTTP 412<\/td>\n<\/tr>\n<tr>\n<td>Manuele plaatsing: <code>sign_left<\/code> \/ <code>sign_bottom<\/code><\/td>\n<td>Vaste limieten voor een A4-pagina staand (0 tot 15 cm \/ 4 tot 28,7 cm), handtekeninghoogte 2,5 cm<\/td>\n<td>Limieten berekend op basis van de werkelijke paginagrootte en de stempelgrootte van de toegelaten methoden, marge van 2 cm; decimalen toegestaan; de foutmelding vermeldt het toegestane bereik<\/td>\n<\/tr>\n<tr>\n<td>Manuele plaatsing: overlappingen<\/td>\n<td>Niet gecontroleerd<\/td>\n<td>Geweigerd als een handtekening een andere handtekening van de aanvraag of een bestaande handtekening van het document bedekt<\/td>\n<\/tr>\n<tr>\n<td>Manuele plaatsing: <code>sign_page<\/code><\/td>\n<td>Een paginanummer \u00e9\u00e9n hoger dan de laatste pagina werd niet geweigerd<\/td>\n<td>Elke niet-bestaande pagina wordt geweigerd<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Callbacks volgen de versie waarmee de aanvraag is <strong>aangemaakt<\/strong>: een aanvraag via API <span class=\"badge\">v2<\/span> blijft callbacks van API <span class=\"badge\">v2<\/span> ontvangen.<\/p>\n<\/div>\n<\/div>\n<p><script data-no-optimize=\"1\" data-no-defer=\"1\" data-no-minify=\"1\" data-cfasync=\"false\" nowprocket>\n(function(){\n  var root=document.querySelector('.esig-api'); if(!root) return;\n  var nav=root.querySelector('.esig-api-nav'), box=root.querySelector('.esig-api-nav-in');\n  function headerBottom(){\n    \/* empile les \u00e9l\u00e9ments fixes du haut (barre d'admin WordPress, en-t\u00eate collant\u2026) *\/\n    var b=0, xs=[Math.round(window.innerWidth\/2), 40, window.innerWidth-40];\n    for(var k=0; k<6; k++){\n      var y=b+2, found=0;\n      xs.forEach(function(x){\n        (document.elementsFromPoint?document.elementsFromPoint(x,y):[]).forEach(function(el){\n          for(var n=el; n; n=n.parentElement){\n            if(n===document.body||n===document.documentElement||n===root) break;\n            var p=getComputedStyle(n).position;\n            if(p==='fixed'||p==='sticky'){\n              var r=n.getBoundingClientRect();\n              if(r.top<=y){ if(r.bottom>b){ if(r.bottom<window.innerHeight\/2){ b=r.bottom; found=1; } } }\n              break;\n            }\n          }\n        });\n      });\n      if(!found) break;\n    }\n    return Math.round(b);\n  }\n  \/* section en cours de lecture surlign\u00e9e dans le sommaire *\/\n  var toc=root.querySelector('.esig-api-toc'), links=[].slice.call(root.querySelectorAll('.esig-api-toc a'));\n  var heads=links.map(function(a){ return document.getElementById((a.getAttribute('href')||'').slice(1)); });\n  var current=-1;\n  function spy(top){\n    var cur=0;\n    var line=top+(window.innerHeight-top)*0.3; \/* titre pass\u00e9 au-dessus du premier tiers de l'\u00e9cran *\/\n    heads.forEach(function(h,i){ if(h){ if(h.getBoundingClientRect().top<=line) cur=i; } });\n    if(window.innerHeight+window.scrollY>=document.documentElement.scrollHeight-2) cur=links.length-1;\n    if(cur===current) return;\n    current=cur;\n    links.forEach(function(a,i){ a.classList.toggle('is-active',i===cur); a.parentNode.classList.toggle('is-active',i===cur); });\n    var a=links[cur];\n    if(a){ if(toc.scrollHeight>toc.clientHeight){\n      var y=a.getBoundingClientRect().top-toc.getBoundingClientRect().top+toc.scrollTop;\n      if(y<toc.scrollTop+20) toc.scrollTop=y-20;\n      else if(y>toc.scrollTop+toc.clientHeight-40) toc.scrollTop=y-toc.clientHeight+40;\n    } }\n  }\n  function reset(){box.classList.remove('is-fixed');box.style.left=box.style.width=box.style.top='';nav.style.minHeight='';}\n  var ticking=false;\n  function update(){\n    ticking=false;\n    var mobile=window.innerWidth<=900, gap=mobile?0:20, top=headerBottom()+gap;\n    root.style.setProperty('--esig-top',top+'px');\n    spy(top);\n    reset();\n    var n=nav.getBoundingClientRect(), b=box.getBoundingClientRect(), end=root.getBoundingClientRect().bottom;\n    if(n.top>=top) return;                       \/* pas encore atteint : position normale *\/\n    if(mobile) nav.style.minHeight=b.height+'px'; \/* garde la place du bouton *\/\n    var y=Math.min(top, end-b.height);           \/* s'arr\u00eate en bas de la documentation *\/\n    box.classList.add('is-fixed'); box.style.top=y+'px'; box.style.left=n.left+'px'; box.style.width=n.width+'px';\n    \/* parent avec transform (animations Elementor\u2026) : position:fixed relative \u00e0 ce parent \u2192 correction *\/\n    var f=box.getBoundingClientRect(), dy=f.top-y, dx=f.left-n.left;\n    if(Math.abs(dy)>1||Math.abs(dx)>1){ box.style.top=(y-dy)+'px'; box.style.left=(n.left-dx)+'px'; }\n  }\n  function req(){ if(!ticking){ticking=true;requestAnimationFrame(update);} }\n  window.addEventListener('scroll',req,{passive:true}); window.addEventListener('resize',req);\n  document.addEventListener('change',function(e){ if(e.target){ if(e.target.id==='esig-api-toc') req(); } });\n  update(); window.addEventListener('load',update); setTimeout(update,1500);\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Inhoud Inhoud Overzicht Authenticatie Conventies Credits Hoe een ondertekeningsaanvraag werkt Een ondertekeningsaanvraag aanmaken Plaatsing van de handtekeningen Het object ondertekeningsaanvraag&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":21415,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-29102","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/pages\/29102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/comments?post=29102"}],"version-history":[{"count":3,"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/pages\/29102\/revisions"}],"predecessor-version":[{"id":29169,"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/pages\/29102\/revisions\/29169"}],"up":[{"embeddable":true,"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/pages\/21415"}],"wp:attachment":[{"href":"https:\/\/staging.e-signature.eu\/nl\/wp-json\/wp\/v2\/media?parent=29102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}