curl --request GET \
--url https://api-sandbox.finogates.com/v1/platform/compliance/document-requests \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-sandbox.finogates.com/v1/platform/compliance/document-requests"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api-sandbox.finogates.com/v1/platform/compliance/document-requests', 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-sandbox.finogates.com/v1/platform/compliance/document-requests",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api-sandbox.finogates.com/v1/platform/compliance/document-requests"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-sandbox.finogates.com/v1/platform/compliance/document-requests")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.finogates.com/v1/platform/compliance/document-requests")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status_code": 200,
"data": [
{
"check_type": "kyb",
"subject_scope": "user",
"subject_name": "Lovelace Analytics LLC",
"has_open_request": true,
"kyb_record_id": "9f0b1c2d-3e4f-5061-7283-94a5b6c7d8e9",
"subject_user_id": "b3a9b622-cc63-4d3c-aad6-2d8e29e6f9d4",
"requests": [
{
"status": "open",
"outstanding_required": 1,
"note": "We need a couple of extra items to finish this review.",
"requested_at": "2025-06-14T10:00:00.000Z",
"id": "1a2b3c4d-5e6f-7081-9203-a4b5c6d7e8f9",
"items": [
{
"label": "Certificate of incorporation",
"kind": "file",
"required": true,
"responded": false,
"help": "The full document, all pages.",
"key": "certificate_of_incorporation"
},
{
"label": "Source of funds",
"kind": "text",
"required": true,
"responded": true,
"text": "Retained earnings from 2023 trading.",
"submitted_at": "2025-06-15T12:30:00.000Z",
"key": "source_of_funds"
}
]
}
]
}
],
"row_count": 1,
"limit": 50,
"current_page": 1,
"total_page_number": 1,
"query_generated_time": 1712847600000
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}List Verification Document Requests
List every verification check of yours that we have asked for extra documents on. Use status=open to see just what you still owe us. This is the endpoint to poll if you did not receive, or missed, the compliance_documents.requested webhook.
Each check comes back under kyc_record_id or kyb_record_id depending on its check_type — the same id, and the same field name, the user_kyc.* / user_kyb.* webhooks use.
curl --request GET \
--url https://api-sandbox.finogates.com/v1/platform/compliance/document-requests \
--header 'Authorization: Bearer <token>'import requests
url = "https://api-sandbox.finogates.com/v1/platform/compliance/document-requests"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api-sandbox.finogates.com/v1/platform/compliance/document-requests', 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-sandbox.finogates.com/v1/platform/compliance/document-requests",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api-sandbox.finogates.com/v1/platform/compliance/document-requests"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api-sandbox.finogates.com/v1/platform/compliance/document-requests")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.finogates.com/v1/platform/compliance/document-requests")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status_code": 200,
"data": [
{
"check_type": "kyb",
"subject_scope": "user",
"subject_name": "Lovelace Analytics LLC",
"has_open_request": true,
"kyb_record_id": "9f0b1c2d-3e4f-5061-7283-94a5b6c7d8e9",
"subject_user_id": "b3a9b622-cc63-4d3c-aad6-2d8e29e6f9d4",
"requests": [
{
"status": "open",
"outstanding_required": 1,
"note": "We need a couple of extra items to finish this review.",
"requested_at": "2025-06-14T10:00:00.000Z",
"id": "1a2b3c4d-5e6f-7081-9203-a4b5c6d7e8f9",
"items": [
{
"label": "Certificate of incorporation",
"kind": "file",
"required": true,
"responded": false,
"help": "The full document, all pages.",
"key": "certificate_of_incorporation"
},
{
"label": "Source of funds",
"kind": "text",
"required": true,
"responded": true,
"text": "Retained earnings from 2023 trading.",
"submitted_at": "2025-06-15T12:30:00.000Z",
"key": "source_of_funds"
}
]
}
]
}
],
"row_count": 1,
"limit": 50,
"current_page": 1,
"total_page_number": 1,
"query_generated_time": 1712847600000
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Query Parameters
Show only requests in this state — open (we are still waiting on you), completed, or cancelled. Leave it out for all of them. A check whose requests span several states is listed under each, carrying only the matching requests.
open, completed, cancelled How many checks to return per page (1 to 200).
1 <= x <= 200How many checks to skip before this page starts.
x >= 0Response
The verification checks that have document requests.
HTTP status code for the response.
Payload or error details.
Show child attributes
Show child attributes
UTC timestamp (milliseconds since epoch) when response was generated.
Total rows matching the request filters (not just this page).
x >= 0Page size used for this response. Null for cursor-paginated endpoints.
x >= 11-indexed page number for this response. Null for cursor-paginated endpoints.
x >= 1Total number of pages given the current limit. Null for cursor-paginated endpoints.
x >= 0Cursor for the next page, if available.

