TypeScript SDK for PageIndex — upload documents, retrieve tree structures, and chat with your PDFs.
Get your API Key at dash.pageindex.ai. Full docs at docs.pageindex.ai/js-sdk.
npm install @pageindex/sdkimport { PageIndexClient } from '@pageindex/sdk';
import { readFileSync } from 'fs';
const client = new PageIndexClient({ apiKey: 'YOUR_API_KEY' });
// Upload a document
const file = readFileSync('./report.pdf');
const { doc_id } = await client.api.submitDocument(file, 'report.pdf');
// Get tree structure
const tree = await client.api.getTree(doc_id);
// Chat with the document
const response = await client.api.chatCompletions({
messages: [{ role: 'user', content: 'What are the key findings?' }],
doc_id,
});
console.log(response.choices[0].message.content);
// Stream a response
const stream = await client.api.chatCompletions({
messages: [{ role: 'user', content: 'Summarize this document' }],
doc_id,
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}const client = new PageIndexClient({
apiKey: 'YOUR_API_KEY', // Required
apiUrl: 'https://...', // Default: https://api.pageindex.ai
folderScope: 'folder-id', // Restrict all operations to a folder
});| Method | Description |
|---|---|
submitDocument(file, fileName, options?) |
Upload a document |
getTree(docId, options?) |
Get tree structure and processing status |
getDocument(docId) |
Get document metadata |
listDocuments(options?) |
List documents (paginated) |
deleteDocument(docId) |
Delete a document |
createFolder(options) |
Create a folder |
listFolders(options?) |
List folders |
chatCompletions(params) |
Chat with documents (streaming & non-streaming) |
Supports non-streaming, streaming, multi-document, metadata streaming, and citations. See Chat API docs for full reference.
// Multi-document chat
await client.api.chatCompletions({
messages: [{ role: 'user', content: 'Compare these' }],
doc_id: ['doc-1', 'doc-2'],
});
// Streaming with tool call metadata
const stream = await client.api.chatCompletions({
messages,
doc_id,
stream: true,
stream_metadata: true,
});
for await (const chunk of stream) {
if (chunk.block_metadata?.type === 'mcp_tool_use_start') {
console.log(`[Using: ${chunk.block_metadata.tool_name}]`);
}
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}Typed wrappers for PageIndex MCP — for building custom AI agent integrations. See MCP Tools docs.
| Method | Description |
|---|---|
recentDocuments(params?) |
List recent uploads |
findRelevantDocuments(params?) |
Search documents |
getDocument(params) |
Get document details by name |
getDocumentStructure(params) |
Extract document outline |
getPageContent(params) |
Read page content |
getDocumentImage(params) |
Retrieve embedded image |
removeDocument(params) |
Delete documents (batch) |
listFolders(params?) |
List folders |
import { PageIndexError } from '@pageindex/sdk';
try {
await client.api.getDocument('invalid-id');
} catch (error) {
if (error instanceof PageIndexError) {
console.log(error.code); // "NOT_FOUND" | "UNAUTHORIZED" | "PLAN_REQUIRED" | ...
console.log(error.message);
}
}- examples/chat-with-tools — Next.js + AI SDK with MCP tools
- examples/chat-completions — Direct Chat Completions API usage
- JS SDK Docs · Python SDK · MCP · REST API
- Discord · GitHub
MIT