Skip to main content

Overview

The SDK supports streaming file uploads to avoid loading entire files into memory. This is recommended for large files.

Basic Upload

import { Factify } from "@factify/sdk";
import { openAsBlob } from "node:fs";

const factify = new Factify({
  bearerAuth: process.env.FACTIFY_KEY,
});

async function run() {
  const result = await factify.documents.create({
    payload: await openAsBlob("./contract.pdf"),
    title: "Q4 Agreement",
  });

  console.log(result);
}

run();

File Handles by Runtime

Depending on your JavaScript runtime, use these utilities to get a file handle without reading the entire file into memory:
RuntimeMethodExample
Node.js 20+openAsBlob from node:fsawait openAsBlob("./file.pdf")
BunBun.fileBun.file("./file.pdf")
Browsers<input type="file">Returns a File instance
Node.js 18fileFrom from fetch-blob/from.jsfileFrom("./file.pdf")

Node.js 20+ Example

import { Factify } from "@factify/sdk";
import { openAsBlob } from "node:fs";

const factify = new Factify({ bearerAuth: process.env.FACTIFY_KEY });

const result = await factify.documents.create({
  payload: await openAsBlob("./contract.pdf"),
  title: "Q4 Agreement",
});

Bun Example

import { Factify } from "@factify/sdk";

const factify = new Factify({ bearerAuth: process.env.FACTIFY_KEY });

const result = await factify.documents.create({
  payload: Bun.file("./contract.pdf"),
  title: "Q4 Agreement",
});

Browser Example

import { Factify } from "@factify/sdk";

const factify = new Factify({ bearerAuth: process.env.FACTIFY_KEY });

// Get file from input element
const input = document.querySelector('input[type="file"]') as HTMLInputElement;
const file = input.files?.[0];

if (file) {
  const result = await factify.documents.create({
    payload: file,
    title: file.name,
  });
}

Node.js 18 Example

import { Factify } from "@factify/sdk";
import { fileFrom } from "fetch-blob/from.js";

const factify = new Factify({ bearerAuth: process.env.FACTIFY_KEY });

const result = await factify.documents.create({
  payload: await fileFrom("./contract.pdf"),
  title: "Q4 Agreement",
});

Supported File Types

Currently, Factify supports PDF files only.
File TypeMIME TypeMax Size
PDFapplication/pdf100 MB
Uploading non-PDF files will result in an invalid_file_type error.