Feeds and Reader
View .mdFeedbin-compatible reader endpoints, reader highlights, AI recaps, and public JSON and RSS feeds.
/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.
Content-Type: application/json. A body that is not valid JSON is treated as empty.
https://micro.blog
/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"
]
}
]
}
}
/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
}
}
]
}
/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/jsonReturns 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"
}
}
}
]
}
/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> — Apr 26</li>
</ul>
</div>
/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/jsonReturns the saved day name. An empty string means recap emails are off.
Example Response
{
"dayofweek": "Monday"
}
/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/jsonReturns the saved setting.
Example Response
{
"dayofweek": "Monday"
}
/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.
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"
}
}
]
/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/jsonReturns 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"
}
}
/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.
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/jsonReturns 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"
}
]
/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"
}
]
/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/jsonReturns the IDs that were starred and are now unstarred.
Example Response
[
1001,
1002
]
/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/jsonReturns an array of entry IDs, highest first.
Example Response
[
1002,
1001
]
/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/jsonReturns the IDs that are now starred.
Example Response
[
1001,
1002
]
/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"
}
}
]
/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.
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/jsonReturns 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/"
}
/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/plainReturns no content on success.
Example Response
(empty response body)
/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/jsonReturns 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/"
}
/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/jsonReturns 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/"
}
/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/jsonReturns 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/"
}
/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/jsonReturns the IDs that were marked as read.
Example Response
[
1001,
1002
]
/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/jsonReturns an array of entry IDs, newest first.
Example Response
[
1002,
1001
]
/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/jsonReturns the IDs that were marked as unread.
Example Response
[
1001,
1002
]
/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/jsonReturns the IDs that were marked as read.
Example Response
[
1001,
1002
]
/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
}
}
]
}
/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/jsonReturns the new highlight ID and the number of highlights on this entry.
Example Response
{
"id": 987,
"count": 3
}
/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/jsonReturns an empty JSON object, including when no matching highlight was found.
Example Response
{}
/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"
}
}
}
]
}
/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'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><p>Hello world.</p></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>
/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.
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"
}
}
}
]
}
/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/jsonReturns 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"
}
}
}
]
}
/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><p>@vincent Thanks for the link!</p></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>
/feeds/{username}/readlater/{readlater_queue}.json
Returns a private JSON Feed of a user’s saved read-later articles, newest first.
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/jsonReturns 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"
}
}
]
}
/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"
}