Posts
Hashtags
hashtag-service
The hashtags written in posts, and the posts each one is in.
Hashtags
/hashtags/Who: Anyone, signed in or not
Parameters
startintegerin queryHow many to pass over. At least 0.limitintegerin queryThe most to send. At least 0.20unless given.sortstringin queryThe order: in the most posts first, or the latest first. At most 10 characters. One ofpopular,recent.recentunless given.dirstringin queryWhich way the order runs. At most 4 characters. One ofasc,desc.descunless given.
Answers
- 200OKobject application/json
- 400the request is not well formed, or a value in it is not one it may be
Request
curl "https://api.example.org/hashtags/"
const response = await fetch('https://api.example.org/hashtags/', {
method: 'GET',
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/hashtags/",
)
answer = response.json()
Answer · 200
{
"data": [
{
"alias": "string",
"followed": false,
"id": 42,
"name": "string",
"profiles": 1,
"type": "node.tag.hashtag-service.hashtag.v1",
"uses": 1
}
],
"pagination": {
"limit": 1,
"offset": 1,
"total": 1
}
}
Every hashtag
/hashtags/_browse/allEvery hashtag on a post anybody may see, A to Z or the most used first, perhaps only those beginning with q: each with how many such posts carry it (uses), the viewer's own posts too, and whether the viewer follows it.
Who: Anyone, signed in or not
Parameters
qstringin queryOnly hashtags beginning with this, its # left out. At most 100 characters.sortstringin queryThe order:name, A to Z (the default), oruses, the most used first. One ofname,uses.nameunless given.startintegerin queryHow many to pass over. At least 0.limitintegerin queryThe most to send: up to 20. At least 0. At most 20.20unless given.
Answers
- 200OKobject application/json
- 400the request is not well formed, or a value in it is not one it may be
Request
curl "https://api.example.org/hashtags/_browse/all"
const response = await fetch('https://api.example.org/hashtags/_browse/all', {
method: 'GET',
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/hashtags/_browse/all",
)
answer = response.json()
Answer · 200
{
"data": [
{
"alias": "string",
"followed": false,
"id": 42,
"name": "string",
"profiles": 1,
"type": "node.tag.hashtag-service.hashtag.v1",
"uses": 1
}
],
"pagination": {
"limit": 1,
"offset": 1,
"total": 1
}
}
The hashtags the viewer follows
/hashtags/_browse/followingThose in the viewer's custom feeds, which following a hashtag makes, with how many posts anybody may see carry each (uses), and the viewer's own. q, sort and paging as for all of them.
Who: Somebody signed in
Parameters
qstringin queryOnly hashtags beginning with this, its # left out. At most 100 characters.sortstringin queryThe order:name, A to Z (the default), oruses, the most used first. One ofname,uses.nameunless given.startintegerin queryHow many to pass over. At least 0.limitintegerin queryThe most to send: up to 20. At least 0. At most 20.20unless given.
Answers
- 200OKobject application/json
- 400the request is not well formed, or a value in it is not one it may be
- 401no token, or one that has expired
Request
curl "https://api.example.org/hashtags/_browse/following" \
-H "Authorization: Bearer $TOKEN"
const response = await fetch('https://api.example.org/hashtags/_browse/following', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` },
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/hashtags/_browse/following",
headers={"Authorization": f"Bearer {token}"},
)
answer = response.json()
Answer · 200
{
"data": [
{
"alias": "string",
"followed": false,
"id": 42,
"name": "string",
"profiles": 1,
"type": "node.tag.hashtag-service.hashtag.v1",
"uses": 1
}
],
"pagination": {
"limit": 1,
"offset": 1,
"total": 1
}
}
Hashtags used most of all
/hashtags/_browse/ordered_by_degreeEvery hashtag, the ones in the most posts first.
Who: Anyone, signed in or not
Parameters
startintegerin queryHow many to pass over. At least 0.limitintegerin queryThe most to send. At least 0.20unless given.
Answers
- 200OKobject application/json
- 400the request is not well formed, or a value in it is not one it may be
Request
curl "https://api.example.org/hashtags/_browse/ordered_by_degree"
const response = await fetch('https://api.example.org/hashtags/_browse/ordered_by_degree', {
method: 'GET',
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/hashtags/_browse/ordered_by_degree",
)
answer = response.json()
Answer · 200
{
"data": [
{
"alias": "string",
"followed": false,
"id": 42,
"name": "string",
"profiles": 1,
"type": "node.tag.hashtag-service.hashtag.v1",
"uses": 1
}
],
"pagination": {
"limit": 1,
"offset": 1,
"total": 1
}
}
Hashtags used most lately
/hashtags/_browse/trendingThe hashtags the most profiles used in a window of time that ends now: the writers of public posts carrying it, by when they were written, and the public profiles (people, groups, events, websites) tagged with it, by when they were tagged; each profile once, whatever its kind, here or elsewhere; profiles says how many. time_window left out, the installation's own (TRENDING_WINDOW; daily where it federates, monthly where not), widened while it holds fewer than ten; window says which. One page, all there is: up to limit.
Who: Anyone, signed in or not
Parameters
limitintegerin queryThe most to send. At least 0.20unless given.time_windowstringin queryAsked for in lower case and told to the graph in upper case, as its constants are. "all" was accepted and never understood: the graph fell back to a day for anything it did not know. One ofdaily,weekly,monthly,yearly.
Answers
- 200OKobject application/json
- 400the request is not well formed, or a value in it is not one it may be
Request
curl "https://api.example.org/hashtags/_browse/trending"
const response = await fetch('https://api.example.org/hashtags/_browse/trending', {
method: 'GET',
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/hashtags/_browse/trending",
)
answer = response.json()
Answer · 200
{
"data": [
{
"alias": "string",
"followed": false,
"id": 42,
"name": "string",
"profiles": 1,
"type": "node.tag.hashtag-service.hashtag.v1",
"uses": 1
}
],
"pagination": {
"limit": 1,
"offset": 1,
"total": 1
},
"window": "string"
}
Hashtags that begin with what was typed
/hashtags/_suggestFor somebody typing a hashtag: those in use that begin with q (what follows the #, its capitals and accents aside), the one that is just that first, then those in the viewer's custom feeds, then the most used. A hashtag is counted by the posts anybody may see, and the viewer's own.
Who: Somebody signed in
Parameters
qstringin queryWhat follows the #, at least one letter.limitintegerin queryHow many to offer, 1 to 20; 8 when not given. At least 0.
Answers
- 200OKhashtag.SuggestResponse application/json
- 400the request is not well formed, or a value in it is not one it may be
- 401no token, or one that has expired
Request
curl "https://api.example.org/hashtags/_suggest" \
-H "Authorization: Bearer $TOKEN"
const response = await fetch('https://api.example.org/hashtags/_suggest', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` },
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/hashtags/_suggest",
headers={"Authorization": f"Bearer {token}"},
)
answer = response.json()
Answer · 200
{
"data": [
{
"alias": "string",
"followed": false,
"id": 42,
"name": "string",
"uses": 1
}
]
}
Hashtags for a text
/hashtags/_suggestFor long content: the hashtags in use that are words of the title and body, or two words run together (open science, #openscience), and on more than one post. Those in the viewer's custom feeds first, then the words the text uses most. Hashtags the text has already are left out; addresses, code, mentions and hashtags are not words of it.
Who: Somebody signed in
Body application/json
contentstringWhat is written, as Markdown.limitintegerHow many to offer, 1 to 20; 8 when not given. At least 0.titlestringThe title, if it has one.
Answers
- 200OKhashtag.SuggestResponse application/json
- 400the request is not well formed, or a value in it is not one it may be
- 401no token, or one that has expired
Request
curl -X POST "https://api.example.org/hashtags/_suggest" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "string",
"limit": 1,
"title": "string"
}'
const response = await fetch('https://api.example.org/hashtags/_suggest', {
method: 'POST',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"content": "string",
"limit": 1,
"title": "string"
}),
});
const answer = await response.json();
import requests
response = requests.post(
"https://api.example.org/hashtags/_suggest",
headers={"Authorization": f"Bearer {token}"},
json={
"content": "string",
"limit": 1,
"title": "string"
},
)
answer = response.json()
Answer · 200
{
"data": [
{
"alias": "string",
"followed": false,
"id": 42,
"name": "string",
"uses": 1
}
]
}
One hashtag
/hashtags/{alias}Who: Anyone, signed in or not
Parameters
aliasstringrequiredin path
Answers
- 200OKhashtag.HashtagNodeItem application/json
- 400the request is not well formed, or a value in it is not one it may be
- 404there is no such hashtag
Request
curl "https://api.example.org/hashtags/<alias>"
const response = await fetch('https://api.example.org/hashtags/<alias>', {
method: 'GET',
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/hashtags/<alias>",
)
answer = response.json()
Answer · 200
{
"alias": "string",
"followed": false,
"id": 42,
"name": "string",
"profiles": 1,
"type": "node.tag.hashtag-service.hashtag.v1",
"uses": 1
}
Delete a hashtag
/hashtags/{alias}The posts it was in stay, their words unchanged.
Who: An administrator, with taxonomy:write
Parameters
aliasintegerrequiredin pathHere, theid. The hashtag's id.
Answers
- 200the hashtag is gone
- 400the request is not well formed, or a value in it is not one it may be
- 401no token, or one that has expired
- 403the viewer may not do this
- 404there is no such hashtag
Request
curl -X DELETE "https://api.example.org/hashtags/<alias>" \
-H "Authorization: Bearer $TOKEN"
const response = await fetch('https://api.example.org/hashtags/<alias>', {
method: 'DELETE',
headers: { Authorization: `Bearer ${token}` },
});
const answer = await response.json();
import requests
response = requests.delete(
"https://api.example.org/hashtags/<alias>",
headers={"Authorization": f"Bearer {token}"},
)
answer = response.json()
The posts a hashtag is in
/hashtags/{id}/inboundsThose the viewer may see, the latest first unless asked otherwise.
Who: Anyone, signed in or not
Parameters
idintegerrequiredin pathWhat the posts are tied to: a hashtag's or a place's id.startintegerin queryHow many to pass over. At least 0.limitintegerin queryThe most to send. At least 0.20unless given.sortstringin queryThe order they come in:recent, newest first, orrelevant, what people have found useful lately, as search's Most relevant ranks it. At most 10 characters. One ofcreated_at,updated_at,recent,popular,relevant.recentunless given.dirstringin queryWhich way the order runs. At most 4 characters. One ofasc,desc.descunless given.
Answers
- 200OKobject application/json
- 400the request is not well formed, or a value in it is not one it may be
- 404there is no such hashtag
Request
curl "https://api.example.org/hashtags/<id>/inbounds"
const response = await fetch('https://api.example.org/hashtags/<id>/inbounds', {
method: 'GET',
});
const answer = await response.json();
import requests
response = requests.get(
"https://api.example.org/hashtags/<id>/inbounds",
)
answer = response.json()
Answer · 200
{
"data": [
{
"access": "string",
"alias": "string",
"author": {
"alias": null,
"avatar_urls": null,
"id": null,
"name": null,
"type": null
},
"authorized": {
"add_follower": null,
"administration": null,
"audiences": null,
"block_from_owner": null,
"comment": null,
"composers": null,
"delete": null,
"download": null,
"edit": null,
"hide": null,
"invite": null,
"like": null,
"pin": null,
"quote": null
},
"avatar_urls": {
"key": null
},
"body": "string",
"comment_count": 1,
"content": "string",
"cover_urls": {
"key": null
},
"created_at": "2026-10-27T09:30:00Z",
"editor": {
"alias": null,
"avatar_urls": null,
"id": null,
"name": null,
"type": null
},
"event": {
"address": null,
"cancelled_at": null,
"capacity": null,
"ends_at": null,
"going_count": null,
"has_address": null,
"has_online_url": null,
"host": null,
"is_full": null,
"maybe_count": null,
"online_url": null,
"open_to_host_followers": null,
"starts_at": null,
"state": null,
"timezone_name": null,
"viewer_rsvp": null
},
"feed": {
"definition": null,
"icon": null
},
"files": [
null
],
"follower_count": 1,
"id": 42,
"is_admined_by_viewer": false,
"is_blocked_by_viewer": false,
"is_following_viewer": false,
"is_leading_viewer": false,
"is_liked_by_viewer": false,
"is_reposted_by_viewer": false,
"is_saved_by_viewer": false,
"is_subscribed_by_viewer": false,
"language": "en",
"likes_count": 1,
"link_preview": {
"description": null,
"image": null,
"site_name": null,
"title": null,
"url": null
},
"media_removed": {
"alts": null,
"count": null,
"gone": null
},
"mimetype": "string",
"name": "string",
"origin_domain": "string",
"owner": {
"alias": null,
"avatar_urls": null,
"body": null,
"id": null,
"is_following_viewer": null,
"is_leading_viewer": null,
"name": null,
"type": null
},
"parent": {
"access": null,
"alias": null,
"author": null,
"authorized": null,
"body": null,
"content": null,
"cover_urls": null,
"created_at": null,
"files": null,
"id": null,
"is_liked_by_viewer": null,
"is_reposted_by_viewer": null,
"is_saved_by_viewer": null,
"link_preview": null,
"name": null,
"owner": null,
"portrait_urls": null,
"title": null,
"type": null,
"video": null
},
"pinned": false,
"portrait_urls": {
"key": null
},
"quote": {
"post": null,
"state": null
},
"quote_count": 1,
"quote_id": 42,
"repost_count": 1,
"root": {
"access": null,
"alias": null,
"author": null,
"authorized": null,
"body": null,
"content": null,
"cover_urls": null,
"created_at": null,
"files": null,
"id": null,
"is_liked_by_viewer": null,
"is_reposted_by_viewer": null,
"is_saved_by_viewer": null,
"link_preview": null,
"name": null,
"owner": null,
"portrait_urls": null,
"title": null,
"type": null,
"video": null
},
"root_id": 42,
"title": "string",
"type": "string",
"uri": "https://example.org/",
"verified": false,
"video": {
"duration": null,
"files": null,
"height": null,
"loop": null,
"poster": null,
"width": null
}
}
],
"pagination": {
"limit": 1,
"offset": 1,
"total": 1
}
}
Written by Claude, reviewed by Rastin Mehr · About this