Emdha Signature Lite
POST
https://test.api.neotek.sa/neotek/neotek-sandbox/digital-signature-lite/v1/sign-documentsSandbox URL · in Production call https://api.neotek.sa
Signs a PDF through Emdha and returns it base64-encoded. The body is the same as Sadq Signature Lite; omitting SigningFormat entirely applies the defaults.
Body — everything sits under a top-level Data object.
Data.KYCInformation identifies the signatory and the organisation vouching for them:
| Parameter | Required | Description |
|---|---|---|
UserConsentObtained | Required | must be true. You are legally undertaking that you informed the user and took explicit consent |
RKAName | Required | legal name of the organisation acting as Reliable KYC Agency |
KYCId | Required | the signatory's unique id in the RKA database |
ArabicName | Required | name in Arabic, up to 100 characters |
RegionProvince | Required | up to 25 characters |
Country | Required | ISO 3166 alpha-2, for example SA |
EnglishName | Optional | up to 100 characters |
MobileNumber | Optional | up to 15 characters |
Email | Optional | valid format, up to 100 characters |
Address | Optional | up to 100 characters |
Data.DocumentDetails is an array, one entry per document:
| Parameter | Required | Description |
|---|---|---|
Document | Required | the PDF as a base64 string |
SignerInformation.SignedBy | Required | name of the signer |
SignerInformation.AllowMultipleSignings | Required | whether the document can be signed more than once |
SignerInformation.Location | Optional | — |
SignerInformation.Reason | Optional | — |
SigningFormat | Optional | omit the whole block to accept the defaults listed on the Sadq page |
Headers:
| Parameter | Required | Description |
|---|---|---|
authorization | Required | Bearer <ACCESS_TOKEN>, with scope digital_signature |
content-type | Required | application/json |
x-request-id | Optional | an RFC 4122 UUID you generate; quote it when raising a support ticket |
sub-client | Optional | identifies the downstream consumer when one client fronts several |
cURL
curl -X POST 'https://test.api.neotek.sa/neotek/neotek-sandbox/digital-signature-lite/v1/sign-documents' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "Data": { "KYCInformation": { "UserConsentObtained": true, "RKAName": "<organisation legal name>", "KYCId": "<signatory id>", "EnglishName": "Mohammed Ali", "ArabicName": "محمد علي", "MobileNumber": "", "Email": "", "Address": "<address>", "RegionProvince": "Riyadh", "Country": "SA" }, "DocumentDetails": [ { "Document": "<base64 PDF>", "SignerInformation": { "SignedBy": "Mohammed Ali", "AllowMultipleSignings": false } } ] }}'Response — Document is the signed PDF, base64-encoded
JSON
{ "Data": { "DocumentDetails": [ { "Document": "<base64 signed PDF>", "SignerInformation": { "SignedBy": "Emkan", "Location": "Riyadh", "Reason": "Signing", "AllowMultipleSignings": false } } ] }}Errors
| Code | Status | Cause and Action |
|---|---|---|
400 | Bad Request | Missing required field, or a value that fails validation — check Code and Path in the body |
401 | Unauthorized | Bearer token missing, expired, or invalid |
403 | Forbidden | Token doesn't carry the digital_signature scope |
404 | Not Found | No resource matches the identifier provided |
405 | Method Not Allowed | HTTP verb not supported on that path |
406 | Not Acceptable | Accept header doesn't match a supported representation |
415 | Unsupported Media Type | Content-Type missing or wrong |
429 | Too Many Requests | Rate limit exceeded |
500 | Internal Server Error | Server error — retry with backoff, quote your x-request-id |