{"id":29104,"date":"2026-10-19T19:18:23","date_gmt":"2026-10-19T17:18:23","guid":{"rendered":"https:\/\/staging.e-signature.eu\/?page_id=29104"},"modified":"2026-10-21T22:23:31","modified_gmt":"2026-10-21T20:23:31","slug":"api-dokumentation-v3","status":"publish","type":"page","link":"https:\/\/staging.e-signature.eu\/de\/api-elektronische-signatur\/api-dokumentation-v3\/","title":{"rendered":"API-Dokumentation V3"},"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=\"Inhalt\">\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\">Inhalt<\/label><\/p>\n<div class=\"esig-api-toc\"><strong>Inhalt<\/strong><\/p>\n<ol>\n<li><a href=\"#overview\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">\u00dcberblick<\/a><\/li>\n<li><a href=\"#auth\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Authentifizierung<\/a><\/li>\n<li><a href=\"#conventions\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Konventionen<\/a><\/li>\n<li><a href=\"#credits\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Guthaben<\/a><\/li>\n<li><a href=\"#flow\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Ablauf einer Signaturanfrage<\/a><\/li>\n<li><a href=\"#request\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Eine Signaturanfrage erstellen<\/a><\/li>\n<li><a href=\"#placement\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Platzierung der Signaturen<\/a><\/li>\n<li><a href=\"#object\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Das Objekt Signaturanfrage<\/a><\/li>\n<li><a href=\"#endpoints\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Weitere 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;\">Fehler<\/a><\/li>\n<li><a href=\"#retention\" onclick=\"var t=document.getElementById('esig-api-toc');if(t)t.checked=false;\">Aufbewahrung<\/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 von e-Signature.eu \u2014 elektronische Signaturen (SES, AES, QES)<\/p>\n<h2 id=\"overview\">1. \u00dcberblick<\/h2>\n<p>Mit der REST-API von e-Signature.eu sendet Ihre Anwendung Dokumente zur elektronischen Signatur (einfach SES, fortgeschritten AES oder qualifiziert QES nach eIDAS), ohne unsere Website zu nutzen. Sie senden das PDF und die Unterzeichner; wir \u00fcbernehmen die Identit\u00e4tspr\u00fcfung, die Signatur und die Nachverfolgung; Sie erhalten das signierte Dokument \u00fcber die API oder einen 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>Diese Dokumentation beschreibt die API <span class=\"badge\">v3<\/span>. Sie nutzen bereits die API <span class=\"badge\">v2<\/span> (<code>https:\/\/api.e-signature.eu\/v2\/signature\/<\/code>)? Siehe <a href=\"#changelog\">Changelog<\/a>.<\/p>\n<h2 id=\"auth\">2. Authentifizierung<\/h2>\n<p>Ihre Zugangsdaten finden Sie unter <strong>Mein Konto &gt; API-Signaturen<\/strong>, sobald Sie bei e-signature.eu angemeldet sind:<\/p>\n<ul>\n<li><strong>User ID<\/strong>: in der URL als Parameter <code>userid<\/code> jedes Aufrufs;<\/li>\n<li><strong>API token<\/strong>: im HTTP-Header <code>x-api-key<\/code> jedes Aufrufs.<\/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>Halten Sie Ihr Token geheim: Es gew\u00e4hrt \u00fcber die API vollen Zugriff auf Ihr Konto. Aufrufe m\u00fcssen von Ihrem Server erfolgen, nie aus einem Browser oder einer mobilen App.<\/p>\n<h2 id=\"conventions\">3. Konventionen<\/h2>\n<h3>Anfragen und Antworten<\/h3>\n<ul>\n<li>Nur HTTPS. Request-Bodies sind JSON (<code>Content-Type: application\/json<\/code>).<\/li>\n<li>Jede Antwort ist JSON, in einer dieser beiden Formen:<\/li>\n<\/ul>\n<pre><code>{ \"success\": true,  \"result\": { ... } }\n{ \"success\": false, \"error\": \"Readable error message\" }<\/code><\/pre>\n<h3>Limits<\/h3>\n<table>\n<thead>\n<tr>\n<th>Limit<\/th>\n<th>Wert<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Anfragen<\/td>\n<td>10 pro Minute pro Konto und IP-Adresse (dar\u00fcber HTTP 403, nach einer Minute erneut versuchen)<\/td>\n<\/tr>\n<tr>\n<td>Dokument<\/td>\n<td>Ein PDF pro Anfrage, maximal 30 MB, nicht verschl\u00fcsselt \/ ohne Passwort<\/td>\n<\/tr>\n<tr>\n<td>Download signierter Dokumente<\/td>\n<td>30 Tage nach Abschluss (siehe <a href=\"#retention\">Aufbewahrung<\/a>)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"credits\">4. Guthaben<\/h2>\n<p>Anfragen werden mit Ihrem Prepaid-Guthaben bei e-signature.eu bezahlt. Den Preis einer Methode liefert <a href=\"#getMethods\"><code>getMethods<\/code><\/a> (Ihre individuellen Preise werden ber\u00fccksichtigt). Ihr Guthaben liefern <a href=\"#requestBalance\"><code>requestBalance<\/code><\/a> und jedes Anfrageobjekt (<code>credits_balance<\/code>).<\/p>\n<h3 id=\"auto-recharge\">Automatische Aufladung des Guthabens<\/h3>\n<p>Damit Ihnen nie das Guthaben ausgeht, kann sich Ihr Konto automatisch aufladen. Dies wird einmalig unter <strong>Mein Konto &gt; API-Signaturen<\/strong> eingerichtet, nicht \u00fcber die API:<\/p>\n<ol>\n<li>W\u00e4hlen Sie einen <strong>Schwellenwert<\/strong> (in Credits) und das zu bestellende <strong>Guthabenpaket<\/strong>.<\/li>\n<li>Speichern Sie eine Zahlungsmethode bei unserem Zahlungsanbieter Mollie (Karte oder SEPA-Lastschrift \u00fcber Bancontact, iDEAL\u2026). Einmalig wird eine Verifizierungszahlung von 0,01 \u20ac verlangt.<\/li>\n<li>Jedes Mal, wenn Guthaben abgebucht wird und Ihr Saldo unter den Schwellenwert f\u00e4llt, wird eine Bestellung des gew\u00e4hlten Pakets erstellt und automatisch mit der gespeicherten Zahlungsmethode bezahlt. Die Rechnung erhalten Sie per E-Mail.<\/li>\n<\/ol>\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th>Automatische Aufladung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Ausl\u00f6ser<\/td>\n<td>Eine Abbuchung von Guthaben (z. B. eine neue Anfrage), durch die das Saldo unter den Schwellenwert f\u00e4llt<\/td>\n<\/tr>\n<tr>\n<td>Gutschrift des Guthabens<\/td>\n<td>Sobald die Zahlung best\u00e4tigt ist: sofort per Karte, nach einigen Werktagen per SEPA-Lastschrift<\/td>\n<\/tr>\n<tr>\n<td>Laufende Aufladungen<\/td>\n<td>Jeweils eine<\/td>\n<\/tr>\n<tr>\n<td>Sicherheitsgrenze<\/td>\n<td>Eine maximale Anzahl automatischer Aufladungen pro 30 Tage<\/td>\n<\/tr>\n<tr>\n<td>Fehlgeschlagene Zahlung<\/td>\n<td>Die Bestellung wird als fehlgeschlagen markiert, die automatische Aufladung wird deaktiviert und Sie werden per E-Mail informiert<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"note\">Die Aufladung wird durch eine Abbuchung ausgel\u00f6st. Eine Anfrage, die mehr kostet als Ihr aktuelles Guthaben, wird abgelehnt (HTTP 403, <code>You do not have enough credits<\/code>) und l\u00f6st keine Aufladung aus: W\u00e4hlen Sie einen Schwellenwert \u00fcber den Kosten Ihrer gr\u00f6\u00dften Anfragen und halten Sie bei SEPA-Lastschrift eine Reserve. Ihr Guthaben ist jederzeit \u00fcber <a href=\"#requestBalance\"><code>requestBalance<\/code><\/a> und <code>credits_balance<\/code> abrufbar.<\/div>\n<h2 id=\"flow\">5. Ablauf einer Signaturanfrage<\/h2>\n<ol>\n<li>Sie erstellen die Anfrage mit dem PDF, den Unterzeichnern und den zugelassenen Signaturmethoden. Das Guthaben wird belastet.<\/li>\n<li>Jeder Unterzeichner erh\u00e4lt eine E-Mail mit einem pers\u00f6nlichen Signaturlink (oder Sie senden den <code>signature_link<\/code> selbst, wenn <code>send_email<\/code> <code>false<\/code> ist).<\/li>\n<li>Der Unterzeichner best\u00e4tigt seine Identit\u00e4t mit einer der zugelassenen Methoden (itsme\u00ae, Evrotrust, Veriff, OTP\u2026) und signiert.<\/li>\n<li>Wenn alle signiert haben, ist die Anfrage <code>finished<\/code>: Das signierte PDF (PAdES) ist \u00fcber <code>getRequest<\/code> verf\u00fcgbar und wird im Callback gesendet.<\/li>\n<\/ol>\n<h3>Signaturreihenfolge<\/h3>\n<p>Standardm\u00e4\u00dfig signieren alle Unterzeichner parallel. Um eine Reihenfolge festzulegen, setzen Sie <code>sign_first: true<\/code> bei den Unterzeichnern der <strong>ersten Gruppe<\/strong>: Sie werden sofort eingeladen, gegebenenfalls mehrere parallel. Die \u00fcbrigen Unterzeichner werden erst eingeladen, wenn die gesamte erste Gruppe signiert hat. H\u00f6chstens zwei Gruppen.<\/p>\n<h3>Zwei Integrationsmodi<\/h3>\n<table>\n<thead>\n<tr>\n<th>Modus<\/th>\n<th>Funktionsweise<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>E-Mail-Modus<\/strong> (<code>send_email: true<\/code>, Standard)<\/td>\n<td>Wir senden in Ihrem Namen die Einladungen, Erinnerungen und Abschluss-E-Mails an die Unterzeichner.<\/td>\n<\/tr>\n<tr>\n<td><strong>Eingebetteter Modus<\/strong> (<code>send_email: false<\/code>)<\/td>\n<td>Beim Erstellen wird keine E-Mail gesendet: Der <code>signature_link<\/code> jedes Unterzeichners wird in der Antwort zur\u00fcckgegeben, und Sie leiten Ihre Nutzer aus Ihrer eigenen Oberfl\u00e4che dorthin weiter.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"note\">Auch mit <code>send_email: false<\/code> sendet eine im Online-Dashboard ausgel\u00f6ste Erinnerung oder Stornierung eine E-Mail an die ausstehenden Unterzeichner.<\/div>\n<h3>Fragen Sie die API nicht in Schleife ab<\/h3>\n<p>Rufen Sie <code>getRequest<\/code> nicht wiederholt auf, um den Status einer Anfrage zu verfolgen: Nutzen Sie die <a href=\"#callbacks\">Callbacks<\/a>, die bei jeder \u00c4nderung automatisch gesendet werden. \u00dcberm\u00e4\u00dfige Aufrufe l\u00f6sen eine automatische Drosselung aus, die die Verarbeitung Ihrer Anfragen vor\u00fcbergehend aussetzt.<\/p>\n<h2 id=\"request\">6. Eine Signaturanfrage erstellen<\/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\">Signaturmethoden<\/h3>\n<table>\n<thead>\n<tr>\n<th>Methode<\/th>\n<th>Stufe<\/th>\n<th>Abdeckung<\/th>\n<th>Preis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>itsme-qes-signature<\/code> \u2014 itsme\u00ae<\/td>\n<td>QES (qualifiziert)<\/td>\n<td>32 europ\u00e4ische L\u00e4nder<\/td>\n<td>1 Guthaben \/ Unterzeichner<\/td>\n<\/tr>\n<tr>\n<td><code>evrotrust-signature<\/code> \u2014 Evrotrust<\/td>\n<td>QES (qualifiziert)<\/td>\n<td>69 L\u00e4nder<\/td>\n<td>1 Guthaben \/ Unterzeichner<\/td>\n<\/tr>\n<tr>\n<td><code>veriff-advanced-signature<\/code> \u2014 Veriff<\/td>\n<td>AES (fortgeschritten)<\/td>\n<td>198 L\u00e4nder<\/td>\n<td>0,7 Guthaben \/ Unterzeichner<\/td>\n<\/tr>\n<tr>\n<td><code>otp-email-non-qualified<\/code> \u2014 OTP per E-Mail oder SMS<\/td>\n<td>SES (einfach)<\/td>\n<td>Weltweit<\/td>\n<td>0,4 Guthaben \/ Unterzeichner<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dies sind die Standardpreise: <a href=\"#getMethods\"><code>getMethods<\/code><\/a> liefert die verf\u00fcgbaren Methoden und die Preise f\u00fcr Ihr Konto. Nur eine qualifizierte elektronische Signatur (QES) ist nach der eIDAS-Verordnung einer handschriftlichen Unterschrift rechtlich gleichgestellt. <code>otp-email-non-qualified<\/code> umfasst E-Mail und SMS: Der Code wird per SMS gesendet, wenn der Unterzeichner eine <code>phone<\/code> hat, sonst per E-Mail, zum gleichen Preis.<\/p>\n<h3>Felder des Request-Body<\/h3>\n<table>\n<thead>\n<tr>\n<th>Feld<\/th>\n<th>Pflicht<\/th>\n<th>Typ<\/th>\n<th>Beschreibung<\/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>Name des Dokuments. Buchstaben, Ziffern und Bindestriche bleiben erhalten; existiert der Name bereits in Ihrem Konto, wird ein Suffix <code>-1<\/code>, <code>-2<\/code>\u2026 angeh\u00e4ngt.<\/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>Sprache der E-Mails und Signaturseiten: <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>Zugelassene Signaturmethoden, siehe <a href=\"#methods\">Signaturmethoden<\/a>. Sind mehrere zugelassen, w\u00e4hlt jeder Unterzeichner.<\/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>Unterzeichner, siehe unten.<\/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>Das PDF, base64-kodiert. Eine Datei, maximal 30 MB, nicht verschl\u00fcsselt.<\/td>\n<\/tr>\n<tr>\n<td><code>signature_place<\/code><\/td>\n<td>nein<\/td>\n<td>string<\/td>\n<td><code>position_auto<\/code> (Standard) oder <code>position_manual<\/code>, siehe <a href=\"#placement\">Platzierung der Signaturen<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><code>reminder<\/code><\/td>\n<td>nein<\/td>\n<td>number<\/td>\n<td>Automatische Erinnerung alle N Tage, 0 bis 14. Standard 0 (keine Erinnerung).<\/td>\n<\/tr>\n<tr>\n<td><code>send_email<\/code><\/td>\n<td>nein<\/td>\n<td>boolean<\/td>\n<td>Standard <code>true<\/code> (E-Mail-Modus). Mit <code>false<\/code> (eingebetteter Modus) werden weder Einladungs- noch Abschluss-E-Mails gesendet: \u00dcbermitteln Sie den <code>signature_link<\/code> selbst. Nicht kombinierbar mit <code>sign_first: true<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><code>email_notification<\/code><\/td>\n<td>nein<\/td>\n<td>boolean<\/td>\n<td>Standard <code>false<\/code>. Mit <code>true<\/code> erhalten Sie bei jeder Signatur eine E-Mail.<\/td>\n<\/tr>\n<tr>\n<td><code>note_html<\/code><\/td>\n<td>nein<\/td>\n<td>string<\/td>\n<td>Nachricht in den E-Mails an die Unterzeichner (E-Mail-Modus). HTML-Tags sind erlaubt, z. B. <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>nein<\/td>\n<td>string (URL)<\/td>\n<td>Seite, die dem Unterzeichner nach der Signatur angezeigt wird. Muss eine g\u00fcltige URL sein (leere Zeichenkette wird abgelehnt). Standard: Best\u00e4tigungsseite auf e-signature.eu.<\/td>\n<\/tr>\n<tr>\n<td><code>external_reference<\/code><\/td>\n<td>nein<\/td>\n<td>string<\/td>\n<td>Ihre eigene Kennung (Angebot, Vertrag\u2026), maximal 255 Zeichen. Wird in jeder Antwort und jedem Callback zur\u00fcckgegeben.<\/td>\n<\/tr>\n<tr>\n<td><code>metadata<\/code><\/td>\n<td>nein<\/td>\n<td>object<\/td>\n<td>Freies JSON-Objekt, maximal 4 KB, unver\u00e4ndert zur\u00fcckgegeben.<\/td>\n<\/tr>\n<tr>\n<td><code>callback_url<\/code><\/td>\n<td>nein<\/td>\n<td>string (URL)<\/td>\n<td>Callback-URL nur f\u00fcr diese Anfrage (\u00f6ffentliches HTTPS). Standard: die URL Ihres Kontos.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Felder eines Unterzeichners<\/h3>\n<table>\n<thead>\n<tr>\n<th>Feld<\/th>\n<th>Pflicht<\/th>\n<th>Typ<\/th>\n<th>Beschreibung<\/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>G\u00fcltige E-Mail-Adresse<\/td>\n<\/tr>\n<tr>\n<td><code>firstname<\/code><\/td>\n<td>nein<\/td>\n<td>string<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><code>phone<\/code><\/td>\n<td>nein<\/td>\n<td>string<\/td>\n<td>Internationales Format mit <code>+<\/code> und L\u00e4ndervorwahl (<code>+32\u2026<\/code>); Leerzeichen werden entfernt. Eine ung\u00fcltige Nummer wird ignoriert. Bei der OTP-Methode wird der Code per SMS gesendet, wenn eine Nummer angegeben ist, sonst per E-Mail.<\/td>\n<\/tr>\n<tr>\n<td><code>sign_first<\/code><\/td>\n<td>nein<\/td>\n<td>boolean<\/td>\n<td>Standard <code>false<\/code>. Siehe <a href=\"#flow\">Signaturreihenfolge<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><code>sign_page<\/code>, <code>sign_left<\/code>, <code>sign_bottom<\/code><\/td>\n<td>mit <code>position_manual<\/code><\/td>\n<td>number<\/td>\n<td>Siehe <a href=\"#placement\">Platzierung der Signaturen<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Kosten<\/h3>\n<p>Preis der teuersten Methode in <code>methods<\/code> \u00d7 Anzahl der Unterzeichner. Das Guthaben wird beim Erstellen der Anfrage belastet. Das Guthaben von Unterzeichnern, die nicht signiert haben, wird erstattet, wenn die Anfrage storniert oder beendet wird.<\/p>\n<h3>Antwort <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. Platzierung der Signaturen<\/h2>\n<h3><code>position_auto<\/code> (Standard)<\/h3>\n<p>Setzen Sie die Markierungen <code>#SIG01<\/code>, <code>#SIG02<\/code>\u2026 (auch zul\u00e4ssig: <code>#SIG01#<\/code>) als Text in Ihr Dokument, dort, wo jeder Unterzeichner signieren soll (<code>#SIG01<\/code> = erster Unterzeichner des Arrays <code>signers<\/code>). Die Signatur wird oben links an der Markierung platziert. Kommt dieselbe Markierung mehrmals vor, gilt ihr erstes Vorkommen. Eine Markierung wird \u00fcbersprungen, wenn ihr Signaturbereich eine bereits platzierte (oder vorhandene) Signatur \u00fcberdecken w\u00fcrde: Der Unterzeichner erh\u00e4lt dann die n\u00e4chste freie Markierung. Eine Markierung, die so nah am Seitenrand liegt, dass die Signatur verschoben werden muss, wird nur als letzte M\u00f6glichkeit verwendet.<\/p>\n<div class=\"note\">Tipp: Schreiben Sie die Markierungen in <strong>wei\u00dfer Schrift<\/strong> (auf wei\u00dfem Hintergrund), damit sie im signierten PDF unsichtbar sind. Sie m\u00fcssen echter Text bleiben, kein Bild, um erkannt zu werden.<\/div>\n<h4>Noch nicht signiertes Dokument<\/h4>\n<p>Enth\u00e4lt das Dokument keine Markierung oder fehlt die Markierung eines Unterzeichners, wird am Ende des Dokuments eine <strong>Signaturseite mit den Markierungen<\/strong> angef\u00fcgt, und alle Signaturen werden auf dieser Seite platziert (6 Unterzeichner auf der ersten angef\u00fcgten Seite, danach 10 pro weiterer Seite).<\/p>\n<h4>Bereits signiertes Dokument<\/h4>\n<p>Einem bereits elektronisch signierten PDF kann keine Seite hinzugef\u00fcgt werden: Das w\u00fcrde die vorhandenen Signaturen ung\u00fcltig machen. Mit <code>position_auto<\/code> werden die Signaturen auf den <strong>freien Markierungen<\/strong> platziert, also den Markierungen, deren Signaturbereich keine vorhandene Signatur \u00fcberdeckt. Freie Markierungen werden den Unterzeichnern der Reihe nach zugewiesen (<code>#SIG01<\/code>, <code>#SIG02<\/code>\u2026).<\/p>\n<div class=\"warn\">Enth\u00e4lt das signierte Dokument nicht genug freie Markierungen f\u00fcr alle Unterzeichner, wird die Anfrage abgelehnt (HTTP 400): Verwenden Sie <code>position_manual<\/code>.<\/div>\n<h3><code>position_manual<\/code><\/h3>\n<p>Geben Sie f\u00fcr jeden Unterzeichner die Position der Signatur in Zentimetern an:<\/p>\n<table>\n<thead>\n<tr>\n<th>Feld<\/th>\n<th>Wert<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>sign_page<\/code><\/td>\n<td>Seitennummer, ab 1 (Ganzzahl)<\/td>\n<\/tr>\n<tr>\n<td><code>sign_left<\/code><\/td>\n<td>Abstand vom linken Seitenrand bis zur linken Kante der Signatur, in cm (Dezimalstellen erlaubt)<\/td>\n<\/tr>\n<tr>\n<td><code>sign_bottom<\/code><\/td>\n<td>Abstand vom unteren Seitenrand bis zur Oberkante der Signatur, in cm (Dezimalstellen erlaubt)<\/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> und <code>sign_bottom<\/code> geben die <strong>obere linke Ecke<\/strong> der Signatur an. Die Signatur wird unterhalb und rechts dieses Punkts platziert.<\/p>\n<p>Die Grenzen h\u00e4ngen von der tats\u00e4chlichen Seitengr\u00f6\u00dfe und der Gr\u00f6\u00dfe des sichtbaren Stempels ab: Die gesamte Signatur muss mindestens 2 cm von jedem Seitenrand entfernt bleiben. Sind mehrere Signaturmethoden zugelassen, gilt der gr\u00f6\u00dfte Stempel. Liegt ein Wert au\u00dferhalb der Grenzen, nennt die Fehlermeldung den zul\u00e4ssigen Bereich f\u00fcr diese Seite.<\/p>\n<p>Eine Signatur darf weder eine andere Signatur der Anfrage noch eine vorhandene Signatur \u00fcberdecken, wenn das Dokument bereits signiert ist.<\/p>\n<h2 id=\"object\">8. Das Objekt Signaturanfrage<\/h2>\n<p>Zur\u00fcckgegeben von <code>request<\/code>, <code>getRequest<\/code>, <code>cancel<\/code>, <code>skip<\/code>, <code>remind<\/code>, <code>delete<\/code> und in den Callbacks gesendet.<\/p>\n<table>\n<thead>\n<tr>\n<th>Feld<\/th>\n<th>Beschreibung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>id_sign<\/code><\/td>\n<td>Kennung der Anfrage<\/td>\n<\/tr>\n<tr>\n<td><code>doc_name<\/code><\/td>\n<td>Name des Dokuments<\/td>\n<\/tr>\n<tr>\n<td><code>status_id<\/code><\/td>\n<td><code>pending<\/code> laufend \u00b7 <code>finished<\/code> von allen signiert \u00b7 <code>skipped<\/code> beendet, teilweise signiert \u00b7 <code>cancelled<\/code> \u00b7 <code>deleted<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>signers<\/code><\/td>\n<td>Objekt der Unterzeichner, nach Schl\u00fcssel (<code>\"1\"<\/code>, <code>\"2\"<\/code>\u2026) \u2014 siehe unten<\/td>\n<\/tr>\n<tr>\n<td><code>lang<\/code>, <code>send_email<\/code>, <code>signature_redirect<\/code>, <code>timezone<\/code><\/td>\n<td>Wie bei der Erstellung festgelegt<\/td>\n<\/tr>\n<tr>\n<td><code>from_api<\/code><\/td>\n<td><code>true<\/code>, wenn die Anfrage \u00fcber die API erstellt wurde<\/td>\n<\/tr>\n<tr>\n<td><code>date_status<\/code><\/td>\n<td>Datum der letzten Status\u00e4nderung (Zeitzone der Anfrage)<\/td>\n<\/tr>\n<tr>\n<td><code>last_reminder<\/code><\/td>\n<td>Datum der letzten Erinnerung oder <code>null<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>credits<\/code><\/td>\n<td>Guthaben der Anfrage (reserviert, solange sie l\u00e4uft, verbraucht nach Abschluss)<\/td>\n<\/tr>\n<tr>\n<td><code>credits_balance<\/code><\/td>\n<td>Aktuelles Guthaben Ihres Kontos<\/td>\n<\/tr>\n<tr>\n<td><code>pdf_file_base64<\/code><\/td>\n<td>Signiertes PDF, sobald die Anfrage nicht mehr l\u00e4uft<\/td>\n<\/tr>\n<tr>\n<td><code>external_reference<\/code>, <code>metadata<\/code><\/td>\n<td>Wie bei der Erstellung gesendet<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Unterzeichner<\/h3>\n<table>\n<thead>\n<tr>\n<th>Feld<\/th>\n<th>Beschreibung<\/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>Wie bei der Erstellung gesendet<\/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>Pers\u00f6nlicher Signaturlink, solange der Unterzeichner nicht signiert hat<\/td>\n<\/tr>\n<tr>\n<td><code>signing_time<\/code>, <code>signing_method<\/code><\/td>\n<td>Nach der Signatur: Datum und verwendete Methode<\/td>\n<\/tr>\n<tr>\n<td><code>verified_firstname<\/code>, <code>verified_lastname<\/code><\/td>\n<td>Nach der Signatur: von der Signaturmethode gepr\u00fcfte Identit\u00e4t<\/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. Weitere Endpoints<\/h2>\n<p>Alle Endpoints erhalten <code>userid<\/code> in der URL und <code>x-api-key<\/code> in den Headern. <code>id_sign<\/code> wird in der URL \u00fcbergeben.<\/p>\n<h3 id=\"list\">Anfragen auflisten<\/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> (optional): <code>pending<\/code>, <code>finished<\/code> oder <code>skipped<\/code>. <code>external_reference<\/code> (optional): nur die Anfragen mit dieser Referenz.<\/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\">Eine Anfrage abrufen<\/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>Liefert das <a href=\"#object\">Objekt Signaturanfrage<\/a>, mit dem signierten PDF nach Abschluss der Anfrage. Nutzen Sie zur Statusverfolgung die <a href=\"#callbacks\">Callbacks<\/a> statt wiederholter Aufrufe.<\/p>\n<h3 id=\"remind\">Eine Erinnerung senden<\/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>Sendet eine Erinnerungs-E-Mail an die Unterzeichner mit <code>status: pending<\/code> der aktuell eingeladenen Gruppe (zuerst die Gruppe <code>sign_first<\/code>). Nur f\u00fcr Anfragen <code>pending<\/code>. Funktioniert auch bei Anfragen mit <code>send_email: false<\/code>.<\/p>\n<h3 id=\"skip\">Eine Anfrage beenden (bereits geleistete Signaturen bleiben erhalten)<\/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>M\u00f6glich, wenn mindestens ein Unterzeichner signiert hat und mindestens einer nicht. Die Anfrage wird <code>skipped<\/code>, das teilweise signierte PDF ist verf\u00fcgbar und das Guthaben der Nicht-Unterzeichner wird erstattet.<\/p>\n<h3 id=\"cancel\">Eine Anfrage stornieren<\/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>M\u00f6glich, solange niemand signiert hat; um eine teilweise signierte Anfrage zu beenden, verwenden Sie <a href=\"#skip\"><code>skip<\/code><\/a>. Die Antwort enth\u00e4lt die Anfrage mit <code>status_id: cancelled<\/code>; danach werden Anfrage und Dokument aus Ihrem Dashboard entfernt, die Signaturlinks funktionieren nicht mehr und das Guthaben wird erstattet.<\/p>\n<h3 id=\"delete\">Eine Anfrage l\u00f6schen<\/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>Nur Anfragen <code>finished<\/code> oder <code>skipped<\/code>. L\u00f6scht die Dokumente und die Anfrage. Die Antwort enth\u00e4lt die Anfrage ein letztes Mal, mit <code>status_id: deleted<\/code>: Laden Sie das signierte PDF vor dem L\u00f6schen herunter.<\/p>\n<h3 id=\"requestAuditTrail\">Den Audit-Trail herunterladen<\/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>Nicht verf\u00fcgbar, solange die Anfrage l\u00e4uft (HTTP 412). Liefert das Anfrageobjekt mit <code>audit_trail_base64<\/code>: ein PDF mit dem Verlauf der Anfrage (Daten, Methoden, gepr\u00fcfte Identit\u00e4ten).<\/p>\n<h3 id=\"requestBalance\">Das Guthaben abrufen<\/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\">Signaturmethoden auflisten<\/h3>\n<div class=\"ep\"><span class=\"m GET\">GET<\/span><span>\/v3\/signature\/getMethods?userid={userid}&amp;lang=en<\/span><\/div>\n<p>In <code>methods<\/code> zugelassene Methoden mit dem Preis in Guthaben pro Unterzeichner <strong>f\u00fcr Ihr Konto<\/strong>. <code>lang<\/code> (optional) \u00fcbersetzt die Bezeichnungen.<\/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>Legen Sie Ihre Callback-URL unter <strong>Mein Konto &gt; API-Signaturen<\/strong> fest (HTTPS, \u00f6ffentlich erreichbar). Sie k\u00f6nnen zus\u00e4tzlich eine <code>callback_url<\/code> pro Anfrage angeben. Der Callback ist ein <code>POST<\/code> mit einem JSON-Body, der den vollst\u00e4ndigen aktuellen Status der Anfrage enth\u00e4lt (gleiches Format wie <code>getRequest<\/code>), gesendet f\u00fcr \u00fcber die API erstellte Anfragen.<\/p>\n<h3>Ereignisfelder<\/h3>\n<table>\n<thead>\n<tr>\n<th>Feld<\/th>\n<th>Beschreibung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>event<\/code><\/td>\n<td>Ereignistyp (siehe unten)<\/td>\n<\/tr>\n<tr>\n<td><code>event_id<\/code><\/td>\n<td>Eindeutige Kennung des Ereignisses (<code>evt_\u2026<\/code>). <strong>Bei jeder Wiederholung identisch<\/strong>: Nutzen Sie sie, um Duplikate zu ignorieren.<\/td>\n<\/tr>\n<tr>\n<td><code>event_at<\/code><\/td>\n<td>Datum des Ereignisses (UTC, ISO 8601)<\/td>\n<\/tr>\n<tr>\n<td><code>changes<\/code><\/td>\n<td>Status\u00e4nderungen der Unterzeichner, z. B. <code>[{\"signer_key\": 1, \"from\": \"pending\", \"to\": \"signed\"}]<\/code> (nur wenn sich ein Unterzeichner ge\u00e4ndert hat)<\/td>\n<\/tr>\n<tr>\n<td><code>external_reference<\/code>, <code>metadata<\/code><\/td>\n<td>Wie bei der Erstellung der Anfrage gesendet<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Ereignistypen<\/h3>\n<table>\n<thead>\n<tr>\n<th>Ereignis<\/th>\n<th>Wann<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>signer.signed<\/code><\/td>\n<td>Ein Unterzeichner hat signiert, die Anfrage l\u00e4uft noch<\/td>\n<\/tr>\n<tr>\n<td><code>signer.declined<\/code>, <code>signer.skipped<\/code>, <code>signer.expired<\/code><\/td>\n<td>Ein Unterzeichner hat abgelehnt, wurde \u00fcbersprungen oder ist abgelaufen<\/td>\n<\/tr>\n<tr>\n<td><code>request.completed<\/code><\/td>\n<td>Alle Unterzeichner haben signiert: Das signierte PDF ist enthalten (<code>pdf_file_base64<\/code>)<\/td>\n<\/tr>\n<tr>\n<td><code>request.stopped<\/code><\/td>\n<td>Die Anfrage wurde beendet: Das teilweise signierte PDF ist enthalten<\/td>\n<\/tr>\n<tr>\n<td><code>request.cancelled<\/code><\/td>\n<td>Die Anfrage wurde storniert<\/td>\n<\/tr>\n<tr>\n<td><code>request.deleted<\/code><\/td>\n<td>Die Anfrage wurde gel\u00f6scht<\/td>\n<\/tr>\n<tr>\n<td><code>request.expired<\/code><\/td>\n<td>Die Anfrage ist abgelaufen<\/td>\n<\/tr>\n<tr>\n<td><code>request.declined<\/code><\/td>\n<td>Einschreiben vom Empf\u00e4nger abgelehnt<\/td>\n<\/tr>\n<tr>\n<td><code>request.updated<\/code><\/td>\n<td>Jede andere \u00c4nderung: Erinnerung gesendet, Unterzeichner ge\u00e4ndert, neue Signaturlinks\u2026<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Der Body enth\u00e4lt stets den vollst\u00e4ndigen aktuellen Status: Ihre Integration kann sich auf <code>status_id<\/code> und den Status jedes Unterzeichners st\u00fctzen statt nur auf den Ereignistyp.<\/p>\n<h3>Header<\/h3>\n<table>\n<thead>\n<tr>\n<th>Header<\/th>\n<th>Beispiel<\/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>Die Signatur pr\u00fcfen<\/h3>\n<p>Ihr Signaturgeheimnis wird unter <strong>Mein Konto &gt; API-Signaturen<\/strong> angezeigt und kann dort neu erstellt werden. <code>v1<\/code> ist der HMAC-SHA256 von <code>\"&lt;t&gt;.&lt;raw request body&gt;\"<\/code> mit Ihrem Geheimnis, hexadezimal kodiert. Verwenden Sie den <strong>unver\u00e4nderten<\/strong> Body vor jedem JSON-Parsing und lehnen Sie Callbacks ab, die \u00e4lter als 5 Minuten sind.<\/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>Antworten und Wiederholungen<\/h3>\n<ul>\n<li>Antworten Sie mit <strong>HTTP 2xx<\/strong>, sobald der Callback eingegangen ist, und verarbeiten Sie ihn bei Bedarf asynchron.<\/li>\n<li>Bei Netzwerkfehler, Zeit\u00fcberschreitung (30 s), HTTP 429 oder 5xx wird der Callback st\u00fcndlich mit derselben <code>event_id<\/code> erneut gesendet, bis zu 24 Versuche. Andere 4xx-Antworten gelten als endg\u00fcltig. \u00c4ndert sich die Anfrage vor einer erfolgreichen Zustellung erneut, enth\u00e4lt der n\u00e4chste Callback ein neues Ereignis und den vollst\u00e4ndigen aktuellen Status. Der aktuelle Status bleibt jederzeit \u00fcber <code>getRequest<\/code> abrufbar.<\/li>\n<li>Weiterleitungen werden befolgt (die Methode <code>POST<\/code> bleibt erhalten). <code>localhost<\/code> und private Adressen sind nicht zul\u00e4ssig.<\/li>\n<\/ul>\n<h2 id=\"errors\">11. Fehler<\/h2>\n<p>Fehler werden mit <code>\"success\": false<\/code> und einer lesbaren Meldung <code>error<\/code> zur\u00fcckgegeben. St\u00fctzen Sie Ihre Logik auf den HTTP-Code: Die Meldungen k\u00f6nnen sich \u00e4ndern.<\/p>\n<table>\n<thead>\n<tr>\n<th>HTTP-Code<\/th>\n<th>Bedeutung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>200 \/ 201<\/td>\n<td>OK \/ Anfrage erstellt<\/td>\n<\/tr>\n<tr>\n<td>400<\/td>\n<td>Fehlendes oder ung\u00fcltiges Feld (die Meldung nennt das Feld)<\/td>\n<\/tr>\n<tr>\n<td>400<\/td>\n<td>Fehlende <code>id_sign<\/code> oder ung\u00fcltiger Filter <code>status_id<\/code><\/td>\n<\/tr>\n<tr>\n<td>401<\/td>\n<td>Ung\u00fcltige <code>userid<\/code> oder <code>x-api-key<\/code><\/td>\n<\/tr>\n<tr>\n<td>403<\/td>\n<td>Nicht genug Guthaben oder Anfragelimit erreicht (10 pro Minute)<\/td>\n<\/tr>\n<tr>\n<td>404<\/td>\n<td>Unbekannte <code>id_sign<\/code> f\u00fcr dieses Konto<\/td>\n<\/tr>\n<tr>\n<td>412<\/td>\n<td>Aktion im aktuellen Status nicht m\u00f6glich (z. B. Stornieren nach einer Signatur, L\u00f6schen einer laufenden Anfrage)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"errors-by-endpoint\">Fehler nach Endpoint<\/h3>\n<table>\n<thead>\n<tr>\n<th>Endpoint<\/th>\n<th>HTTP-Code<\/th>\n<th>Meldung<\/th>\n<th>Ursache<\/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>Ung\u00fcltige <code>userid<\/code> oder <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>Mehr als 10 Anfragen pro Minute<\/td>\n<\/tr>\n<tr>\n<td><code>request<\/code><\/td>\n<td>400<\/td>\n<td>Siehe <a href=\"#validation\">Validierungsmeldungen<\/a><\/td>\n<td>Fehlendes oder ung\u00fcltiges Feld, PDF oder Position<\/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>Guthaben niedriger als die Kosten der Anfrage<\/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>Unbekannter 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> fehlt<\/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>Unbekannte <code>id_sign<\/code> f\u00fcr dieses Konto<\/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>Die Anfrage l\u00e4uft nicht<\/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>Noch niemand hat signiert, alle haben signiert, oder die Anfrage l\u00e4uft nicht mehr<\/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>Mindestens ein Unterzeichner hat signiert<\/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>Die Anfrage l\u00e4uft noch<\/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>Die Anfrage l\u00e4uft noch<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"validation\">Validierungsmeldungen bei der Erstellung (<code>request<\/code>, HTTP 400)<\/h3>\n<p>Die Meldung nennt das Feld oder das Problem; <code>\u2026<\/code> steht f\u00fcr einen Wert Ihrer Anfrage. St\u00fctzen Sie Ihren Code auf den HTTP-Code und zeigen Sie die Meldung an, um die Anfrage zu korrigieren.<\/p>\n<details class=\"esig-api-details\">\n<summary>Alle Validierungsmeldungen anzeigen<\/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>Optionen<\/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>Platzierung der Signaturen<\/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>Bereits signiertes Dokument (<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>Verarbeitung<\/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>Fehlermeldung des Signaturanbieters (eID Easy)<\/li>\n<\/ul>\n<\/details>\n<h2 id=\"retention\">12. Aufbewahrung<\/h2>\n<p>Signierte Dokumente k\u00f6nnen <strong>30 Tage<\/strong> nach Abschluss \u00fcber <code>getRequest<\/code> oder den Callback <code>request.completed<\/code> heruntergeladen werden. Der Audit-Trail wird f\u00fcr den in unserem <a href=\"https:\/\/www.e-signature.eu\/en\/dpa\/\">DPA<\/a> festgelegten Zeitraum aufbewahrt. Archivieren Sie das signierte Dokument und den Audit-Trail innerhalb von 30 Tagen bei sich.<\/p>\n<h2 id=\"changelog\">13. Changelog<\/h2>\n<h3>API <span class=\"badge\">v3<\/span> \u2014 Unterschiede zur API <span class=\"badge\">v2<\/span><\/h3>\n<p>Die API <span class=\"badge\">v2<\/span> (<code>https:\/\/api.e-signature.eu\/v2\/signature\/<\/code>) bleibt verf\u00fcgbar und unver\u00e4ndert. Endpoints, Parameter und Authentifizierung sind in beiden Versionen identisch: Um auf die API <span class=\"badge\">v3<\/span> umzustellen, ersetzen Sie die Basis-URL durch <code>https:\/\/api.e-signature.eu\/v3\/signature\/<\/code>. Sie k\u00f6nnen Endpoint f\u00fcr Endpoint umstellen.<\/p>\n<p class=\"note\">Die bisherigen URLs (<code>https:\/\/www.e-signature.eu\/wp-json\/signature\/<\/code> f\u00fcr API <span class=\"badge\">v2<\/span> und <code>https:\/\/www.e-signature.eu\/wp-json\/esig\/v3\/signature\/<\/code> f\u00fcr API <span class=\"badge\">v3<\/span>) bleiben g\u00fcltig. Wir empfehlen, die URLs von <code>api.e-signature.eu<\/code> zu verwenden.<\/p>\n<table>\n<thead>\n<tr>\n<th>Thema<\/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>Ihre eigenen Referenzen<\/td>\n<td>\u2014<\/td>\n<td>Neue Felder <code>external_reference<\/code> und <code>metadata<\/code>, in jeder Antwort und jedem Callback zur\u00fcckgegeben; Filter <code>list<\/code> nach <code>external_reference<\/code><\/td>\n<\/tr>\n<tr>\n<td>Callback-URL<\/td>\n<td>Eine URL pro Konto<\/td>\n<td>Auch pro Anfrage (<code>callback_url<\/code>)<\/td>\n<\/tr>\n<tr>\n<td>Inhalt des Callbacks<\/td>\n<td>Vollst\u00e4ndiger Status der Anfrage<\/td>\n<td>Vollst\u00e4ndiger Status der Anfrage + <code>event<\/code>, <code>event_id<\/code>, <code>event_at<\/code>, <code>changes<\/code><\/td>\n<\/tr>\n<tr>\n<td>Sicherheit des Callbacks<\/td>\n<td>\u2014<\/td>\n<td>HMAC-SHA256-Signatur im Header <code>X-Esig-Signature<\/code><\/td>\n<\/tr>\n<tr>\n<td>Wiederholungen des Callbacks<\/td>\n<td>St\u00fcndlich bei Netzwerkfehler, bis zum Empfang<\/td>\n<td>St\u00fcndlich bei Netzwerkfehler, Zeit\u00fcberschreitung, HTTP 429 oder 5xx, bis zu 24 Versuche, gleiche <code>event_id<\/code><\/td>\n<\/tr>\n<tr>\n<td>Fehlende <code>id_sign<\/code>, ung\u00fcltiger Filter <code>status_id<\/code><\/td>\n<td>HTTP 401<\/td>\n<td>HTTP 400<\/td>\n<\/tr>\n<tr>\n<td>Unbekannte <code>id_sign<\/code><\/td>\n<td>HTTP 401<\/td>\n<td>HTTP 404<\/td>\n<\/tr>\n<tr>\n<td>Audit-Trail einer laufenden Anfrage<\/td>\n<td>HTTP 401<\/td>\n<td>HTTP 412<\/td>\n<\/tr>\n<tr>\n<td>Manuelle Platzierung: <code>sign_left<\/code> \/ <code>sign_bottom<\/code><\/td>\n<td>Feste Grenzen f\u00fcr eine A4-Seite im Hochformat (0 bis 15 cm \/ 4 bis 28,7 cm), Signaturh\u00f6he 2,5 cm<\/td>\n<td>Grenzen nach tats\u00e4chlicher Seitengr\u00f6\u00dfe und Stempelgr\u00f6\u00dfe der zugelassenen Methoden berechnet, 2 cm Rand; Dezimalstellen erlaubt; die Fehlermeldung nennt den zul\u00e4ssigen Bereich<\/td>\n<\/tr>\n<tr>\n<td>Manuelle Platzierung: \u00dcberlappungen<\/td>\n<td>Nicht gepr\u00fcft<\/td>\n<td>Abgelehnt, wenn eine Signatur eine andere Signatur der Anfrage oder eine vorhandene Signatur des Dokuments \u00fcberdeckt<\/td>\n<\/tr>\n<tr>\n<td>Manuelle Platzierung: <code>sign_page<\/code><\/td>\n<td>Eine Seitennummer, die um eins \u00fcber der letzten Seite liegt, wurde nicht abgelehnt<\/td>\n<td>Jede nicht vorhandene Seite wird abgelehnt<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Callbacks folgen der Version, mit der die Anfrage <strong>erstellt<\/strong> wurde: Eine mit der API <span class=\"badge\">v2<\/span> erstellte Anfrage erh\u00e4lt weiterhin Callbacks der API <span class=\"badge\">v2<\/span>.<\/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>Inhalt Inhalt \u00dcberblick Authentifizierung Konventionen Guthaben Ablauf einer Signaturanfrage Eine Signaturanfrage erstellen Platzierung der Signaturen Das Objekt Signaturanfrage Weitere Endpoints&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":21412,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-29104","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/pages\/29104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/comments?post=29104"}],"version-history":[{"count":3,"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/pages\/29104\/revisions"}],"predecessor-version":[{"id":29170,"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/pages\/29104\/revisions\/29170"}],"up":[{"embeddable":true,"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/pages\/21412"}],"wp:attachment":[{"href":"https:\/\/staging.e-signature.eu\/de\/wp-json\/wp\/v2\/media?parent=29104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}