KYC
Submit KYC form
Save answers and attachments for a KYC form until its submission is finalized
POST
/
kyc
/
{kycId}
/
forms
/
{formId}
/
submissions
Submit KYC form
curl --request POST \
--url https://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-tenant: <x-tenant>' \
--data '
{
"answers": {
"550e8400-e29b-41d4-a716-446655440001": "660e8400-e29b-41d4-a716-446655440099",
"550e8400-e29b-41d4-a716-446655440002": [
"660e8400-e29b-41d4-a716-446655440088",
"660e8400-e29b-41d4-a716-446655440077"
],
"550e8400-e29b-41d4-a716-446655440003": "John Doe",
"550e8400-e29b-41d4-a716-446655440004": "1990-01-15",
"550e8400-e29b-41d4-a716-446655440005": [
{
"optionId": "660e8400-e29b-41d4-a716-446655440066",
"additionalInfo": "12.5"
}
]
}
}
'import requests
url = "https://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions"
payload = { "answers": {
"550e8400-e29b-41d4-a716-446655440001": "660e8400-e29b-41d4-a716-446655440099",
"550e8400-e29b-41d4-a716-446655440002": ["660e8400-e29b-41d4-a716-446655440088", "660e8400-e29b-41d4-a716-446655440077"],
"550e8400-e29b-41d4-a716-446655440003": "John Doe",
"550e8400-e29b-41d4-a716-446655440004": "1990-01-15",
"550e8400-e29b-41d4-a716-446655440005": [
{
"optionId": "660e8400-e29b-41d4-a716-446655440066",
"additionalInfo": "12.5"
}
]
} }
headers = {
"x-tenant": "<x-tenant>",
"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: {
'x-tenant': '<x-tenant>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
answers: {
'550e8400-e29b-41d4-a716-446655440001': '660e8400-e29b-41d4-a716-446655440099',
'550e8400-e29b-41d4-a716-446655440002': ['660e8400-e29b-41d4-a716-446655440088', '660e8400-e29b-41d4-a716-446655440077'],
'550e8400-e29b-41d4-a716-446655440003': 'John Doe',
'550e8400-e29b-41d4-a716-446655440004': '1990-01-15',
'550e8400-e29b-41d4-a716-446655440005': [{optionId: '660e8400-e29b-41d4-a716-446655440066', additionalInfo: '12.5'}]
}
})
};
fetch('https://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions', 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://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions",
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([
'answers' => [
'550e8400-e29b-41d4-a716-446655440001' => '660e8400-e29b-41d4-a716-446655440099',
'550e8400-e29b-41d4-a716-446655440002' => [
'660e8400-e29b-41d4-a716-446655440088',
'660e8400-e29b-41d4-a716-446655440077'
],
'550e8400-e29b-41d4-a716-446655440003' => 'John Doe',
'550e8400-e29b-41d4-a716-446655440004' => '1990-01-15',
'550e8400-e29b-41d4-a716-446655440005' => [
[
'optionId' => '660e8400-e29b-41d4-a716-446655440066',
'additionalInfo' => '12.5'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>",
"x-tenant: <x-tenant>"
],
]);
$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://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions"
payload := strings.NewReader("{\n \"answers\": {\n \"550e8400-e29b-41d4-a716-446655440001\": \"660e8400-e29b-41d4-a716-446655440099\",\n \"550e8400-e29b-41d4-a716-446655440002\": [\n \"660e8400-e29b-41d4-a716-446655440088\",\n \"660e8400-e29b-41d4-a716-446655440077\"\n ],\n \"550e8400-e29b-41d4-a716-446655440003\": \"John Doe\",\n \"550e8400-e29b-41d4-a716-446655440004\": \"1990-01-15\",\n \"550e8400-e29b-41d4-a716-446655440005\": [\n {\n \"optionId\": \"660e8400-e29b-41d4-a716-446655440066\",\n \"additionalInfo\": \"12.5\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant", "<x-tenant>")
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://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions")
.header("x-tenant", "<x-tenant>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"answers\": {\n \"550e8400-e29b-41d4-a716-446655440001\": \"660e8400-e29b-41d4-a716-446655440099\",\n \"550e8400-e29b-41d4-a716-446655440002\": [\n \"660e8400-e29b-41d4-a716-446655440088\",\n \"660e8400-e29b-41d4-a716-446655440077\"\n ],\n \"550e8400-e29b-41d4-a716-446655440003\": \"John Doe\",\n \"550e8400-e29b-41d4-a716-446655440004\": \"1990-01-15\",\n \"550e8400-e29b-41d4-a716-446655440005\": [\n {\n \"optionId\": \"660e8400-e29b-41d4-a716-446655440066\",\n \"additionalInfo\": \"12.5\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant"] = '<x-tenant>'
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"answers\": {\n \"550e8400-e29b-41d4-a716-446655440001\": \"660e8400-e29b-41d4-a716-446655440099\",\n \"550e8400-e29b-41d4-a716-446655440002\": [\n \"660e8400-e29b-41d4-a716-446655440088\",\n \"660e8400-e29b-41d4-a716-446655440077\"\n ],\n \"550e8400-e29b-41d4-a716-446655440003\": \"John Doe\",\n \"550e8400-e29b-41d4-a716-446655440004\": \"1990-01-15\",\n \"550e8400-e29b-41d4-a716-446655440005\": [\n {\n \"optionId\": \"660e8400-e29b-41d4-a716-446655440066\",\n \"additionalInfo\": \"12.5\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true
}{
"errorCode": "NOT_FOUND",
"message": {
"en": "The requested record was not found",
"ar": "لم يتم العثور على السجل المطلوب"
},
"validationErrors": [
"<string>"
]
}{
"errorCode": "NOT_FOUND",
"message": {
"en": "The requested record was not found",
"ar": "لم يتم العثور على السجل المطلوب"
}
}{
"errorCode": "NOT_FOUND",
"message": {
"en": "The requested record was not found",
"ar": "لم يتم العثور على السجل المطلوب"
}
}{
"errorCode": "NOT_FOUND",
"message": {
"en": "The requested record was not found",
"ar": "لم يتم العثور على السجل المطلوب"
}
}Authorizations
Headers
Tenant identifier
Body
application/json
A map of question IDs (UUIDs) to their corresponding answers. Each key must be a valid UUID representing a question ID from the KYC form. Each value can be:
- A single option ID (UUID) for single-choice questions (radio buttons)
- An array of option IDs (UUIDs) for multi-choice questions (checkboxes)
- A native string for open-ended text questions
- An array of
{ optionId, additionalInfo? }objects when at least one selected option requires additional info
Show child attributes
Show child attributes
Example:
{
"550e8400-e29b-41d4-a716-446655440001": "660e8400-e29b-41d4-a716-446655440099",
"550e8400-e29b-41d4-a716-446655440002": [
"660e8400-e29b-41d4-a716-446655440088",
"660e8400-e29b-41d4-a716-446655440077"
],
"550e8400-e29b-41d4-a716-446655440003": "John Doe",
"550e8400-e29b-41d4-a716-446655440004": "1990-01-15",
"550e8400-e29b-41d4-a716-446655440005": [
{
"optionId": "660e8400-e29b-41d4-a716-446655440066",
"additionalInfo": "12.5"
}
]
}
Response
Success
Value Indicating process completion or failure, [Recommendation] Programatically check the HTTP status code to confirm the result of the operation if needed.
Example:
true
⌘I
Submit KYC form
curl --request POST \
--url https://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-tenant: <x-tenant>' \
--data '
{
"answers": {
"550e8400-e29b-41d4-a716-446655440001": "660e8400-e29b-41d4-a716-446655440099",
"550e8400-e29b-41d4-a716-446655440002": [
"660e8400-e29b-41d4-a716-446655440088",
"660e8400-e29b-41d4-a716-446655440077"
],
"550e8400-e29b-41d4-a716-446655440003": "John Doe",
"550e8400-e29b-41d4-a716-446655440004": "1990-01-15",
"550e8400-e29b-41d4-a716-446655440005": [
{
"optionId": "660e8400-e29b-41d4-a716-446655440066",
"additionalInfo": "12.5"
}
]
}
}
'import requests
url = "https://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions"
payload = { "answers": {
"550e8400-e29b-41d4-a716-446655440001": "660e8400-e29b-41d4-a716-446655440099",
"550e8400-e29b-41d4-a716-446655440002": ["660e8400-e29b-41d4-a716-446655440088", "660e8400-e29b-41d4-a716-446655440077"],
"550e8400-e29b-41d4-a716-446655440003": "John Doe",
"550e8400-e29b-41d4-a716-446655440004": "1990-01-15",
"550e8400-e29b-41d4-a716-446655440005": [
{
"optionId": "660e8400-e29b-41d4-a716-446655440066",
"additionalInfo": "12.5"
}
]
} }
headers = {
"x-tenant": "<x-tenant>",
"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: {
'x-tenant': '<x-tenant>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
answers: {
'550e8400-e29b-41d4-a716-446655440001': '660e8400-e29b-41d4-a716-446655440099',
'550e8400-e29b-41d4-a716-446655440002': ['660e8400-e29b-41d4-a716-446655440088', '660e8400-e29b-41d4-a716-446655440077'],
'550e8400-e29b-41d4-a716-446655440003': 'John Doe',
'550e8400-e29b-41d4-a716-446655440004': '1990-01-15',
'550e8400-e29b-41d4-a716-446655440005': [{optionId: '660e8400-e29b-41d4-a716-446655440066', additionalInfo: '12.5'}]
}
})
};
fetch('https://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions', 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://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions",
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([
'answers' => [
'550e8400-e29b-41d4-a716-446655440001' => '660e8400-e29b-41d4-a716-446655440099',
'550e8400-e29b-41d4-a716-446655440002' => [
'660e8400-e29b-41d4-a716-446655440088',
'660e8400-e29b-41d4-a716-446655440077'
],
'550e8400-e29b-41d4-a716-446655440003' => 'John Doe',
'550e8400-e29b-41d4-a716-446655440004' => '1990-01-15',
'550e8400-e29b-41d4-a716-446655440005' => [
[
'optionId' => '660e8400-e29b-41d4-a716-446655440066',
'additionalInfo' => '12.5'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>",
"x-tenant: <x-tenant>"
],
]);
$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://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions"
payload := strings.NewReader("{\n \"answers\": {\n \"550e8400-e29b-41d4-a716-446655440001\": \"660e8400-e29b-41d4-a716-446655440099\",\n \"550e8400-e29b-41d4-a716-446655440002\": [\n \"660e8400-e29b-41d4-a716-446655440088\",\n \"660e8400-e29b-41d4-a716-446655440077\"\n ],\n \"550e8400-e29b-41d4-a716-446655440003\": \"John Doe\",\n \"550e8400-e29b-41d4-a716-446655440004\": \"1990-01-15\",\n \"550e8400-e29b-41d4-a716-446655440005\": [\n {\n \"optionId\": \"660e8400-e29b-41d4-a716-446655440066\",\n \"additionalInfo\": \"12.5\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant", "<x-tenant>")
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://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions")
.header("x-tenant", "<x-tenant>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"answers\": {\n \"550e8400-e29b-41d4-a716-446655440001\": \"660e8400-e29b-41d4-a716-446655440099\",\n \"550e8400-e29b-41d4-a716-446655440002\": [\n \"660e8400-e29b-41d4-a716-446655440088\",\n \"660e8400-e29b-41d4-a716-446655440077\"\n ],\n \"550e8400-e29b-41d4-a716-446655440003\": \"John Doe\",\n \"550e8400-e29b-41d4-a716-446655440004\": \"1990-01-15\",\n \"550e8400-e29b-41d4-a716-446655440005\": [\n {\n \"optionId\": \"660e8400-e29b-41d4-a716-446655440066\",\n \"additionalInfo\": \"12.5\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.api.getdal.sa/services/crm/kyc/{kycId}/forms/{formId}/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant"] = '<x-tenant>'
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"answers\": {\n \"550e8400-e29b-41d4-a716-446655440001\": \"660e8400-e29b-41d4-a716-446655440099\",\n \"550e8400-e29b-41d4-a716-446655440002\": [\n \"660e8400-e29b-41d4-a716-446655440088\",\n \"660e8400-e29b-41d4-a716-446655440077\"\n ],\n \"550e8400-e29b-41d4-a716-446655440003\": \"John Doe\",\n \"550e8400-e29b-41d4-a716-446655440004\": \"1990-01-15\",\n \"550e8400-e29b-41d4-a716-446655440005\": [\n {\n \"optionId\": \"660e8400-e29b-41d4-a716-446655440066\",\n \"additionalInfo\": \"12.5\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true
}{
"errorCode": "NOT_FOUND",
"message": {
"en": "The requested record was not found",
"ar": "لم يتم العثور على السجل المطلوب"
},
"validationErrors": [
"<string>"
]
}{
"errorCode": "NOT_FOUND",
"message": {
"en": "The requested record was not found",
"ar": "لم يتم العثور على السجل المطلوب"
}
}{
"errorCode": "NOT_FOUND",
"message": {
"en": "The requested record was not found",
"ar": "لم يتم العثور على السجل المطلوب"
}
}{
"errorCode": "NOT_FOUND",
"message": {
"en": "The requested record was not found",
"ar": "لم يتم العثور على السجل المطلوب"
}
}