{"openapi":"3.1.0","info":{"title":"Academic Evidence Pack","version":"1.4.0","contact":{"name":"Academic Evidence Pack","url":"https://aep-api.fly.dev/llms.txt"},"x-guidance":"Use POST /v1/citation-report to check a bibliography (up to 50 references, $1.00; /large for up to 75, $3.00) — every reference gets a verdict and the report is Ed25519-signed. Use POST /v1/evidence-pack ($0.03) for a ranked, retraction-checked evidence pack on a research question. Free previews take no payment.","description":"Find 3-10 scholarly candidates for a question or topic. Returns DOI/OpenAlex IDs, authors, year, venue, source URLs, citation context, open-access location, and known retraction/correction warnings. JSON only. Does not claim that a paper proves a statement. Price: $0.03 USDC per successful response via x402. A free preview (at most 3 papers) is at /v1/evidence-pack/preview. Over MCP (stdio) the same service serves evidence_pack (paid) and evidence_pack_preview (free), plus citation_report / citation_report_large (paid) and citation_report_preview (free). Citation Integrity Report: POST /v1/citation-report ($1.00, up to 50 references) and /v1/citation-report/large ($3.00, up to 75); free preview of the first 3 at /v1/citation-report/preview; public signing key at /v1/citation-report/keys."},"servers":[{"url":"https://aep-api.fly.dev"}],"externalDocs":{"url":"https://aep-api.fly.dev/docs","description":"Technical companion: methodology, calibration record, threat model, how to buy"},"paths":{"/v1/citation-report":{"post":{"operationId":"citationReport","summary":"Buy one signed Citation Integrity Report (standard tier, up to 50 references, $1.00)","description":"x402 exact scheme; only a 2xx response is settled. Verify a bibliography. For every reference: exists, resolves, retracted/corrected/flagged, title/author/year match against the registered record, and a rule-derived fabrication risk — as a signed (Ed25519, RFC 8785 canonical JSON), byte-reproducible JSON report. Input: structured references or BibTeX. No LLM; every claim carries its source and retrieval time. Over 50 references → 400 too_many_references (not charged); use /v1/citation-report/large. Body at most 524288 bytes (413 payload_too_large, not charged). Without a configured signing key the route answers 503 signing_unavailable (never an unsigned paid report). Verify offline: recompute RFC 8785 JCS of the body minus signature and stats, sha256 it, and check the detached Ed25519 JWS against /v1/citation-report/keys. A paid response you lost is re-served by GET /v1/citation-report/receipts/{X-Request-Id} within the cache TTL.","x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"1.00"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Exactly one of references or bibtex.","properties":{"references":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","maxLength":120},"doi":{"type":"string","maxLength":300},"title":{"type":"string","maxLength":500},"authors":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":100},"year":{"type":"integer","minimum":1500,"maximum":2100},"venue":{"type":"string","maxLength":300},"raw":{"type":"string","maxLength":1000,"description":"The citation as free text; used verbatim as a bibliographic query when no title is given."}}}},"bibtex":{"type":"string","maxLength":262144,"description":"A BibTeX bibliography; parsed server-side (entry key → reference id)."},"options":{"type":"object","additionalProperties":false,"properties":{"strict_authors":{"type":"boolean","default":false,"description":"Require every listed author to match, not just the first."},"include_unpaywall":{"type":"boolean","default":false,"description":"Add open-access info per resolved reference."}}}}},"example":{"references":[{"id":"wolfe2011","doi":"10.1126/science.1197258","title":"A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus","authors":["Felisa Wolfe-Simon"],"year":2011},{"id":"lee2022","title":"Generative adversarial networks for hyper-realistic avatar creation","authors":["Min-Jun Lee","Soo-Young Kim"],"year":2022,"venue":"CVPR"}],"options":{"strict_authors":false,"include_unpaywall":false}}}}},"responses":{"200":{"description":"Signed report (byte-identical for the cache TTL; X-Request-Id header varies)","content":{"application/json":{"example":{"report":{"version":"1","ruleset_version":"2026-09-02.5","tier":"standard","issuer":{"name":"Academic Evidence Pack — Citation Integrity Report","kid":"…"},"input_hash":"sha256:…","reference_count":2,"price_usd":"1.00","issued_at":"2026-09-02T12:00:00.000Z"},"summary":{"verified":1,"verified_with_discrepancies":0,"not_found":1,"unresolvable":0,"integrity_flagged":1,"fabrication_risk":{"low":1,"medium":0,"high":1,"n_a":0}},"references":[{"id":"wolfe2011","input":{"id":"wolfe2011","doi":"10.1126/science.1197258","title":"…","authors":["Felisa Wolfe-Simon"],"year":2011},"resolved":{"doi":"10.1126/science.1197258","openalex":"W2135819747","title":"…","authors":[{"name":"Felisa Wolfe-Simon","orcid":null}],"year":2011,"venue":"Science","type":"article","source_urls":["https://doi.org/10.1126/science.1197258","https://openalex.org/W2135819747"]},"checks":{"doi_syntax":"true","exists":"true","resolves":{"result":"true","definition":"registered at Crossref or indexed by OpenAlex"},"match":{"method":"doi","title_similarity":1000,"first_author_match":true,"all_authors_match":null,"author_list_prefix":true,"year_delta":0,"venue_similarity":null,"candidates_considered":0},"integrity":{"status":"known","updates":[{"type":"retraction","doi":"10.1126/science.adu5488","date":"2025-07-24T00:00:00Z","source":"crossref"}],"sources_checked":["openalex","crossref"],"note":"Post-publication update record(s) found. Review before citing."}},"verdict":"verified","fabrication_risk":"low","integrity_flagged":true,"reasons":[],"provenance":{"title":{"source":"openalex","retrieved_at":"…"},"integrity":{"source":"crossref","retrieved_at":"…"}}},{"id":"lee2022","input":{"id":"lee2022","title":"…","authors":["Min-Jun Lee","Soo-Young Kim"],"year":2022,"venue":"CVPR"},"resolved":null,"checks":{"doi_syntax":"n_a","exists":"n_a","resolves":{"result":"n_a","definition":"registered at Crossref or indexed by OpenAlex"},"match":{"method":null,"title_similarity":null,"first_author_match":null,"all_authors_match":null,"author_list_prefix":null,"year_delta":null,"venue_similarity":null,"candidates_considered":3},"integrity":{"status":"n_a","updates":[],"sources_checked":[],"note":"No registered record to check."}},"verdict":"not_found","fabrication_risk":"high","integrity_flagged":false,"reasons":["no_matching_record"],"provenance":{}}],"warnings":["fabrication_risk is a rule-derived label (see report.ruleset_version), not a probability. …"],"partial_failures":[],"stats":{"upstream_calls":{"openalex":2,"crossref":2,"unpaywall":0},"cache":"miss","latency_ms":1800},"signature":{"alg":"EdDSA","kid":"…","canonicalization":"RFC 8785 JCS","payload_hash":"sha256:…","jws":"eyJ…..…"}}}}},"400":{"description":"validation_error | too_many_references (details.count/limit/use) — not charged"},"402":{"description":"Payment required — x402 requirements in body/headers"},"409":{"description":"duplicate_payment — not charged; a paid-and-lost response is at GET /v1/citation-report/receipts/{X-Request-Id}"},"413":{"description":"payload_too_large — body over 524288 bytes, rejected before any payment or parsing; not charged"},"503":{"description":"upstream_unavailable | upstream_budget_exhausted (Retry-After = next 00:00 UTC) | signing_unavailable — not charged"}}}},"/v1/citation-report/large":{"post":{"operationId":"citationReportLarge","summary":"Buy one signed Citation Integrity Report (large tier, up to 75 references, $3.00)","description":"x402 exact scheme; only a 2xx response is settled. Verify a bibliography. For every reference: exists, resolves, retracted/corrected/flagged, title/author/year match against the registered record, and a rule-derived fabrication risk — as a signed (Ed25519, RFC 8785 canonical JSON), byte-reproducible JSON report. Input: structured references or BibTeX. No LLM; every claim carries its source and retrieval time. Over 75 references → 400 too_many_references (not charged). Body at most 524288 bytes (413 payload_too_large, not charged). Without a configured signing key the route answers 503 signing_unavailable (never an unsigned paid report). Verify offline: recompute RFC 8785 JCS of the body minus signature and stats, sha256 it, and check the detached Ed25519 JWS against /v1/citation-report/keys. A paid response you lost is re-served by GET /v1/citation-report/receipts/{X-Request-Id} within the cache TTL. NOTE: $3.00 is above the @x402/core client's default spend cap (maxAmountPerPayment $1.00); raise it (client.setSpendControls) before calling, or the client refuses without sending anything.","x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"3.00"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Exactly one of references or bibtex.","properties":{"references":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","maxLength":120},"doi":{"type":"string","maxLength":300},"title":{"type":"string","maxLength":500},"authors":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":100},"year":{"type":"integer","minimum":1500,"maximum":2100},"venue":{"type":"string","maxLength":300},"raw":{"type":"string","maxLength":1000,"description":"The citation as free text; used verbatim as a bibliographic query when no title is given."}}}},"bibtex":{"type":"string","maxLength":262144,"description":"A BibTeX bibliography; parsed server-side (entry key → reference id)."},"options":{"type":"object","additionalProperties":false,"properties":{"strict_authors":{"type":"boolean","default":false,"description":"Require every listed author to match, not just the first."},"include_unpaywall":{"type":"boolean","default":false,"description":"Add open-access info per resolved reference."}}}}},"example":{"references":[{"id":"wolfe2011","doi":"10.1126/science.1197258","title":"A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus","authors":["Felisa Wolfe-Simon"],"year":2011},{"id":"lee2022","title":"Generative adversarial networks for hyper-realistic avatar creation","authors":["Min-Jun Lee","Soo-Young Kim"],"year":2022,"venue":"CVPR"}],"options":{"strict_authors":false,"include_unpaywall":false}}}}},"responses":{"200":{"description":"Signed report (byte-identical for the cache TTL; X-Request-Id header varies)","content":{"application/json":{"example":{"report":{"version":"1","ruleset_version":"2026-09-02.5","tier":"standard","issuer":{"name":"Academic Evidence Pack — Citation Integrity Report","kid":"…"},"input_hash":"sha256:…","reference_count":2,"price_usd":"1.00","issued_at":"2026-09-02T12:00:00.000Z"},"summary":{"verified":1,"verified_with_discrepancies":0,"not_found":1,"unresolvable":0,"integrity_flagged":1,"fabrication_risk":{"low":1,"medium":0,"high":1,"n_a":0}},"references":[{"id":"wolfe2011","input":{"id":"wolfe2011","doi":"10.1126/science.1197258","title":"…","authors":["Felisa Wolfe-Simon"],"year":2011},"resolved":{"doi":"10.1126/science.1197258","openalex":"W2135819747","title":"…","authors":[{"name":"Felisa Wolfe-Simon","orcid":null}],"year":2011,"venue":"Science","type":"article","source_urls":["https://doi.org/10.1126/science.1197258","https://openalex.org/W2135819747"]},"checks":{"doi_syntax":"true","exists":"true","resolves":{"result":"true","definition":"registered at Crossref or indexed by OpenAlex"},"match":{"method":"doi","title_similarity":1000,"first_author_match":true,"all_authors_match":null,"author_list_prefix":true,"year_delta":0,"venue_similarity":null,"candidates_considered":0},"integrity":{"status":"known","updates":[{"type":"retraction","doi":"10.1126/science.adu5488","date":"2025-07-24T00:00:00Z","source":"crossref"}],"sources_checked":["openalex","crossref"],"note":"Post-publication update record(s) found. Review before citing."}},"verdict":"verified","fabrication_risk":"low","integrity_flagged":true,"reasons":[],"provenance":{"title":{"source":"openalex","retrieved_at":"…"},"integrity":{"source":"crossref","retrieved_at":"…"}}},{"id":"lee2022","input":{"id":"lee2022","title":"…","authors":["Min-Jun Lee","Soo-Young Kim"],"year":2022,"venue":"CVPR"},"resolved":null,"checks":{"doi_syntax":"n_a","exists":"n_a","resolves":{"result":"n_a","definition":"registered at Crossref or indexed by OpenAlex"},"match":{"method":null,"title_similarity":null,"first_author_match":null,"all_authors_match":null,"author_list_prefix":null,"year_delta":null,"venue_similarity":null,"candidates_considered":3},"integrity":{"status":"n_a","updates":[],"sources_checked":[],"note":"No registered record to check."}},"verdict":"not_found","fabrication_risk":"high","integrity_flagged":false,"reasons":["no_matching_record"],"provenance":{}}],"warnings":["fabrication_risk is a rule-derived label (see report.ruleset_version), not a probability. …"],"partial_failures":[],"stats":{"upstream_calls":{"openalex":2,"crossref":2,"unpaywall":0},"cache":"miss","latency_ms":1800},"signature":{"alg":"EdDSA","kid":"…","canonicalization":"RFC 8785 JCS","payload_hash":"sha256:…","jws":"eyJ…..…"}}}}},"400":{"description":"validation_error | too_many_references (details.count/limit/use) — not charged"},"402":{"description":"Payment required — x402 requirements in body/headers"},"409":{"description":"duplicate_payment — not charged; a paid-and-lost response is at GET /v1/citation-report/receipts/{X-Request-Id}"},"413":{"description":"payload_too_large — body over 524288 bytes, rejected before any payment or parsing; not charged"},"503":{"description":"upstream_unavailable | upstream_budget_exhausted (Retry-After = next 00:00 UTC) | signing_unavailable — not charged"}}}},"/v1/citation-report/receipts/{id}":{"get":{"operationId":"citationReportReceipt","security":[],"summary":"Re-fetch a paid report by its X-Request-Id (no payment)","description":"The exact bytes a paid /v1/citation-report or /large response was served with, for the cache TTL after it was served. The id is the X-Request-Id header of that response — a bearer secret: keep it private. 404 receipt_not_found after the TTL, for an unknown id, or for a preview (never recorded). One payment still buys one report; this re-delivers it.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^rpt_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}}],"responses":{"200":{"description":"The paid report, byte-identical to the original response"},"404":{"description":"receipt_not_found"}}}},"/v1/citation-report/preview":{"post":{"operationId":"citationReportPreview","security":[],"summary":"Free preview: the first 3 references, unsigned","description":"No payment. Same request schema; only the first references are checked; signature is null and report.tier is \"preview\". Rate limit: 60 requests per hour per client and 2000 per day in total (429 rate_limited with Retry-After; the paid route is unlimited).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Exactly one of references or bibtex.","properties":{"references":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","maxLength":120},"doi":{"type":"string","maxLength":300},"title":{"type":"string","maxLength":500},"authors":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":100},"year":{"type":"integer","minimum":1500,"maximum":2100},"venue":{"type":"string","maxLength":300},"raw":{"type":"string","maxLength":1000,"description":"The citation as free text; used verbatim as a bibliographic query when no title is given."}}}},"bibtex":{"type":"string","maxLength":262144,"description":"A BibTeX bibliography; parsed server-side (entry key → reference id)."},"options":{"type":"object","additionalProperties":false,"properties":{"strict_authors":{"type":"boolean","default":false,"description":"Require every listed author to match, not just the first."},"include_unpaywall":{"type":"boolean","default":false,"description":"Add open-access info per resolved reference."}}}}},"example":{"references":[{"id":"wolfe2011","doi":"10.1126/science.1197258","title":"A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus","authors":["Felisa Wolfe-Simon"],"year":2011},{"id":"lee2022","title":"Generative adversarial networks for hyper-realistic avatar creation","authors":["Min-Jun Lee","Soo-Young Kim"],"year":2022,"venue":"CVPR"}],"options":{"strict_authors":false,"include_unpaywall":false}}}}},"responses":{"200":{"description":"Unsigned preview report (X-RateLimit-Limit / -Remaining / -Reset headers)"},"400":{"description":"Validation error"},"429":{"description":"rate_limited — details.scope ip | global, Retry-After set; use the paid route"},"503":{"description":"upstream_unavailable | upstream_budget_exhausted (Retry-After = next 00:00 UTC)"}}}},"/v1/citation-report/keys":{"get":{"operationId":"citationReportKeys","security":[],"summary":"Public signing key(s) as a JWK set (OKP / Ed25519; kid = RFC 7638 thumbprint)","responses":{"200":{"description":"{ keys: [...] } — empty when no signing key is configured"}}}},"/":{"get":{"operationId":"root","security":[],"summary":"Redirects (302) to /docs","responses":{"302":{"description":"Location: /docs"}}}},"/docs":{"get":{"operationId":"docs","security":[],"summary":"Technical companion page (HTML; no JavaScript)","responses":{"200":{"description":"text/html"}}}},"/docs/census.json":{"get":{"operationId":"censusRecord","security":[],"summary":"The ratified calibration record (verbatim JSON; ETag = its sha256; gzip when accepted)","responses":{"200":{"description":"application/json"},"304":{"description":"If-None-Match matched"}}}},"/v1/evidence-pack":{"post":{"operationId":"evidencePack","summary":"Buy one bounded evidence pack","description":"x402 exact scheme. An unpaid request returns HTTP 402 with payment requirements. Only a 2xx response is settled; 4xx/5xx are never charged. One payment serves exactly one request: a concurrent or repeated use of the same payment header returns 409 duplicate_payment (not charged).","x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.03"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":8,"maxLength":500,"description":"Question, claim, or research topic."},"limit":{"type":"integer","minimum":3,"maximum":10,"default":5},"from_year":{"type":"integer"},"to_year":{"type":"integer"},"open_access_only":{"type":"boolean","default":false},"exclude_known_retracted":{"type":"boolean","default":false,"description":"Default keeps retracted records but marks them; true filters them."},"fields":{"type":"array","items":{"type":"string","enum":["papers","relevance","impact_context","access","integrity","provenance"]},"description":"Optional response minimization."}}},"example":{"query":"Does retrieval-augmented generation reduce hallucinations?","limit":5,"from_year":2022,"open_access_only":false,"exclude_known_retracted":false}}}},"responses":{"200":{"description":"Evidence pack","content":{"application/json":{"example":{"request":{"id":"req_…","normalized_query":"retrieval-augmented generation reduce hallucinations","filters":{"limit":5,"from_year":2022,"to_year":null,"open_access_only":false,"exclude_known_retracted":false},"price_usd":"0.03","retrieved_at":"2026-09-01T12:00:00.000Z"},"papers":[{"title":"…","identifiers":{"doi":"10.xxxx/…","openalex":"W…"},"year":2024,"authors":[{"name":"…","orcid":null}],"venue":"…","type":"article","source_urls":["https://doi.org/10.xxxx/…","https://openalex.org/W…"],"relevance":{"score":0.87,"rank":1,"reason":"provider relevance; DOI; complete metadata; recent"},"impact_context":{"citation_count":42,"source":"openalex","retrieved_at":"…","note":"Citation count is impact context from one provider, not a quality score."},"access":{"is_oa":true,"best_url":"https://…","license":"cc-by","confidence":"reported","source":"openalex","retrieved_at":"…"},"integrity":{"status":"none_found","updates":[],"sources_checked":["openalex","crossref"],"note":"No update records found on checked sources. This is not proof of validity."},"provenance":{"title":{"source":"openalex","retrieved_at":"…"}}}],"warnings":["Candidate evidence only; relevance and citation count do not establish truth or quality. A missing integrity warning does not prove a paper is sound."],"partial_failures":[],"stats":{"candidates_retrieved":15,"duplicates_removed":1,"filtered_retracted":0,"cache":"miss","latency_ms":2140}}}}},"400":{"description":"Validation error (machine-readable, not charged)"},"402":{"description":"Payment required — x402 requirements in body/headers"},"409":{"description":"duplicate_payment — this payment header is already being served or was served (not charged)"},"503":{"description":"upstream_unavailable | upstream_budget_exhausted (Retry-After = next 00:00 UTC) — not charged"}}}},"/v1/evidence-pack/preview":{"post":{"operationId":"evidencePackPreview","security":[],"summary":"Free preview: the same pipeline, limit forced to 3","description":"No payment. Same request schema (any limit is replaced by 3); request.price_usd is \"0\". Rate limit: 60 requests per hour per client and 2000 per day in total (429 rate_limited with Retry-After; the paid route is unlimited).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":8,"maxLength":500,"description":"Question, claim, or research topic."},"limit":{"type":"integer","minimum":3,"maximum":10,"default":5},"from_year":{"type":"integer"},"to_year":{"type":"integer"},"open_access_only":{"type":"boolean","default":false},"exclude_known_retracted":{"type":"boolean","default":false,"description":"Default keeps retracted records but marks them; true filters them."},"fields":{"type":"array","items":{"type":"string","enum":["papers","relevance","impact_context","access","integrity","provenance"]},"description":"Optional response minimization."}}},"example":{"query":"Does retrieval-augmented generation reduce hallucinations?","limit":3,"from_year":2022,"open_access_only":false,"exclude_known_retracted":false}}}},"responses":{"200":{"description":"Evidence pack with at most 3 papers (X-RateLimit-Limit / -Remaining / -Reset headers)"},"400":{"description":"Validation error (machine-readable)"},"429":{"description":"rate_limited — details.scope ip | global, Retry-After set; use the paid route"},"503":{"description":"upstream_unavailable | upstream_budget_exhausted (Retry-After = next 00:00 UTC)"}}}},"/health":{"get":{"operationId":"health","security":[],"responses":{"200":{"description":"ok"}}}}}}