REST API van e-Signature.eu — elektronische handtekeningen (SES, AES, QES)
1. Overzicht
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.
| Basis-URL | https://api.e-signature.eu/v3/signature/ |
Deze documentatie beschrijft API v3. Gebruikt u al API v2 (https://api.e-signature.eu/v2/signature/)? Zie de Changelog.
2. Authenticatie
Uw gegevens staan in Mijn account > API-handtekeningen zodra u bent aangemeld op e-signature.eu:
- User ID: in de URL, als parameter
useridvan elke oproep; - API token: in de HTTP-header
x-api-keyvan elke oproep.
curl -X GET "https://api.e-signature.eu/v3/signature/requestBalance?userid=123" \
-H "x-api-key: YOUR_API_TOKEN"
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.
3. Conventies
Verzoeken en antwoorden
- Alleen HTTPS. De request bodies zijn JSON (
Content-Type: application/json). - Elk antwoord is JSON, in een van deze twee vormen:
{ "success": true, "result": { ... } }
{ "success": false, "error": "Readable error message" }
Limieten
| Limiet | Waarde |
|---|---|
| Oproepen | 10 per minuut per account en IP-adres (daarboven HTTP 403, opnieuw proberen na een minuut) |
| Document | Eén pdf per aanvraag, maximaal 30 MB, niet versleuteld / zonder wachtwoord |
| Download van ondertekende documenten | 30 dagen na afronding (zie Bewaring) |
4. Credits
Aanvragen worden betaald met uw prepaid credits van e-signature.eu. De prijs van een methode vraagt u op met getMethods (uw specifieke prijzen worden meegerekend). Uw saldo staat in requestBalance en in elk aanvraagobject (credits_balance).
Automatisch opladen van credits
Om nooit zonder credits te vallen, kan uw account zich automatisch opladen. Dit stelt u één keer in via Mijn account > API-handtekeningen, niet via de API:
- Kies een drempel (in credits) en het te bestellen creditpakket.
- Sla een betaalmethode op bij onze betaalprovider Mollie (kaart, of SEPA-domiciliëring via Bancontact, iDEAL…). Eén keer wordt een verificatiebetaling van € 0,01 gevraagd.
- 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.
| Automatisch opladen | |
|---|---|
| Activering | Een afschrijving van credits (bv. een nieuwe aanvraag) waardoor het saldo onder de drempel zakt |
| Toevoeging van de credits | Zodra de betaling is bevestigd: onmiddellijk per kaart, na enkele werkdagen per SEPA-domiciliëring |
| Lopende opladingen | Eén tegelijk |
| Veiligheidslimiet | Een maximaal aantal automatische opladingen per 30 dagen |
| Mislukte betaling | De bestelling wordt als mislukt gemarkeerd, automatisch opladen wordt uitgeschakeld en u wordt per e-mail verwittigd |
You do not have enough credits) en activeert geen oplading: kies een drempel hoger dan de kosten van uw grootste aanvragen, en houd een marge bij betaling per SEPA-domiciliëring. Uw saldo blijft altijd beschikbaar via requestBalance en credits_balance.5. Hoe een ondertekeningsaanvraag werkt
- U maakt de aanvraag aan met de pdf, de ondertekenaars en de toegelaten ondertekeningsmethoden. De credits worden afgeschreven.
- Elke ondertekenaar ontvangt een e-mail met een persoonlijke ondertekeningslink (of u bezorgt zelf de
signature_linkwanneersend_emailfalseis). - De ondertekenaar bevestigt zijn identiteit met een van de toegelaten methoden (itsme®, Evrotrust, Veriff, OTP…) en ondertekent.
- Wanneer iedereen heeft ondertekend, is de aanvraag
finished: de ondertekende pdf (PAdES) is beschikbaar viagetRequesten wordt meegestuurd in de callback.
Volgorde van ondertekening
Standaard ondertekenen alle ondertekenaars parallel. Om een volgorde vast te leggen, zet u sign_first: true bij de ondertekenaars van de eerste groep: zij worden meteen uitgenodigd, eventueel met meerderen tegelijk. De andere ondertekenaars worden pas uitgenodigd wanneer de hele eerste groep heeft ondertekend. Maximaal twee groepen.
Twee integratiemodi
| Modus | Werking |
|---|---|
E-mailmodus (send_email: true, standaard) |
Wij sturen namens u de uitnodigingen, herinneringen en afrondingsmails naar de ondertekenaars. |
Ingebedde modus (send_email: false) |
Bij het aanmaken wordt geen e-mail verstuurd: de signature_link van elke ondertekenaar staat in het antwoord en u leidt uw gebruikers ernaartoe vanuit uw eigen interface. |
send_email: false stuurt een herinnering of annulering vanuit het online dashboard een e-mail naar de openstaande ondertekenaars.Vraag de API niet herhaaldelijk op
Roep getRequest niet herhaaldelijk op om de status van een aanvraag te volgen: gebruik de callbacks, die automatisch bij elke wijziging worden verstuurd. Te veel oproepen activeren een automatische beperking die de verwerking van uw verzoeken tijdelijk opschort.
6. Een ondertekeningsaanvraag aanmaken
{
"title": "Sales agreement 2026-114",
"lang": "en",
"methods": [
"itsme-qes-signature",
"evrotrust-signature"
],
"signature_place": "position_auto",
"reminder": 3,
"send_email": true,
"email_notification": false,
"note_html": "Please sign the agreement before Friday.",
"signature_redirect": "https://www.example.com/thank-you",
"external_reference": "QUOTE-2026-114",
"metadata": {
"crm_deal_id": 8812
},
"callback_url": "https://erp.example.com/hooks/esignature",
"signers": [
{
"firstname": "Ann",
"lastname": "Peeters",
"email": "[email protected]",
"phone": "+32475111222",
"sign_first": true
},
{
"firstname": "Marc",
"lastname": "Dubois",
"email": "[email protected]",
"sign_first": false
}
],
"pdf_file_base64": "JVBERi0xLjcKJeLjz9MK..."
}
Ondertekeningsmethoden
| Methode | Niveau | Dekking | Prijs |
|---|---|---|---|
itsme-qes-signature — itsme® |
QES (gekwalificeerd) | 32 Europese landen | 1 credit / ondertekenaar |
evrotrust-signature — Evrotrust |
QES (gekwalificeerd) | 69 landen | 1 credit / ondertekenaar |
veriff-advanced-signature — Veriff |
AES (geavanceerd) | 198 landen | 0,7 credit / ondertekenaar |
otp-email-non-qualified — OTP per e-mail of sms |
SES (eenvoudig) | Wereldwijd | 0,4 credit / ondertekenaar |
Dit zijn de standaardprijzen: getMethods 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. otp-email-non-qualified dekt e-mail en sms: de code wordt per sms verstuurd als de ondertekenaar een phone heeft, anders per e-mail, tegen dezelfde prijs.
Velden van de request body
| Veld | Verplicht | Type | Beschrijving |
|---|---|---|---|
title |
ja | string | Naam van het document. Letters, cijfers en koppeltekens blijven behouden; als de naam al in uw account bestaat, wordt een achtervoegsel -1, -2… toegevoegd. |
lang |
ja | string | Taal van de e-mails en ondertekeningspagina’s: fr, nl, en, de, es. |
methods |
ja | array | Toegelaten ondertekeningsmethoden, zie Ondertekeningsmethoden. Zijn er meerdere toegelaten, dan kiest elke ondertekenaar. |
signers |
ja | array | Ondertekenaars, zie hieronder. |
pdf_file_base64 |
ja | string | De pdf, base64-gecodeerd. Eén bestand, maximaal 30 MB, niet versleuteld. |
signature_place |
nee | string | position_auto (standaard) of position_manual, zie Plaatsing van de handtekeningen. |
reminder |
nee | number | Automatische herinnering om de N dagen, 0 tot 14. Standaard 0 (geen herinnering). |
send_email |
nee | boolean | Standaard true (e-mailmodus). Met false (ingebedde modus) wordt geen uitnodigings- of afrondingsmail verstuurd: bezorg zelf de signature_link. Niet combineerbaar met sign_first: true. |
email_notification |
nee | boolean | Standaard false. Met true ontvangt u een e-mail bij elke ondertekening. |
note_html |
nee | string | Bericht toegevoegd aan de e-mails voor de ondertekenaars (e-mailmodus). HTML-tags zijn toegestaan, bv. Note with <strong>HTML</strong>. |
signature_redirect |
nee | string (URL) | Pagina die de ondertekenaar na het ondertekenen ziet. Moet een geldige URL zijn (lege tekst wordt geweigerd). Standaard: bevestigingspagina op e-signature.eu. |
external_reference |
nee | string | Uw eigen referentie (offerte, contract…), maximaal 255 tekens. Komt terug in elk antwoord en elke callback. |
metadata |
nee | object | Vrij JSON-object, maximaal 4 KB, ongewijzigd teruggestuurd. |
callback_url |
nee | string (URL) | Callback-URL alleen voor deze aanvraag (publieke HTTPS). Standaard: de URL van uw account. |
Velden van een ondertekenaar
| Veld | Verplicht | Type | Beschrijving |
|---|---|---|---|
lastname |
ja | string | |
email |
ja | string | Geldig e-mailadres |
firstname |
nee | string | |
phone |
nee | string | Internationaal formaat met + en de landcode (+32…); 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. |
sign_first |
nee | boolean | Standaard false. Zie Volgorde van ondertekening. |
sign_page, sign_left, sign_bottom |
met position_manual |
number | Zie Plaatsing van de handtekeningen. |
Kosten
Prijs van de duurste methode in methods × 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.
Antwoord 201 Created
{
"success": true,
"result": {
"id_sign": 4521,
"lang": "en",
"doc_name": "Sales-agreement-2026-114",
"send_email": true,
"from_api": true,
"signature_redirect": "https://www.example.com/thank-you",
"status_id": "pending",
"date_status": "2026-10-20 10:15:02",
"last_reminder": null,
"timezone": "Europe/Brussels",
"credits": 2,
"credits_balance": 38.4,
"signers": {
"1": {
"firstname": "Ann",
"lastname": "Peeters",
"email": "[email protected]",
"phone": "+32475111222",
"sign_first": true,
"status": "pending",
"signature_link": "https://www.e-signature.eu/en/sign/?key=…"
},
"2": {
"firstname": "Marc",
"lastname": "Dubois",
"email": "[email protected]",
"sign_first": false,
"status": "pending",
"signature_link": "https://www.e-signature.eu/en/sign/?key=…"
}
},
"external_reference": "QUOTE-2026-114",
"metadata": {
"crm_deal_id": 8812
}
}
}
7. Plaatsing van de handtekeningen
position_auto (standaard)
Plaats de markeringen #SIG01, #SIG02… (ook toegestaan: #SIG01#) als tekst in uw document, op de plaats waar elke ondertekenaar moet tekenen (#SIG01 = eerste ondertekenaar van de array signers). 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.
Document nog niet ondertekend
Bevat het document geen markering, of ontbreekt de markering van een ondertekenaar, dan wordt aan het einde van het document een handtekeningenpagina met de markeringen toegevoegd en worden alle handtekeningen op die pagina geplaatst (6 ondertekenaars op de eerste toegevoegde pagina, daarna 10 per extra pagina).
Document al ondertekend
Aan een pdf die al elektronisch is ondertekend, kan geen pagina worden toegevoegd: dat zou de bestaande handtekeningen ongeldig maken. Met position_auto worden de handtekeningen op de vrije markeringen geplaatst, d.w.z. de markeringen waarvan de handtekeningzone geen bestaande handtekening bedekt. Vrije markeringen worden in volgorde aan de ondertekenaars toegewezen (#SIG01, #SIG02…).
position_manual.position_manual
Geef voor elke ondertekenaar de positie van de handtekening op, in centimeter:
| Veld | Waarde |
|---|---|
sign_page |
Paginanummer, vanaf 1 (geheel getal) |
sign_left |
Afstand van de linkerrand van de pagina tot de linkerkant van de handtekening, in cm (decimalen toegestaan) |
sign_bottom |
Afstand van de onderrand van de pagina tot de bovenkant van de handtekening, in cm (decimalen toegestaan) |
{ "lastname": "Peeters", "email": "[email protected]", "sign_page": 3, "sign_left": 2.5, "sign_bottom": 6 }
sign_left en sign_bottom geven de linkerbovenhoek van de handtekening. De handtekening wordt onder en rechts van dit punt geplaatst.
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.
Een handtekening mag geen andere handtekening van de aanvraag bedekken, noch een bestaande handtekening als het document al ondertekend is.
8. Het object ondertekeningsaanvraag
Teruggegeven door request, getRequest, cancel, skip, remind, delete en verstuurd in de callbacks.
| Veld | Beschrijving |
|---|---|
id_sign |
ID van de aanvraag |
doc_name |
Naam van het document |
status_id |
pending lopend · finished door iedereen ondertekend · skipped stopgezet, gedeeltelijk ondertekend · cancelled · deleted |
signers |
Object met de ondertekenaars, per sleutel ("1", "2"…) — zie hieronder |
lang, send_email, signature_redirect, timezone |
Zoals bij het aanmaken ingesteld |
from_api |
true als de aanvraag via de API is aangemaakt |
date_status |
Datum van de laatste statuswijziging (tijdzone van de aanvraag) |
last_reminder |
Datum van de laatste herinnering, of null |
credits |
Credits van de aanvraag (gereserveerd zolang ze loopt, gebruikt na afronding) |
credits_balance |
Huidig saldo van uw account |
pdf_file_base64 |
Ondertekende pdf, wanneer de aanvraag niet meer loopt |
external_reference, metadata |
Zoals verstuurd bij het aanmaken |
Ondertekenaar
| Veld | Beschrijving |
|---|---|
firstname, lastname, email, phone, sign_first |
Zoals verstuurd bij het aanmaken |
status |
pending · signed · skipped |
signature_link |
Persoonlijke ondertekeningslink, zolang de ondertekenaar niet heeft ondertekend |
signing_time, signing_method |
Na ondertekening: datum en gebruikte methode |
verified_firstname, verified_lastname |
Na ondertekening: identiteit gecontroleerd door de ondertekeningsmethode |
{
"1": {
"firstname": "Ann",
"lastname": "Peeters",
"email": "[email protected]",
"status": "signed",
"signing_time": "2026-10-20 11:02:47",
"signing_method": "itsme-qes-signature",
"verified_firstname": "Ann",
"verified_lastname": "Peeters"
}
}
9. Andere endpoints
Alle endpoints krijgen userid in de URL en x-api-key in de headers. id_sign wordt in de URL meegegeven.
De aanvragen oplijsten
status_id (optioneel): pending, finished of skipped. external_reference (optioneel): alleen de aanvragen met deze referentie.
{
"success": true,
"result": [
{
"id_sign": 4521,
"status_id": "pending",
"external_reference": "QUOTE-2026-114"
},
{
"id_sign": 4498,
"status_id": "finished"
}
]
}
Een aanvraag opvragen
Geeft het object ondertekeningsaanvraag terug, met de ondertekende pdf zodra de aanvraag is afgerond. Gebruik de callbacks om de status te volgen, niet herhaalde oproepen.
Een herinnering sturen
Stuurt een herinneringsmail naar de ondertekenaars met status: pending van de groep die momenteel is uitgenodigd (eerst de groep sign_first). Alleen voor aanvragen pending. Werkt ook voor aanvragen aangemaakt met send_email: false.
Een aanvraag stopzetten (met behoud van de reeds geplaatste handtekeningen)
Mogelijk wanneer minstens één ondertekenaar heeft ondertekend en minstens één nog niet. De aanvraag wordt skipped, de gedeeltelijk ondertekende pdf is beschikbaar en de credits van de niet-ondertekenaars worden terugbetaald.
Een aanvraag annuleren
Mogelijk zolang niemand heeft ondertekend; gebruik skip om een gedeeltelijk ondertekende aanvraag af te sluiten. Het antwoord bevat de aanvraag met status_id: cancelled; daarna worden de aanvraag en het document uit uw dashboard verwijderd, werken de ondertekeningslinks niet meer en worden de credits terugbetaald.
Een aanvraag verwijderen
Alleen aanvragen finished of skipped. Verwijdert de documenten en de aanvraag. Het antwoord bevat de aanvraag nog één keer, met status_id: deleted: download de ondertekende pdf vóór het verwijderen.
De audit trail downloaden
Niet beschikbaar zolang de aanvraag loopt (HTTP 412). Geeft het aanvraagobject terug met audit_trail_base64: een pdf met de geschiedenis van de aanvraag (data, methoden, gecontroleerde identiteiten).
Het creditsaldo opvragen
{ "success": true, "result": { "credits_balance": 38.4 } }
De ondertekeningsmethoden oplijsten
Methoden toegelaten in methods, met de prijs in credits per ondertekenaar voor uw account. lang (optioneel) vertaalt de labels.
{
"success": true,
"result": [
{
"id": "itsme-qes-signature",
"label": "itsme® | QES",
"credits": 1
},
{
"id": "evrotrust-signature",
"label": "Evrotrust | QES",
"credits": 1
},
{
"id": "veriff-advanced-signature",
"label": "Veriff | AES",
"credits": 0.7
},
{
"id": "otp-email-non-qualified",
"label": "OTP by Email/SMS | SES",
"credits": 0.4
}
]
}
10. Callbacks (webhooks)
Stel uw callback-URL in via Mijn account > API-handtekeningen (HTTPS, publiek bereikbaar). U kunt ook per aanvraag een callback_url opgeven. De callback is een POST met een JSON-body met de volledige huidige status van de aanvraag (zelfde formaat als getRequest), verstuurd voor aanvragen die via de API zijn aangemaakt.
Eventvelden
| Veld | Beschrijving |
|---|---|
event |
Type event (zie hieronder) |
event_id |
Unieke ID van het event (evt_…). Identiek bij elke nieuwe poging voor hetzelfde event: gebruik het om dubbels te negeren. |
event_at |
Datum van het event (UTC, ISO 8601) |
changes |
Statuswijzigingen van ondertekenaars, bv. [{"signer_key": 1, "from": "pending", "to": "signed"}] (alleen als een ondertekenaar is gewijzigd) |
external_reference, metadata |
Zoals verstuurd bij het aanmaken van de aanvraag |
Types events
| Event | Wanneer |
|---|---|
signer.signed |
Een ondertekenaar heeft ondertekend, de aanvraag loopt nog |
signer.declined, signer.skipped, signer.expired |
Een ondertekenaar heeft geweigerd, werd overgeslagen of is verlopen |
request.completed |
Alle ondertekenaars hebben ondertekend: de ondertekende pdf is inbegrepen (pdf_file_base64) |
request.stopped |
De aanvraag werd stopgezet: de gedeeltelijk ondertekende pdf is inbegrepen |
request.cancelled |
De aanvraag werd geannuleerd |
request.deleted |
De aanvraag werd verwijderd |
request.expired |
De aanvraag is verlopen |
request.declined |
Aangetekende zending geweigerd door de ontvanger |
request.updated |
Elke andere wijziging: herinnering verstuurd, ondertekenaar gewijzigd, nieuwe ondertekeningslinks… |
De body bevat altijd de volledige huidige status: uw integratie kan steunen op status_id en de status van elke ondertekenaar, niet alleen op het type event.
Headers
| Header | Voorbeeld |
|---|---|
X-Esig-Api-Version |
3 |
X-Esig-Event |
signer.signed |
X-Esig-Event-Id |
evt_4f0c2b9e1d7a3c55e8b1a2f0 |
X-Esig-Delivery-Attempt |
1, 2, … |
X-Esig-Signature |
t=1792407600,v1=5d41402abc4b2a76b9719d911017c592… |
De handtekening controleren
Uw ondertekeningsgeheim staat in Mijn account > API-handtekeningen, waar u het ook opnieuw kunt aanmaken. v1 is de HMAC-SHA256 van "<t>.<raw request body>" met uw geheim, hexadecimaal gecodeerd. Gebruik de ruwe body, vóór elke JSON-verwerking, en weiger callbacks ouder dan 5 minuten.
PHP
$body = file_get_contents( 'php://input' );
$header = $_SERVER['HTTP_X_ESIG_SIGNATURE'] ?? '';
preg_match( '/t=(\d+),v1=([a-f0-9]{64})/', $header, $m );
$valid = $m
&& abs( time() - (int) $m[1] ) <= 300
&& hash_equals( hash_hmac( 'sha256', $m[1] . '.' . $body, $secret ), $m[2] );
Node.js
const crypto = require('crypto');
function verify(rawBody, header, secret) {
const m = /t=(\d+),v1=([a-f0-9]{64})/.exec(header || '');
if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
const expected = crypto.createHmac('sha256', secret).update(`${m[1]}.${rawBody}`).digest('hex');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(m[2]));
}
C# (.NET)
using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions;
static bool Verify(string rawBody, string header, string secret) {
var m = Regex.Match(header ?? "", @"t=(\d+),v1=([a-f0-9]{64})");
if (!m.Success || Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - long.Parse(m.Groups[1].Value)) > 300) return false;
using var h = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
var expected = Convert.ToHexString(h.ComputeHash(Encoding.UTF8.GetBytes(m.Groups[1].Value + "." + rawBody))).ToLowerInvariant();
return CryptographicOperations.FixedTimeEquals(Encoding.ASCII.GetBytes(expected), Encoding.ASCII.GetBytes(m.Groups[2].Value));
}
Antwoorden en nieuwe pogingen
- Antwoord met HTTP 2xx zodra de callback is ontvangen en verwerk hem zo nodig asynchroon.
- Bij een netwerkfout, time-out (30 s), HTTP 429 of 5xx wordt de callback elk uur opnieuw verstuurd met hetzelfde
event_id, tot 24 pogingen. Andere 4xx-antwoorden gelden als definitief. Wijzigt de aanvraag opnieuw vóór een geslaagde levering, dan bevat de volgende callback een nieuw event en de volledige huidige status. De huidige status blijft altijd beschikbaar viagetRequest. - Doorverwijzingen worden gevolgd (de methode
POSTblijft behouden).localhosten privé-adressen kunnen niet worden gebruikt.
11. Fouten
Fouten worden teruggegeven met "success": false en een leesbaar bericht error. Baseer uw logica op de HTTP-code: de berichten kunnen worden verbeterd.
| HTTP-code | Betekenis |
|---|---|
| 200 / 201 | OK / aanvraag aangemaakt |
| 400 | Ontbrekend of ongeldig veld (het bericht noemt het veld) |
| 400 | Ontbrekende id_sign, of ongeldige filter status_id |
| 401 | Ongeldige userid of x-api-key |
| 403 | Onvoldoende credits, of limiet van oproepen bereikt (10 per minuut) |
| 404 | Onbekende id_sign voor dit account |
| 412 | Actie niet mogelijk in de huidige status (bv. annuleren na een handtekening, een lopende aanvraag verwijderen) |
Fouten per endpoint
| Endpoint | HTTP-code | Bericht | Oorzaak |
|---|---|---|---|
| Alle endpoints | 401 | Please provide a valid x-api-key in headers & userid in url parameters. |
Ongeldige userid of x-api-key |
| Alle endpoints | 403 | Rate limit exceeded: 10 requests per minute is allowed. Please try again after a minute. |
Meer dan 10 oproepen per minuut |
request |
400 | Zie Validatieberichten | Ontbrekend of ongeldig veld, pdf of positie |
request |
403 | You do not have enough credits |
Saldo lager dan de kosten van de aanvraag |
list |
400 | Incorrect value for status_id. |
Onbekende filter status_id |
getRequest, remind, skip, cancel, delete, requestAuditTrail |
400 | please provide id_sign parameter. |
id_sign ontbreekt |
getRequest, remind, skip, cancel, delete, requestAuditTrail |
404 | invalid id_sign value. |
Onbekende id_sign voor dit account |
remind |
412 | request can not be remind to user(s): wrong status |
De aanvraag loopt niet |
skip |
412 | request can not be skipped: wrong status |
Nog niemand heeft ondertekend, iedereen heeft ondertekend, of de aanvraag loopt niet meer |
cancel |
412 | request can not be cancelled: someone already signed the PDF |
Minstens één ondertekenaar heeft ondertekend |
delete |
412 | request can not be deleted: wrong status_id |
De aanvraag loopt nog |
requestAuditTrail |
412 | Can not download Audit Trail while the signature request is pending |
De aanvraag loopt nog |
Validatieberichten bij het aanmaken (request, HTTP 400)
Het bericht noemt het veld of het probleem; … staat voor een waarde uit uw verzoek. Baseer uw code op de HTTP-code en toon het bericht om het verzoek te helpen corrigeren.
Alle validatieberichten tonen
Request body
Request body can not be empty
title, lang
Field 'title' must be of type string and can not be emptyField 'lang' is an invalid language code
signers
field 'signers' is omitted or is emptyFirstname, Lastname & email address must be of type string and can not be empty… is not an email addressfield 'sign_first' is not a boolean valuefield 'sign_first' can not be 'true' when field 'send_email' is 'false'
methods
You must set at least one signing method… is not a valid method
Opties
Field 'reminder' should be of type numeric between 0 & 14 (days)Field 'send_email' should be of type booleanField 'email_notification' should be of type booleanField 'note_html' should be of type stringField 'signature_redirect' is not a valid url
external_reference, metadata, callback_url
Field 'external_reference' must be a stringField 'external_reference' can not exceed 255 charactersField 'metadata' must be a JSON objectField 'metadata' can not exceed 4096 bytesField 'callback_url' must be a publicly reachable HTTPS URL
Field 'pdf_file_base64' should be of type string and not emptyField 'pdf_file_base64' doesn't contains a base64 encoded stringField 'pdf_file_base64' doesn't contains a base64 encoded PDF fileYour file is too big > 30 MBCouldn't load your PDF documentPDF file is encrypted and password protected. Please unprotected your PDF file.Couldn't get pages from PDF document
Plaatsing van de handtekeningen
field 'signature_place' is incorrectfield 'sign_page' is empty or is not an integerfield 'sign_left' is empty or is not a number (cm)field 'sign_bottom' is empty or is not a number (cm)Field 'sign_left' for signer … must be between … and … cm (page … is … x … cm, signature … x … cm, margin … cm)Field 'sign_bottom' for signer … must be between … and … cm (…)Field 'sign_page' for signer … is too big: the document has … page(s)Page … is too small for the signature of … (…)The signature of … on page … overlaps an existing signature of the document (…)The signatures of … and … overlap on page … (…)The existing signatures of the document could not be read: the position of the signature of … can not be checked
Document al ondertekend (position_auto)
Your PDF file is already signed: pages can not be added without invalidating the existing signatures. It contains … free marker(s) for … signer(s): place the signatures manually (signature_place: position_manual).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).
Verwerking
Couldn't extract markers from PDF document: …Unknown error: Request could not be saved into the Database- Foutmelding van de ondertekeningsprovider (eID Easy)
12. Bewaring
Ondertekende documenten kunnen gedurende 30 dagen na afronding worden gedownload, via getRequest of de callback request.completed. De audit trail wordt bewaard gedurende de periode vastgelegd in onze DPA. Archiveer het ondertekende document en de audit trail binnen 30 dagen aan uw kant.
13. Changelog
API v3 — verschillen met API v2
API v2 (https://api.e-signature.eu/v2/signature/) blijft beschikbaar en ongewijzigd. Endpoints, parameters en authenticatie zijn in beide versies identiek: om over te stappen op API v3 vervangt u de basis-URL door https://api.e-signature.eu/v3/signature/. U kunt endpoint per endpoint overstappen.
De vorige URL’s (https://www.e-signature.eu/wp-json/signature/ voor API v2 en https://www.e-signature.eu/wp-json/esig/v3/signature/ voor API v3) blijven geldig. We raden aan de URL’s van api.e-signature.eu te gebruiken.
| Onderwerp | API v2 | API v3 |
|---|---|---|
| Basis-URL | /v2/signature/ |
/v3/signature/ |
| Uw eigen referenties | — | Nieuwe velden external_reference en metadata, teruggegeven in elk antwoord en elke callback; filter list op external_reference |
| Callback-URL | Eén URL per account | Ook per aanvraag (callback_url) |
| Inhoud van de callback | Volledige status van de aanvraag | Volledige status van de aanvraag + event, event_id, event_at, changes |
| Beveiliging van de callback | — | HMAC-SHA256-handtekening in de header X-Esig-Signature |
| Nieuwe pogingen van de callback | Elk uur bij een netwerkfout, tot ontvangst | Elk uur bij een netwerkfout, time-out, HTTP 429 of 5xx, tot 24 pogingen, zelfde event_id |
Ontbrekende id_sign, ongeldige filter status_id |
HTTP 401 | HTTP 400 |
Onbekende id_sign |
HTTP 401 | HTTP 404 |
| Audit trail van een lopende aanvraag | HTTP 401 | HTTP 412 |
Manuele plaatsing: sign_left / sign_bottom |
Vaste limieten voor een A4-pagina staand (0 tot 15 cm / 4 tot 28,7 cm), handtekeninghoogte 2,5 cm | 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 |
| Manuele plaatsing: overlappingen | Niet gecontroleerd | Geweigerd als een handtekening een andere handtekening van de aanvraag of een bestaande handtekening van het document bedekt |
Manuele plaatsing: sign_page |
Een paginanummer één hoger dan de laatste pagina werd niet geweigerd | Elke niet-bestaande pagina wordt geweigerd |
Callbacks volgen de versie waarmee de aanvraag is aangemaakt: een aanvraag via API v2 blijft callbacks van API v2 ontvangen.