# API
Pay-as-you-go REST API for source profiles, ticker consensus, and public dispatches. Charged per call against your credit balance.
# Authentication
Generate a key at /settings/api-keys. Pass it as a bearer token:
Authorization: Bearer mj_live_…
Keys are shown once at creation — store them somewhere safe. Revoke any time from settings.
# Pricing
- GET /sources/:handle — 1 credit
- GET /positions/:ticker — 1 credit
- GET /dispatches/:id — 5 credits
Credits debit from the key owner's balance. If you hit zero you'll get 402 Insufficient credits. Errors charged at the same rate as successes — we don't retry on your behalf.
# Endpoints
Analyst profile for a tracked source: tracked positions with stance, since, optional note. Handle is the X/Twitter handle without the @.
curl https://www.myjunto.xyz/api/public/v1/sources/crypto_condom \ -H "Authorization: Bearer mj_live_…"
{
"handle": "crypto_condom",
"display_name": "CryptoCondom",
"avatar_url": "…",
"summary": "Contrarian deep-dive analyst…",
"positions": {
"BB": { "stance": "bullish", "since": "2026-05-09", "note": "generational make-it trade" },
"LPTH": { "stance": "bullish", "since": "2026-04-24" }
},
"updated_at": "2026-05-26T19:30:00Z"
}Cross-source consensus on a ticker: every analyst with a tracked stance, plus aggregate counts.
curl https://www.myjunto.xyz/api/public/v1/positions/BB \ -H "Authorization: Bearer mj_live_…"
{
"ticker": "BB",
"source_count": 4,
"counts": { "bullish": 3, "neutral": 1 },
"sources": [
{ "handle": "crypto_condom", "stance": "bullish", "since": "2026-05-09" },
…
]
}Full content of a single public dispatch (newsletter run). Returns 404 for private dispatches.
curl https://www.myjunto.xyz/api/public/v1/dispatches/<run_id> \ -H "Authorization: Bearer mj_live_…"
{
"id": "…",
"newsletter_id": "…",
"newsletter_name": "Crypto Daily Brief",
"subject": "Tuesday brief — rotation building",
"content": "# …",
"created_at": "2026-05-26T14:00:00Z"
}# Errors
- 401 — missing, malformed, or revoked key
- 402 — insufficient credit balance
- 404 — resource not found or not public
- 500 — internal error; credit still debited, contact support if persistent