Comprehensive API Integration Documentation for Multi-Platform Support
Get started with FileVault integration in just 3 simple steps:
fv_xxxxxx...)MYAPP, API001, TS0004)That's all you need to begin! Continue reading for detailed implementation guides.
fv_ prefix + 64 hexadecimal charactersfv_81233b10867f7fc208dab66de46ea653168971f92bbb3533edfb8e832c61cb4eFileVault supports three flexible authentication methods. Choose the one that best fits your implementation:
Authorization: Bearer fv_your_token_here
X-API-Token: fv_your_token_here
https://filevault.denning.online/api/v1/MYAPP/storage/list?token=fv_your_token_here
FileVault supports two distinct path patterns depending on the module type:
{module}/{recordId}/{sub_path}/{filename}matters/12345/contract.pdf - Matter #12345's filesclients/987/invoice.pdf - Client #987's filesstaff/101/photo.jpg - Staff #101's fileshr-attendance/2024/records/report.xlsx - HR Attendance recordshr-leave/456/requests/leave.pdf - HR Leave documentsmatters/12345/evidence/document.pdf - Nested directoriesdocuments/{sub_path}/{filename}documents/.
documents/company/policies/handbook.pdf - Shared company documentsdocuments/templates/form.pdf - General templatesdocuments/training/manual.pdf - Training materials| Status | Path Type | Example | Notes |
|---|---|---|---|
| ✅ Correct | Module-based (with recordId) | matters/12345/contract.pdf |
Standard module path |
| ✅ Correct | Documents (no recordId) | documents/company/policy.pdf |
Documents module path |
| ❌ Incorrect | Including server code | MYAPP/matters/12345/contract.pdf |
Never include server code |
| ❌ Incorrect | Documents with recordId | documents/123/file.pdf |
Documents doesn't use recordId |
| ❌ Incorrect | Leading slash | /matters/12345/file.pdf |
No leading slash |
{serverCode}/{your_path}https://filevault.denning.online/api/v1/MYAPP/storage/uploadmatters/12345/contract.pdfMYAPP/matters/12345/contract.pdf
Upload files to FileVault using multipart form data. All examples use the endpoint:
using System.Net.Http;
using System.IO;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer fv_your_token_here");
var content = new MultipartFormDataContent();
content.Add(new StreamContent(File.OpenRead("document.pdf")), "file", "document.pdf");
content.Add(new StringContent("matters/12345/document.pdf"), "path");
content.Add(new StringContent("user@example.com"), "uploaded_by");
var response = await client.PostAsync(
"https://filevault.denning.online/api/v1/MYAPP/storage/upload",
content
);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
const FormData = require('form-data');
const fs = require('fs');
const form = new FormData();
form.append('file', fs.createReadStream('document.pdf'));
form.append('path', 'matters/12345/document.pdf');
form.append('uploaded_by', 'user@example.com');
const response = await fetch('https://filevault.denning.online/api/v1/MYAPP/storage/upload', {
method: 'POST',
headers: {
'Authorization': 'Bearer fv_your_token_here',
...form.getHeaders()
},
body: form
});
const result = await response.json();
console.log(result);
import requests
files = {'file': open('document.pdf', 'rb')}
data = {
'path': 'matters/12345/document.pdf',
'uploaded_by': 'user@example.com'
}
headers = {'Authorization': 'Bearer fv_your_token_here'}
response = requests.post(
'https://filevault.denning.online/api/v1/MYAPP/storage/upload',
headers=headers,
files=files,
data=data
)
print(response.json())
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://filevault.denning.online/api/v1/MYAPP/storage/upload');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer fv_your_token_here']);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'file' => new CURLFile('document.pdf'),
'path' => 'matters/12345/document.pdf',
'uploaded_by' => 'user@example.com'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo $response;
package main
import (
"bytes"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
file, _ := os.Open("document.pdf")
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "document.pdf")
io.Copy(part, file)
writer.WriteField("path", "matters/12345/document.pdf")
writer.WriteField("uploaded_by", "user@example.com")
writer.Close()
req, _ := http.NewRequest("POST",
"https://filevault.denning.online/api/v1/MYAPP/storage/upload", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("Authorization", "Bearer fv_your_token_here")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
}
curl -X POST "https://filevault.denning.online/api/v1/MYAPP/storage/upload" \
-H "Authorization: Bearer fv_your_token_here" \
-F "file=@document.pdf" \
-F "path=matters/12345/document.pdf" \
-F "uploaded_by=user@example.com"
Retrieve files from FileVault using a simple GET request:
using System.Net.Http;
using System.IO;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer fv_your_token_here");
var response = await client.GetAsync(
"https://filevault.denning.online/api/v1/MYAPP/storage/download?path=matters/12345/document.pdf"
);
byte[] fileBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("downloaded.pdf", fileBytes);
const response = await fetch(
'https://filevault.denning.online/api/v1/MYAPP/storage/download?path=matters/12345/document.pdf',
{
headers: { 'Authorization': 'Bearer fv_your_token_here' }
}
);
const blob = await response.blob();
// Save blob to file or process as needed
import requests
response = requests.get(
'https://filevault.denning.online/api/v1/MYAPP/storage/download',
headers={'Authorization': 'Bearer fv_your_token_here'},
params={'path': 'matters/12345/document.pdf'}
)
with open('downloaded.pdf', 'wb') as f:
f.write(response.content)
$ch = curl_init();
$url = 'https://filevault.denning.online/api/v1/MYAPP/storage/download?path=matters/12345/document.pdf';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer fv_your_token_here']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$file = curl_exec($ch);
file_put_contents('downloaded.pdf', $file);
Retrieve a listing of files and directories:
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer fv_your_token_here");
var response = await client.GetAsync(
"https://filevault.denning.online/api/v1/MYAPP/storage/list?directory=matters/12345"
);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
const response = await fetch(
'https://filevault.denning.online/api/v1/MYAPP/storage/list?directory=matters/12345',
{
headers: { 'Authorization': 'Bearer fv_your_token_here' }
}
);
const files = await response.json();
console.log(files);
response = requests.get(
'https://filevault.denning.online/api/v1/MYAPP/storage/list',
headers={'Authorization': 'Bearer fv_your_token_here'},
params={'directory': 'matters/12345'}
)
print(response.json())
Remove files from FileVault:
const response = await fetch(
'https://filevault.denning.online/api/v1/MYAPP/storage',
{
method: 'DELETE',
headers: {
'Authorization': 'Bearer fv_your_token_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({ path: 'matters/12345/document.pdf' })
}
);
response = requests.delete(
'https://filevault.denning.online/api/v1/MYAPP/storage',
headers={'Authorization': 'Bearer fv_your_token_here'},
json={'path': 'matters/12345/document.pdf'}
)
{
"source_path": "documents/templates/original.pdf",
"dest_path": "documents/company/copy.pdf"
}
{
"source_path": "matters/12345/contract.pdf",
"dest_path": "matters/12345/backup/contract.pdf"
}
{
"source_path": "matters/12345/template.pdf",
"dest_path": "documents/templates/matter-template.pdf"
}
{
"source_path": "documents/drafts/file.pdf",
"dest_path": "documents/final/file.pdf"
}
{
"source_path": "clients/987/old.pdf",
"dest_path": "clients/987/archive/old.pdf"
}
{
"path": "documents/new-category"
}
{
"path": "matters/12345/evidence"
}
const response = await fetch(
'https://filevault.denning.online/api/v1/MYAPP/storage/bulk-copy',
{
method: 'POST',
headers: {
'Authorization': 'Bearer fv_your_token_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
paths: [
'temp/file1.pdf',
'temp/file2.pdf'
],
target_path: 'documents/archive'
})
}
);
data = {
'paths': ['temp/file1.pdf', 'temp/file2.pdf'],
'target_path': 'documents/final'
}
response = requests.post(
'https://filevault.denning.online/api/v1/MYAPP/storage/bulk-move',
headers={'Authorization': 'Bearer fv_your_token_here'},
json=data
)
curl -X POST "https://filevault.denning.online/api/v1/MYAPP/storage/bulk-delete" \
-H "Authorization: Bearer fv_your_token_here" \
-H "Content-Type: application/json" \
-d '{
"paths": [
"temp/old_file1.pdf",
"temp/old_file2.pdf",
"drafts/obsolete.doc"
]
}'
| Operation | Endpoint | Required Parameters |
|---|---|---|
| Bulk Copy (ID) | /files/bulk/copy |
file_ids[], to_directory_id |
| Bulk Move (ID) | /files/bulk/move |
file_ids[], to_directory_id |
| Bulk Delete (ID) | /files/bulk/delete |
file_ids[] |
{
"paths": ["file1.pdf", "file2.doc", "file3.xlsx"],
"archive_name": "documents.zip",
"dest_path": "archives"
}
{
"archive_path": "archives/documents.zip",
"dest_path": "extracted"
}
{
"path": "documents/report.pdf",
"expires_at": "2025-12-31T23:59:59Z",
"password": "optional_password",
"download_limit": 5
}
https://filevault.denning.online/api/v1/{serverCode}
| Operation | Method | Endpoint | Parameters |
|---|---|---|---|
| Upload | POST | /storage/upload |
multipart: file, path, uploaded_by |
| Download | GET | /storage/download |
query: path |
| List | GET | /storage/list |
query: directory |
| Exists | GET | /storage/exists |
query: path |
| Delete | DELETE | /storage |
json: {path} |
| Copy | POST | /storage/copy |
json: {source_path, dest_path} |
| Move | POST | /storage/move |
json: {source_path, dest_path} |
| Rename | POST | /storage/rename |
json: {path, new_name} |
| Make Directory | POST | /storage/mkdir |
json: {path} |
| Remove Directory | DELETE | /storage/rmdir |
json: {path} |
| Compress | POST | /storage/compress |
json: {paths[], archive_name, dest_path} |
| Extract | POST | /storage/extract |
json: {archive_path, dest_path} |
| Share | POST | /storage/share |
json: {path, expires_at, password, download_limit} |
| Bulk Copy | POST | /storage/bulk-copy |
json: {paths[], target_path} |
| Bulk Move | POST | /storage/bulk-move |
json: {paths[], target_path} |
| Bulk Delete | POST | /storage/bulk-delete |
json: {paths[]} |
/storage/bulk-*) are recommended over ID-based operations for better usability and consistency.
php artisan filevault:generate-token "My Application" --description="Production service"
This command will:
fv_ prefix# Regenerate token - will prompt for confirmation before revoking old token
php artisan filevault:generate-token "My Application"
fv_ + 64 hex)Authorization: Bearer fv_...matters/12345/file.pdf