Build with Micro.blog logo
Build with Micro.blog
API Documentation

Feeds and Reader

View .md

Feedbin-compatible reader endpoints, reader highlights, AI recaps, and public JSON and RSS feeds.

Note: The /feeds/v2/ endpoints follow the Feedbin API request and response shapes, so Feedbin clients can be adapted with few changes. Authenticate with a Micro.blog app token in the Authorization header instead of Feedbin’s HTTP Basic auth. Requests without a valid token return 401 with the text Token required.
Note: Endpoints that take a request body read it as raw JSON. Send Content-Type: application/json. A body that is not valid JSON is treated as empty.
BASE URL https://micro.blog
GET /blogroll.org.json

Returns the directory of blogs listed on blogroll.org, as a flat list and grouped by category. Micro.blog keeps a cached copy and refreshes it every few days. No authentication is required, and the response allows cross-origin requests.

Example Request

curl -X GET "https://micro.blog/blogroll.org.json"

Response

200 OK application/json

Returns a JSON object (not a JSON Feed). If the cached copy is not available yet, entries is empty and entry_count is 0.

Example Response

{
  "source": "https://blogroll.org/",
  "entry_count": 1,
  "categories": [
    "tech"
  ],
  "entries": [
    {
      "title": "Example Blog",
      "description": "A personal blog about the open web.",
      "url": "https://example.com/",
      "categories": [
        "tech"
      ]
    }
  ],
  "by_category": {
    "tech": [
      {
        "title": "Example Blog",
        "description": "A personal blog about the open web.",
        "url": "https://example.com/",
        "categories": [
          "tech"
        ]
      }
    ]
  }
}
GET /feeds/highlights

Returns your highlights on reader entries, newest first, as a JSON Feed. Highlights saved on bookmarks are not included; use GET /posts/bookmarks/highlights for those.

Example Request

curl -X GET "https://micro.blog/feeds/highlights?limit=25" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Query Parameters

Name Type Required Description
limit integer Optional Maximum number of highlights to return, up to 100. Values below 1 or above 100 return 100.
Example: 25
offset integer Optional Number of highlights to skip before returning results.

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Response

200 OK application/json

Returns a JSON Feed. _microblog.count is the total number of reader highlights, not the number in this page. Each item’s _microblog object has the reader entry ID and the selection offsets.

Example Response

{
  "version": "https://jsonfeed.org/version/1",
  "title": "Micro.blog - Highlights",
  "home_page_url": "https://micro.blog",
  "feed_url": "https://micro.blog/feeds/highlights",
  "_microblog": {
    "about": "https://micro.blog/about/api",
    "count": 1
  },
  "items": [
    {
      "id": 987,
      "title": "Example post",
      "content_text": "Highlighted text",
      "url": "https://example.com/post",
      "date_published": "2026-04-26T12:00:00+00:00",
      "_microblog": {
        "entry_id": 1001,
        "selection_start": 10,
        "selection_end": 40
      }
    }
  ]
}
GET /feeds/photos.json

Returns up to 200 recent featured photos from across Micro.blog as a JSON Feed. No authentication is required.

Example Request

curl -X GET "https://micro.blog/feeds/photos.json?size=400"

Query Parameters

Name Type Required Description
size integer Optional Width in pixels of the thumbnail linked from each item’s _microblog.thumbnail_url.
Example: 400

Response

200 OK application/json

Returns a JSON Feed of featured photos, newest first.

Example Response

{
  "version": "https://jsonfeed.org/version/1",
  "title": "Micro.blog - photos",
  "home_page_url": "https://micro.blog",
  "feed_url": "https://micro.blog/feeds/photos.json",
  "icon": "https://micro.blog/images/icons/favicon_256.png",
  "favicon": "https://micro.blog/images/icons/favicon_32.png",
  "_microblog": {
    "about": "https://micro.blog/about/api"
  },
  "items": [
    {
      "id": "5555",
      "content_html": "<img src=\"https://example.com/uploads/2026/sunset.jpg\" alt=\"A sunset\" />",
      "url": "https://example.com/2026/04/26/sunset.html",
      "image": "https://example.com/uploads/2026/sunset.jpg",
      "date_published": "2026-04-26T12:00:00+00:00",
      "_microblog": {
        "thumbnail_url": "https://micro.blog/photos/400/https://example.com/uploads/2026/sunset.jpg"
      },
      "author": {
        "name": "Vincent",
        "url": "https://example.com/",
        "avatar": "https://micro.blog/vincent/avatar.jpg",
        "_microblog": {
          "username": "vincent"
        }
      }
    }
  ]
}
POST /feeds/recap

Requests an AI-written recap of the given reader entries, grouped by feed. When every group already has a cached recap, the HTML is returned right away. Otherwise the recap is queued and the response is 202 Accepted with an empty body; repeat the same request until it returns 200. Entries from feeds you do not subscribe to are ignored.

Example Request

curl -X POST "https://micro.blog/feeds/recap" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '[1001, 1002]'

Query Parameters

Name Type Required Description
reset integer Optional Set to 1 to discard cached recaps for these entries, so a new recap is queued.
Example: 1

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
(request body) array Required A bare JSON array of reader entry IDs, such as [1001, 1002]. Do not wrap it in an object. Up to 3,000 IDs are used.
Example: [1001 1002]

Response

200 OK text/html

Returns the recap HTML, one reading-recap block per feed. Returns 202 with an empty body while the recap is still being written.

Example Response

<div class="reading-recap" data-color-light="#e8f0fe" data-color-dark="#1e3a5f">
  <div class="reading-header">
    <h2><img src="https://example.com/icon.png" alt=""> Example Blog</h2>
    <div class="topics"><span>Gardening</span></div>
  </div>
  <p>Summary of the recent posts from this feed.</p>
  <p>Recent posts:</p>
  <ul>
    <li><a href="https://example.com/post" target="_blank" rel="noopener">Example post</a> &mdash; Apr 26</li>
  </ul>
</div>
GET /feeds/recap/email

Returns the day of the week your weekly recap email is sent.

Example Request

curl -X GET "https://micro.blog/feeds/recap/email" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Response

200 OK application/json

Returns the saved day name. An empty string means recap emails are off.

Example Response

{
  "dayofweek": "Monday"
}
POST /feeds/recap/email

Sets the day of the week for your weekly recap email, or turns it off. The email is sent after 9am in your time zone on that day, and only for accounts with Inkwell and AI features turned on.

Example Request

curl -X POST "https://micro.blog/feeds/recap/email?dayofweek=Monday" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Query Parameters

Name Type Required Description
dayofweek string Optional English day name, such as Monday. Matching is case-insensitive. Omit it or send an empty value to turn recap emails off. Other values are saved but never match a day, so no email is sent.
Example: Monday

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Response

200 OK application/json

Returns the saved setting.

Example Response

{
  "dayofweek": "Monday"
}
GET /feeds/v2/entries.json

Returns entries from your subscriptions, newest first. Mirrors Feedbin’s GET /v2/entries.json. Requires a plan that includes Inkwell; other accounts get 403 with Inkwell is not enabled for this account.

Note: Paginated responses include an X-Feedbin-Record-Count header with the total number of matching entries. When there is more than one page, a Links header lists the first, prev, next and last page URLs. Requests with ids are not paginated and have neither header.

Example Request

curl -X GET "https://micro.blog/feeds/v2/entries.json?read=false&per_page=50&mode=extended" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Query Parameters

Name Type Required Description
ids string Optional Comma-separated entry IDs, up to 3,000. Returns only those entries from feeds you subscribe to, and ignores page and per_page.
Example: 1001,1002
read string Optional Use false for unread entries only, or true for read entries only.
Example: false
since string Optional ISO 8601 timestamp. Returns only entries Micro.blog fetched after this time.
Example: 2026-04-26T12:00:00Z
starred boolean Optional Accepted for Feedbin compatibility, but true always returns an empty array. To load starred entries, call GET /feeds/v2/starred_entries.json and pass the IDs to ids.
Example: true
per_page integer Optional Number of entries per page, up to 200.
Example: 50
page integer Optional Page number, starting at 1.
Example: 1
mode string Optional Use extended to add images and enclosure to each entry when available.
Example: extended
include_enclosure boolean Optional Set to true to add enclosure to entries that have one, such as podcast episodes.
Example: true

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Response

200 OK application/json

Returns an array of entries. feed_id matches the feed_id of a subscription. enclosure and images appear only when requested and available.

Example Response

[
  {
    "id": 1001,
    "feed_id": 123,
    "title": "Example post",
    "url": "https://example.com/post",
    "extracted_content_url": null,
    "author": "Example Author",
    "content": "<p>Entry HTML.</p>",
    "summary": "Entry summary.",
    "published": "2026-04-26T12:00:00.000000Z",
    "created_at": "2026-04-26T12:05:00.000000Z",
    "images": {
      "original_url": "https://example.com/photo.jpg"
    }
  }
]
GET /feeds/v2/entries/{id}.json

Returns one entry. Returns 404 if the entry does not exist and 403 if it belongs to a feed you do not subscribe to.

Example Request

curl -X GET "https://micro.blog/feeds/v2/entries/{id}.json?include_enclosure=true" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Query Parameters

Name Type Required Description
mode string Optional Use extended to add images and enclosure when available.
Example: extended
include_enclosure boolean Optional Set to true to add enclosure when the entry has one.
Example: true

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Path Parameters

Name Type Required Description
id integer Required Entry ID.
Example: 1001

Response

200 OK application/json

Returns the entry.

Example Response

{
  "id": 1001,
  "feed_id": 123,
  "title": "Example episode",
  "url": "https://example.com/episode",
  "extracted_content_url": null,
  "author": "Example Author",
  "content": "<p>Entry HTML.</p>",
  "summary": "Entry summary.",
  "published": "2026-04-26T12:00:00.000000Z",
  "created_at": "2026-04-26T12:05:00.000000Z",
  "enclosure": {
    "enclosure_url": "https://example.com/episode.mp3",
    "enclosure_type": "audio/mpeg"
  }
}
GET /feeds/v2/feeds/{id}/entries.json

Returns entries for one feed, newest first. Returns 404 if the feed does not exist and 403 if you do not subscribe to it.

Note: Responses include the same X-Feedbin-Record-Count and Links pagination headers as GET /feeds/v2/entries.json.

Example Request

curl -X GET "https://micro.blog/feeds/v2/feeds/{id}/entries.json?read=false" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Query Parameters

Name Type Required Description
read string Optional Use false for unread entries only, or true for read entries only.
Example: false
starred boolean Optional Accepted for Feedbin compatibility, but true always returns an empty array.
Example: true
since string Optional ISO 8601 timestamp. Returns only entries Micro.blog fetched after this time.
Example: 2026-04-26T12:00:00Z
per_page integer Optional Number of entries per page, up to 200.
Example: 50
page integer Optional Page number, starting at 1.
Example: 1
mode string Optional Use extended to add images and enclosure to each entry when available.
Example: extended
include_enclosure boolean Optional Set to true to add enclosure to entries that have one.
Example: true

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Path Parameters

Name Type Required Description
id integer Required Feed ID, from the feed_id of a subscription.
Example: 123

Response

200 OK application/json

Returns an array of entries.

Example Response

[
  {
    "id": 1001,
    "feed_id": 123,
    "title": "Example post",
    "url": "https://example.com/post",
    "extracted_content_url": null,
    "author": "Example Author",
    "content": "<p>Entry HTML.</p>",
    "summary": "Entry summary.",
    "published": "2026-04-26T12:00:00.000000Z",
    "created_at": "2026-04-26T12:05:00.000000Z"
  }
]
GET /feeds/v2/icons.json

Returns an icon for each subscribed feed that has one, keyed by the feed’s host name.

Example Request

curl -X GET "https://micro.blog/feeds/v2/icons.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Response

200 OK application/json

Returns an array of host and icon URL pairs. Icons served over plain http are returned as an https Micro.blog proxy URL.

Example Response

[
  {
    "host": "example.com",
    "url": "https://example.com/favicon.png"
  }
]
DELETE /feeds/v2/starred_entries.json

Unstars entries. Unstarring also removes the Micro.blog bookmark that starring created.

Example Request

curl -X DELETE "https://micro.blog/feeds/v2/starred_entries.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '{"starred_entries": [1001, 1002]}'

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
starred_entries array Required Entry IDs to unstar, up to 3,000. IDs from feeds you do not subscribe to are ignored.
Example: [1001 1002]

Response

200 OK application/json

Returns the IDs that were starred and are now unstarred.

Example Response

[
  1001,
  1002
]
GET /feeds/v2/starred_entries.json

Returns the IDs of your starred entries.

Example Request

curl -X GET "https://micro.blog/feeds/v2/starred_entries.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Response

200 OK application/json

Returns an array of entry IDs, highest first.

Example Response

[
  1002,
  1001
]
POST /feeds/v2/starred_entries.json

Stars entries. Starring an entry also saves it as a Micro.blog bookmark.

Example Request

curl -X POST "https://micro.blog/feeds/v2/starred_entries.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '{"starred_entries": [1001, 1002]}'

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
starred_entries array Required Entry IDs to star, up to 3,000. IDs from feeds you do not subscribe to are ignored.
Example: [1001 1002]

Response

200 OK application/json

Returns the IDs that are now starred.

Example Response

[
  1001,
  1002
]
GET /feeds/v2/subscriptions.json

Returns your subscriptions, newest first. Requires a plan that includes Inkwell; other accounts get 403 with Inkwell is not enabled for this account.

Example Request

curl -X GET "https://micro.blog/feeds/v2/subscriptions.json?mode=extended" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Query Parameters

Name Type Required Description
since string Optional ISO 8601 timestamp. Returns only subscriptions created after this time.
Example: 2026-04-26T12:00:00Z
mode string Optional Use extended to add a json_feed object with the feed’s title, URLs and icon.
Example: extended

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Response

200 OK application/json

Returns an array of subscriptions. title is your custom title, or the feed’s own title if you have not set one. json_feed appears only with mode=extended.

Example Response

[
  {
    "id": 456,
    "created_at": "2026-04-26T12:00:00.000000Z",
    "feed_id": 123,
    "title": "Example Feed",
    "feed_url": "https://example.com/feed.json",
    "site_url": "https://example.com/",
    "json_feed": {
      "version": "https://jsonfeed.org/version/1",
      "title": "Example Feed",
      "home_page_url": "https://example.com/",
      "feed_url": "https://example.com/feed.json",
      "icon": "https://example.com/icon.png",
      "favicon": "https://example.com/icon.png"
    }
  }
]
POST /feeds/v2/subscriptions.json

Subscribes to a feed. You can pass a feed URL or a website URL; Micro.blog looks for feeds on the page. Requires a plan that includes Inkwell; other accounts get 403.

Note: Returns 201 with a Location header for a new subscription, or 302 with the existing subscription if you already subscribe. When a website lists more than one feed, returns 300 with an array of choices, each with feed_url and title; send the request again with one of them. Returns 404 if no feed was found and 400 if no URL was sent.

Example Request

curl -X POST "https://micro.blog/feeds/v2/subscriptions.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '{"feed_url": "https://example.com/feed.json"}'

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
feed_url string Required Feed or website URL. url is accepted as an alias. A feed_url query or form parameter also works when there is no JSON body.
Example: https://example.com/feed.json

Response

201 OK application/json

Returns the subscription.

Example Response

{
  "id": 456,
  "created_at": "2026-04-26T12:00:00.000000Z",
  "feed_id": 123,
  "title": "Example Feed",
  "feed_url": "https://example.com/feed.json",
  "site_url": "https://example.com/"
}
DELETE /feeds/v2/subscriptions/{id}.json

Unsubscribes from a feed. Returns 404 if the subscription does not exist and 403 if it belongs to another account.

Example Request

curl -X DELETE "https://micro.blog/feeds/v2/subscriptions/{id}.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Path Parameters

Name Type Required Description
id integer Required Subscription ID.
Example: 456

Response

204 OK text/plain

Returns no content on success.

Example Response

(empty response body)
GET /feeds/v2/subscriptions/{id}.json

Returns one subscription. Returns 404 if the subscription does not exist and 403 if it belongs to another account.

Example Request

curl -X GET "https://micro.blog/feeds/v2/subscriptions/{id}.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Query Parameters

Name Type Required Description
mode string Optional Use extended to add a json_feed object with the feed’s title, URLs and icon.
Example: extended

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Path Parameters

Name Type Required Description
id integer Required Subscription ID.
Example: 456

Response

200 OK application/json

Returns the subscription.

Example Response

{
  "id": 456,
  "created_at": "2026-04-26T12:00:00.000000Z",
  "feed_id": 123,
  "title": "Example Feed",
  "feed_url": "https://example.com/feed.json",
  "site_url": "https://example.com/"
}
PATCH /feeds/v2/subscriptions/{id}.json

Renames a subscription. Returns 404 if the subscription does not exist and 403 if it belongs to another account.

Example Request

curl -X PATCH "https://micro.blog/feeds/v2/subscriptions/{id}.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '{"title": "Renamed Feed"}'

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
title string Required New title. Read from the JSON body only. An empty or missing title clears your custom title, so the feed’s own title is shown again.
Example: Renamed Feed

Path Parameters

Name Type Required Description
id integer Required Subscription ID.
Example: 456

Response

200 OK application/json

Returns the updated subscription.

Example Response

{
  "id": 456,
  "created_at": "2026-04-26T12:00:00.000000Z",
  "feed_id": 123,
  "title": "Renamed Feed",
  "feed_url": "https://example.com/feed.json",
  "site_url": "https://example.com/"
}
POST /feeds/v2/subscriptions/{id}/update.json

Queues a background refresh of the subscription’s feed. New entries appear once the fetch finishes. Returns 404 if the subscription does not exist and 403 if it belongs to another account.

Example Request

curl -X POST "https://micro.blog/feeds/v2/subscriptions/{id}/update.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Path Parameters

Name Type Required Description
id integer Required Subscription ID.
Example: 456

Response

200 OK application/json

Returns the subscription.

Example Response

{
  "id": 456,
  "created_at": "2026-04-26T12:00:00.000000Z",
  "feed_id": 123,
  "title": "Example Feed",
  "feed_url": "https://example.com/feed.json",
  "site_url": "https://example.com/"
}
DELETE /feeds/v2/unread_entries.json

Marks entries as read.

Example Request

curl -X DELETE "https://micro.blog/feeds/v2/unread_entries.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '{"unread_entries": [1001, 1002]}'

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
unread_entries array Required Entry IDs to mark as read, up to 3,000. IDs from feeds you do not subscribe to are ignored.
Example: [1001 1002]

Response

200 OK application/json

Returns the IDs that were marked as read.

Example Response

[
  1001,
  1002
]
GET /feeds/v2/unread_entries.json

Returns the IDs of your unread entries.

Example Request

curl -X GET "https://micro.blog/feeds/v2/unread_entries.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Response

200 OK application/json

Returns an array of entry IDs, newest first.

Example Response

[
  1002,
  1001
]
POST /feeds/v2/unread_entries.json

Marks entries as unread.

Example Request

curl -X POST "https://micro.blog/feeds/v2/unread_entries.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '{"unread_entries": [1001, 1002]}'

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
unread_entries array Required Entry IDs to mark as unread, up to 3,000. IDs from feeds you do not subscribe to are ignored.
Example: [1001 1002]

Response

200 OK application/json

Returns the IDs that were marked as unread.

Example Response

[
  1001,
  1002
]
POST /feeds/v2/unread_entries/delete.json

Marks entries as read. Works like DELETE /feeds/v2/unread_entries.json, for clients that cannot send a body with a DELETE request.

Example Request

curl -X POST "https://micro.blog/feeds/v2/unread_entries/delete.json" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '{"unread_entries": [1001, 1002]}'

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
unread_entries array Required Entry IDs to mark as read, up to 3,000. IDs from feeds you do not subscribe to are ignored.
Example: [1001 1002]

Response

200 OK application/json

Returns the IDs that were marked as read.

Example Response

[
  1001,
  1002
]
GET /feeds/{entry_id}/highlights

Returns your highlights for one reader entry, newest first, as a JSON Feed. Returns 404 if the entry does not exist and 403 if it belongs to a feed you do not subscribe to.

Example Request

curl -X GET "https://micro.blog/feeds/{entry_id}/highlights" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Path Parameters

Name Type Required Description
entry_id integer Required Reader entry ID.
Example: 1001

Response

200 OK application/json

Returns a JSON Feed. _microblog.count is the number of highlights on this entry.

Example Response

{
  "version": "https://jsonfeed.org/version/1",
  "title": "Micro.blog - Highlights - Example post",
  "home_page_url": "https://micro.blog",
  "feed_url": "https://micro.blog/feeds/1001/highlights",
  "_microblog": {
    "about": "https://micro.blog/about/api",
    "count": 1
  },
  "items": [
    {
      "id": 987,
      "title": "Example post",
      "content_text": "Highlighted text",
      "url": "https://example.com/post",
      "date_published": "2026-04-26T12:00:00+00:00",
      "_microblog": {
        "entry_id": 1001,
        "selection_start": 10,
        "selection_end": 40
      }
    }
  ]
}
POST /feeds/{entry_id}/highlights

Saves a highlight on a reader entry. Returns 404 if the entry does not exist and 403 if it belongs to a feed you do not subscribe to.

Example Request

curl -X POST "https://micro.blog/feeds/{entry_id}/highlights" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD" \
  --header "Content-Type: application/json" \
  --data '{"text": "Highlighted text", "start": 10, "end": 40}'

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Request Body

Name Type Required Description
text string Required Highlighted text. Body fields can also be sent as query or form parameters.
Example: Highlighted text
start integer Optional Character offset where the selection starts.
Example: 10
end integer Optional Character offset where the selection ends.
Example: 40

Path Parameters

Name Type Required Description
entry_id integer Required Reader entry ID.
Example: 1001

Response

200 OK application/json

Returns the new highlight ID and the number of highlights on this entry.

Example Response

{
  "id": 987,
  "count": 3
}
DELETE /feeds/{entry_id}/highlights/{highlight_id}

Deletes one of your highlights on a reader entry. Returns 404 if the entry does not exist and 403 if it belongs to a feed you do not subscribe to.

Example Request

curl -X DELETE "https://micro.blog/feeds/{entry_id}/highlights/{highlight_id}" \
  --header "Authorization: Bearer ABCDEF1234567890ABCD"

Header Parameters

Name Type Required Description
Authorization string Required Bearer token for authentication. Format: Bearer {token}.

Path Parameters

Name Type Required Description
entry_id integer Required Reader entry ID.
Example: 1001
highlight_id integer Required Highlight ID.
Example: 987

Response

200 OK application/json

Returns an empty JSON object, including when no matching highlight was found.

Example Response

{}
GET /feeds/{username}.json

Returns up to 40 recent posts from a user’s Micro.blog timeline, which is the posts from accounts they follow, as a JSON Feed. This is not the user’s own posts; use GET /posts/{username} for those. No authentication is required. Returns 404 if the user does not exist.

Example Request

curl -X GET "https://micro.blog/feeds/{username}.json"

Path Parameters

Name Type Required Description
username string Required Micro.blog username.
Example: vincent

Response

200 OK application/json

Returns a JSON Feed. Items include summary only when the post has one.

Example Response

{
  "version": "https://jsonfeed.org/version/1",
  "title": "Micro.blog - vincent timeline",
  "home_page_url": "https://micro.blog",
  "feed_url": "https://micro.blog/feeds/vincent.json",
  "icon": "https://micro.blog/images/icons/favicon_256.png",
  "favicon": "https://micro.blog/images/icons/favicon_32.png",
  "_microblog": {
    "about": "https://micro.blog/about/api"
  },
  "items": [
    {
      "id": "12345",
      "content_html": "<p>Hello world.</p>",
      "url": "https://example.com/2026/04/26/hello.html",
      "date_published": "2026-04-26T12:00:00+00:00",
      "author": {
        "name": "Example Author",
        "url": "https://example.com/",
        "avatar": "https://micro.blog/example/avatar.jpg",
        "_microblog": {
          "username": "example"
        }
      }
    }
  ]
}
GET /feeds/{username}.xml

Returns the same timeline as GET /feeds/{username}.json as an RSS 2.0 feed. No authentication is required. Returns 404 if the user does not exist.

Example Request

curl -X GET "https://micro.blog/feeds/{username}.xml"

Path Parameters

Name Type Required Description
username string Required Micro.blog username.
Example: vincent

Response

200 OK application/xml

Returns an RSS 2.0 feed. Each item’s guid is the Micro.blog post URL.

Example Response

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Micro.blog - vincent timeline</title>
    <link>https://micro.blog/</link>
    <description>Posts in vincent&#39;s timeline</description>
    <pubDate>Sun, 26 Apr 2026 12:30:00 +0000</pubDate>
    <item>
      <link>https://example.com/2026/04/26/hello.html</link>
      <description>&lt;p&gt;Hello world.&lt;/p&gt;</description>
      <author>Example Author</author>
      <pubDate>Sun, 26 Apr 2026 12:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://micro.blog/posts/12345</guid>
      <dc:date>2026-04-26T12:00:00+00:00</dc:date>
    </item>
    <dc:date>2026-04-26T12:30:00+00:00</dc:date>
  </channel>
</rss>
GET /feeds/{username}/bookmarks/{readlater_queue}.json

Returns a private JSON Feed of a user’s 100 most recent bookmarks, plus an item for each archived copy of a bookmarked link. Podcast episodes are omitted; they appear in GET /posts/bookmarks/listenlater.

Note: The username and token in the path are the only credentials, so treat the URL as a secret. Do not send a Bearer token. An unknown username or token returns 404.

Example Request

curl -X GET "https://micro.blog/feeds/{username}/bookmarks/{readlater_queue}.json"

Path Parameters

Name Type Required Description
username string Required Micro.blog username.
Example: vincent
readlater_queue string Required Private bookmarks feed token for the user.
Example: QUEUE_TOKEN

Response

200 OK application/json

Returns a JSON Feed, newest first. Archived copies have an id that starts with link, a title, and a url pointing at the stored copy. Bookmarks include their tags as one comma-separated string.

Example Response

{
  "user_comment": "You can subscribe to this feed in a feed reader to read your bookmarks.",
  "version": "https://jsonfeed.org/version/1",
  "title": "Micro.blog - Bookmarks",
  "home_page_url": "https://micro.blog",
  "feed_url": "https://micro.blog/posts/bookmarks",
  "_microblog": {
    "about": "https://micro.blog/about/api"
  },
  "items": [
    {
      "id": "link2222",
      "title": "Example article",
      "content_html": "<p>Archived article text.</p>",
      "url": "https://archive.example.com/2222.html",
      "date_published": "2026-04-26T12:05:00+00:00",
      "author": {
        "name": "Example Author",
        "url": "https://example.com/",
        "avatar": "https://micro.blog/example/avatar.jpg",
        "_microblog": {
          "username": "example"
        }
      }
    },
    {
      "id": "1111",
      "content_html": "<p>Worth reading: <a href=\"https://example.com/article\">Example article</a></p>",
      "url": "https://example.com/article",
      "date_published": "2026-04-26T12:00:00+00:00",
      "tags": "reading, web",
      "author": {
        "name": "Example Author",
        "url": "https://example.com/",
        "avatar": "https://micro.blog/example/avatar.jpg",
        "_microblog": {
          "username": "example"
        }
      }
    }
  ]
}
GET /feeds/{username}/mentions.json

Returns recent replies that mention a user, newest first, as a JSON Feed. No authentication is required. Returns 404 if the user does not exist, or if their profile is hidden and the request is not signed in. If the user hides replies on their profile, items is empty.

Example Request

curl -X GET "https://micro.blog/feeds/{username}/mentions.json?count=20"

Query Parameters

Name Type Required Description
count integer Optional Maximum number of mentions to return.
Example: 20
before_id integer Optional Returns mentions posted before the post with this ID. Use the last item’s id to load the next page.
Example: 12345
since_id integer Optional Returns mentions posted after the post with this ID.
Example: 12000

Path Parameters

Name Type Required Description
username string Required Micro.blog username.
Example: vincent

Response

200 OK application/json

Returns a JSON Feed.

Example Response

{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Micro.blog - vincent mentions",
  "home_page_url": "https://micro.blog",
  "feed_url": "https://micro.blog/feeds/vincent/mentions.json",
  "icon": "https://micro.blog/images/icons/favicon_256.png",
  "favicon": "https://micro.blog/images/icons/favicon_32.png",
  "_microblog": {
    "about": "https://micro.blog/about/api"
  },
  "items": [
    {
      "id": "12345",
      "content_html": "<p>@vincent Thanks for the link!</p>",
      "url": "https://example.com/2026/04/26/reply.html",
      "date_published": "2026-04-26T12:00:00+00:00",
      "author": {
        "name": "Example Author",
        "url": "https://example.com/",
        "avatar": "https://micro.blog/example/avatar.jpg",
        "_microblog": {
          "username": "example"
        }
      }
    }
  ]
}
GET /feeds/{username}/mentions.xml

Returns the same mentions as GET /feeds/{username}/mentions.json as an RSS 2.0 feed, with the same parameters and visibility rules.

Example Request

curl -X GET "https://micro.blog/feeds/{username}/mentions.xml?count=20"

Query Parameters

Name Type Required Description
count integer Optional Maximum number of mentions to return.
Example: 20
before_id integer Optional Returns mentions posted before the post with this ID.
Example: 12345
since_id integer Optional Returns mentions posted after the post with this ID.
Example: 12000

Path Parameters

Name Type Required Description
username string Required Micro.blog username.
Example: vincent

Response

200 OK application/xml

Returns an RSS 2.0 feed. Each item’s guid is the Micro.blog post URL.

Example Response

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Micro.blog - vincent mentions</title>
    <link>https://micro.blog/</link>
    <description>Replies to vincent</description>
    <pubDate>Sun, 26 Apr 2026 12:30:00 +0000</pubDate>
    <item>
      <link>https://example.com/2026/04/26/reply.html</link>
      <description>&lt;p&gt;@vincent Thanks for the link!&lt;/p&gt;</description>
      <author>Example Author</author>
      <pubDate>Sun, 26 Apr 2026 12:00:00 +0000</pubDate>
      <guid isPermaLink="true">https://micro.blog/posts/12345</guid>
      <dc:date>2026-04-26T12:00:00+00:00</dc:date>
    </item>
    <dc:date>2026-04-26T12:30:00+00:00</dc:date>
  </channel>
</rss>
GET /feeds/{username}/readlater/{readlater_queue}.json

Returns a private JSON Feed of a user’s saved read-later articles, newest first.

Note: The username and token in the path are the only credentials, so treat the URL as a secret. Do not send a Bearer token. An unknown username or token returns 404. The token is the same readlater_queue value used by the private bookmarks feed.

Example Request

curl -X GET "https://micro.blog/feeds/{username}/readlater/{readlater_queue}.json"

Path Parameters

Name Type Required Description
username string Required Micro.blog username.
Example: vincent
readlater_queue string Required Private read-later feed token for the user.
Example: QUEUE_TOKEN

Response

200 OK application/json

Returns a JSON Feed.

Example Response

{
  "version": "https://jsonfeed.org/version/1",
  "title": "Micro.blog - Read Later - vincent",
  "home_page_url": "https://micro.blog",
  "feed_url": "https://micro.blog/feeds/vincent/readlater/QUEUE_TOKEN.json",
  "icon": "https://micro.blog/images/icons/favicon_256.png",
  "favicon": "https://micro.blog/images/icons/favicon_32.png",
  "_microblog": {
    "about": "https://micro.blog/about/api"
  },
  "items": [
    {
      "id": "3333",
      "title": "Example article",
      "content_html": "<p>Article text.</p>",
      "url": "https://example.com/article",
      "date_published": "2026-04-26T12:00:00+00:00",
      "author": {
        "name": "Example Author"
      }
    }
  ]
}
GET /feeds/{username}/webmentions.json

Returns incoming webmentions for a user, newest first, 20 at a time, as a JSON Feed. No authentication is required. Returns 404 if the user does not exist.

Example Request

curl -X GET "https://micro.blog/feeds/{username}/webmentions.json"

Query Parameters

Name Type Required Description
before_id integer Optional Returns webmentions older than this webmention ID. You can follow next_url instead of building this yourself.
Example: 4444

Path Parameters

Name Type Required Description
username string Required Micro.blog username.
Example: vincent

Response

200 OK application/json

Returns a JSON Feed. Each item’s url is the target on the user’s site and external_url is the page that sent the webmention. next_url is present when there are more webmentions.

Example Response

{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Micro.blog - vincent webmentions",
  "home_page_url": "https://micro.blog",
  "feed_url": "https://micro.blog/feeds/vincent/webmentions.json",
  "icon": "https://micro.blog/images/icons/favicon_256.png",
  "favicon": "https://micro.blog/images/icons/favicon_32.png",
  "_microblog": {
    "about": "https://micro.blog/about/api"
  },
  "items": [
    {
      "id": "4445",
      "content_html": "<p>Incoming webmention...</p><p>Source: <a href=\"https://example.org/reply\">example.org/reply</a></p><p>Target: <a href=\"https://example.com/post\">example.com/post</a></p>",
      "url": "https://example.com/post",
      "external_url": "https://example.org/reply",
      "date_published": "2026-04-26T12:00:00+00:00"
    }
  ],
  "next_url": "https://micro.blog/feeds/vincent/webmentions.json?before_id=4445"
}