Verify Contact
curl --request POST \
--url https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact \
--header 'X-Auth-Token: <x-auth-token>' \
--header 'platform: <platform>' \
--header 'uuid: <uuid>'import requests
url = "https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact"
headers = {
"platform": "<platform>",
"uuid": "<uuid>",
"X-Auth-Token": "<x-auth-token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {platform: '<platform>', uuid: '<uuid>', 'X-Auth-Token': '<x-auth-token>'}
};
fetch('https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-Auth-Token: <x-auth-token>",
"platform: <platform>",
"uuid: <uuid>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("platform", "<platform>")
req.Header.Add("uuid", "<uuid>")
req.Header.Add("X-Auth-Token", "<x-auth-token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact")
.header("platform", "<platform>")
.header("uuid", "<uuid>")
.header("X-Auth-Token", "<x-auth-token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["platform"] = '<platform>'
request["uuid"] = '<uuid>'
request["X-Auth-Token"] = '<x-auth-token>'
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "Contact verified successfully.",
"data": {
"type": "EMAIL",
"verified": true,
"rawProviderResponse": "deliverable"
}
}API Endpoints
Verify Contact
Notifies the platform that a customer email or phone has been verified externally, triggering the full KYC lifecycle.
POST
/
compliance
/
external-provider
/
verify-contact
Verify Contact
curl --request POST \
--url https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact \
--header 'X-Auth-Token: <x-auth-token>' \
--header 'platform: <platform>' \
--header 'uuid: <uuid>'import requests
url = "https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact"
headers = {
"platform": "<platform>",
"uuid": "<uuid>",
"X-Auth-Token": "<x-auth-token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {platform: '<platform>', uuid: '<uuid>', 'X-Auth-Token': '<x-auth-token>'}
};
fetch('https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-Auth-Token: <x-auth-token>",
"platform: <platform>",
"uuid: <uuid>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("platform", "<platform>")
req.Header.Add("uuid", "<uuid>")
req.Header.Add("X-Auth-Token", "<x-auth-token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact")
.header("platform", "<platform>")
.header("uuid", "<uuid>")
.header("X-Auth-Token", "<x-auth-token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant}.fincode.software/api/v6/services/compliance/external-provider/verify-contact")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["platform"] = '<platform>'
request["uuid"] = '<uuid>'
request["X-Auth-Token"] = '<x-auth-token>'
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "Contact verified successfully.",
"data": {
"type": "EMAIL",
"verified": true,
"rawProviderResponse": "deliverable"
}
}Use this endpoint when your agent handles email or phone verification independently, instead of having the platform send the verification link or OTP to the customer.
Calling this endpoint marks the outstanding email or phone KYC requirement as fulfilled and triggers the full KYC lifecycle automatically — including risk score adjustment, compliance decision re-evaluation, and account approval if all requirements are met.
If neither setting is enabled, the platform sends the verification automatically when you call Initiate Compliance Action and this endpoint is not needed.
When to Use This Endpoint
This endpoint is relevant when your agent has one or both of the following settings enabled on the agent configuration:| Setting | Behaviour when enabled |
|---|---|
doNotForwardEmailVerification | the platform does not send the email verification link. Your system must verify the customer’s email and call this endpoint with type=EMAIL. |
doNotForwardPhoneVerification | the platform does not send the phone OTP. Your system must verify the customer’s phone and call this endpoint with type=PHONE_NUMBER. |
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
userId | string | Yes | The customer’s user ID returned from the register-customer endpoint |
type | enum | Yes | The contact type to verify. One of: EMAIL, PHONE_NUMBER |
Response
The responsedata object contains the verification result:
| Field | Type | Description |
|---|---|---|
type | enum | The contact type that was verified. One of: EMAIL, PHONE_NUMBER |
verified | boolean | Whether the requirement was marked as fulfilled |
rawProviderResponse | string | The raw response from the verification provider |
Behaviour
When this endpoint is called:- the platform locates the outstanding KYC requirement for the specified
userIdand contacttype. - The requirement is marked as fulfilled.
- The customer’s risk score is updated to reflect the completed requirement.
- The compliance decision is re-evaluated against the configured thresholds.
- If the customer meets the approval threshold, their account is confirmed automatically.
userId and type, the call succeeds but no KYC action is taken.Headers
Authentication token for the API request
Query Parameters
The customer's userId returned from the register-customer endpoint
The contact type to mark as verified
Available options:
EMAIL, PHONE_NUMBER 