curl --request POST \
--url https://api.baselayer.com/issuance/identities/verifications \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-API-Key: <api-key>' \
--data '
{
"type": "INDIVIDUAL",
"individual": {
"first_name": "<string>",
"last_name": "<string>",
"dob": "2023-12-25",
"phone_number": "<string>",
"address": "1640 Riverside Drive, Hill Valley, CA 95420",
"national_id": "<string>",
"middle_name": "<string>",
"email": "<string>"
},
"reference_id": "<string>"
}
'import requests
url = "https://api.baselayer.com/issuance/identities/verifications"
payload = {
"type": "INDIVIDUAL",
"individual": {
"first_name": "<string>",
"last_name": "<string>",
"dob": "2023-12-25",
"phone_number": "<string>",
"address": "1640 Riverside Drive, Hill Valley, CA 95420",
"national_id": "<string>",
"middle_name": "<string>",
"email": "<string>"
},
"reference_id": "<string>"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-API-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'INDIVIDUAL',
individual: {
first_name: '<string>',
last_name: '<string>',
dob: '2023-12-25',
phone_number: '<string>',
address: '1640 Riverside Drive, Hill Valley, CA 95420',
national_id: '<string>',
middle_name: '<string>',
email: '<string>'
},
reference_id: '<string>'
})
};
fetch('https://api.baselayer.com/issuance/identities/verifications', 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://api.baselayer.com/issuance/identities/verifications",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'INDIVIDUAL',
'individual' => [
'first_name' => '<string>',
'last_name' => '<string>',
'dob' => '2023-12-25',
'phone_number' => '<string>',
'address' => '1640 Riverside Drive, Hill Valley, CA 95420',
'national_id' => '<string>',
'middle_name' => '<string>',
'email' => '<string>'
],
'reference_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.baselayer.com/issuance/identities/verifications"
payload := strings.NewReader("{\n \"type\": \"INDIVIDUAL\",\n \"individual\": {\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"dob\": \"2023-12-25\",\n \"phone_number\": \"<string>\",\n \"address\": \"1640 Riverside Drive, Hill Valley, CA 95420\",\n \"national_id\": \"<string>\",\n \"middle_name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"reference_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.baselayer.com/issuance/identities/verifications")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"INDIVIDUAL\",\n \"individual\": {\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"dob\": \"2023-12-25\",\n \"phone_number\": \"<string>\",\n \"address\": \"1640 Riverside Drive, Hill Valley, CA 95420\",\n \"national_id\": \"<string>\",\n \"middle_name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"reference_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.baselayer.com/issuance/identities/verifications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"INDIVIDUAL\",\n \"individual\": {\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"dob\": \"2023-12-25\",\n \"phone_number\": \"<string>\",\n \"address\": \"1640 Riverside Drive, Hill Valley, CA 95420\",\n \"national_id\": \"<string>\",\n \"middle_name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"reference_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"verification_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "INDIVIDUAL",
"state": "PENDING",
"environment": "sandbox",
"created_at": "2023-11-07T05:31:56Z",
"automated_verdict": "APPROVED",
"verdict": "APPROVED",
"terminal_reason": {
"state": "FAILED",
"message": "<string>"
},
"individual_ref": "<string>",
"business_ref": "<string>",
"business_operator_link_status": "VERIFIED",
"reference_id": "<string>",
"idempotency_key": "<string>",
"completed_at": "2023-11-07T05:31:56Z"
}{
"type": "idempotency_key_conflict",
"code": 6701,
"message": "A request with this idempotency key is being processed and its resource could not be returned yet. Retry with the same key.",
"metadata": {}
}{
"type": "idempotency_key_payload_mismatch",
"code": 6700,
"message": "This idempotency key was already used with a different request. Send a new key for a new request; see metadata.resource_id for the resource the key already names.",
"metadata": {}
}Start a direct verification
Verifies an identity you collected: an individual, or an individual and the business they operate. Verification runs asynchronously: the request is accepted with a 202 and the verification — poll GET /issuance/identities/verifications/{verification_id} or subscribe to the Verification.completed and Verification.failed webhooks for the outcome.
The body is chosen by type: INDIVIDUAL verifies individual alone, BUSINESS verifies individual with business and the link between them. It requires an Idempotency-Key. To re-verify an individual you already verified, use POST /issuance/identities/individuals/{individual_ref}/reverify.
This is direct verification: you send an identity you collected. For a hosted enrollment session, where the applicant completes your published journey on Baselayer’s page, use POST /onboarding/sessions.
curl --request POST \
--url https://api.baselayer.com/issuance/identities/verifications \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-API-Key: <api-key>' \
--data '
{
"type": "INDIVIDUAL",
"individual": {
"first_name": "<string>",
"last_name": "<string>",
"dob": "2023-12-25",
"phone_number": "<string>",
"address": "1640 Riverside Drive, Hill Valley, CA 95420",
"national_id": "<string>",
"middle_name": "<string>",
"email": "<string>"
},
"reference_id": "<string>"
}
'import requests
url = "https://api.baselayer.com/issuance/identities/verifications"
payload = {
"type": "INDIVIDUAL",
"individual": {
"first_name": "<string>",
"last_name": "<string>",
"dob": "2023-12-25",
"phone_number": "<string>",
"address": "1640 Riverside Drive, Hill Valley, CA 95420",
"national_id": "<string>",
"middle_name": "<string>",
"email": "<string>"
},
"reference_id": "<string>"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-API-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'INDIVIDUAL',
individual: {
first_name: '<string>',
last_name: '<string>',
dob: '2023-12-25',
phone_number: '<string>',
address: '1640 Riverside Drive, Hill Valley, CA 95420',
national_id: '<string>',
middle_name: '<string>',
email: '<string>'
},
reference_id: '<string>'
})
};
fetch('https://api.baselayer.com/issuance/identities/verifications', 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://api.baselayer.com/issuance/identities/verifications",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'INDIVIDUAL',
'individual' => [
'first_name' => '<string>',
'last_name' => '<string>',
'dob' => '2023-12-25',
'phone_number' => '<string>',
'address' => '1640 Riverside Drive, Hill Valley, CA 95420',
'national_id' => '<string>',
'middle_name' => '<string>',
'email' => '<string>'
],
'reference_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.baselayer.com/issuance/identities/verifications"
payload := strings.NewReader("{\n \"type\": \"INDIVIDUAL\",\n \"individual\": {\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"dob\": \"2023-12-25\",\n \"phone_number\": \"<string>\",\n \"address\": \"1640 Riverside Drive, Hill Valley, CA 95420\",\n \"national_id\": \"<string>\",\n \"middle_name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"reference_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.baselayer.com/issuance/identities/verifications")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"INDIVIDUAL\",\n \"individual\": {\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"dob\": \"2023-12-25\",\n \"phone_number\": \"<string>\",\n \"address\": \"1640 Riverside Drive, Hill Valley, CA 95420\",\n \"national_id\": \"<string>\",\n \"middle_name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"reference_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.baselayer.com/issuance/identities/verifications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"INDIVIDUAL\",\n \"individual\": {\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"dob\": \"2023-12-25\",\n \"phone_number\": \"<string>\",\n \"address\": \"1640 Riverside Drive, Hill Valley, CA 95420\",\n \"national_id\": \"<string>\",\n \"middle_name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"reference_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"verification_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "INDIVIDUAL",
"state": "PENDING",
"environment": "sandbox",
"created_at": "2023-11-07T05:31:56Z",
"automated_verdict": "APPROVED",
"verdict": "APPROVED",
"terminal_reason": {
"state": "FAILED",
"message": "<string>"
},
"individual_ref": "<string>",
"business_ref": "<string>",
"business_operator_link_status": "VERIFIED",
"reference_id": "<string>",
"idempotency_key": "<string>",
"completed_at": "2023-11-07T05:31:56Z"
}{
"type": "idempotency_key_conflict",
"code": 6701,
"message": "A request with this idempotency key is being processed and its resource could not be returned yet. Retry with the same key.",
"metadata": {}
}{
"type": "idempotency_key_payload_mismatch",
"code": 6700,
"message": "This idempotency key was already used with a different request. Send a new key for a new request; see metadata.resource_id for the resource the key already names.",
"metadata": {}
}Authorizations
Headers
Required. An opaque key, ideally a UUID: a second request with the same key, path and body answers with the verification the first one created, marked Idempotent-Replayed: true; the same key with a different request is refused with 422. Keys are scoped to your application.
Body
- IndividualVerificationRequest (v1)
- BusinessVerificationRequest (v1)
Verifies an individual you collected.
Response
Response
A verification of an individual, or of an individual and the business they operate, submitted directly.
The body of every /issuance/identities/verifications route and of the
Verification.* webhooks.
Unique id of the verification.
Whether a business is verified too.
INDIVIDUAL, BUSINESS Lifecycle state of the verification workflow.
PENDING, EXECUTING, WAITING, COMPLETED, FAILED, EXPIRED The environment the verification ran in.
sandbox, production When the verification was created.
What the checks concluded, APPROVED or UNDER_REVIEW; null until the verification completes.
APPROVED, UNDER_REVIEW, REJECTED The effective verdict: your reviewer's decision when one was made, otherwise automated_verdict.
APPROVED, UNDER_REVIEW, REJECTED Typed state and detail when the workflow ended in FAILED; null otherwise.
Show child attributes
Show child attributes
Your pairwise reference to the verified individual, stable across re-verification; set once the verification completes and is approved.
Your pairwise reference to the verified business, when the verification covered one.
Status of the individual-operates-business link as of this verification.
VERIFIED, UNDER_REVIEW, REJECTED Caller-supplied correlation id.
The Idempotency-Key the verification was created with.
When the verification reached a terminal status.