A single eKYC record with provider routing, stored session metadata, and an audit trail.
This is the minimum data shape needed for the MVP.
Provider payload or mock payload stored as JSON.
{
"status": "success",
"verification": {
"id": "bae1e2e0-8863-4a99-bd5c-fac621f2af03",
"code": 9001,
"person": {
"gender": null,
"idNumber": null,
"lastName": "HERMANNS",
"addresses": [
{
"fullAddress": "41236 MÖNCHENGLADBACH MÜHLENSTRASSE 81"
}
],
"firstName": "BENJAMIN",
"citizenship": null,
"dateOfBirth": "1988-07-12",
"nationality": "DE",
"yearOfBirth": null,
"placeOfBirth": null,
"pepSanctionMatch": "possible match"
},
"reason": null,
"status": "approved",
"comments": [],
"document": {
"type": "ID_CARD",
"state": null,
"number": "L6YXCFPVR",
"country": "DE",
"validFrom": "2021-06-24",
"validUntil": "2031-06-23"
},
"attemptId": "5d0595eb-891a-4080-9156-2a389cc09c77",
"endUserId": "ef8e8116-7aa1-46bc-af59-0da5bf6c8bab",
"riskScore": {
"score": 0.0020733861077332954
},
"reasonCode": null,
"riskLabels": [],
"vendorData": null,
"decisionTime": "2026-07-16T18:17:13.224350Z",
"acceptanceTime": "2026-07-16T18:16:22.931938Z",
"submissionTime": "2026-07-16T18:17:07.296587Z",
"additionalVerifiedData": {}
},
"technicalData": {
"ip": "47.64.51.179"
}
}
Every important status change should leave an audit trail.
{
"status": "success",
"verification": {
"id": "bae1e2e0-8863-4a99-bd5c-fac621f2af03",
"code": 9001,
"person": {
"gender": null,
"idNumber": null,
"lastName": "HERMANNS",
"addresses": [
{
"fullAddress": "41236 MÖNCHENGLADBACH MÜHLENSTRASSE 81"
}
],
"firstName": "BENJAMIN",
"citizenship": null,
"dateOfBirth": "1988-07-12",
"nationality": "DE",
"yearOfBirth": null,
"placeOfBirth": null,
"pepSanctionMatch": "possible match"
},
"reason": null,
"status": "approved",
"comments": [],
"document": {
"type": "ID_CARD",
"state": null,
"number": "L6YXCFPVR",
"country": "DE",
"validFrom": "2021-06-24",
"validUntil": "2031-06-23"
},
"attemptId": "5d0595eb-891a-4080-9156-2a389cc09c77",
"endUserId": "ef8e8116-7aa1-46bc-af59-0da5bf6c8bab",
"riskScore": {
"score": 0.0020733861077332954
},
"reasonCode": null,
"riskLabels": [],
"vendorData": null,
"decisionTime": "2026-07-16T18:17:13.224350Z",
"acceptanceTime": "2026-07-16T18:16:22.931938Z",
"submissionTime": "2026-07-16T18:17:07.296587Z",
"additionalVerifiedData": {}
},
"technicalData": {
"ip": "47.64.51.179"
}
}
{
"id": "bae1e2e0-8863-4a99-bd5c-fac621f2af03",
"code": 7002,
"action": "submitted",
"feature": "selfid",
"attemptId": "5d0595eb-891a-4080-9156-2a389cc09c77",
"endUserId": "ef8e8116-7aa1-46bc-af59-0da5bf6c8bab",
"vendorData": ""
}
{
"id": "bae1e2e0-8863-4a99-bd5c-fac621f2af03",
"code": 7001,
"action": "started",
"feature": "selfid",
"attemptId": "5d0595eb-891a-4080-9156-2a389cc09c77",
"endUserId": "ef8e8116-7aa1-46bc-af59-0da5bf6c8bab",
"vendorData": ""
}
{
"provider": "veriff",
"verificationUrl": "https://saas.veriff.com/v/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3ODQyMjU3ODIsInNlc3Npb25faWQiOiJiYWUxZTJlMC04ODYzLTRhOTktYmQ1Yy1mYWM2MjFmMmFmMDMiLCJpaWQiOiJhNjQ2ZWMzNC04ZDJkLTRiODgtOGExZi1iMDQ4MDI2NDg2NmIiLCJ2aWQiOiJjNWJmMWMzOS04ODQ0LTQ0MGMtYjNjNi00ZGFmZTIwNzZlMTgiLCJjaWQiOiJzYWFzLTQiLCJleHAiOjE3ODQ4MzA1ODJ9.Zstfsdq3PgX6G2lZq1bX9q3ZV8AxXdgpCIqK-4_0b6o",
"providerSessionId": "bae1e2e0-8863-4a99-bd5c-fac621f2af03"
}
{
"provider": "veriff",
"countryCode": "DE",
"dateOfBirth": "1988-07-12T00:00:00.000Z",
"documentType": "national_id",
"applicantName": "Benjamin Hermanns",
"applicantSurname": "Hermanns",
"applicantGivenName": "Benjamin",
"applicantMiddleName": null
}