Skip to main content

Quick Start

Document Integrity

Finovox analyses each document's IT structure, so files must arrive unaltered. Connect the API upstream of any post-processing (resizing, flattening, re-printing) to preserve the original content.

Authentication​

All API requests require an API key. You can generate yours from the Finovox dashboard.

Include your API key in the request headers:

api-key: your_api_key_here

API Endpoints​

Supported File Formats​

  • PDF (.pdf)
  • JPEG (.jpg, .jpeg)
  • PNG (.png)

Other office formats (.docx, .xlsx, …) and raster images (.tif, .heic, .webp) are also accepted; see Advanced Usage for the full matrix.

Your First Request​

POST /case expects multipart/form-data with:

FieldTypeRequiredDescription
documentsFile(s)✅Every file in the folder. Repeat the field per file — think of it as uploading a folder. Drop one or more .json files in the same list to send declared applicant context: a single JSON is treated as the folder form, multiple JSONs are merged into one entry per participant. form.json is free-form — see Folder Form.
payloadJSON object or string✅Requested analysis types and the use case to apply.

In this example we submit a rental folder and ask for the decision bundle only. We also drop a form.json alongside the PDFs with the declared applicant — it is optional, but passing what you already know helps the engine match documents to the right participant.

import json
from pathlib import Path
import requests

url = "https://api-v2.finovox.com/case"
headers = {"api-key": "YOUR_API_KEY_HERE"}

# Put every file (PDFs + any form.json) in a single folder and ship
# them all under `documents` in one line — the API figures out which
# are documents and which are folder forms.
folder = Path("samples/folder_julien_moreau")
files = [("documents", (f.name, f.open("rb"))) for f in folder.iterdir() if f.is_file()]
data = {
"payload": json.dumps({"analyse_type": ["decision"], "use_case": "rental"}),
}

response = requests.post(url, headers=headers, files=files, data=data, timeout=300)
print(response.json())
Request Timeout

Case Analysis runs several analysis and decision stages. Set a timeout of at least 300 seconds for synchronous calls. For larger folders, use asynchronous requests.

Response​

{
"decision": {
"status": "approved",
"status_fraud": "low",
"status_validation": "compliant"
}
}
FieldValuesMeaning
statusapproved | rejectedGlobal decision. Derived from status_fraud and status_validation: only status_fraud = low combined with status_validation = compliant yields approved; every other combination yields rejected.
status_fraudhigh | medium | lowAnti-fraud. Risk of document tampering or falsification, aggregated across the folder.
status_validationcompliant | non_compliantValidity. Use-case eligibility / business-rule outcome.

To also receive a hosted share link (with PDF download from the viewer), see Advanced Usage.

HTTP Status Codes​

CodeMeaningAction
200SuccessSynchronous result returned immediately.
202AcceptedAsynchronous mode enabled, poll later with POST /case/retrieve.
401UnauthorizedMissing or invalid API key.
403ForbiddenAPI key lacks Case Analysis access.
422UnprocessableNo documents, unsupported extension, malformed JSON, or invalid/missing keys in payload.
429Too Many RequestsRate limit exceeded, slow down.
500Server ErrorRetry the request.