# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api POST /v1/documents/doc_abc123/confirm \
--body '<request-json>'Confirm document upload (doc_abc123).
# Use MCP tool upload_document — it runs create, signed PUT, and confirm.import requests
url = "https://sandbox.api.infinite.dev/v1/documents/{id}/confirm"
payload = { "fileHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }
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({fileHash: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'})
};
fetch('https://sandbox.api.infinite.dev/v1/documents/{id}/confirm', 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://sandbox.api.infinite.dev/v1/documents/{id}/confirm",
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([
'fileHash' => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
]),
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://sandbox.api.infinite.dev/v1/documents/{id}/confirm"
payload := strings.NewReader("{\n \"fileHash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\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://sandbox.api.infinite.dev/v1/documents/{id}/confirm")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fileHash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/documents/{id}/confirm")
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 \"fileHash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n}"
response = http.request(request)
puts response.read_body{
"id": "doc_abc123",
"organizationId": "org_xyz789",
"customerId": "cus_abc123",
"documentType": "INVOICE",
"fileName": "invoice-2026-001.pdf",
"contentType": "application/pdf",
"sizeBytes": 1024000,
"status": "UPLOADED",
"createdAt": "2023-11-07T05:31:56Z",
"transferId": "txn_xyz789",
"documentSubtype": "BANK_STATEMENT",
"remarks": "<string>",
"fileHash": "<string>",
"downloadUrl": "<string>",
"uploadedAt": "2023-11-07T05:31:56Z",
"associatedEntityId": "<string>",
"isDuplicate": true,
"reviewWarnings": [
"<string>"
]
}Confirm document upload
Confirm that a document has been uploaded to the signed URL.
# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api POST /v1/documents/doc_abc123/confirm \
--body '<request-json>'Confirm document upload (doc_abc123).
# Use MCP tool upload_document — it runs create, signed PUT, and confirm.import requests
url = "https://sandbox.api.infinite.dev/v1/documents/{id}/confirm"
payload = { "fileHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }
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({fileHash: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'})
};
fetch('https://sandbox.api.infinite.dev/v1/documents/{id}/confirm', 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://sandbox.api.infinite.dev/v1/documents/{id}/confirm",
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([
'fileHash' => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
]),
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://sandbox.api.infinite.dev/v1/documents/{id}/confirm"
payload := strings.NewReader("{\n \"fileHash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\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://sandbox.api.infinite.dev/v1/documents/{id}/confirm")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fileHash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/documents/{id}/confirm")
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 \"fileHash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n}"
response = http.request(request)
puts response.read_body{
"id": "doc_abc123",
"organizationId": "org_xyz789",
"customerId": "cus_abc123",
"documentType": "INVOICE",
"fileName": "invoice-2026-001.pdf",
"contentType": "application/pdf",
"sizeBytes": 1024000,
"status": "UPLOADED",
"createdAt": "2023-11-07T05:31:56Z",
"transferId": "txn_xyz789",
"documentSubtype": "BANK_STATEMENT",
"remarks": "<string>",
"fileHash": "<string>",
"downloadUrl": "<string>",
"uploadedAt": "2023-11-07T05:31:56Z",
"associatedEntityId": "<string>",
"isDuplicate": true,
"reviewWarnings": [
"<string>"
]
}Authorizations
API Key in Bearer format (e.g., Bearer sk_test_...)
Headers
API key
Path Parameters
Body
SHA-256 hash of file content for deduplication
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
Response
Upload confirmed successfully
"doc_abc123"
"org_xyz789"
"cus_abc123"
Document type
IDENTITY, LIVENESS_CHECK, PROOF_OF_ADDRESS, INVOICE, CONTRACT, BANK_STATEMENT, BUSINESS_LICENSE, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, CERTIFICATE_OF_FORMATION, CERTIFICATE_OF_INCUMBENCY, OPERATING_AGREEMENT, PARTNERSHIP_AGREEMENT, OWNERSHIP_STRUCTURE, SHAREHOLDER_AGREEMENT, STOCK_CERTIFICATE, TAX_RETURN, FINANCIAL_STATEMENT, MARKETING_MATERIALS, DOMAIN_OWNERSHIP_PROOF, BUSINESS_PLAN, BILL_OF_LADING, AML_POLICY, AML_COMFORT_LETTER, FUNDS_FLOW_DIAGRAM, GOOD_STANDING_CERTIFICATE, TIN_VERIFICATION, MSB_LICENSE, DIRECTORS_REGISTRY, OWNERSHIP_CHART, PROOF_OF_SIGNATORY_AUTHORITY, PROOF_OF_SOURCE_OF_FUNDS, PROOF_OF_ENTITY_NAME_CHANGE, REMOTE_ADDRESS_ATTESTATION, E_SIGNATURE_CERTIFICATE, COMPLIANCE_NOTES, PROOF_OF_SOURCE_OF_WEALTH, TAX_EXEMPT_ENTITY_CONFIRMATION, OTHER "INVOICE"
"invoice-2026-001.pdf"
"application/pdf"
1024000
Document status
PENDING, UPLOADING, UPLOADED, FAILED "UPLOADED"
"txn_xyz789"
Specific document subtype
"BANK_STATEMENT"
Free-form remarks or notes about the document
SHA-256 hash of file content
Signed URL to download the document
Associated entity ID (e.g., UBO)
Whether this document was deduplicated (returned existing instead of new)
Document validation warnings that did not block confirmation and should be manually reviewed.
Was this page helpful?