Academic Paper Search
Academic paper search built for AI agents doing real research. One paid call queries three authoritative open scholarly indexes simultaneously — OpenAlex (250M+ works with citation counts and open-access resolution), Crossref (the DOI registry) and arXiv (preprints with guaranteed PDFs) — then merges and deduplicates the results by DOI and title. Each paper returns: title, up to 12 authors, publication year, venue, DOI, citation count (richest source wins), a reconstructed abstract where available, the canonical URL, and — the part agents actually need — a direct open-access pdf_url when a legal free full text exists, so the next step (fetch and read the paper) is one HTTP GET away. Filters: limit (1-25), year_from, open_access_only. Set format to 'bibtex' to also get a ready-to-use BibTeX entry per paper. Per-source status is reported so you can see exactly which indexes answered. Data comes from public scholarly APIs; citation counts and OA links are as fresh as the sources themselves.
Call with x402
1. Send the request. 2. Receive 402 with accepts[]. 3. Sign the payment and retry with the X-PAYMENT header.
curl -X POST https://agentbit.app/v1/research/papers \
-H 'Content-Type: application/json' \
-d '{"query":"attention is all you need transformer","limit":5,"format":"bibtex"}'
Input schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query: topic, title fragment, or author + topic (3-300 chars)"
},
"limit": {
"type": "integer",
"description": "Max papers to return (1-25, default 10)"
},
"year_from": {
"type": "integer",
"description": "Only papers published in or after this year"
},
"open_access_only": {
"type": "boolean",
"description": "Only papers with a direct open-access PDF link"
},
"format": {
"type": "string",
"enum": [
"json",
"bibtex"
],
"description": "'bibtex' adds a ready-to-cite BibTeX entry per paper"
}
},
"required": [
"query"
]
}Output schema
{
"type": "object",
"properties": {
"query": {
"type": "string"
},
"result_count": {
"type": "integer"
},
"papers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"authors": {
"type": "array",
"items": {
"type": "string"
}
},
"year": {
"type": [
"integer",
"null"
]
},
"venue": {
"type": [
"string",
"null"
]
},
"doi": {
"type": [
"string",
"null"
]
},
"citations": {
"type": "integer"
},
"pdf_url": {
"type": [
"string",
"null"
],
"description": "Direct open-access PDF link when a legal free full text exists"
},
"abstract": {
"type": [
"string",
"null"
]
},
"url": {
"type": [
"string",
"null"
]
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"bibtex": {
"type": "string",
"description": "Present when format=bibtex"
}
}
}
},
"sources": {
"type": "object",
"description": "Per-source status: {openalex|crossref|arxiv: {ok, results, error?}}"
},
"note": {
"type": "string"
}
}
}Code examples
// JavaScript (x402-fetch)
import { wrapFetchWithPayment } from "x402-fetch";
const fetchWithPay = wrapFetchWithPayment(fetch, wallet);
const r = await fetchWithPay("https://agentbit.app/v1/research/papers", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify({"query":"attention is all you need transformer","limit":5,"format":"bibtex"})
});
console.log(await r.json());
# Python (x402 client)
from x402.clients.requests import x402_requests
s = x402_requests(account)
r = s.post("https://agentbit.app/v1/research/papers",
json={"query":"attention is all you need transformer","limit":5,"format":"bibtex"})
print(r.json())
// PHP
$r = Http::withHeaders(['X-PAYMENT' => $signedPayment])
->post('https://agentbit.app/v1/research/papers',
array (
'query' => 'attention is all you need transformer',
'limit' => 5,
'format' => 'bibtex',
));
$data = $r->json();