Generate file upload URLs for a case
curl --request POST \
--url https://api.uk.veridox.ai/cases/{caseId}/files \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"file_labels": [
"<string>"
]
}
'import requests
url = "https://api.uk.veridox.ai/cases/{caseId}/files"
payload = { "file_labels": ["<string>"] }
headers = {
"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-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({file_labels: ['<string>']})
};
fetch('https://api.uk.veridox.ai/cases/{caseId}/files', 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.uk.veridox.ai/cases/{caseId}/files",
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([
'file_labels' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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.uk.veridox.ai/cases/{caseId}/files"
payload := strings.NewReader("{\n \"file_labels\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.uk.veridox.ai/cases/{caseId}/files")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"file_labels\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uk.veridox.ai/cases/{caseId}/files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"file_labels\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"files": [
{
"file_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>",
"sas_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
]
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}Cases
Upload Files to Case
Generate upload URLs for adding files to an existing case.
POST
/
cases
/
{caseId}
/
files
Generate file upload URLs for a case
curl --request POST \
--url https://api.uk.veridox.ai/cases/{caseId}/files \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"file_labels": [
"<string>"
]
}
'import requests
url = "https://api.uk.veridox.ai/cases/{caseId}/files"
payload = { "file_labels": ["<string>"] }
headers = {
"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-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({file_labels: ['<string>']})
};
fetch('https://api.uk.veridox.ai/cases/{caseId}/files', 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.uk.veridox.ai/cases/{caseId}/files",
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([
'file_labels' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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.uk.veridox.ai/cases/{caseId}/files"
payload := strings.NewReader("{\n \"file_labels\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.uk.veridox.ai/cases/{caseId}/files")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"file_labels\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uk.veridox.ai/cases/{caseId}/files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"file_labels\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"files": [
{
"file_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>",
"sas_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
]
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}{
"error_code": "request.cases.file.missing-risk-score",
"error_message": "User tried to perform an invalid operation on a file without a risk score.",
"error_details": {
"field": "email_address"
}
}Generate pre-signed upload URLs for adding files to an existing case. This endpoint allows you to upload additional files to cases that have already been created, as long as the case is not locked.
Use Case Creation Upload (
Use Additional File Upload (
Case Locking: Once you start uploading files to a case, the case becomes locked and you cannot add more files later. Upload all files you need in a single batch.
Permission
Requiresorganisation_files:write, which every role holds by default. A caller without it receives 403. You can add files to a case you created, or to any case in your organisation if you have organisation_cases:read; otherwise the API returns 404. Shared cases, if enabled for your organisation, also give you reach to every case and file. See Permissions and API Keys.
When to Use This Endpoint
Use Case Creation Upload (POST /cases)
- When creating a new case with initial files.
- For the first batch of files in a case.
- When you know all files upfront.
Use Additional File Upload (POST /cases/{caseId}/files)
- When adding files to existing unlocked cases.
- For supplementary documents after initial case creation.
- When file requirements change during the process.
Was this page helpful?
⌘I