Skip to main content

API Contract

Envelope Invariant

All API responses under /api/v1 use one of these envelopes:

Success

{
"data": "...",
"meta": {
"request_id": "..."
}
}

Error

{
"error": {
"code": "...",
"message": "...",
"details": "..."
},
"meta": {
"request_id": "..."
}
}

meta.request_id is present on both success and error responses.

Binary Assets

Binary media assets are served outside /api/v1:

GET /scholar-images/{scholar_profile_id}/upload

DTO Structure

Scholarr uses strictly typed Pydantic V2 models serialized through OpenAPI v3 via FastAPI.

  • PublicationListItem exposes a .display_identifier property that resolves the highest-confidence identifier regardless of backend origin, rather than a hardcoded .doi.
  • Frontend TypeScript types are compiled from the OpenAPI spec to ensure type safety across the stack.

Endpoints

Auth

MethodPathDescription
POST/api/v1/auth/loginLogin (rate-limited sliding window)
GET/api/v1/auth/meCurrent session user
GET/api/v1/auth/csrfBootstrap CSRF token
POST/api/v1/auth/change-passwordChange password
POST/api/v1/auth/logoutLogout

Scholars

MethodPathDescription
GET/api/v1/scholarsList tracked scholars
POST/api/v1/scholarsCreate scholar (auto-enqueue, metadata hydration)
GET/api/v1/scholars/searchSearch author candidates by name
PATCH/api/v1/scholars/{id}/toggleToggle enabled status
DELETE/api/v1/scholars/{id}Delete scholar
PUT/api/v1/scholars/{id}/image/urlUpdate image URL
POST/api/v1/scholars/{id}/image/uploadUpload image
DELETE/api/v1/scholars/{id}/imageClear image customization

Scholar Portability

MethodPathDescription
GET/api/v1/scholars/exportExport tracked scholars and publication link state
POST/api/v1/scholars/importImport scholars with global publication deduplication

The export payload includes scholar metadata, tracked publication data, and link state (read/unread, favorites). Import preserves global deduplication.

Publications

MethodPathDescription
GET/api/v1/publicationsList publications (filtered, paginated)
POST/api/v1/publications/mark-all-readMark all as read
POST/api/v1/publications/mark-readMark selected as read
POST/api/v1/publications/{id}/retry-pdfRetry PDF resolution
POST/api/v1/publications/{id}/favoriteToggle favorite

Publication Modes

GET /api/v1/publications supports a mode parameter:

ModeDescription
allAll publications
unreadPublications with is_read=false
latestPublications first seen in the latest completed run

mode=new is accepted as a compatibility alias for latest.

Pagination

Query parameters: page, page_size (with backward-compatible limit/offset support).

Response pagination fields:

{
"page": 1,
"page_size": 20,
"has_prev": false,
"has_next": true,
"total_count": 142
}

Publication Payload Fields

FieldDescription
pub_urlCanonical scholar detail URL
doiNormalized DOI
pdf_urlResolved open-access PDF URL (when available)
display_identifierHighest-confidence identifier regardless of source

Runs

MethodPathDescription
GET/api/v1/runsList runs with safety state
GET/api/v1/runs/{run_id}Run detail with scholar results
POST/api/v1/runs/{run_id}/cancelCancel active run
POST/api/v1/runs/manualTrigger manual run (idempotent, safety-checked)
GET/api/v1/runs/queue/itemsList queue items
POST/api/v1/runs/queue/{id}/retryRetry queue item
POST/api/v1/runs/queue/{id}/dropDrop queue item
DELETE/api/v1/runs/queue/{id}Clear queue item
GET/api/v1/runs/{run_id}/streamStream run events (SSE)

Settings

MethodPathDescription
GET/api/v1/settingsGet user settings (with cooldown expiry check)
PUT/api/v1/settingsUpdate settings (interval, delay, nav, API keys)

Admin - User Management

MethodPathDescription
GET/api/v1/admin/usersList all users
POST/api/v1/admin/usersCreate user
PATCH/api/v1/admin/users/{id}/activeSet user active status
POST/api/v1/admin/users/{id}/reset-passwordReset password

Admin - Database Operations

MethodPathDescription
GET/api/v1/admin/db/integrityGet integrity report
GET/api/v1/admin/db/repair-jobsList repair jobs
GET/api/v1/admin/db/pdf-queueList PDF queue
POST/api/v1/admin/db/pdf-queue/{id}/requeueRequeue single PDF
POST/api/v1/admin/db/pdf-queue/requeue-allBulk requeue missing PDFs
POST/api/v1/admin/db/repairs/publication-linksTrigger link repair
POST/api/v1/admin/db/repairs/publication-near-duplicatesTrigger dedup repair
POST/api/v1/admin/db/drop-all-publicationsDrop all publications (destructive)