Webhook Guide

Webhook

Webhook provides real-time notifications when specific events occur.

Webhook Integration

  1. Log in to the dashboard and go to the [Settings] menu.

  2. In the left-side navigation menu, click the Access Management option under the General section.

  3. Enter the desired webhook address in the [Webhook URL] field.

  4. Click the [Save] button to complete the process.

Webhook Triggers

"Submission data" only returns entered information. In cases when you do not include any optional information such as "cf1" or "wallet_address" in submission data, the response object does not include them either.

webhook_trigger
KYC Status
Description

submit

Pending

KYC submission is created and waiting for manual review. *No webhook for 'Submit' status

approved

Approved

KYC approved

rejected

Rejected

KYC rejected

updated

-

KYC data has been updated

aml

Approved

AML screening results

delete

-

KYC data has been deleted

injection

-

Type of webhook passed

KYC Status Change

If webhook_trigger is one of [approved, rejected, updated], the three additional parameters below are returned.

  • However, this only applies if the relevant data exists in the submission data. (gender, date_of_birth, nationality)

Key
Value
Description

webhook_trigger

submit, approved, rejected, updated

submit: KYC is at pending status after submission approved: KYC approved at the moment of submission or turned into approved from pending rejected: KYC rejected at the moment of submission or turned into rejected from pending updated: Data has been updated

kyc_result

KYC result object

kyc_result.status

approved / rejected

KYC result

kyc_result.update_at

{update_at}

The time KYC status has changed to approved or rejected(UTC+0)

kyc_result.comment

{comment}

Rejected reason ※Only when the webhook_trigger is rejected.

submission_id

{submission_id}

Unique verifying ID for each submission

applicant_id

{applicant_id}

Unique verifying ID given to users, it is transmitted only when the KYC status is 'approved'.

created_at

{create_at}

The moment when a KYC submission_id has made (UTC+0)

email

{email}

Email address of a KYC applicant

userid

{userid}

Unique ID for each KYC applicant created from client side (≠ submission id)

cf

object

cf1 ~ cf3 data bundle object submitted together with Step 1 Input data

cf.cf1

{cf1}

Data submitted in field cf1

cf.cf2

{cf2}

Data submitted in field cf2

cf.cf3

{cf3}

Data submitted in field cf3

account_email

{account_email}

Admin account attempted to delete submission

delete_time

{delete_time}

Date and time of deletion of submissions

comment

{comment}

Comment left when deleting a submission

action

Injection information object

action.type

address

Injection type

action.created_at

{created_at}

Injection execution time

gender

{gender}

Gender of submitted user (male or female)

date_of_birth

{YYYY-MM-DD}

Submitted user's date of birth (in YYYY-MM-DD format)

nationality

{nationality}

Nationality of submitted user (country code in 3-letter format: ISO alpha3 format)

tokenId

{tokenId}

TokenID used when submitting live-form in private mode.

AML Results

AML result and submission data are returned when AML screening is completed, no screening for rejected KYCs. AML Screening is performed only when KYC is approved and the results are returned.

Key
Value
Description

webhook_trigger

aml

Webhook trigger type

submission_id

{submission_id}

Unique verifying ID for each submission

email

{email}

Email address of a KYC applicant

userid

{userid}

Unique ID for each KYC applicant created from client side (≠ submission id)

aml_result

AML result object

aml_result.currentstatus

Not Screened / Red Flag

AML screening result

aml_result.risk_level_summary

Not Screened/ HIGH/MEDIUM/LOW

AML result level

created_at

{create_at}

The moment when a KYC submission_id has made (UTC+0)

cf

object

cf1 ~ cf3 data bundle object submitted together with Step 1 Input data

cf.cf1

{cf1}

Data submitted in field cf1

cf.cf2

{cf2}

Data submitted in field cf2

cf.cf3

{cf3}

Data submitted in field cf3

tokenId

{tokenID}

Returned when tokenId is submitted

{
	"webhook_trigger":"aml",
	"submission_id":"string",
	"email":"sample@test.com",
	"userid":"test",
	"cf":{
		"cf1":"cf1",
		"cf2":"cf2",
		"cf3":"cf3"
	},
	"aml_result":{
		"currentstatus":"Not Screened",
		"risk_level_summary":"Not Screened"
	},
	"tokenId": "test"
}

Approved

Key
Value
Description
Required

webhook_trigger

approved

approved: KYC was automatically approved upon submission or a pending KYC was approved

kyc_result

object

KYC submission result object

kyc_result.status

{kyc_result.status}

KYC review result(approved or reject)

kyc_result.updated_at

{kyc_result.updated_at}

The moment the KYC submission status was changed to approved or rejected (UTC+0)

kyc_result.created_at

{kyc_result.created_at}

The date and time the KYC was submitted (UTC+0)

kyc_result.kyc_result_at

{kyc_result.kyc_result_at}

The date and time when the KYC result was first determined, displayed only if approved/rejected (UTC+0)

kyc_result.pending_at

{kyc_result.pending_at}

The date and time the KYC was submitted as Pending (UTC+0)

kyc_result.reviewer

{kyc_result.reviewer}

system: AI reviewed agent : Agent reviewed

applicant_id

{applicant_id}

Unique identifier assigned to prevent duplicate submissions, provided only when KYC status is approved

submission_id

{submission_id}

Client-specific identifier for the KYC submitter (≠ submission id)

email

{email}

The Submitter's email

tokenId

{tokenId}

Token ID used when submitted in live-form mode in private mode

cf

object

Object containing cf1 ~ cf3 data submitted with Step1 Input data

cf.cf1

{cf.cf1}

Data submitted in the cf1 field

cf.cf2

{cf.cf2}

Data submitted in the cf2 field

cf.cf3

{cf.cf3}

Data submitted in the cf3 field

userid

{userid}

Client-specific identifier for the KYC submitter (≠ submission id)

age_group

{age_group}

Age group of the submitter (minor, early teens, teenager, adult)

gender

{gender}

Gender of the submitted user (male or female)

date_of_birth

{date_of_birth}

Date of birth of the submitted user (in YYYY-MM-DD format)

nationality

{nationality}

Nationality of the submitted user (3-letter country code in ISO alpha-3 format)

ipAddress

{ipAddress}

The submitter's IP address

fullName

{fullName}

The submitter's full Name

idType

{idType}

ID Document Type

issuingCountry

{issuingCountry}

Issuing Country

issueDate

{issueDate}

Issue Date

expireDate

{expireDate}

Expiry Date

identityNumber

{identityNumber}

Resident Registration Number

documentNumber

{documentNumber}

Document Unique Number

addtional_list

[{addtional_list}]

Regarding the Additional form set in the dashboard, the data entered by the user during the KYC process is included in the following request types:

  • When queried by a specific submissionId or email

  • When queried with request_type as 'others'

addtional_list.answer

{addtional_list.answer}

Name of each item in the Additional form

addtional_list.inputValue

{addtional_list.inputValue}

User input value for each item

addtional_list.blockType

{addtional_list.blockType}

Data type for each item

Example


{
    "webhook_trigger": "approved",
    "kyc_result": {
      "status": "string",
      "updated_at": "string",
      "created_at": "string",
      "kyc_result_at": "string",
      "pending_at" : "string",
      "reviewer": "string"
    },
    "applicant_id": "string",
    "submission_id": "string",
    "email": "string",
    "tokenId" : "string",
    "cf": {
      "cf1": "string",
      "cf2": "string",
      "cf3": "string"
    },
    "userid": "string",
    "age_group" : "string",
    "gender": "string",
    "date_of_birth": "string",
    "nationality": "string",
    "ipAddress": "string",
    "fullName": "string",
    "idType": "string",
    "issuingCountry": "string",
    "issueDate": "string",
    "expireDate": "string",
    "identityNumber" : "string",
    "documentNumber" : "string",
    "additional_list" : {
        "answer" : "string",
        "inputValue" : "string",
        "blockType" : "string"
    }
  }

Rejected

Key
Value
Description
Required

webhook_trigger

rejected

rejected: KYC was automatically rejected upon submission or a pending KYC was rejected

submission_id

{submission_id}

Unique identifier for each KYC submission

applicant_id

{applicant_id}

Unique identifier assigned to prevent duplicate submissions, provided only when KYC status is approved

email

{email}

The submitter's email address

kyc_result

object

KYC submission result object

kyc_result.status

{kyc_result.status}

KYC review result (approved or reject)

kyc_result.updated_at

{kyc_result.updated_at}

Time when KYC submission status changed to approved or rejected (UTC+0)

kyc_result.comment

[{kyc_result.comment

Reject Message

kyc_result.commentCode

{kyc_result.commentCode}

Reject Comment Code

cf

object

Object containing cf1 ~ cf3 data submitted with Step1 Input data

cf.cf1

{cf.cf1}

Data submitted in the cf1 field

cf.cf2

{cf.cf2}

Data submitted in the cf2 field

cf.cf3

{cf.cf3}

Data submitted in the cf3 field

userid

{userid}

Client-specific identifier for the KYC submitter (≠ submission id)

tokenId

{tokenId}

Token ID used when submitted in live-form mode in private mode

ipAddress

{ipAddress}

The submitter's IP address

Example

{
    "webhook_trigger": "rejected",
    "kyc_result": {
      "status": "string",
      "comment": "string",
      "updated_at": "string",
      "commentCode": "string"
    },
    "submission_id": "string",
    "applicant_id" : "string",
    "email": "string",
    "cf": {
      "cf1": "string",
      "cf2": "string",
      "cf3" : "string"
    },
    "userid": "string",
    "tokenId" : "string",
    "ipAddress": "string"
  }

Updated

Key
Value
Description
Required

webhook_trigger

updated

updated: Information of the submitted KYC was updated

submission_id

{submission_id}

Unique identifier for each KYC submission

email

{email}

The submitter's email address

data

object

KYC Data Object

data.update

[Array]

Updated Field List

data.kyc_result

{data.kyc_result}

KYC Submitted Result

data.created_at

{data.created_at}

The date and time the KYC was submitted (UTC+0)

data.kyc_result_at

{data.kyc_result_at}

The time when the KYC result was first determined, displayed only if approved/rejected (UTC+0)

data.pending_at

{data.pending_at}

The moment the KYC submission status became pending (UTC+0)

data.reviewer

{data.reviewer}

system: AI reviewed agent: Agent reviewed

data.kyc_result

{data.kyc_result}

KYC Submitted Result

admin

{admin}

Admin email updated from the dashboard

update_time

{update_time}

Time updated from the dashboard

userid

{userid}

Client-specific identifier for the KYC submitter (≠ submission id)

tokenId

{tokenId}

Token ID used when submitted in live-form mode in private mode

age_group

{age_group}

Age group of the submitter (minor, early teens, teenager, adult)

gender

{gender}

Gender of the submitted user (male or female)

date_of_birth

{date_of_birth}

Date of birth of the submitted user (in YYYY-MM-DD format)

nationality

{nationality}

Nationality of the submitted user (3-letter country code in ISO alpha-3 format)

ipAddress

{ipAddress}

The submitter's IP address

fullName

{fullName}

The submitter's full name

idType

{idType}

ID Card Type

issuingCountry

{issuingCountry}

Issuing Country

issueDate

{issueDate}

Issue Date

expireDate

{expireDate}

Expiry Date

identityNumber

{identityNumber}

Resident Registration Number

documentNumber

{documentNumber}

Document Unique Number

additional_list

[{addtional_list}]

Regarding the Additional form set in the dashboard, the data entered by the user during the KYC process is included in the following request types:

  • When queried by a specific submissionId or email

  • When queried with request_type as 'others'

additional_list.answer

{additional_list.answer}

Name of each item in the Additional form

additional_list.inputValue

{additional_list.inputValue}

User input value for each item

additional_list.blockType

{additional_list.blockType}

Data type for each item

Example

{
	"webhook_trigger":"updated",
	"submission_id":"string",
	"email":"test@argosidentity.com",
	"data":
	{
		"update":
			[
				"idType",
				"issuingCountry",
				"fullName",
				"gender",
				"birthDate",
				"nationality",
				"kycStatus",
				"issueDate",
				"identityNumber"
			],
		"kyc_result":"rejected"
	},
	"admin":"sample@test.com",
	"update_time":"2024-06-21T01:47:12.321Z",
	"age_group":"N/A",
	"gender":"female",
	"date_of_birth":"1999-10-19",
	"nationality":"KOR",
	"userid": "test",
	"tokenId": "test"
}

Submit

Key
Value
Description
Required

webhook_trigger

submit

submit: KYC submission completed and in 'pending' status

submission_id

{submission_id}

Unique identifier for each KYC submission

created_at

{created_at}

Updated Field List

cf

object

Object containing cf1 ~ cf3 data submitted with Step1 Input data

cf.cf1

{cf.cf1}

Data submitted in the cf1 field

cf.cf2

{cf.cf2}

Data submitted in the cf2 field

cf.cf3

{cf.cf3}

Data submitted in the cf3 field

userid

{userid}

Client-specific identifier for the KYC submitter (≠ submission id)

tokenId

{tokenId}

Token ID used when submitted in live-form mode in private mode

ipAddress

{ipAddress}

The submitter's IP address

email

{email}

The submitter's Email Address

Example

{
    "webhook_trigger": "submit",
    "created_at": "string",
    "submission_id": "string",
    "email": "string",
    "cf": {
      "cf1": "string",
      "cf2": "string",
      "cf3": "string"
    },
    "userid": "string",
    "tokenid": "string",
    "ipAddress": "string"
  }

Delete

Name
Value
Description
Required

webhook_trigger

delete

Type of webhook passed delete: When KYC submission is deleted

submission_id

{submission_id}

Unique classification value for each KYC submission

account_email

{account_email}

Admin account attempted to delete submission

delete_time

{delete_time}

Date and time of deletion of submissions

comment

{comment}

Comment left when deleting a submission

Example

{
	"webhook_trigger":"delete",
	"submission_id":"string",
	"account_email":"sample@test.com",
	"delete_time":"2024-06-21T01:54:47.481Z",
	"comment":"test"
}

Injection

Name
Value
Description
Required

webhook_trigger

injection

Type of webhook passed

action

Injection information object

action.type

address

Injection type

action.created_at

{created_at}

Injection execution time

submission_id

{submission_id}

Unique ID generated during KYC process (submission_id)

email

{email}

Email submitted during KYC process

kyc_status

{kyc_status}

KYC submission results

applicant_id

{applicant_id}

Unique identification ID given to check for duplicate submissions - Delivered only when KYC Status is Approved.

userid

{userid}

User ID used internally by the company, used to check which user submitted KYC in the existing system. ※ It is provided as an option and is sent when you submit KYC including the userid parameter.

cf1

{cf1}

Data submitted in field cf1

cf2

{cf2}

Data submitted in field cf2

cf3

{cf3}

Data submitted in field cf3

tokenId

{tokenId}

Returned when tokenId is submitted

Example

{
	"webhook_trigger":"injection",
	"action":{
		"type":"address",
		"created_at":"2024-06-21T03:24:57.565Z"
	},
	"submission_id":"string",
	"email":"sample@test.com",
	"kyc_status":"approved",
	"applicant_id":"string",
	"cf1":"cf1",
	"cf2":"cf2",
	"cf3":"cf3",
	"userid":"test",
	"tokenId":"test"
}

Sample Data

submit

{
    uri: 'https://your-endPoint-url.com',
    method: 'POST',
    body: {
        webhook_trigger:"submit", 
        kyc_result:{
            status:"rejected",
            created_at:"2023-07-06T02:01:03.494Z"
         },
        submission_id:"{submissionId}",
        projectId:"{projectId}",
        email:"test@sample.com",
        userid:"{userid}"
    },
    json: true
}

approved

{
    uri: 'https://your-endPoint-url.com',
    method: 'POST',
    body: {
        webhook_trigger:"approved", 
        kyc_result:{
            status:"rejected",
            comment:"Multiple invalid KYC attempts"
            updated_at:"2023-07-06T00:45:05.738Z"
         },
        submission_id:"{submissionId}",
        projectId:"{projectId}",
        email:"test@sample.com",
        userid:"{userid}"
    },
    json: true
}

rejected

{
    uri: 'https://your-endPoint-url.com',
    method: 'POST',
    body: {
        webhook_trigger:"approved", 
        kyc_result:{
            status:"rejected",
            comment:"Multiple invalid KYC attempts"
            updated_at:"2023-07-06T00:45:05.738Z"
         },
        submission_id:"{submissionId}",
        projectId:"{projectId}",
        email:"test@sample.com",
        userid:"{userid}"
    },
    json: true
}

updated

{
  uri: 'https://your-endPoint-url.com',
  method: 'POST',
  body: {
    kyc_result: { status: 'approved', updated_at: '2023-07-11T09:13:24.751Z' },
    email: 'test@sample.com',
    webhook_trigger: 'updated',
    submission_id: 'test_submissions_id',
    userid:{userid}
    
  },
  json: true
}

aml

{
    uri: 'https://your-endPoint-url.com',
    method: 'POST',
    body: {
         webhook_trigger: 'aml',
         submission_id: '{submissionId}',
         email: 'test@sample.com',
         userid:{userid}
         aml_result: {
               currentstatus: 'Not Screened',
               risk_level_summary: 'Not Screened'
         }
   },
    json: true
}

Delete

{
    uri: 'https://your-endPoint-url.com',
    method: 'DEL',
    body: {
        webhook_trigger:"delete", 
        submission_id:"{submissionId}",
        account email:"test@sample.com",
        delete_time:"2024-05-03T02:01:03.494Z"
    },
    json: true
}

Injection

{
    uri: 'https://your-endPoint-url.com',
    method: 'PUT',
    body: {
        webhook_trigger:"injection", 
        action:{
            type:"address",
            created_at:"2024-05-03T02:01:03.494Z"
         },
        submission_id:"{submissionId}",
        email:"test@sample.com",
        userid:"{userid}"
    },
    json: true
}

1. Bidirectional Encryption/Decryption for Output Data

When using the encryption option, both input and output require bidirectional encryption/decryption.

Output:

Return the encrypted result in the body.

Example:

  • response : {
    		...
    		body : "encrypted-string"
    }

Last updated