Configuration
Copy
const API_KEY = process.env.DOCINTELL_API_KEY!;
const BASE_URL = "https://api.docintell.com";
const headers = {
"Authorization": `Bearer ${API_KEY}`,
};
Upload a Document
Copy
import * as fs from "fs";
import FormData from "form-data";
async function uploadDocument(
filePath: string,
retentionYears: number = 7
): Promise<{
document_id: string;
job_id: string;
status: string;
}> {
const formData = new FormData();
formData.append("file", fs.createReadStream(filePath));
formData.append("retention_years", retentionYears.toString());
const response = await fetch(`${BASE_URL}/v1/documents`, {
method: "POST",
headers: {
...headers,
...formData.getHeaders(),
},
body: formData,
});
if (!response.ok) {
throw new Error(`Upload failed: ${response.statusText}`);
}
return response.json();
}
Wait for Completion
Copy
interface Job {
job_id: string;
document_id: string;
status: "pending" | "processing" | "completed" | "failed";
processing_time_seconds?: number;
error_message?: string;
}
async function waitForJob(
jobId: string,
timeoutMs: number = 120000
): Promise<Job> {
const start = Date.now();
while (Date.now() - start < timeoutMs) {
const response = await fetch(`${BASE_URL}/v1/jobs/${jobId}`, { headers });
const job: Job = await response.json();
if (job.status === "completed") {
return job;
}
if (job.status === "failed") {
throw new Error(job.error_message || "Job failed");
}
await new Promise((r) => setTimeout(r, 2000));
}
throw new Error("Timeout waiting for job");
}
Complete Example
Copy
async function processDocument(filePath: string): Promise<void> {
// 1. Upload
const upload = await uploadDocument(filePath);
console.log(`Uploaded: ${upload.job_id}`);
// 2. Wait for completion
const job = await waitForJob(upload.job_id);
console.log(`Extraction completed in ${job.processing_time_seconds}s`);
console.log(`Document ID: ${job.document_id}`);
}
// Run
processDocument("invoice.pdf");