Skip to Content
WebhooksKYC Application Approved

KYC Application Approved

This event is sent when a KYC application has been successfully approved.

Event Type

KYC_APPLICATION_APPROVED

Response Body

{ "event": "KYC_APPLICATION_APPROVED", "workflowName": "Basic Individual", "workflowId": "9ff9668b-460b-45bc-a5cf-6f537101e457", "invitationId": "bb162d14-b69b-4db5-bc49-f2d0e5cbd4c1", "details": { "id": "694bb149-fcc5-463a-baca-71f88f045200", "formId": "9ff9668b-460b-45bc-a5cf-6f537101e457", "status": "APPROVED", "values": [ { "id": "9bae936a-0908-4455-af9f-ae87b53e41e9", "value": { "file": { "key": "UrrkfDxhXb/1d207d52-055b-4169-bd79-3f11fc1b39b6.jpeg", "url": "https://storage.datawise.ai/kyc-api-dev/...", "etag": "5b727c0d018afd4fbfabe08286524291", "size": 231674, "s3Key": "1d207d52-055b-4169-bd79-3f11fc1b39b6", "prefix": "UrrkfDxhXb/", "extension": "jpeg", "originalFileName": "sample_emirates_id.jpeg" }, "idMetadata": { "sex": "MALE", "birthday": "4-10-1989", "lastName": "MUHAMMAD YASIN", "firstName": "ZEESHAN YASIN", "nationality": "PAK", "documentNumber": "105724902", "documentExpirationDate": "22-5-2023" }, "documentType": "IDENTIFICATION_DOCUMENT" }, "status": "APPROVED", "groupId": "38f1309c-3a8f-4fda-a378-46a8c8716b04", "createdAt": "2026-01-16T13:51:26.99889", "elementId": "291709ef-41c7-49ea-b469-b8442f150fcf", "updatedAt": "2026-01-16T13:51:26.998914", "groupTitle": "Passport", "elementHint": "Drop your identification file here", "elementName": "Identification File", "elementSlug": "identification-file-1", "elementType": "ID_FILE", "elementConfig": {}, "groupPosition": 0, "formSubmissionId": "694bb149-fcc5-463a-baca-71f88f045200" } ], "amlReport": { "uk": [], "japan": [], "usSdn": [], "status": "NO_MATCH", "usNonSdn": [], "swissSECO": [], "euFinancial": [], "euTravelBan": [], "unConsolidated": [], "canadaConsolidated": [], "australiaConsolidated": [] }, "createdAt": "2026-01-16T13:51:26.997158", "updatedAt": "2026-01-16T13:51:26.997195", "userEmail": "ttest@example.com", "geoLocation": { "ip": "87.202.99.30", "city": "Thessaloniki", "country_code": "GR", "country_name": "Greece", "latitude": 40.64611053466797, "longitude": 22.94972038269043 }, "invitationId": "bb162d14-b69b-4db5-bc49-f2d0e5cbd4c1", "submissionIp": "87.202.99.30", "formExpiresAt": null, "rejectionReasons": null } }

Fields

Top Level

  • event: Always "KYC_APPLICATION_APPROVED" for this event type
  • workflowName: Name of the workflow that was completed
  • workflowId: ID of the workflow
  • invitationId: ID of the invitation that was sent (matches the ID returned from Send Invitation)
  • details: Contains the full application details

Details Object

  • id: Unique identifier for the form submission
  • formId: ID of the form/workflow
  • status: Status of the application (always "APPROVED" for this event)
  • values: Array of all form field values submitted by the user
  • amlReport: AML (Anti-Money Laundering) check results
  • userEmail: Email address of the user who completed the form
  • geoLocation: Geographic location information from the submission
  • invitationId: Reference to the invitation ID
  • submissionIp: IP address from which the form was submitted
  • createdAt: Timestamp when the submission was created
  • updatedAt: Timestamp when the submission was last updated

Values Array

Each item in the values array contains:

  • id: Unique identifier for the field value
  • value: The actual value submitted (can be a string, file object, or metadata object)
  • status: Approval status of this specific field
  • elementId: ID of the form element
  • elementName: Human-readable name of the form element
  • elementType: Type of form element (e.g., ID_FILE, ID_NUMBER, ID_FIRST_NAME)
  • groupTitle: Title of the form group this field belongs to
  • createdAt: Timestamp when this value was created
  • updatedAt: Timestamp when this value was last updated

Usage

When you receive this event:

  1. Verify the webhook: Check the x-smart-kyc-api-key header matches your API key
  2. Process the data: Extract the relevant information from the details object
  3. Update your system: Mark the user as verified in your system
  4. Store the data: Save the submission ID and relevant details for future reference
  5. Respond quickly: Return a 2xx status code as soon as possible

Example Handler

app.post('/webhook', (req, res) => { // Verify API key const apiKey = req.headers['x-smart-kyc-api-key']; if (apiKey !== process.env.SMART_KYC_API_KEY) { return res.status(401).send('Unauthorized'); } const { event, workflowId, invitationId, details } = req.body; if (event === 'KYC_APPLICATION_APPROVED') { // Process approved application console.log(`Application ${details.id} approved for invitation ${invitationId}`); // Update user status in your database await updateUserStatus(invitationId, 'APPROVED', details); // Trigger any follow-up actions await notifyUser(details.userEmail, 'APPROVED'); } res.status(200).send('OK'); });
Last updated on