{"openapi":"3.1.0","info":{"title":"AIConfPaper API","description":"Semantic search over millions of accepted AI-conference papers (NeurIPS/ICML/ICLR/CVPR/ECCV/ICCV/ACL/EMNLP/CoRL/ICRA/IROS/RSS/AAAI/IJCAI/AISTATS/UAI/NAACL/COLING, 2015-2026). Agent quickstart: GET /llms.txt. Public agent API at /api/v1: every endpoint needs a free API key (send 'Authorization: Bearer acp_...'); create one at /account. MCP server (Streamable HTTP, read-only search tools) at POST /mcp, same Bearer key.","version":"1.0.0"},"paths":{"/api/facets":{"get":{"summary":"Facets","operationId":"facets_api_facets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/search":{"get":{"summary":"Search","operationId":"search_api_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":4000,"title":"Q"}},{"name":"venues","in":"query","required":false,"schema":{"type":"string","default":"","title":"Venues"}},{"name":"tiers","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tiers"}},{"name":"year_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Min"}},{"name":"year_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Max"}},{"name":"min_rating","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Min Rating"}},{"name":"only_reviewed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Reviewed"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"similarity","title":"Sort"}},{"name":"k","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"K"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/similar":{"get":{"summary":"Similar","operationId":"similar_api_similar_get","parameters":[{"name":"paper_id","in":"query","required":true,"schema":{"type":"string","title":"Paper Id"}},{"name":"k","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"K"}},{"name":"year_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Min"}},{"name":"year_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Max"}},{"name":"venues","in":"query","required":false,"schema":{"type":"string","default":"","title":"Venues"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/papers/batch":{"post":{"summary":"Papers Batch","description":"Resolve saved paper_ids -> full metadata (for rendering a user's collections).\nReturns {results, missing}; `missing` = ids no longer in the index (e.g. after a rebuild),\nso the UI can show a tombstone instead of dropping them.","operationId":"papers_batch_api_papers_batch_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sitemap/ids":{"get":{"summary":"Sitemap Ids","description":"Bulk paper_ids for sitemap generation (no embedding; reads the in-memory meta frame).\nReturns {ids, total} so the Next.js sitemap can chunk all papers into <=50k-URL sitemaps.","operationId":"sitemap_ids_api_sitemap_ids_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/venue/list":{"get":{"summary":"Venue List","description":"All venue-year cohorts with counts (for the /conferences hub, sitemap, and calendar links).","operationId":"venue_list_api_venue_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/venue/papers":{"get":{"summary":"Venue Papers","description":"Accepted-paper list for one venue+year (powers the SEO landing pages at /conferences/*).\nSorted by citations desc then title; returns a status breakdown for the page header.","operationId":"venue_papers_api_venue_papers_get","parameters":[{"name":"venue","in":"query","required":true,"schema":{"type":"string","title":"Venue"}},{"name":"year","in":"query","required":true,"schema":{"type":"integer","title":"Year"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sitemap/authors":{"get":{"summary":"Sitemap Authors","description":"Distinct author display names with >=2 accepted papers, for author-page sitemaps.\nFiltering out single-paper authors keeps the sitemap high-signal and bounded.","operationId":"sitemap_authors_api_sitemap_authors_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recommend":{"post":{"summary":"Recommend","description":"Interest-based recommendations: centroid of the user's saved-paper embeddings ->\ncosine vector search, excluding the papers they already saved.","operationId":"recommend_api_recommend_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/author":{"get":{"summary":"Author","description":"All papers by an exact author name (case/dot-insensitive), newest-first by default.","operationId":"author_api_author_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","title":"Name"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"year","title":"Sort"}},{"name":"k","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"K"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/config":{"get":{"summary":"Config","description":"Public frontend config — Supabase URL + anon (publishable) key from env. The anon key is\nsafe to expose; auth is disabled (UI hidden) until both are set on the VPS.","operationId":"config_api_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/citations":{"post":{"summary":"Citations","description":"Non-blocking citation read+enqueue (scrape-on-view + write-back, rate-limited).\nReturns {paper_id: best-known count}; stale ones refresh in the background worker.","operationId":"citations_api_citations_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cites_stats":{"get":{"summary":"Cites Stats","operationId":"cites_stats_api_cites_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/arxiv":{"post":{"summary":"Arxiv","description":"Resolve arXiv ids by title for the shown papers -> enables a TeX source download.\nReturns {paper_id: arxiv_id|null}; unresolved ones look up in the background.","operationId":"arxiv_api_arxiv_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/external/resolve":{"get":{"summary":"External Resolve","description":"Resolve an arbitrary arXiv paper (not in our index) into SearchResult shape so a user can\nadd it to a collection. arXiv API is globally rate-limited; metadata cached per id.","operationId":"external_resolve_api_external_resolve_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"arXiv URL or id","title":"Url"},"description":"arXiv URL or id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search":{"get":{"tags":["v1"],"summary":"Search accepted AI-conference papers by keyword/sentence/abstract","description":"Find papers most relevant to `q`. Returns a slim, token-efficient list; fetch full\ndetail (abstract, bibtex, citation count, arXiv TeX link) via GET /papers/{id}.","operationId":"search_papers","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":4000,"description":"Free text: keywords, a sentence, or a whole abstract. Results are ranked by semantic (embedding) similarity.","examples":["diffusion models for robotic manipulation"],"title":"Q"},"description":"Free text: keywords, a sentence, or a whole abstract. Results are ranked by semantic (embedding) similarity."},{"name":"venue","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Filter by venue(s), repeatable. See /api/v1/facets.","examples":[["NeurIPS","ICML"]],"default":[],"title":"Venue"},"description":"Filter by venue(s), repeatable. See /api/v1/facets."},{"name":"year_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Earliest publication year (>=2015).","examples":[2022],"title":"Year Min"},"description":"Earliest publication year (>=2015)."},{"name":"year_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Latest publication year.","title":"Year Max"},"description":"Latest publication year."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(similarity|citations|year)$","description":"Result ordering: similarity (default), citations, or year.","default":"similarity","title":"Sort"},"description":"Result ordering: similarity (default), citations, or year."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max results to return (1-100).","default":10,"title":"Limit"},"description":"Max results to return (1-100)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset.","default":0,"title":"Offset"},"description":"Pagination offset."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/papers/{paper_id}":{"get":{"tags":["v1"],"summary":"Get full detail for one paper (abstract, bibtex, citations, arXiv TeX link)","description":"Self-contained record: full abstract, BibTeX, live citation count, and actionable links\nincluding `links.arxiv_src` (the LaTeX source bundle). arXiv/citation fields may be null on the\nfirst call and fill in shortly — retry to pick them up. Also accepts external 'arxiv:<id>' ids\n(papers registered via POST /papers/external).","operationId":"get_paper","parameters":[{"name":"paper_id","in":"path","required":true,"schema":{"type":"string","description":"Stable paper id from a search result.","examples":["nips-2025-GEzd5K5s5u"],"title":"Paper Id"},"description":"Stable paper id from a search result."},{"name":"enrich","in":"query","required":false,"schema":{"type":"boolean","description":"Fetch live citation count + arXiv id from Semantic Scholar (enqueues a background lookup on cache-miss). Set false for read-only SSR so cold renders never enqueue work.","default":true,"title":"Enrich"},"description":"Fetch live citation count + arXiv id from Semantic Scholar (enqueues a background lookup on cache-miss). Set false for read-only SSR so cold renders never enqueue work."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaperFull"}}}},"404":{"description":"No paper with that id."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/papers/external":{"post":{"tags":["v1"],"summary":"Register an arXiv paper that is not in the index (requires an API key)","description":"Resolve an arbitrary arXiv paper (metadata from the official arXiv API; cached per id) and\nregister it so the returned `paper_id` ('arxiv:<id>') can be added to your collections via\nPOST /collections/{id}/papers — same flow the website uses for papers outside the accepted-papers\nindex. Idempotent; the first call for a new id can take a few seconds (arXiv rate limit).","operationId":"add_external_paper","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalPaperBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaperFull"}}}},"400":{"description":"No arXiv id found in the input."},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such paper on arxiv.org."},"503":{"description":"arXiv lookups are busy — retry in a few seconds."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/papers/{paper_id}/similar":{"get":{"tags":["v1"],"summary":"Find papers semantically similar to a given paper","description":"Nearest neighbors of the seed paper in embedding space (reuses its stored vector — instant).\nOptional venue/year filters, same semantics as /search. Same slim shape as /search.","operationId":"find_similar","parameters":[{"name":"paper_id","in":"path","required":true,"schema":{"type":"string","description":"Seed paper id.","examples":["nips-2025-GEzd5K5s5u"],"title":"Paper Id"},"description":"Seed paper id."},{"name":"venue","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Filter by venue(s), repeatable. See /api/v1/facets.","examples":[["NeurIPS","ICML"]],"default":[],"title":"Venue"},"description":"Filter by venue(s), repeatable. See /api/v1/facets."},{"name":"year_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Earliest publication year (>=2015).","examples":[2022],"title":"Year Min"},"description":"Earliest publication year (>=2015)."},{"name":"year_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Latest publication year.","title":"Year Max"},"description":"Latest publication year."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max similar papers to return.","default":10,"title":"Limit"},"description":"Max similar papers to return."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimilarResponse"}}}},"404":{"description":"No paper with that id."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/facets":{"get":{"tags":["v1"],"summary":"List allowed filter values (venues, tiers, year range)","description":"Discover valid `venue`/`tier` filter values and the year range, so an agent can\nconstruct valid /search queries without guessing.","operationId":"list_facets","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacetsResponse"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/collections":{"get":{"tags":["v1"],"summary":"List your collections (requires an API key)","description":"List your collections — both your own and ones shared with you for co-editing\n(`owned: false`, joined via a /collab invite). Send 'Authorization: Bearer acp_...'.","operationId":"list_my_collections","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionsResponse"}}}},"401":{"description":"Missing or invalid API key."}},"security":[{"BearerApiKey":[]}]},"post":{"tags":["v1"],"summary":"Create a new collection (requires an API key)","description":"Create an empty collection owned by the API key, then fill it with\nPOST /collections/{id}/papers. This is how an agent turns a search into a saved collection.","operationId":"create_collection","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCollectionBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionInfo"}}}},"401":{"description":"Missing or invalid API key."},"400":{"description":"Could not create (e.g. 50-folder limit reached)."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/collections/{collection_id}":{"get":{"tags":["v1"],"summary":"Get the papers in one of your collections (requires an API key)","description":"All papers in one of your collections, as slim records (full detail via /papers/{id}).\nIncludes external arXiv papers ('arxiv:<id>', venue 'arXiv') added via POST /papers/external\nor the website.","operationId":"get_collection","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from /api/v1/collections.","title":"Collection Id"},"description":"Collection id from /api/v1/collections."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionPapersResponse"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]},"delete":{"tags":["v1"],"summary":"Delete one of your collections (requires an API key)","description":"Soft-delete a collection you own (its papers go to trash, purged after 30 days). Lets an agent\nclean up collections it created.","operationId":"delete_collection","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id to delete.","title":"Collection Id"},"description":"Collection id to delete."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteCollectionResponse"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]},"patch":{"tags":["v1"],"summary":"Rename a collection and/or set its description (requires an API key)","description":"Edit a collection in place (no more delete + recreate to fix a name). Omitted fields are\nleft unchanged; sending `description: \"\"` clears it.","operationId":"update_collection","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from POST/GET /collections.","title":"Collection Id"},"description":"Collection id from POST/GET /collections."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCollectionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCollectionResponse"}}}},"400":{"description":"Nothing to update."},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/collections/{collection_id}/papers":{"post":{"tags":["v1"],"summary":"Add papers to one of your collections (requires an API key)","description":"Add paper ids to a collection: ids from /search, or 'arxiv:<id>' ids registered via\nPOST /papers/external. Idempotent — re-adding is a no-op. Unknown ids and ids that hit a\nper-folder (1000) or per-account (5000) cap are counted in `skipped`, not fatal.","operationId":"add_papers_to_collection","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from POST/GET /collections.","title":"Collection Id"},"description":"Collection id from POST/GET /collections."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddPapersBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddPapersResponse"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]},"delete":{"tags":["v1"],"summary":"Remove papers from one of your collections (requires an API key)","description":"Remove paper ids from a collection — symmetric with add-papers, so pruning never requires\ndeleting and rebuilding the collection. Idempotent: ids not present are counted in `skipped`,\nnot fatal. Removed papers go to the trash (restorable on the website for 30 days).","operationId":"remove_papers_from_collection","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from POST/GET /collections.","title":"Collection Id"},"description":"Collection id from POST/GET /collections."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemovePapersBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemovePapersResponse"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/collections/{collection_id}/share":{"post":{"tags":["v1"],"summary":"Toggle a public read-only share link for a collection (requires an API key)","description":"Get a shareable read-only URL for a collection (e.g. hand a reading list to a collaborator).\nSame switch as the website's Share toggle: viewers can browse, follow, or save a copy, but only\nyou can edit. If your account has a display name it is shown as the sharer (otherwise anonymous).","operationId":"share_collection","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from POST/GET /collections.","title":"Collection Id"},"description":"Collection id from POST/GET /collections."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareResponse"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/papers":{"get":{"tags":["v1"],"summary":"Get full detail for up to 50 papers in one call","description":"Batch version of GET /papers/{id}: full abstracts + BibTeX for up to 50 papers in ONE call —\nuse this instead of looping per-paper requests. Citation counts are the stored snapshot and\narXiv links appear only if already resolved; use GET /papers/{id} on a single paper when you\nneed live enrichment. Unknown ids come back in `missing`.","operationId":"batch_get_papers","parameters":[{"name":"ids","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Comma-separated paper ids (max 50): index ids from /search and/or registered 'arxiv:<id>' ids.","examples":["nips-2025-GEzd5K5s5u,arxiv:2107.02192"],"title":"Ids"},"description":"Comma-separated paper ids (max 50): index ids from /search and/or registered 'arxiv:<id>' ids."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchPapersResponse"}}}},"400":{"description":"More than 50 ids."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/collections/{collection_id}/export":{"get":{"tags":["v1"],"summary":"Export a whole collection as BibTeX, CSV, or JSON (requires an API key)","description":"One call from a collection to a paste-ready bibliography: format=bibtex concatenates every\npaper's BibTeX (entries without a stored BibTeX are synthesized from the metadata) — save it as\nreferences.bib and \\cite away. format=csv / format=json return tabular rows (title, authors,\nvenue, year, links) for sharing or tracking outside the site.","operationId":"export_collection","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from POST/GET /collections.","title":"Collection Id"},"description":"Collection id from POST/GET /collections."},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(bibtex|csv|json)$","description":"bibtex (default): one references.bib for the whole collection. csv/json: title/authors/venue/year/link rows for spreadsheets.","default":"bibtex","title":"Format"},"description":"bibtex (default): one references.bib for the whole collection. csv/json: title/authors/venue/year/link rows for spreadsheets."}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/collections/{collection_id}/collaborate":{"post":{"tags":["v1"],"summary":"Toggle an editable invite link for a collection (requires an API key)","description":"Share a collection for CO-EDITING: returns an unguessable invite URL to hand to a\ncollaborator. They open it logged-in on the website and join as an editor — both of you can\nthen add/remove papers (the owner keeps rename/share/delete + member management). Disabling\ninvalidates the link (re-enabling mints a new one); existing members keep access until removed\nvia DELETE /collections/{id}/members/{user_id}. For read-only sharing use /share instead.","operationId":"set_collaboration","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from POST/GET /collections.","title":"Collection Id"},"description":"Collection id from POST/GET /collections."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollaborateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollaborateResponse"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/collections/{collection_id}/members":{"get":{"tags":["v1"],"summary":"List the editors of one of your collections (requires an API key)","description":"Who joined the collaboration invite. Owner-only view (includes each member's email).","operationId":"list_collection_members","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from POST/GET /collections.","title":"Collection Id"},"description":"Collection id from POST/GET /collections."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembersResponse"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}},"/api/v1/collections/{collection_id}/members/{user_id}":{"delete":{"tags":["v1"],"summary":"Remove an editor from one of your collections (requires an API key)","description":"Revoke a collaborator's edit access (idempotent). They keep any copy they forked, but can no\nlonger see or edit this collection.","operationId":"remove_collection_member","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","description":"Collection id from POST/GET /collections.","title":"Collection Id"},"description":"Collection id from POST/GET /collections."},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","description":"Member user id from GET /collections/{id}/members.","title":"User Id"},"description":"Member user id from GET /collections/{id}/members."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMemberResponse"}}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"No such collection for this key (or malformed user id)."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerApiKey":[]}]}}},"components":{"schemas":{"AddPapersBody":{"properties":{"paper_ids":{"items":{"type":"string"},"type":"array","title":"Paper Ids","description":"Paper ids to add: index ids from /search results, or 'arxiv:<id>' ids first registered via POST /papers/external.","examples":[["nips-2025-GEzd5K5s5u","arxiv:2107.02192"]]}},"type":"object","required":["paper_ids"],"title":"AddPapersBody"},"AddPapersResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"added":{"type":"integer","title":"Added","description":"Papers newly added (or restored from trash)."},"skipped":{"type":"integer","title":"Skipped","description":"Ids skipped: unknown (not in the index nor registered via /papers/external), blank, or over a per-folder/account cap."}},"type":"object","required":["collection_id","added","skipped"],"title":"AddPapersResponse"},"BatchPapersResponse":{"properties":{"papers":{"items":{"$ref":"#/components/schemas/PaperFull"},"type":"array","title":"Papers"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing","description":"Ids not found (not in the index nor registered via /papers/external)."}},"type":"object","required":["papers","missing"],"title":"BatchPapersResponse"},"CollaborateBody":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"true = get an editable invite link; false = disable the link (current members keep access until removed)."}},"type":"object","required":["enabled"],"title":"CollaborateBody"},"CollaborateResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"enabled":{"type":"boolean","title":"Enabled"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Invite URL (https://aiconfpaper.com/collab/{slug}). A logged-in user who opens it joins as an EDITOR (can add / remove papers). null when disabled."}},"type":"object","required":["collection_id","enabled","url"],"title":"CollaborateResponse"},"CollectionInfo":{"properties":{"id":{"type":"string","title":"Id","description":"Collection id (use in /api/v1/collections/{id})."},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count","description":"Number of papers in the collection."},"owned":{"type":"boolean","title":"Owned","description":"false = shared with you for co-editing: you can read, add/remove papers, and export it; the owner keeps rename/share/delete.","default":true}},"type":"object","required":["id","name","count"],"title":"CollectionInfo"},"CollectionPapersResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"count":{"type":"integer","title":"Count"},"papers":{"items":{"$ref":"#/components/schemas/PaperSlim"},"type":"array","title":"Papers"}},"type":"object","required":["collection_id","count","papers"],"title":"CollectionPapersResponse"},"CollectionsResponse":{"properties":{"collections":{"items":{"$ref":"#/components/schemas/CollectionInfo"},"type":"array","title":"Collections"}},"type":"object","required":["collections"],"title":"CollectionsResponse"},"CreateCollectionBody":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name","description":"Name for the new collection.","examples":["attention_papers"]}},"type":"object","required":["name"],"title":"CreateCollectionBody"},"DeleteCollectionResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"deleted":{"type":"boolean","title":"Deleted"}},"type":"object","required":["collection_id","deleted"],"title":"DeleteCollectionResponse"},"ExternalPaperBody":{"properties":{"arxiv":{"type":"string","maxLength":200,"minLength":1,"title":"Arxiv","description":"arXiv id or URL, e.g. '2107.02192' or 'https://arxiv.org/abs/2107.02192'.","examples":["2107.02192"]}},"type":"object","required":["arxiv"],"title":"ExternalPaperBody"},"FacetsResponse":{"properties":{"venues":{"items":{"type":"string"},"type":"array","title":"Venues","description":"Allowed `venue` filter values."},"venue_years":{"additionalProperties":true,"type":"object","title":"Venue Years","description":"Per-venue data coverage: {venue: {min, max, count}} — the year range each venue is indexed for (use `max` to see the latest year, e.g. ICML up to 2026)."},"tiers":{"items":{"type":"string"},"type":"array","title":"Tiers","description":"Possible `tier` values."},"year_min":{"type":"integer","title":"Year Min"},"year_max":{"type":"integer","title":"Year Max"},"count":{"type":"integer","title":"Count","description":"Total papers in the index."}},"type":"object","required":["venues","tiers","year_min","year_max","count"],"title":"FacetsResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Links":{"properties":{"self":{"type":"string","title":"Self","description":"This paper's detail endpoint (relative path)."},"similar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Similar","description":"Endpoint for semantically similar papers."},"openreview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Openreview","description":"OpenReview / venue source page (absolute URL)."},"pdf":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf","description":"Direct PDF URL, if known."},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"Code repository (GitHub/project page), if known."},"scholar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scholar","description":"Google Scholar page for the paper."},"arxiv_abs":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arxiv Abs","description":"arXiv abstract page, if the paper is on arXiv."},"arxiv_src":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arxiv Src","description":"arXiv LaTeX SOURCE bundle (https://arxiv.org/src/{id}) — download to get the .tex. null if not on arXiv or not yet resolved (retry the request to let it resolve)."}},"type":"object","required":["self"],"title":"Links"},"MemberInfo":{"properties":{"user_id":{"type":"string","title":"User Id","description":"Member's user id (use it to remove the member)."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Member's login email (visible to you as the owner)."},"role":{"type":"string","title":"Role"},"joined_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Joined At"}},"type":"object","required":["user_id","email","role"],"title":"MemberInfo"},"MembersResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"members":{"items":{"$ref":"#/components/schemas/MemberInfo"},"type":"array","title":"Members","description":"Editors who joined via the invite link (the owner is not listed)."}},"type":"object","required":["collection_id","members"],"title":"MembersResponse"},"PaperFull":{"properties":{"paper_id":{"type":"string","title":"Paper Id","description":"Stable id, e.g. 'nips-2025-GEzd5K5s5u'. Use it for /papers/{id}.","examples":["nips-2025-GEzd5K5s5u"]},"title":{"type":"string","title":"Title"},"authors":{"items":{"type":"string"},"type":"array","title":"Authors","description":"Author names (may be truncated)."},"venue":{"type":"string","title":"Venue","description":"Conference, e.g. NeurIPS, ICML, CVPR, ACL.","examples":["NeurIPS"]},"year":{"type":"integer","title":"Year","examples":[2025]},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"Acceptance type if known: oral / spotlight / poster.","examples":["poster"]},"similarity":{"type":"number","title":"Similarity","description":"Cosine similarity to the query, 0..1 (higher = closer).","examples":[0.71]},"citation_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Citation Count","description":"Citations (Semantic Scholar; may lag/fill in background).","examples":[12]},"abstract_snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abstract Snippet","description":"Short abstract preview. Full text via /papers/{id}."},"links":{"$ref":"#/components/schemas/Links"},"abstract":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abstract","description":"Full abstract text."},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords"},"primary_area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Area"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Decision/status string from the venue."},"rating_mean":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Mean","description":"Mean review score if available (scale varies by venue)."},"bibtex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bibtex","description":"BibTeX entry for citing this paper."}},"type":"object","required":["paper_id","title","authors","venue","year","tier","similarity","citation_count","abstract_snippet","links","abstract"],"title":"PaperFull"},"PaperSlim":{"properties":{"paper_id":{"type":"string","title":"Paper Id","description":"Stable id, e.g. 'nips-2025-GEzd5K5s5u'. Use it for /papers/{id}.","examples":["nips-2025-GEzd5K5s5u"]},"title":{"type":"string","title":"Title"},"authors":{"items":{"type":"string"},"type":"array","title":"Authors","description":"Author names (may be truncated)."},"venue":{"type":"string","title":"Venue","description":"Conference, e.g. NeurIPS, ICML, CVPR, ACL.","examples":["NeurIPS"]},"year":{"type":"integer","title":"Year","examples":[2025]},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"Acceptance type if known: oral / spotlight / poster.","examples":["poster"]},"similarity":{"type":"number","title":"Similarity","description":"Cosine similarity to the query, 0..1 (higher = closer).","examples":[0.71]},"citation_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Citation Count","description":"Citations (Semantic Scholar; may lag/fill in background).","examples":[12]},"abstract_snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abstract Snippet","description":"Short abstract preview. Full text via /papers/{id}."},"links":{"$ref":"#/components/schemas/Links"}},"type":"object","required":["paper_id","title","authors","venue","year","tier","similarity","citation_count","abstract_snippet","links"],"title":"PaperSlim"},"RemoveMemberResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"removed":{"type":"boolean","title":"Removed","description":"false if that user was not a member (no-op)."}},"type":"object","required":["collection_id","removed"],"title":"RemoveMemberResponse"},"RemovePapersBody":{"properties":{"paper_ids":{"items":{"type":"string"},"type":"array","title":"Paper Ids","description":"Paper ids to remove from the collection.","examples":[["nips-2025-GEzd5K5s5u","arxiv:2107.02192"]]}},"type":"object","required":["paper_ids"],"title":"RemovePapersBody"},"RemovePapersResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"removed":{"type":"integer","title":"Removed","description":"Papers removed (they go to your trash; restorable for 30 days)."},"skipped":{"type":"integer","title":"Skipped","description":"Ids that were not in the collection (or already removed)."}},"type":"object","required":["collection_id","removed","skipped"],"title":"RemovePapersResponse"},"SearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"total":{"type":"integer","title":"Total","description":"Number of papers matching the filters (before limit/offset)."},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"results":{"items":{"$ref":"#/components/schemas/PaperSlim"},"type":"array","title":"Results"}},"type":"object","required":["query","total","limit","offset","results"],"title":"SearchResponse"},"ShareBody":{"properties":{"public":{"type":"boolean","title":"Public","description":"true = enable the public read-only link; false = disable it."}},"type":"object","required":["public"],"title":"ShareBody"},"ShareResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"is_public":{"type":"boolean","title":"Is Public"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Public read-only page (anyone with the link can view, follow, or copy it on the website). null when disabled."}},"type":"object","required":["collection_id","is_public","url"],"title":"ShareResponse"},"SimilarResponse":{"properties":{"paper_id":{"type":"string","title":"Paper Id","description":"The seed paper the results are similar to."},"results":{"items":{"$ref":"#/components/schemas/PaperSlim"},"type":"array","title":"Results"}},"type":"object","required":["paper_id","results"],"title":"SimilarResponse"},"UpdateCollectionBody":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":80,"minLength":1},{"type":"null"}],"title":"Name","description":"New collection name (omit to keep)."},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"New description, shown on the shared page (omit to keep; send \"\" to clear)."}},"type":"object","title":"UpdateCollectionBody"},"UpdateCollectionResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"count":{"type":"integer","title":"Count","description":"Number of papers in the collection."}},"type":"object","required":["id","name","description","count"],"title":"UpdateCollectionResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"BearerApiKey":{"type":"http","scheme":"bearer","bearerFormat":"acp_...","description":"Member API key. Create a free key at https://aiconfpaper.com/account."}}}}