{% extends "base.html.j2" %} {% import "try-it-macros.html.j2" as try_it %} {% block title %}Hello!{% endblock %} {% block body_classes %}home{% endblock %} {% block content %}
Constellation is a self-hosted JSON API to an atproto-wide index of PDS record back-links, so you can query social interactions in real time. It can answer questions like:
It works by recursively walking all records coming through the firehose, searching for anything that looks like a link. Links are indexed by the target they point at, the collection the record came from, and the JSON path to the link in that record.
This server has indexed {{ stats.linking_records|human_number }} links between {{ stats.targetables|human_number }} targets and sources from {{ stats.dids|human_number }} identities over
{%- if let Some(days) = days_indexed %}
{{ days|human_number }}
{% else %}
???
{% endif -%}
days.
(indexing new records in real time, backfill coming soon!)
{{ k }}: {{ v }}
{% endfor %} #}You're welcome to use this public instance! Please do not build the torment nexus. If you want to be nice, put your project name and bsky username (or email) in your user-agent header for api requests.
GET /xrpc/blue.microcosm.links.getBacklinksA list of records linking to any record, identity, or uri.
subject: required, must url-encode. Example: at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722r
source: required. Example: app.bsky.feed.like:subject.uri
did: optional, filter links to those from specific users. Include multiple times to filter by multiple users. Example: did=did:plc:vc7f4oafdgxsihk4cry2xpze&did=did:plc:vc7f4oafdgxsihk4cry2xpze
limit: optional. Default: 16. Maximum: 100
reverse: optional, return links in reverse order. Default: false
Try it:
{% call try_it::get_backlinks("at://did:plc:a4pqq234yw7fqbddawjo7y35/app.bsky.feed.post/3m237ilwc372e", "app.bsky.feed.like:subject.uri", [""], 16, false) %}GET /xrpc/blue.microcosm.links.getManyToManyCountsTODO: description
subject: required, must url-encode. Example: at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722r
source: required. Example: app.bsky.feed.like:subject.uri
pathToOther: required. Path to the secondary link in the many-to-many record. Example: otherThing.uri
did: optional, filter links to those from specific users. Include multiple times to filter by multiple users. Example: did=did:plc:vc7f4oafdgxsihk4cry2xpze&did=did:plc:vc7f4oafdgxsihk4cry2xpze
otherSubject: optional, filter secondary links to specific subjects. Include multiple times to filter by multiple users. Example: at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722r
limit: optional. Default: 16. Maximum: 100
Try it:
{% call try_it::get_many_to_many_counts( "at://did:plc:wshs7t2adsemcrrd4snkeqli/sh.tangled.label.definition/good-first-issue", "sh.tangled.label.op:add[].key", "subject", [""], [""], 25, ) %}GET /xrpc/blue.microcosm.links.getManyToManyA list of many-to-many join records linking to a target and a secondary target.
subject: required, must url-encode. Example: at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722r
source: required. Example: app.bsky.feed.like:subject.uri
pathToOther: required. Path to the secondary link in the many-to-many record. Example: otherThing.uri
did: optional, filter links to those from specific users. Include multiple times to filter by multiple users. Example: did=did:plc:vc7f4oafdgxsihk4cry2xpze&did=did:plc:vc7f4oafdgxsihk4cry2xpze
otherSubject: optional, filter secondary links to specific subjects. Include multiple times to filter by multiple subjects. Example: at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722r
limit: optional. Default: 16. Maximum: 100
Try it:
{% call try_it::get_many_to_many( "at://did:plc:uyauirpjzk6le4ygqzatcwnq/app.bsky.graph.list/3lzhg33t5bf2h", "app.bsky.graph.listitem:list", "subject", [""], [""], 16, ) %}GET /xrpc/blue.microcosm.links.getDistinctA list of distinct DIDs (identities) with links to a target.
subject: required, must url-encode. The target being linked to. Example: did:plc:vc7f4oafdgxsihk4cry2xpze or at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722rsource: required. Collection and path specification for the primary link. Example: app.bsky.feed.like:subject.urilimit: optional. Number of results to return. Default: 16. Maximum: 100cursor: optional, see Definitions.Try it:
{% call try_it::get_backlink_dids("at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722r", "app.bsky.feed.like:subject.uri") %}GET /linksA list of records linking to a target.
[DEPRECATED]: use GET /xrpc/blue.microcosm.links.getBacklinks. New apps should avoid it, but this endpoint will remain supported for the forseeable future.
target: required, must url-encode. Example: at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722r
collection: required. Example: app.bsky.feed.like
path: required, must url-encode. Example: .subject.uri
did: optional, filter links to those from specific users. Include multiple times to filter by multiple users. Example: did=did:plc:vc7f4oafdgxsihk4cry2xpze&did=did:plc:vc7f4oafdgxsihk4cry2xpze
from_dids [deprecated]: optional. Use did instead. Example: from_dids=did:plc:vc7f4oafdgxsihk4cry2xpze,did:plc:vc7f4oafdgxsihk4cry2xpze
limit: optional. Default: 16. Maximum: 100
reverse: optional, return links in reverse order. Default: false
Try it:
{% call try_it::links("at://did:plc:a4pqq234yw7fqbddawjo7y35/app.bsky.feed.post/3m237ilwc372e", "app.bsky.feed.like", ".subject.uri", [""], 16) %}GET /links/distinct-didsA list of distinct DIDs (identities) with links to a target.
target: required, must url-encode. Example: at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722rcollection: required. Example: app.bsky.feed.likepath: required, must url-encode. Example: .subject.uriTry it:
{% call try_it::dids("at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722r", "app.bsky.feed.like", ".subject.uri") %}[deprecated] GET /links/countThe total number of links pointing at a given target.
target: required, must url-encode. Example: did:plc:vc7f4oafdgxsihk4cry2xpzecollection: required. Example: app.bsky.graph.blockpath: required, must url-encode. Example: .subjectcursor: optional, see Definitions.Try it:
{% call try_it::links_count("did:plc:vc7f4oafdgxsihk4cry2xpze", "app.bsky.graph.block", ".subject") %}GET /xrpc/blue.microcosm.links.getBacklinksCountThe total number of links pointing at a given target.
subject: required, must url-encode. The target being linked to. Example: did:plc:vc7f4oafdgxsihk4cry2xpze or at://did:plc:vc7f4oafdgxsihk4cry2xpze/app.bsky.feed.post/3lgwdn7vd722rsource: required. Collection and path specification for the primary link. Example: app.bsky.feed.like:subject.uriTry it:
{% call try_it::get_backlinks_count("did:plc:vc7f4oafdgxsihk4cry2xpze", "app.bsky.graph.block:subject") %}GET /links/count/distinct-didsThe total number of DIDs (identities) with links to at a given target.
target: required, must url-encode. Example: did:plc:vc7f4oafdgxsihk4cry2xpzecollection: required. Example: app.bsky.graph.blockpath: required, must url-encode. Example: .subjectcursor: optional, see Definitions.Try it:
{% call try_it::dids_count("did:plc:vc7f4oafdgxsihk4cry2xpze", "app.bsky.graph.block", ".subject") %}GET /links/allShow all sources with links to a target, including linking record counts and distinct linking DIDs
target: required, must url-encode. Example: did:plc:oky5czdrnfjpqslsw2a5icloTry it:
{% call try_it::explore_links("did:plc:oky5czdrnfjpqslsw2a5iclo") %}[deprecated] GET /links/all/countThe total counts of all links pointing at a given target, by collection and path.
DEPRECATED: Use GET /links/all instead.
target: required, must url-encode. Example: did:plc:oky5czdrnfjpqslsw2a5icloTry it:
{% call try_it::links_all_count("did:plc:oky5czdrnfjpqslsw2a5iclo") %}A DID like did:plc:hdhoaan3xa3jiuq4fg4mefid, or an AT-URI like at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3lgu4lg6j2k2v, or a URI like https://example.com.
A record NSID like app.bsky.feed.like.
A (currently-very-very-hacky) json-path-ish representation of the source of a link in a record. Records may contain multiple links with different meanings, so this specifies which specific link is of interest. Like .subject.uri.
Paged responses include a cursor property. When it's null, no more data is available. If it's not null, you can repeat the request with &cursor=<cursor> in the URL query to get the next set of responses.