NewsBlur stories API

Reading, marking and starring stories.

Operations 14

GET /reader/feed/{id} Stories from a single feed #
GET /reader/river_stories Stories across multiple feeds (the "river") #
GET /reader/starred_stories The user's saved (starred) stories #
GET /reader/starred_story_hashes Identifiers of saved stories #
GET /reader/unread_story_hashes Identifiers of unread stories #
GET /reader/read_stories Previously read stories #
GET /rss_feeds/original_text Extracted original story text #
GET /rss_feeds/original_story Original website content for a story #
POST /reader/mark_story_hashes_as_read Mark multiple stories as read #
POST /reader/mark_story_hash_as_unread Mark a story as unread #
POST /reader/mark_story_hash_as_starred Save (star) a story #
POST /reader/mark_story_hash_as_unstarred Unsave (unstar) a story #
POST /reader/mark_feed_as_read Mark an entire feed as read #
POST /reader/mark_all_as_read Mark everything as read #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/newsblur-stories-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

newsblur-stories-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: NewsBlur authentication Stories API
  description: NewsBlur is a personal news reader (RSS/Atom aggregator) that brings people together to talk about the world. The HTTP API exposes account, feed, story, social ("blurblog"), intelligence-classifier, and OPML import/export operations. This OpenAPI description was generated by API Evangelist from the publicly documented endpoint reference at https://www.newsblur.com/api and the open-source NewsBlur codebase (github.com/samuelclay/NewsBlur). It is a faithful structuring of the documented surface, not a provider-published spec.
  version: '2026.07'
  contact:
    name: NewsBlur
    url: https://www.newsblur.com/api
    email: samuel@newsblur.com
  license:
    name: MIT
    url: https://github.com/samuelclay/NewsBlur/blob/master/LICENSE
  x-source: https://www.newsblur.com/api
servers:
- url: https://www.newsblur.com
  description: Production
security:
- cookieAuth: []
- oauth2Bearer: []
tags:
- name: stories
  description: Reading, marking and starring stories.
paths:
  /reader/feed/{id}:
    get:
      operationId: getFeedStories
      tags:
      - stories
      summary: Stories from a single feed
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      - name: page
        in: query
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/Ok'
        '404':
          $ref: '#/components/responses/NotFound'
  /reader/river_stories:
    get:
      operationId: getRiverStories
      tags:
      - stories
      summary: Stories across multiple feeds (the "river")
      parameters:
      - name: feeds
        in: query
        schema:
          type: array
          items:
            type: integer
      - name: page
        in: query
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/starred_stories:
    get:
      operationId: getStarredStories
      tags:
      - stories
      summary: The user's saved (starred) stories
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/starred_story_hashes:
    get:
      operationId: getStarredStoryHashes
      tags:
      - stories
      summary: Identifiers of saved stories
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/unread_story_hashes:
    get:
      operationId: getUnreadStoryHashes
      tags:
      - stories
      summary: Identifiers of unread stories
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/read_stories:
    get:
      operationId: getReadStories
      tags:
      - stories
      summary: Previously read stories
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /rss_feeds/original_text:
    get:
      operationId: getOriginalText
      tags:
      - stories
      summary: Extracted original story text
      parameters:
      - name: story_hash
        in: query
        schema:
          type: string
        required: true
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /rss_feeds/original_story:
    get:
      operationId: getOriginalStory
      tags:
      - stories
      summary: Original website content for a story
      parameters:
      - name: story_hash
        in: query
        schema:
          type: string
        required: true
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/mark_story_hashes_as_read:
    post:
      operationId: markStoryHashesAsRead
      tags:
      - stories
      summary: Mark multiple stories as read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/mark_story_hash_as_unread:
    post:
      operationId: markStoryHashAsUnread
      tags:
      - stories
      summary: Mark a story as unread
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/mark_story_hash_as_starred:
    post:
      operationId: markStoryHashAsStarred
      tags:
      - stories
      summary: Save (star) a story
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/mark_story_hash_as_unstarred:
    post:
      operationId: markStoryHashAsUnstarred
      tags:
      - stories
      summary: Unsave (unstar) a story
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/mark_feed_as_read:
    post:
      operationId: markFeedAsRead
      tags:
      - stories
      summary: Mark an entire feed as read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
  /reader/mark_all_as_read:
    post:
      operationId: markAllAsRead
      tags:
      - stories
      summary: Mark everything as read
      responses:
        '200':
          $ref: '#/components/responses/Ok'
components:
  responses:
    Ok:
      description: Success. NewsBlur returns a JSON object; most responses include a `result` field ("ok" or "error").
      content:
        application/json:
          schema:
            type: object
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            type: object
  securitySchemes:
    cookieAuth:
      type: apiKey
      in: cookie
      name: newsblur_sessionid
      description: Session cookie set by POST /api/login.
    oauth2Bearer:
      type: http
      scheme: bearer
      description: OAuth 2.0 access token passed as a Bearer token in the Authorization header. Client credentials are issued by NewsBlur (contact samuel@newsblur.com).