NewsBlur stories API

Reading, marking and starring stories.

OpenAPI Specification

newsblur-stories-api-openapi.yml Raw ↑
openapi: 3.1.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:
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            type: object
    Ok:
      description: Success. NewsBlur returns a JSON object; most responses include a `result` field ("ok" or "error").
      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).