Changelog
What is new in Page Search API and its SDKs, newest first.
November 2, 2026
Citations that show where the answer is
- SDKs 0.11.1:
CITATIONScites pages only;CITATIONS_WITH_BOXESadds the part of each page, for which the agent looks at each page it cites. - SDKs 0.11.0:
CITATIONS, to add to an agent's instructions, has it cite each sentence with a tag,<cite doc="..." page="12"/>, and the part of the page it comes from,box="x0,y0,x1,y1".client.citations(answer)finds them, with each document's id, to open the page or show that part. See Show where the answer is.
A document is in one collection
- A collection now holds its documents as a folder holds files: a document is in at most one collection, and has a
collection_id. Adding documents to a collection moves them there from any other; a document already there that is the same file stops the move, with409 document_exists. - The same file uploaded into another collection is another document there, with its own metadata. Uploaded again into the same collection, it is the document already there, as before.
- Deleting a collection deletes its documents. Move any you want to keep out of it first.
- Documents that were in more than one collection were copied into each, as documents of their own; we wrote to the account this concerned. See Organize documents.
- SDKs 0.10.0:
Document.collection_id;collections.addmoves documents, andcollections.deletedeletes a collection's documents.
Agents find collections
- SDKs 0.9.0: a seventh agent tool,
list_collections, lists your collections, for free, andlist_documentsandsearch_documentstake acollection_id. Made for all your documents, the tools, and the MCP server, find the collection a question names, so one setup serves them all; a collection or filter given when they are made still keeps the agent to those documents. See Agent tools.
An MCP server
- The agent tools are an MCP server at
https://api.search.pageindex.ai/mcp, for the OpenAI Responses API, Claude Code, Cursor and other MCP clients; add?collection=or?filter=to choose the documents. See MCP. - Python SDK 0.8.0:
pageindex-search-mcpruns the server on your computer, for Claude Desktop (pip install "pageindex-search[mcp]"), andtools.mcp()gives it to run yourself. - Python SDK 0.8.1:
search_documentsandsearch_pagessay what each search cost.
A search of documents may list none
- Without
top_k, a search of documents lists only the documents likely to help, which may be none, in place of always the most relevant one.more_documentslists the next most relevant, up to 10, asmore_pagesdoes for pages. See API reference. - SDKs 0.8.2:
more_documentson each answer; thesearch_documentstool lists them, so an agent whose question the documents do not answer says so instead of searching a document that does not. The JavaScript SDK's search tools also say what each search cost. - SDKs 0.8.2: for a question about order or position, such as the first figure or page 5, an agent reads the pages in order, for free, instead of searching them.
Agent playground
- The console's Agent page asks an agent about your documents, all of them, a collection's or one, with the model you choose, and shows each step and what the answer cost.
October 31, 2026
Lower prices
- Page search is now $0.10 per 1,000 pages for the first question and $0.02 for each extra question, down from $0.30 and $0.10. Document search is now $0.30 per 1,000 documents for the first question and $0.10 for each extra question, down from $0.50 and $0.20. See Pricing.
Agents read pictures of pages
- SDKs 0.7.1: in
search_pages, a page that is a picture, such as a scan, comes with a note to look at it before answering from its text, which may be incomplete or wrong;read_pagesasks the agent to zoom in where the print is small. With the OpenAI Agents SDK, pictures of pages go to the model at high detail.
Agents list documents for free
- SDKs 0.7.0: a sixth agent tool,
list_documents, lists the documents whose metadata meets a filter, for free. An agent finds the documents a question names this way, and searches documents only when a filter cannot pick them out. See Agent tools. - A search of documents without
top_know always lists at least the most relevant document. - Lists of documents and collections take an
offsetand give atotal, how many there are in all, so you can go straight to any page. In the SDKs 0.7.0,list()takesoffsetin place ofafter. - Zooming takes a
box,x0,y0,x1,y1from the page's top left, as most tools write one, in place ofregion:page_image(doc, page, box=...)in the SDKs 0.7.0, andzoom_pagetakes{"x0", "y0", "x1", "y1"}.
Zoom in on part of a page
- A page's image takes a
region:top,left,bottom,rightas fractions of the page, for only that part of it, drawn sharper. Free, as reading pages is. See Pages. - SDKs 0.6.0:
documents.page_image(doc, page, region=...)in Python,documents.pageImage(doc, page, { region })in JavaScript, and a fifth agent tool,zoom_page: an agent that cannot read a table's figures or small print zooms in on them. See Agent tools.
October 30, 2026
Lower page search price
- Page search is now $0.30 per 1,000 pages for the first question and $0.10 for each extra question, down from $0.50 and $0.20. Document search is unchanged, at $0.50 per 1,000 documents and $0.20 for each extra question. See Pricing, now shown per 1,000.
The next pages, without searching again
- Without
top_k, each document a search lists also hasmore_pages: up to 10 of the next most relevant pages, without text. If the pages listed do not answer, read those for free rather than searching again. - SDKs 0.5.2: the agent tool
search_pagessearches one document, given asdocument_id; the agent calls it for each document it picked, at the same time. It listsmore_pagestoo. Both searches takequestions, up to 10 at once, which cost less than asking one at a time.
Agents
client.tools()in SDKs 0.5.0 gives an LLM agent four tools over your documents:search_documents, with your metadata's keys and values in its description so the agent can write filters;search_pages, with each page's text;read_pagesandview_pages. They work with Claude and with OpenAI. See Agent tools.- Python SDK 0.5.1:
tools.openai_agents()gives the tools ready for the OpenAI Agents SDK (pip install "pageindex-search[agents]").
Read pages
- Each page a search lists says how it is best
read:"text", or"image"for a scan or a chart.include_textlists each page with its text. GET /v1/documents/{id}/pages, the text of up to 20 pages, andGET /v1/documents/{id}/pages/{page}/image, a page as a PNG. Free. SDKs 0.5.0:documents.pagesanddocuments.page_image(pageImagein JavaScript).
October 29, 2026
Metadata schema
GET /v1/collections/{id}/schemaandGET /v1/documents/schema: the metadata keys your documents have, with their types, how many documents have each, and their values, counted from the documents as they are now. SDKs 0.4.2:client.collections.schemaandclient.documents.schema.
Exactly K documents
document_top_konPOST /v1/search: across documents, open exactly this many for each question, the most relevant, however likely. SDKs 0.4.1:document_top_k=in Python,documentTopKin JavaScript. The Playground's search of pages across documents has a Top K for documents.
One search, of one document or across documents
- Search across documents.
POST /v1/searchsearches one document's pages (withdocument_id), or across your documents: all of them, the ones you name, a collection, or those whose metadata meets a filter. The documents likely to answer each question are found first, then the most relevant opened (max_documents, 3 by default) and their pages searched. Each answer lists documents, each with its pages. See Search pages. POST /v1/documents/{id}/searchstill works as before.- Sharper document ranking. When several documents look alike for a question, such as one company's filings of different years, the one most likely to answer it now comes first, in document search and in a search across documents.
- Playground. Two searches, as the API has: search pages (in one document, a collection or all your documents, with the pages found under each document) and search documents.
- SDKs 0.4.0 (Python and JavaScript):
client.search(questions, document=doc)(JavaScript:client.search(questions, { document: doc })), or withdocuments,collection,filterandmax_documentsto search across documents. Breaking: the questions now come first and the document is an option; each answer's pages are underanswer.documents(in Python,answer.pagesis still the first document's).
Document search, collections and metadata
- Document search.
POST /v1/documents/searchfinds which of your documents likely hold each question's answer: all of them, the ones you name, a collection, or those whose metadata meets a filter. Each document searched is priced as one page. See Search pages. - Collections. Named groups of your documents, to list and search within:
/v1/collections, andcollection_idon uploads, listing and document search. A document may be in many collections. - Metadata. Your own keys on each document (strings, numbers and booleans), set on upload or with the new
PATCH /v1/documents/{id}, and afilteron listing and document search. Every document now has ametadatafield, empty until you set it. - Console. Collections on the Documents page, and the Playground searches across documents too.
- SDKs 0.3.0 (Python and JavaScript):
client.documents.search,client.collections,client.documents.update, andcollection,metadataandfilteroptions on upload, list and search. - SDKs 0.3.1: document search results carry each document's
metadata. - Pricing. Document search is on the pricing page: a card, and a mode of the cost calculator.
October 27, 2026
SDKs 0.2.0
- Documents are managed under
client.documents:upload,get,list(which goes through every page when looped over) anddelete. The names before 0.2 still work, with a warning, and go in a later version. - Every search sends an
Idempotency-Key, the same on retries, so a search retried after a timeout is not charged twice.
Page Search API
- Upload a PDF, ask up to 10 questions at once, and get back the pages likely to answer each, with their relevance. Python and JavaScript SDKs, and a console with API keys, credit, usage and a playground.
GET /v1/documents/{id}/filereturns the PDF a document was made from.