Files
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 05b99be6ec docs(transistor): thicken podcast hosting skill against current API research
Full skill-builder rebuild of transistor per issue #407:

- scripts/transistor (renamed from transistor-cli): 19 commands covering the
  verified API surface - user probe (GET /v1; the /v1/user route does not
  exist), shows/episodes with corrected pagination[page]/pagination[per],
  the dedicated episode publish endpoint (PATCH /v1/episodes/:id/publish
  with episode[status]=draft|scheduled|published), authorize-upload flow,
  the three real analytics routes with downloads[] array summing,
  subscriber management incl. batch, and webhooks. Write bodies are
  form-encoded bracket keys exactly as documented; dry-run plans carry
  method/path/params/body; publish guard refuses audio-less episodes.
  Fixed stale claims: /analytics/show -> /v1/analytics/..., totals ->
  downloads arrays, pagination[limit] -> pagination[per], user email ->
  name/time_zone, dropped invented episodes_count/subscribers_count and
  POST /v1/shows (show creation is dashboard-only).
- scripts/test_transistor.py: 50 offline tests (pytest + unittest green,
  proxy-trap clean) covering help, argument errors, dry-run plans, canned
  JSON:API compound-document parsing (data/attributes/relationships/
  included[]), write-path body shapes, publish guard, create->audio->
  publish pipeline, and HTTP error signatures.
- references/: auth+JSON:API envelope with jq patterns, endpoint catalog,
  publish lifecycle with documented request/response shapes, gotchas
  field guide + worked recipes; all cited to live-verified sources.
- evals/evals.json: 8 schema-v1 cases incl. two should-not-trigger probes.
- SKILL.md rewritten (308 lines), README refreshed, root README blurb and
  generated catalogs synced (marketplace.json + llms.txt descriptions).

Publish-body shape reconciliation: the contract's data.id+data.type JSON:API
PATCH premise was falsified by current official docs (verified 2026-08-29)
and the flimzy/transistor Go SDK; implemented reality escalated in handoff
(see library/transistor-api-facts.md).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-29 22:02:23 -04:00

66 lines
3.0 KiB
Markdown

# Transistor.fm — Podcast Hosting from the Terminal
Manage your Transistor.fm podcast account over its official API: browse
shows and episodes, publish episodes, pull download analytics, and run
private-podcast subscriber lists — all from the terminal.
## Why Install This Skill
When your agent loads this skill, it can **operate your Transistor.fm
podcast hosting** without the dashboard, including the part no other tool
gives an agent: the full episode publish lifecycle.
- **Publish episodes end to end** — create a draft, attach audio (URL or
authorized local-file upload), then publish or schedule it through
Transistor's dedicated publish endpoint
- **Browse your catalog** — shows, episodes, drafts, season/number
metadata, with JSON:API compound documents unwrapped for jq
- **Track downloads** — per-day analytics windows for shows and episodes,
summed and ready for reports
- **Run private podcasts** — list, add (single or batch), and revoke
subscribers; register webhooks so you push instead of poll
- **Stay under the rate limit** — dry-run request plans and clear 429
guidance (Transistor allows 10 requests per 10 seconds)
## What You Get
| Path | Purpose |
|------|---------|
| `SKILL.md` | Command reference, publish-lifecycle recipe, jq guidance, gotchas |
| `scripts/transistor` | Bundled Python CLI for the Transistor.fm v1 API (read + write commands) |
| `scripts/test_transistor.py` | Offline mocked test suite (canned JSON:API documents, zero network) |
| `references/auth-and-basics.md` | API-key auth, JSON:API envelope and jq patterns, pagination, errors |
| `references/endpoint-catalog.md` | Every endpoint's method, path, and parameters |
| `references/episode-publish-lifecycle.md` | Draft → audio → publish/schedule/unpublish, exact request shapes |
| `references/gotchas-and-recipes.md` | Symptom → cause → fix guide plus multi-step workflows |
## Quick Start
```bash
export TRANSISTOR_API_KEY="<API_KEY>" # Dashboard -> Account -> API Access
transistor user # verify the key
transistor shows # list your podcasts
transistor episodes --status draft # what is not out yet?
# Publish pipeline: create (draft) -> attach audio -> publish
EP=$(transistor episode-create --show <SHOW_ID> --title "Ep 12" \
--audio-url "https://example.com/ep12.mp3" --json | jq -r '.id')
transistor episode-publish --id "$EP"
```
`--help` and `--dry-run` work without an API key; preview any request with
`transistor --dry-run episode-publish --id 123`.
## Triggers
Load this skill when the user mentions Transistor or Transistor.fm, podcast
hosting, publishing a podcast episode, scheduling or unpublishing episodes,
podcast download analytics, or private podcast subscribers.
## Requirements
Python 3.8+ with `requests`, plus a Transistor.fm API key (Account page →
API Access). The key carries your dashboard role per podcast; treat it like
a password. No other services or credentials are involved.