Keyless Agent Endpoints

The following endpoints are available for IDV Bridge On-Premise (Keyless Agent)

1. GET /health-check

Purpose: Check if the service is running. Response:

{
  "version": "string",
  "status": "ok"
}

2. POST /v1/offline-enrollment

Purpose: Generate client and server enrollment states from an image.

The Server state is required to register the new user on the Keyless backend, while Client state enables the account recovery flow for ongoing authentication on a camera enabled device via the Mobile SDK.

Request:

  • Headers:

    • Exif-Transpose (boolean, optional) — whether to rotate the image according to EXIF metadata.

    • Content-Encoding (optional, const="base64") — if the image is base64 encoded.

    • Scenario (required)"SELFIE" | "TRUSTED_SOURCE" | "DOCUMENT".

  • Body: image/* — binary (JPEG, PNG, BMP, etc.)

Responses:

  • 200: Returns OfflineEnrollment

  • 422: Returns FilterTriggered

  • 429: Too many concurrent enrollments

scenario definitions are available here.


3. POST /v1/online-enrollment

Purpose: Enroll a user directly from an image (without server state).

Client state enables the account recovery flow for ongoing authentication on a camera enabled device via the Mobile SDK.

Request: Same headers/body as offline enrollment. Responses:

  • 200: Returns OnlineEnrollment

  • 409: Not configured for online enrollment

  • 422: Recognition filter error

  • 429: Too many concurrent enrollments


Schemas

OfflineEnrollment

Field
Type
Description

keylessId

string

Unique user ID

clientState

string

Opaque data for the Keyless SDK to allow a user to authenticate on a camera enabled device for the accoutn recovery flow.

serverState

string

Uncommitted server data; required to register the new user on the Keyless backend.

OnlineEnrollment

Field
Type
Description

keylessId

string

Unique user ID

clientState

string

Opaque data for the Keyless SDK to allow a user to authenticate on a camera enabled device for the accoutn recovery flow.

FilterTriggered

Field
Type
Description

title

string

Always "Filter Triggered"

statusCode

integer

Always 422

detail

string

Explanation of why the filters failed

filters

object

See below

Filters

Each property represents a possible filter and has a status:

  • TRIGGERED – filter was triggered (failure)

  • NOT_TRIGGERED – filter passed

  • TURNED_OFF – filter not active

  • CANNOT_RUN_ON_FRAME – preprocessing failure

Filter fields:

Filters
Description

faceIsOccluded

The facial features are in part covered by something to the extent that a biometric template could not be detected.

faceMissing

No face was detected in the image.

faceMultiple

More than one face was detected.

facePartial

Only a partial face was detected, for example the selfie may have been off-center.

faceTooSmall

A face was detected, but the face was too small to allow an accurate biometric template to be generated.

imageBlackAndWhite

The image is black and white.

Example 422 Error

{
  "title": "Filter Triggered",
  "statusCode": 422,
  "detail": "Face occluded by object",
  "filters": {
    "faceIsOccluded": "TRIGGERED",
    "faceMissing": "NOT_TRIGGERED",
    "faceMultiple": "NOT_TRIGGERED",
    "facePartial": "NOT_TRIGGERED",
    "faceTooSmall": "NOT_TRIGGERED",
    "imageBlackAndWhite": "NOT_TRIGGERED"
  }
}

Last updated

Was this helpful?