Skip to content

Papers API

Base path: /api/v1/projects/{project_id}/papers

Endpoints

MethodEndpointDescription
GET/projects/{id}/papersList papers (paginated)
POST/projects/{id}/papersCreate paper
POST/projects/{id}/papers/bulkBulk import
POST/projects/{id}/papers/uploadMultipart file upload (PDFs)
POST/projects/{id}/papers/processTrigger processing for papers
GET/projects/{id}/papers/{paper_id}Get paper
PUT/projects/{id}/papers/{paper_id}Update paper
DELETE/projects/{id}/papers/{paper_id}Delete paper

Query Parameters (List)

  • page, page_size — Pagination
  • status — Filter by status (e.g. metadata_only, pdf_downloaded)
  • year — Filter by year
  • q — Search title/abstract
  • sort_bycreated_at, year, citation_count, etc.
  • orderasc or desc

Paper Schema

json
{
  "doi": "",
  "title": "",
  "abstract": "",
  "authors": [],
  "journal": "",
  "year": 2024,
  "citation_count": 0,
  "source": "",
  "source_id": "",
  "pdf_url": "",
  "status": "metadata_only"
}

Upload (Multipart)

POST /projects/{id}/papers/upload — Upload PDF files. Accepts multipart/form-data with files (one or more PDFs). Extracts metadata, runs dedup check, and queues processing for new papers.

Response: { papers, conflicts, total_uploaded }

  • papers — List of newly created paper metadata
  • conflicts — Dedup conflicts (DOI or title similarity)
  • total_uploaded — Count of files successfully uploaded

Process

POST /projects/{id}/papers/process — Trigger OCR + RAG indexing for papers.

Query parameters:

  • paper_ids — Optional list of paper IDs. If omitted, all unprocessed papers in the project are queued.

Response: { queued, message }

Bulk Import Response

POST /projects/{id}/papers/bulk returns { created, skipped, total }:

  • created — Number of papers imported
  • skipped — Number skipped (duplicate DOI)
  • total — Total papers in request

Released under the MIT License.