Documentation

Sources

A source is one publication: a show, a newsletter, a blog. One publication of one type, with one identity, however many technical feeds sit behind it.

curl -H "Authorization: Bearer $SPUTNIK_TOKEN" \
  "https://sputnikintelligence.com/api/v1/sources?q=acquired"

What we say about a publication

Alongside the facts — name, type, homepage, post count — three fields are our judgment:

FieldMeans
authority_scoreHow much weight it carries in its space. Useful for ranking a coverage report, so a mention on a show with real reach does not sit level with one on a blog nobody reads.
livenessactive, dormant, dead, broken or pending. Whether it is still publishing.
content_depthHow substantial its posts are — a link-roundup newsletter and a 4,000-word essay are different things to be mentioned in.

These are our assessment, not the publication's. They are why a corpus this size stays usable: without them, every list is dominated by whoever publishes most often.

Reading liveness

  • active — publishing on schedule.
  • dormant — quiet lately, but not obviously finished. Plenty of good newsletters go quiet for a month.
  • dead — stopped. Excluded from results unless you ask for it.
  • broken — its feed stopped working. A technical problem, not an editorial one; we retry these.
  • pending — just added, not yet assessed.

Type versus platform

These are independent, and confusing them is the most common filtering mistake:

  • source_type — what it is: podcast, newsletter, blog.
  • publishing_platform — where it is hosted: substack, beehiiv, rss, bluesky, email.

A Substack-hosted podcast is source_type=podcast and publishing_platform=substack. Filtering on the platform when you meant the format is how you end up wondering where all the podcasts went.

What a source detail adds

GET /sources/{source} adds what the publication has been covering lately, and which brands have advertised on it. Both come from its recent posts, so both are empty for a publication we have only just started watching.

For its posts, use GET /posts?source=<slug> — that is paged, where embedding them in the detail response would not be.