Sources semantically similar to an anchor source
Pulls the anchor source's vector from the polymorphic ENTITIES_INDEX (orgs + products + sources) via getByIds, then runs query restricted to type=source so the candidate pool isn't wasted on parent orgs/products that would be filtered out post-hydration anyway. scope=org adds an org_id filter; scope=global (default) keeps the source filter only.
Degrades gracefully the same way /v1/related/releases does — missing binding, unembedded anchor, or query error returns { degraded: true, degradedReason, items: [] } with HTTP 200.
Each surviving row carries its source basics plus an org rollup and a recent-release window-function stat block (releaseCount, latestDate, latestTitle, latestVersion, recentCount) so a rail card can render without follow-up requests.
bearerAuthAuthorizationBearer <relk_… | relu_… | OAuth JWT>Machine/operator tokens use the relk_ prefix; self-serve read-only user keys use relu_; Sign in with Releases supplies an OAuth access token. Required scope depends on the endpoint.
source*stringAnchor source id (src_…) or slug.
scope?stringRestrict candidates to the anchor's org, or run unscoped.
"global""org""global"limit?integerMax neighbors to return. Clamped to 1–25.
1 <= value <= 256Successful or degraded neighbor list.
application/json- response
scope*string"org""global"items*array<>curl -X GET 'https://api.releases.sh/v1/related/sources?source=string'{ "scope": "org", "items": [ { "id": "string", "slug": "string", "name": "string", "type": "string", "url": "string", "score": 0, "orgSlug": "string", "orgName": "string", "orgAvatarUrl": "string", "releaseCount": 0, "latestDate": "string", "latestTitle": "string", "latestVersion": "string", "recentCount": 0 } ]}