Posts

Hashtags

hashtag-service

The hashtags written in posts, and the posts each one is in.

Hashtags

GET/hashtags/

Who: Anyone, signed in or not

Parameters

  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send. At least 0. 20 unless given.
  • sortstringin query
    The order: in the most posts first, or the latest first. At most 10 characters. One of popular, recent. recent unless given.
  • dirstringin query
    Which way the order runs. At most 4 characters. One of asc, desc. desc unless given.

Answers

  • 200
    OK
    object application/json
  • 400
    the request is not well formed, or a value in it is not one it may be

Request

curl "https://api.example.org/hashtags/"

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

GET/hashtags/_browse/all

Every 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 query
    Only hashtags beginning with this, its # left out. At most 100 characters.
  • sortstringin query
    The order: name, A to Z (the default), or uses, the most used first. One of name, uses. name unless given.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send: up to 20. At least 0. At most 20. 20 unless given.

Answers

  • 200
    OK
    object application/json
  • 400
    the 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"

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

GET/hashtags/_browse/following

Those 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 query
    Only hashtags beginning with this, its # left out. At most 100 characters.
  • sortstringin query
    The order: name, A to Z (the default), or uses, the most used first. One of name, uses. name unless given.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send: up to 20. At least 0. At most 20. 20 unless given.

Answers

  • 200
    OK
    object application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired

Request

curl "https://api.example.org/hashtags/_browse/following" \
  -H "Authorization: Bearer $TOKEN"

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

GET/hashtags/_browse/ordered_by_degree

Every hashtag, the ones in the most posts first.

Who: Anyone, signed in or not

Parameters

  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send. At least 0. 20 unless given.

Answers

  • 200
    OK
    object application/json
  • 400
    the 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"

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

GET/hashtags/_browse/trending

The 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 query
    The most to send. At least 0. 20 unless given.
  • time_windowstringin query
    Asked 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 of daily, weekly, monthly, yearly.

Answers

  • 200
    OK
    object application/json
  • 400
    the 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"

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

GET/hashtags/_suggest

For 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 query
    What follows the #, at least one letter.
  • limitintegerin query
    How many to offer, 1 to 20; 8 when not given. At least 0.

Answers

  • 200
    OK
    hashtag.SuggestResponse application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired

Request

curl "https://api.example.org/hashtags/_suggest" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

{
  "data": [
    {
      "alias": "string",
      "followed": false,
      "id": 42,
      "name": "string",
      "uses": 1
    }
  ]
}

Hashtags for a text

POST/hashtags/_suggest

For 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

  • contentstring
    What is written, as Markdown.
  • limitinteger
    How many to offer, 1 to 20; 8 when not given. At least 0.
  • titlestring
    The title, if it has one.

Answers

  • 200
    OK
    hashtag.SuggestResponse application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no 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"
  }'

Answer · 200

{
  "data": [
    {
      "alias": "string",
      "followed": false,
      "id": 42,
      "name": "string",
      "uses": 1
    }
  ]
}

One hashtag

GET/hashtags/{alias}

Who: Anyone, signed in or not

Parameters

  • aliasstringrequiredin path

Answers

  • 200
    OK
    hashtag.HashtagNodeItem application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 404
    there is no such hashtag

Request

curl "https://api.example.org/hashtags/<alias>"

Answer · 200

{
  "alias": "string",
  "followed": false,
  "id": 42,
  "name": "string",
  "profiles": 1,
  "type": "node.tag.hashtag-service.hashtag.v1",
  "uses": 1
}

Delete a hashtag

DELETE/hashtags/{alias}

The posts it was in stay, their words unchanged.

Who: An administrator, with taxonomy:write

Parameters

  • aliasintegerrequiredin path
    Here, the id. The hashtag's id.

Answers

  • 200
    the hashtag is gone
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not do this
  • 404
    there is no such hashtag

Request

curl -X DELETE "https://api.example.org/hashtags/<alias>" \
  -H "Authorization: Bearer $TOKEN"

The posts a hashtag is in

GET/hashtags/{id}/inbounds

Those the viewer may see, the latest first unless asked otherwise.

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    What the posts are tied to: a hashtag's or a place's id.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send. At least 0. 20 unless given.
  • sortstringin query
    The order they come in: recent, newest first, or relevant, what people have found useful lately, as search's Most relevant ranks it. At most 10 characters. One of created_at, updated_at, recent, popular, relevant. recent unless given.
  • dirstringin query
    Which way the order runs. At most 4 characters. One of asc, desc. desc unless given.

Answers

  • 200
    OK
    object application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 404
    there is no such hashtag

Request

curl "https://api.example.org/hashtags/<id>/inbounds"

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