Skip to main content
Complete TypeScript examples using the Fetch API.

Configuration

const API_KEY = process.env.DOCINTELL_API_KEY!;
const BASE_URL = "https://api.docintell.com";

const headers = {
  "Authorization": `Bearer ${API_KEY}`,
};

Upload a Document

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

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

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");