Documentation Index
Fetch the complete documentation index at: https://docs.docex.dev/llms.txt
Use this file to discover all available pages before exploring further.
Next.js App Router
Scaffold a server-side vision analysis endpoint in a Next.js App Router application.
Prerequisites
- Next.js 13+ with App Router
docexdev installed
DOCEX_API_KEY and DOCEX_BASE_URL configured
Route handler
Create app/api/analyze/route.js:
import { createDocex } from "docexdev";
import { NextResponse } from "next/server";
const docex = createDocex({
apiKey: process.env.DOCEX_API_KEY,
baseUrl: process.env.DOCEX_BASE_URL,
});
export async function POST(request) {
const formData = await request.formData();
const file = formData.get("file");
const prompt = formData.get("prompt");
if (!file || !prompt) {
return NextResponse.json(
{ error: "file and prompt are required" },
{ status: 400 }
);
}
const bytes = await file.arrayBuffer();
const result = await docex.run({
file: { fileName: file.name, data: new Uint8Array(bytes) },
prompt,
});
return NextResponse.json(result);
}
Client component
"use client";
import { useState } from "react";
export default function AnalyzePage() {
const [result, setResult] = useState(null);
async function handleSubmit(e) {
e.preventDefault();
const formData = new FormData(e.target);
const res = await fetch("/api/analyze", {
method: "POST",
body: formData,
});
const data = await res.json();
setResult(data);
}
return (
<form onSubmit={handleSubmit}>
<input type="file" name="file" accept=".jpg,.jpeg,.png,.heic,.pdf" />
<input type="text" name="prompt" placeholder="company name, number, expiry" />
<button type="submit">Analyze</button>
{result && <pre>{JSON.stringify(result, null, 2)}</pre>}
</form>
);
}
Environment variables
DOCEX_API_KEY=dx_live_...
DOCEX_BASE_URL=https://api.docex.dev
Never expose DOCEX_API_KEY to the browser. Always call Docex from server-side code.