QES Onboarding API - Detailed Documentation

The QES Onboarding API allows you to initiate and manage qualified electronic signature (QES) workflows via a secure and customizable interface. This includes creating signing sessions, configuring webhooks for status updates, and retrieving verification results for audit or compliance checks.

API Playground:

Endpoints Overview

  1. Create Session Link: Initiates a QES signature session and returns a unique user signing URL.
  2. Configure Webhook: Registers a webhook to receive real-time updates for the onboarding session.
  3. Get Verification: Retrieves the full verification result for a specific onboarding session.

Sequence Diagram

The term “wizard” refers to the QES signing user interface that the end user completes after identification.

How to Prepare a PDF Document for QES

To ensure successful signing:

  1. Use Adobe Acrobat (Standard or Pro) to open your PDF.
  2. Go to Tools → Prepare Form.
  3. Insert at least one Signature Field where the user will sign.
    • The field must be a digital signature field (not just a form input).
  4. Add text fields (AcroFields) that can be dynamically filled during onboarding using fillform. These fields support placeholder variables to auto-populate identity data.
  5. Save the document and host it at a publicly accessible HTTPS URL.

Supported dynamic variables:

VariableDescription
${identification.firstName}First name of the user
${identification.lastName}Last name of the user
${identification.email}Email address
${identification.phoneNumber}Mobile number
${identification.birthDate}Date of birth
${identification.gender}Gender
${identification.personalNumber}Personal identifier
${identification.documentDetails.number}ID document number

These fields must have matching fieldIds in the fillForm array passed to the API. Onboarding will then substitute them with the correct values. For example:

"fillForm": [
  { "fieldId": "firstName", "value": "John" },
  { "fieldId": "email", "value": "john@example.com" }
],
"signForms": [{
      "fieldId": "Signature1",
      "actorId": "userToIdentify"
    },{
      "fieldId": "Signature2",
      "actorId": "userToIdentify"
    }]
Only AcroForm-compatible PDFs are supported. PDFs generated with third-party editors may not be recognized.

Authentication

To access the Address Verification API, authentication is required. A Bearer Token must be included in every request.

  • Tokens are valid for 60 minutes and must be refreshed after expiration.
  • Refer to the Authentication for detailed steps on obtaining a token.
  • Include the token in the Authorization header as follows:

Authorization: Bearer YOUR_ACCESS_TOKEN

API Base URL

https://api-umbrella.io/api/services

Endpoint

POST /onboarding/createSessionLink

Description

Starts a QES signing session for a specified user. Returns a URL that redirects the user to the signing wizard. The backend will send this session link to the user for document signing.

Required Headers

HeaderValue
Content-Typeapplication/json
AuthorizationBearer EXAMPLE_TOKEN_1234567890abcdef

Request Body Parameters

Response Structure

Example Request

{
  "email": "support@idcanopy.com",
  "phoneNumber": "+436508021530",
  "redirectUrl": "https://example.com/onboarding/success",
  "docUrl": "https://cdn.idcanopy.com/pdf/onb-t3.pdf",
  "signForms": [{
      "fieldId": "Signature1",
      "actorId": "userToIdentify"
    },{
      "fieldId": "Signature2",
      "actorId": "userToIdentify"
    }],
    "fillForm": [{
        "fieldId": "name",
        "value": "${identification.firstName}"
    },{
        "fieldId": "surname",
        "value": "${identification.lastName}"
    }]
}

Example Response

{
  "status": true,
    "data": {
        "requestId": "123e4567-e89b-12d3-a456-426614174000",
        "url": "https://example.com/api/v2/actorTrip/urlback?t=EXAMPLE_TOKEN",
        "expiresAfter": "2025-07-30T08:55:52.520909994Z"
    }
}
To enable successful qualified signing, the document must include AcroForm-compatible signature fields created with Adobe Acrobat. Clients are responsible for preparing their own PDF templates and hosting them at a secure public URL.

2. Configure Webhook

Endpoint

POST /onboarding/configureWebhook

Description

Registers a webhook URL to receive onboarding status updates such as completed verification, signing, or failures.

Required Headers

HeaderValue
Content-Typeapplication/json
AuthorizationBearer EXAMPLE_TOKEN_1234567890abcdef

Request Body Parameters

Response Structure

Example Request

{
  "webhookUrl": "https://api.idcanopy.com/webhooks/onboarding",
  "metadata": {
        "authHeader": {
            "Authorization": "Bearer EXAMPLE_TOKEN_1234567890abcdef",
            "Api-Key": "fQVZSAp18GqvbwId8LotQl"
        }
    }
}

Example Response

{
  "status": true,
  "data": {
    "id": "74884fe3-c9e1-4462-b60f-c461e422000c",
    "url": "https://api.idcanopy.com/webhooks/onboarding",
    "createdAt": "2025-05-08T16:39:28.339Z"
  }
}

Webhook Event Payload Example

When your webhook receives a status update, the payload will look like this:

{
  "requestId": "xxxxxxxxx",
  "type": "STATUS_UPDATE",
  "status": "COMPLETED"
}

The status field in the webhook payload indicates the outcome of the onboarding session. Possible values are:

  • COMPLETED: The onboarding and signing process finished successfully.
  • FAILED: The process failed due to an error or unsuccessful verification.
  • CANCELLED: The process was cancelled by the user or system.

3. Get Verification

Endpoint

GET /onboarding/getVerification/{sessionId}

Description

Retrieves identity and signature verification results for a given onboarding session ID.

Required Headers

HeaderValue
Content-Typeapplication/json
AuthorizationBearer EXAMPLE_TOKEN_1234567890abcdef

URL Path Parameters

Response Structure

For audit and compliance, focus on these fields from the verification result:

  • signature.signedAt: timestamp of when the document was signed.
  • signature.signedResource.resourceUrl: download link to the signed document.
  • identification.status: final KYC/identification outcome.
  • identification.personData: extracted personal details.
  • identification.validationDetail: shows which fields were validated and how (e.g. OTP, document).

Example Response (Completed)

Example Response (Failed)

Example Response (Error)

Error Handling

Standardized error codes and messages are returned to indicate issues with requests or processing.

Example Error Response

{
  "error": {
    "code": "INVALID_SESSION",
    "message": "The provided session ID is invalid or expired."
  }
}

Common Errors

CodeDescription
INVALID_SESSIONSession ID does not exist or is expired
MISSING_PARAMETERSRequired input fields are not provided
UNAUTHORIZEDInvalid or missing API key/token
INTERNAL_ERRORUnexpected error during processing
UNSUPPORTED_FLOWRequested flow is not supported by provider

Environment & Testing

Base URLs

EnvironmentBase URL
Sandboxhttps://sandbox-umbrella-api.azurewebsites.net/api/services
Productionhttps://api-umbrella.io/api/services

⚠️ All test flows use mock data and static PDFs unless otherwise configured.


QES Onboarding API - Detailed Documentation

The QES Onboarding API allows you to initiate and manage qualified electronic signature (QES) workflows via a secure and customizable interface. This includes creating signing sessions, configuring webhooks for status updates, and retrieving verification results for audit or compliance checks.

API Playground:

Endpoints Overview

  1. Create Session Link: Initiates a QES signature session and returns a unique user signing URL.
  2. Configure Webhook: Registers a webhook to receive real-time updates for the onboarding session.
  3. Get Verification: Retrieves the full verification result for a specific onboarding session.

Sequence Diagram

The term “wizard” refers to the QES signing user interface that the end user completes after identification.

How to Prepare a PDF Document for QES

To ensure successful signing:

  1. Use Adobe Acrobat (Standard or Pro) to open your PDF.
  2. Go to Tools → Prepare Form.
  3. Insert at least one Signature Field where the user will sign.
    • The field must be a digital signature field (not just a form input).
  4. Add text fields (AcroFields) that can be dynamically filled during onboarding using fillform. These fields support placeholder variables to auto-populate identity data.
  5. Save the document and host it at a publicly accessible HTTPS URL.

Supported dynamic variables:

VariableDescription
${identification.firstName}First name of the user
${identification.lastName}Last name of the user
${identification.email}Email address
${identification.phoneNumber}Mobile number
${identification.birthDate}Date of birth
${identification.gender}Gender
${identification.personalNumber}Personal identifier
${identification.documentDetails.number}ID document number

These fields must have matching fieldIds in the fillForm array passed to the API. Onboarding will then substitute them with the correct values. For example:

"fillForm": [
  { "fieldId": "firstName", "value": "John" },
  { "fieldId": "email", "value": "john@example.com" }
],
"signForms": [{
      "fieldId": "Signature1",
      "actorId": "userToIdentify"
    },{
      "fieldId": "Signature2",
      "actorId": "userToIdentify"
    }]
Only AcroForm-compatible PDFs are supported. PDFs generated with third-party editors may not be recognized.

Authentication

To access the Address Verification API, authentication is required. A Bearer Token must be included in every request.

  • Tokens are valid for 60 minutes and must be refreshed after expiration.
  • Refer to the Authentication for detailed steps on obtaining a token.
  • Include the token in the Authorization header as follows:

Authorization: Bearer YOUR_ACCESS_TOKEN

API Base URL

https://api-umbrella.io/api/services

Endpoint

POST /onboarding/createSessionLink

Description

Starts a QES signing session for a specified user. Returns a URL that redirects the user to the signing wizard. The backend will send this session link to the user for document signing.

Required Headers

HeaderValue
Content-Typeapplication/json
AuthorizationBearer EXAMPLE_TOKEN_1234567890abcdef

Request Body Parameters

Response Structure

Example Request

{
  "email": "support@idcanopy.com",
  "phoneNumber": "+436508021530",
  "redirectUrl": "https://example.com/onboarding/success",
  "docUrl": "https://cdn.idcanopy.com/pdf/onb-t3.pdf",
  "signForms": [{
      "fieldId": "Signature1",
      "actorId": "userToIdentify"
    },{
      "fieldId": "Signature2",
      "actorId": "userToIdentify"
    }],
    "fillForm": [{
        "fieldId": "name",
        "value": "${identification.firstName}"
    },{
        "fieldId": "surname",
        "value": "${identification.lastName}"
    }]
}

Example Response

{
  "status": true,
    "data": {
        "requestId": "123e4567-e89b-12d3-a456-426614174000",
        "url": "https://example.com/api/v2/actorTrip/urlback?t=EXAMPLE_TOKEN",
        "expiresAfter": "2025-07-30T08:55:52.520909994Z"
    }
}
To enable successful qualified signing, the document must include AcroForm-compatible signature fields created with Adobe Acrobat. Clients are responsible for preparing their own PDF templates and hosting them at a secure public URL.

2. Configure Webhook

Endpoint

POST /onboarding/configureWebhook

Description

Registers a webhook URL to receive onboarding status updates such as completed verification, signing, or failures.

Required Headers

HeaderValue
Content-Typeapplication/json
AuthorizationBearer EXAMPLE_TOKEN_1234567890abcdef

Request Body Parameters

Response Structure

Example Request

{
  "webhookUrl": "https://api.idcanopy.com/webhooks/onboarding",
  "metadata": {
        "authHeader": {
            "Authorization": "Bearer EXAMPLE_TOKEN_1234567890abcdef",
            "Api-Key": "fQVZSAp18GqvbwId8LotQl"
        }
    }
}

Example Response

{
  "status": true,
  "data": {
    "id": "74884fe3-c9e1-4462-b60f-c461e422000c",
    "url": "https://api.idcanopy.com/webhooks/onboarding",
    "createdAt": "2025-05-08T16:39:28.339Z"
  }
}

Webhook Event Payload Example

When your webhook receives a status update, the payload will look like this:

{
  "requestId": "xxxxxxxxx",
  "type": "STATUS_UPDATE",
  "status": "COMPLETED"
}

The status field in the webhook payload indicates the outcome of the onboarding session. Possible values are:

  • COMPLETED: The onboarding and signing process finished successfully.
  • FAILED: The process failed due to an error or unsuccessful verification.
  • CANCELLED: The process was cancelled by the user or system.

3. Get Verification

Endpoint

GET /onboarding/getVerification/{sessionId}

Description

Retrieves identity and signature verification results for a given onboarding session ID.

Required Headers

HeaderValue
Content-Typeapplication/json
AuthorizationBearer EXAMPLE_TOKEN_1234567890abcdef

URL Path Parameters

Response Structure

For audit and compliance, focus on these fields from the verification result:

  • signature.signedAt: timestamp of when the document was signed.
  • signature.signedResource.resourceUrl: download link to the signed document.
  • identification.status: final KYC/identification outcome.
  • identification.personData: extracted personal details.
  • identification.validationDetail: shows which fields were validated and how (e.g. OTP, document).

Example Response (Completed)

Example Response (Failed)

Example Response (Error)

Error Handling

Standardized error codes and messages are returned to indicate issues with requests or processing.

Example Error Response

{
  "error": {
    "code": "INVALID_SESSION",
    "message": "The provided session ID is invalid or expired."
  }
}

Common Errors

CodeDescription
INVALID_SESSIONSession ID does not exist or is expired
MISSING_PARAMETERSRequired input fields are not provided
UNAUTHORIZEDInvalid or missing API key/token
INTERNAL_ERRORUnexpected error during processing
UNSUPPORTED_FLOWRequested flow is not supported by provider

Environment & Testing

Base URLs

EnvironmentBase URL
Sandboxhttps://sandbox-umbrella-api.azurewebsites.net/api/services
Productionhttps://api-umbrella.io/api/services

⚠️ All test flows use mock data and static PDFs unless otherwise configured.