postlake-dev Reading API

Notifications, comments and followers, normalised across networks

Operations 7

GET /v1/notifications What happened across every network #
POST /v1/notifications/seen Mark notifications as seen #
GET /v1/posts/{id}/comments Replies on a post you published #
POST /v1/comments/{id}/hide Hide or unhide a reply #
DELETE /v1/comments/{id} Delete a comment #
GET /v1/social-accounts/{id}/following Who a connected account follows #
GET /v1/social-accounts/{id}/followers Who follows a connected account #

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/postlake-dev:postlake-dev-reading-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

postlake-dev-reading-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PostLake Reading API
  version: 1.0.0
  description: Unified social media API. One API key, 10 platforms, normalised responses. Built for agents and developers.
  contact:
    url: https://postlake.dev
servers:
- url: https://api.postlake.dev
security:
- bearerAuth: []
tags:
- name: Reading
  description: Notifications, comments and followers, normalised across networks
paths:
  /v1/notifications:
    get:
      tags:
      - Reading
      summary: What happened across every network
      description: Likes, replies, mentions, follows, reposts and quotes, newest first, in one normalised shape. `problems` names any network that could not be read, so an empty `items` never silently means 'we could not look'.
      parameters:
      - name: account
        in: query
        required: false
        schema:
          type: string
        description: One connected account id (acc_…). Omit for every connected network.
      - name: cursor
        in: query
        required: false
        schema:
          type: string
        description: Opaque cursor from a previous page
      - name: limit
        in: query
        required: false
        schema:
          type: integer
        description: 1-100
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Notification'
                  cursor:
                    type: string
                    nullable: true
                    description: 'Opaque. Pass it back verbatim for the next page; null means the end. Never parse it: on cross-network reads it encodes a position per network.'
                  problems:
                    type: array
                    items:
                      $ref: '#/components/schemas/ReadProblem'
      operationId: getV1Notifications
      x-operation-id-source: derived
  /v1/notifications/seen:
    post:
      tags:
      - Reading
      summary: Mark notifications as seen
      description: On the networks that track it. Networks with no concept of 'seen' are skipped.
      parameters:
      - name: account
        in: query
        required: false
        schema:
          type: string
        description: One connected account id (acc_…). Omit for every connected network.
      responses:
        '200':
          description: Success
      operationId: postV1NotificationsSeen
      x-operation-id-source: derived
  /v1/posts/{id}/comments:
    get:
      tags:
      - Reading
      summary: Replies on a post you published
      description: Across every network the post went to.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: nested
        in: query
        required: false
        schema:
          type: boolean
        description: Read the whole thread including replies to replies. Networks that cannot go deeper answer with the top level rather than refusing.
      - name: cursor
        in: query
        required: false
        schema:
          type: string
        description: Opaque cursor from a previous page
      - name: limit
        in: query
        required: false
        schema:
          type: integer
        description: 1-100
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Comment'
                  cursor:
                    type: string
                    nullable: true
                    description: 'Opaque. Pass it back verbatim for the next page; null means the end. Never parse it: on cross-network reads it encodes a position per network.'
                  problems:
                    type: array
                    items:
                      $ref: '#/components/schemas/ReadProblem'
      operationId: getV1PostsByIdComments
      x-operation-id-source: derived
  /v1/comments/{id}/hide:
    post:
      tags:
      - Reading
      summary: Hide or unhide a reply
      description: The other half of moderating a comment section. Without it the only answer to an abusive reply is to reply to it. A failure means the reply is still visible, so treat an error as "still there" rather than assuming it worked.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: The comment id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - account
              properties:
                account:
                  type: string
                  description: The connection the post is on
                hidden:
                  type: boolean
                  default: true
                  description: false puts it back
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  account:
                    type: string
                  platform:
                    type: string
                  hidden:
                    type: boolean
                  ok:
                    type: boolean
      operationId: postV1CommentsByIdHide
      x-operation-id-source: derived
  /v1/comments/{id}:
    delete:
      tags:
      - Reading
      summary: Delete a comment
      description: Take a comment down for good. Facebook cannot hide a Page's own comment, so this is how you retract one you posted. A failure means it is still there.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: The comment id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - account
              properties:
                account:
                  type: string
                  description: The connection the post is on
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  account:
                    type: string
                  platform:
                    type: string
                  ok:
                    type: boolean
      operationId: deleteV1CommentsById
      x-operation-id-source: derived
  /v1/social-accounts/{id}/following:
    get:
      tags:
      - Reading
      summary: Who a connected account follows
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: cursor
        in: query
        required: false
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/SocialActor'
                  cursor:
                    type: string
                    nullable: true
                  problems:
                    type: array
                    items:
                      $ref: '#/components/schemas/ReadProblem'
      operationId: getV1SocialAccountsByIdFollowing
      x-operation-id-source: derived
  /v1/social-accounts/{id}/followers:
    get:
      tags:
      - Reading
      summary: Who follows a connected account
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: cursor
        in: query
        required: false
        schema:
          type: string
        description: Opaque cursor from a previous page
      - name: limit
        in: query
        required: false
        schema:
          type: integer
        description: 1-100
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/SocialActor'
                  cursor:
                    type: string
                    nullable: true
                    description: 'Opaque. Pass it back verbatim for the next page; null means the end. Never parse it: on cross-network reads it encodes a position per network.'
                  problems:
                    type: array
                    items:
                      $ref: '#/components/schemas/ReadProblem'
      operationId: getV1SocialAccountsByIdFollowers
      x-operation-id-source: derived
components:
  schemas:
    SocialActor:
      type: object
      properties:
        handle:
          type: string
        displayName:
          type: string
          nullable: true
        avatarUrl:
          type: string
          nullable: true
        id:
          type: string
          nullable: true
          description: The network's own id, for follow/block/mute
    ReadProblem:
      type: object
      description: A network that could not be read for this request. Its presence is what lets you tell 'nothing happened' from 'we could not look'.
      properties:
        account:
          type: string
        platform:
          type: string
        reason:
          type: string
    Comment:
      type: object
      properties:
        id:
          type: string
        platform:
          type: string
        account:
          type: string
          description: The connection (acc_…) this comment was read through. Pass it back when you reply, hide, like or delete.
        author:
          $ref: '#/components/schemas/SocialActor'
        text:
          type: string
        createdAt:
          type: string
          format: date-time
        url:
          type: string
          nullable: true
        replyCount:
          type: integer
        likeCount:
          type: integer
        hidden:
          type: boolean
          nullable: true
          description: 'Whether this reply is currently hidden. null where the network does not say, which is not the same as false: an agent that reads null as ''not hidden'' will keep trying to hide the same reply.'
        replies:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
    Notification:
      type: object
      properties:
        id:
          type: string
        platform:
          type: string
        account:
          type: string
        type:
          type: string
          enum:
          - like
          - reply
          - mention
          - follow
          - repost
          - quote
          - other
          description: Normalised kind. Unknown kinds arrive as 'other' so a new one cannot break a parser.
        platformType:
          type: string
          description: The network's own word for it, unmapped
        actor:
          $ref: '#/components/schemas/SocialActor'
        post:
          type: object
          nullable: true
          properties:
            uri:
              type: string
            url:
              type: string
              nullable: true
            text:
              type: string
              nullable: true
        text:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        read:
          type: boolean