Skip to content

Subscription API

Subscription module API for managing incremental literature updates (RSS / API search).

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


Endpoints

MethodPathDescription
GET/feedsGet common academic RSS feed templates
GET/List project subscriptions
POST/Create subscription
GET/{sub_id}Get single subscription
PUT/{sub_id}Update subscription
DELETE/{sub_id}Delete subscription
POST/{sub_id}/triggerManually trigger subscription update
POST/check-rssCheck RSS feed
POST/check-updatesCheck API for updates

GET /feeds

Return common academic RSS feed templates (no project_id required in logic).

Response

json
{
  "code": 200,
  "message": "success",
  "data": [
    {
      "name": "arXiv CS",
      "url": "https://...",
      "description": "..."
    }
  ]
}

GET /subscriptions

List all subscriptions for the project.

Response

json
{
  "code": 200,
  "message": "success",
  "data": [
    {
      "id": 1,
      "project_id": 1,
      "name": "arXiv CS.AI",
      "query": "machine learning",
      "sources": ["arxiv"],
      "frequency": "weekly",
      "max_results": 50,
      "is_active": true,
      "last_run_at": "2025-03-10T12:00:00",
      "total_found": 120,
      "created_at": "2025-01-01T00:00:00",
      "updated_at": "2025-03-10T12:00:00"
    }
  ]
}

POST /subscriptions

Create a new subscription.

Request Body

json
{
  "name": "arXiv CS.AI",
  "query": "machine learning",
  "sources": ["arxiv", "semantic_scholar"],
  "frequency": "weekly",
  "max_results": 50
}
FieldTypeRequiredDescription
namestringYesSubscription name
querystringNoSearch query, default ""
sourceslist[string]NoData sources, default []
frequencystringNodaily | weekly | monthly, default weekly
max_resultsintNoMax results per run 1–200, default 50

Response

json
{
  "code": 201,
  "message": "Subscription created",
  "data": {
    "id": 1,
    "project_id": 1,
    "name": "arXiv CS.AI",
    "query": "machine learning",
    "sources": ["arxiv"],
    "frequency": "weekly",
    "max_results": 50,
    "is_active": true,
    "last_run_at": null,
    "total_found": 0,
    "created_at": "2025-03-12T00:00:00",
    "updated_at": "2025-03-12T00:00:00"
  }
}

PUT /subscriptions/

Update a subscription.

Request Body

json
{
  "name": "arXiv CS.AI (updated)",
  "query": "deep learning",
  "is_active": false
}

All fields optional; only include fields to update.

Response

json
{
  "code": 200,
  "message": "success",
  "data": { ... }
}

DELETE /subscriptions/

Delete a subscription.

Response

json
{
  "code": 200,
  "message": "Subscription deleted",
  "data": null
}

POST /subscriptions/{sub_id}/trigger

Manually trigger subscription update (check API for new papers).

Query Parameters

NameTypeDefaultDescription
since_daysint7Query last N days, 1–365

Response

json
{
  "code": 200,
  "message": "success",
  "data": {
    "new_papers": 5,
    "total_checked": 120,
    "sources_searched": ["arxiv", "semantic_scholar"]
  }
}

POST /check-rss

Check an RSS feed (does not require a saved subscription).

Query Parameters

NameTypeDefaultDescription
feed_urlstringRSS/Atom feed URL
since_daysint7Query last N days, 1–365

Response

json
{
  "code": 200,
  "message": "success",
  "data": {
    "entries": [...],
    "count": 10
  }
}

POST /check-updates

Check for new papers via API search (does not require a saved subscription).

Query Parameters

NameTypeDefaultDescription
querystring""Search query
sourceslist[string]nullData sources
since_daysint7Query last N days, 1–365
max_resultsint50Max results 1–200

Response

json
{
  "code": 200,
  "message": "success",
  "data": {
    "new_papers": [...],
    "total_found": 50,
    "sources_checked": { "arxiv": 30, "semantic_scholar": 20 }
  }
}

Error Codes

CodeDescription
404Subscription not found

Released under the MIT License.