curl --request POST \
--url https://api.cadanapay.com/v1/users/{userId}/kyc/renewal \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "identity",
"identity": {
"firstName": "John",
"lastName": "Doe",
"dob": "1990-01-15",
"nationality": "US",
"idDetails": {
"type": "passport",
"number": "987654321",
"issuedCountryCode": "US",
"issuedBy": "Department of State",
"issuedDate": "2026-02-01",
"expirationDate": "2036-02-01",
"frontFileId": "1d3f870c-bc91-4636-a0d4-8e54bccf7d64",
"backFileId": "2e4a981d-cd02-4747-b29d-3f65dd8e7d75",
"selfieFileId": "3f5b092e-de13-4858-a40e-4c76ee9f8e86"
}
}
}
'import requests
url = "https://api.cadanapay.com/v1/users/{userId}/kyc/renewal"
payload = {
"type": "identity",
"identity": {
"firstName": "John",
"lastName": "Doe",
"dob": "1990-01-15",
"nationality": "US",
"idDetails": {
"type": "passport",
"number": "987654321",
"issuedCountryCode": "US",
"issuedBy": "Department of State",
"issuedDate": "2026-02-01",
"expirationDate": "2036-02-01",
"frontFileId": "1d3f870c-bc91-4636-a0d4-8e54bccf7d64",
"backFileId": "2e4a981d-cd02-4747-b29d-3f65dd8e7d75",
"selfieFileId": "3f5b092e-de13-4858-a40e-4c76ee9f8e86"
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'identity',
identity: {
firstName: 'John',
lastName: 'Doe',
dob: '1990-01-15',
nationality: 'US',
idDetails: {
type: 'passport',
number: '987654321',
issuedCountryCode: 'US',
issuedBy: 'Department of State',
issuedDate: '2026-02-01',
expirationDate: '2036-02-01',
frontFileId: '1d3f870c-bc91-4636-a0d4-8e54bccf7d64',
backFileId: '2e4a981d-cd02-4747-b29d-3f65dd8e7d75',
selfieFileId: '3f5b092e-de13-4858-a40e-4c76ee9f8e86'
}
}
})
};
fetch('https://api.cadanapay.com/v1/users/{userId}/kyc/renewal', 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.cadanapay.com/v1/users/{userId}/kyc/renewal",
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' => 'identity',
'identity' => [
'firstName' => 'John',
'lastName' => 'Doe',
'dob' => '1990-01-15',
'nationality' => 'US',
'idDetails' => [
'type' => 'passport',
'number' => '987654321',
'issuedCountryCode' => 'US',
'issuedBy' => 'Department of State',
'issuedDate' => '2026-02-01',
'expirationDate' => '2036-02-01',
'frontFileId' => '1d3f870c-bc91-4636-a0d4-8e54bccf7d64',
'backFileId' => '2e4a981d-cd02-4747-b29d-3f65dd8e7d75',
'selfieFileId' => '3f5b092e-de13-4858-a40e-4c76ee9f8e86'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.cadanapay.com/v1/users/{userId}/kyc/renewal"
payload := strings.NewReader("{\n \"type\": \"identity\",\n \"identity\": {\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"dob\": \"1990-01-15\",\n \"nationality\": \"US\",\n \"idDetails\": {\n \"type\": \"passport\",\n \"number\": \"987654321\",\n \"issuedCountryCode\": \"US\",\n \"issuedBy\": \"Department of State\",\n \"issuedDate\": \"2026-02-01\",\n \"expirationDate\": \"2036-02-01\",\n \"frontFileId\": \"1d3f870c-bc91-4636-a0d4-8e54bccf7d64\",\n \"backFileId\": \"2e4a981d-cd02-4747-b29d-3f65dd8e7d75\",\n \"selfieFileId\": \"3f5b092e-de13-4858-a40e-4c76ee9f8e86\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.cadanapay.com/v1/users/{userId}/kyc/renewal")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"identity\",\n \"identity\": {\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"dob\": \"1990-01-15\",\n \"nationality\": \"US\",\n \"idDetails\": {\n \"type\": \"passport\",\n \"number\": \"987654321\",\n \"issuedCountryCode\": \"US\",\n \"issuedBy\": \"Department of State\",\n \"issuedDate\": \"2026-02-01\",\n \"expirationDate\": \"2036-02-01\",\n \"frontFileId\": \"1d3f870c-bc91-4636-a0d4-8e54bccf7d64\",\n \"backFileId\": \"2e4a981d-cd02-4747-b29d-3f65dd8e7d75\",\n \"selfieFileId\": \"3f5b092e-de13-4858-a40e-4c76ee9f8e86\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cadanapay.com/v1/users/{userId}/kyc/renewal")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"identity\",\n \"identity\": {\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"dob\": \"1990-01-15\",\n \"nationality\": \"US\",\n \"idDetails\": {\n \"type\": \"passport\",\n \"number\": \"987654321\",\n \"issuedCountryCode\": \"US\",\n \"issuedBy\": \"Department of State\",\n \"issuedDate\": \"2026-02-01\",\n \"expirationDate\": \"2036-02-01\",\n \"frontFileId\": \"1d3f870c-bc91-4636-a0d4-8e54bccf7d64\",\n \"backFileId\": \"2e4a981d-cd02-4747-b29d-3f65dd8e7d75\",\n \"selfieFileId\": \"3f5b092e-de13-4858-a40e-4c76ee9f8e86\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"code": "invalid_request_body",
"message": "The request body provided is not valid",
"params": {
"field": "Value is invalid."
}
}{
"code": "resource_not_found",
"message": "Requested resource could not be found."
}{
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}Renew KYC
Submit a replacement identity document for a user whose current document is expiring, without waiting for it to be rejected. Only accepted once the document has entered its expiry window — document stage about-to-expire, in-grace-period or out-of-grace (reported as expired on the user.kyc.expiry webhook). Identity moves to processing and the verification result is delivered asynchronously on the user.kyc.updated webhook. Identity renewals only; address renewal is not supported.
curl --request POST \
--url https://api.cadanapay.com/v1/users/{userId}/kyc/renewal \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "identity",
"identity": {
"firstName": "John",
"lastName": "Doe",
"dob": "1990-01-15",
"nationality": "US",
"idDetails": {
"type": "passport",
"number": "987654321",
"issuedCountryCode": "US",
"issuedBy": "Department of State",
"issuedDate": "2026-02-01",
"expirationDate": "2036-02-01",
"frontFileId": "1d3f870c-bc91-4636-a0d4-8e54bccf7d64",
"backFileId": "2e4a981d-cd02-4747-b29d-3f65dd8e7d75",
"selfieFileId": "3f5b092e-de13-4858-a40e-4c76ee9f8e86"
}
}
}
'import requests
url = "https://api.cadanapay.com/v1/users/{userId}/kyc/renewal"
payload = {
"type": "identity",
"identity": {
"firstName": "John",
"lastName": "Doe",
"dob": "1990-01-15",
"nationality": "US",
"idDetails": {
"type": "passport",
"number": "987654321",
"issuedCountryCode": "US",
"issuedBy": "Department of State",
"issuedDate": "2026-02-01",
"expirationDate": "2036-02-01",
"frontFileId": "1d3f870c-bc91-4636-a0d4-8e54bccf7d64",
"backFileId": "2e4a981d-cd02-4747-b29d-3f65dd8e7d75",
"selfieFileId": "3f5b092e-de13-4858-a40e-4c76ee9f8e86"
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'identity',
identity: {
firstName: 'John',
lastName: 'Doe',
dob: '1990-01-15',
nationality: 'US',
idDetails: {
type: 'passport',
number: '987654321',
issuedCountryCode: 'US',
issuedBy: 'Department of State',
issuedDate: '2026-02-01',
expirationDate: '2036-02-01',
frontFileId: '1d3f870c-bc91-4636-a0d4-8e54bccf7d64',
backFileId: '2e4a981d-cd02-4747-b29d-3f65dd8e7d75',
selfieFileId: '3f5b092e-de13-4858-a40e-4c76ee9f8e86'
}
}
})
};
fetch('https://api.cadanapay.com/v1/users/{userId}/kyc/renewal', 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.cadanapay.com/v1/users/{userId}/kyc/renewal",
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' => 'identity',
'identity' => [
'firstName' => 'John',
'lastName' => 'Doe',
'dob' => '1990-01-15',
'nationality' => 'US',
'idDetails' => [
'type' => 'passport',
'number' => '987654321',
'issuedCountryCode' => 'US',
'issuedBy' => 'Department of State',
'issuedDate' => '2026-02-01',
'expirationDate' => '2036-02-01',
'frontFileId' => '1d3f870c-bc91-4636-a0d4-8e54bccf7d64',
'backFileId' => '2e4a981d-cd02-4747-b29d-3f65dd8e7d75',
'selfieFileId' => '3f5b092e-de13-4858-a40e-4c76ee9f8e86'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.cadanapay.com/v1/users/{userId}/kyc/renewal"
payload := strings.NewReader("{\n \"type\": \"identity\",\n \"identity\": {\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"dob\": \"1990-01-15\",\n \"nationality\": \"US\",\n \"idDetails\": {\n \"type\": \"passport\",\n \"number\": \"987654321\",\n \"issuedCountryCode\": \"US\",\n \"issuedBy\": \"Department of State\",\n \"issuedDate\": \"2026-02-01\",\n \"expirationDate\": \"2036-02-01\",\n \"frontFileId\": \"1d3f870c-bc91-4636-a0d4-8e54bccf7d64\",\n \"backFileId\": \"2e4a981d-cd02-4747-b29d-3f65dd8e7d75\",\n \"selfieFileId\": \"3f5b092e-de13-4858-a40e-4c76ee9f8e86\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.cadanapay.com/v1/users/{userId}/kyc/renewal")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"identity\",\n \"identity\": {\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"dob\": \"1990-01-15\",\n \"nationality\": \"US\",\n \"idDetails\": {\n \"type\": \"passport\",\n \"number\": \"987654321\",\n \"issuedCountryCode\": \"US\",\n \"issuedBy\": \"Department of State\",\n \"issuedDate\": \"2026-02-01\",\n \"expirationDate\": \"2036-02-01\",\n \"frontFileId\": \"1d3f870c-bc91-4636-a0d4-8e54bccf7d64\",\n \"backFileId\": \"2e4a981d-cd02-4747-b29d-3f65dd8e7d75\",\n \"selfieFileId\": \"3f5b092e-de13-4858-a40e-4c76ee9f8e86\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cadanapay.com/v1/users/{userId}/kyc/renewal")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"identity\",\n \"identity\": {\n \"firstName\": \"John\",\n \"lastName\": \"Doe\",\n \"dob\": \"1990-01-15\",\n \"nationality\": \"US\",\n \"idDetails\": {\n \"type\": \"passport\",\n \"number\": \"987654321\",\n \"issuedCountryCode\": \"US\",\n \"issuedBy\": \"Department of State\",\n \"issuedDate\": \"2026-02-01\",\n \"expirationDate\": \"2036-02-01\",\n \"frontFileId\": \"1d3f870c-bc91-4636-a0d4-8e54bccf7d64\",\n \"backFileId\": \"2e4a981d-cd02-4747-b29d-3f65dd8e7d75\",\n \"selfieFileId\": \"3f5b092e-de13-4858-a40e-4c76ee9f8e86\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"code": "invalid_request_body",
"message": "The request body provided is not valid",
"params": {
"field": "Value is invalid."
}
}{
"code": "resource_not_found",
"message": "Requested resource could not be found."
}{
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Required when using a Platform API token. The tenant key identifying which business to operate on.
Path Parameters
The unique identifier for the user
Body
Request to renew an expiring KYC identity document. Identity renewals only — address renewal is not supported, and type must be identity.
Which section is being renewed. Must be identity.
identity "identity"
Identity renewal details. All fields are required. The replacement idDetails.expirationDate must be in the future and must differ from the expiration date on the current document.
Show child attributes
Show child attributes
Response
KYC renewal accepted