1. Research with retained sources
Stories start from hosted web search over your city and region. The citations and page text are retained, not summarized away — every claim can be traced to a real page.
Every published Local Desk edition carries an evidence passport: the verified stories with their retained sources, the independent verification record, the automated QA verdict, the delivery outcome and the audit trail — all sealed with a hash. This page is the tool that recomputes that hash in your browser. No login, no server trust, no "take our word for it".
Paste a run ID (from an edition page or a published reel's "Sources and credits" link) and the verifier fetches that edition's public passport, recomputes its seal locally with the Web Crypto API, and compares it to the seal the service shipped. Green means the bytes you received are byte-for-byte what the service sealed at read time — any tamper in transit or storage breaks it. Red means do not trust the copy.
The standard
Stories start from hosted web search over your city and region. The citations and page text are retained, not summarized away — every claim can be traced to a real page.
A separate pass checks facts, dates and local relevance against the configured geography, radius and source restrictions. Quotes are checked against independently retained page text. Unverified claims are discarded, not guessed.
A human approves the exact copy before production. The desk produces; the newsroom remains the publisher of record.
Automated quality checks run on the final file: narration, visual composition, captions. A failed verdict blocks publication and re-runs; it never publishes a best guess.
At read time the service assembles the passport — verified stories, quality verdicts, avatar origin, delivery links, audit journal head — and seals it with a SHA-256 over the exact bytes served. The JSON is at /editions/<run_id>/passport.json.
Every operator action lands in an append-only journal where each entry carries the hash of the one before it. Editing history breaks the chain. manage.py verify-audit recomputes it end to end.
Other platforms rent quality from vendors per render. Local Desk runs verification-grade production on its own GPU: an on-demand instance that cold-starts for the daily run and stops when idle.
| Per 60-second edition | Vendor- rented | Local Desk self-hosted |
|---|---|---|
| Avatar render | $3.60 | ~$0.79 GPU time |
| Research & verification | API pass-through | API pass-through |
| Provenance & QA | Usually none | Included |
| Evidence passport | Not offered | Public, machine-verifiable |
Savings compound: ~$0.79 vs ~$3.60 per edition is 5 editions a day, 30 days — roughly $495/month kept without cutting a single quality gate. The GPU starts on demand and stops when idle, so quiet newsrooms pay for minutes, not months.
If you publish with Local Desk, your audience gets the receipts, not just the reel: the reel's caption links to your public edition page, the edition page carries the verification record, and the machine-readable passport is there for any auditor, aggregator or agent. If a competitor can't hand you that, ask them why.
For agents and machines
Every endpoint is public, cached and stable. Consume it, cite it, or audit it — no account required:
| Surface | Endpoint | What it returns |
|---|---|---|
| Verify tool | GET /verify.py | One-command Python verifier: recomputes the seal and extracts the RFC 3161 timestamp token (python verify.py <run_id>) |
| Per-story facts | GET /editions/<run_id>/facts | Every verified story with its citation chain, source domain and verification state |
| Evidence passport | GET /editions/<run_id>/passport.json | Stories, QA verdicts, presenter, delivery links, audit-chain position, the RFC 3161 timestamp token — cost fields redacted |
| Directory | GET /bulletins | Every bulletin with its latest verified edition, source ledger and Atom feed |
| Badge network registry | GET /registry.json | Machine-readable directory of enabled newsrooms, bulletins, feeds and source ledgers |
| Source ledger | GET /newsroom/<org_id>/sources.json | 30-day accepted vs. rejected story counts and rejection reasons by domain (optional ?city=) |
| Facts archive | GET /archive · GET /api/facts/archive | Cross-edition verified local facts corpus with retained evidence quotes and city/source filters |
| City feed | GET /feeds/<job_id>.xml | Atom feed of published editions, delivered automatically every day |
| Embed badge | <iframe src="/editions/<run_id>/verify-badge"> | Newsroom sites embed the live verification badge: edition facts, quality verdict, passport hash and the verify link |
Authenticated agents (MCP-compatible, org-scoped API keys) additionally get jobs_overview, recent_editions, verified_facts, passport, a cross-edition facts_archive that compounds daily, and rejected_candidates — the around-the-corners signal for what is trending locally. The timestamp token in each passport verifies offline: save the token from the passport JSON and run openssl ts -verify -data identity.json -in token.tsr -CAfile tsa.crt -partial_chain with freetsa.org's public tsa.crt. Agents can discover everything here through /llms.txt.