Every module. Over REST, MCP, and the CLI.
PRAPI is API-first by design. The dashboard is one client of the backend; the REST API, the MCP server, and the CLI are equal citizens — same scoring engine, same brief.md merge, same voice validator. Build a pipeline, wire your editor, or hand the whole thing to an AI agent.
One backend. Four ways in.
Pick the surface that fits the job. They share the same data, the same auth, and the same engine — a draft you make over the API shows up in the dashboard, and vice versa.
Bearer-authed endpoints at app.prapi.dev/api/v1. 200+ routes across every module. JSON in, JSON out — build whatever pipeline fits.
220+ tools over JSON-RPC. Entra session or bearer key. Drop PRAPI into Claude Code, Cursor, or ChatGPT as first-class tools.
A single binary across 29 command groups, a thin client over /api/v1. Pipes to jq and your scripts.
Install the CLI →The PRAPI Agent drives the engine for you — prepare-and-surface, never send. Reachable on all of the above.
Meet the agent →200+ endpoints, every resource group.
Base URL https://app.prapi.dev/api/v1. Bearer auth on every route, scoped to your own workspace.
Browse them in the interactive API reference, or pull the OpenAPI 3.1 spec. Both are generated from the route schemas, so they never drift from what the API actually does.
PR-Pitch
pitches, drafts, briefs, logged-pitches — list the queue, score, draft, polish, send, record outcomes.
Editorial Calendar
calendar, content — strategy, slots, cadence, generate drafts, publish, engagement.
Outbound
outbound, outlets, backlinks — prospects, sequences, touches, the reply inbox, outlet diligence.
Assets
assets — versioned brand assets, visibility, restore, public press-kit.
Directory
directory — the public, consent-based brand-source directory (also a no-auth MCP + OpenAPI).
Research
research, submissions, source-research — briefs, contributors, reports, citations, cycles.
Agent
agent — the PRAPI Agent: a prepare-and-surface chat turn + the orchestration queue.
AEO / AIO
aeo-experiments, aio — citation snapshots and AI-Overview content briefs.
Portfolio
portfolio — cross-module compounding signals and the unified activity stream.
Account
api-keys, whoami, account, notifications, onboarding — keys, identity, sender setup.
One bearer key, every surface.
The same prapi_<key> authenticates the REST API, the MCP server, and the CLI. Keys are self-serve: create from the dashboard or the API, and revoke any time. The web app uses your Entra session; the public Directory MCP needs no auth.
# Create a key (or use the dashboard: Settings → API keys)
curl -X POST https://app.prapi.dev/api/v1/api-keys \
-H "Authorization: Bearer $EXISTING_KEY" -d '{"label":"ci"}'
→ { "id": "...", "key": "prapi_...", "shownOnce": true }
# Confirm who the key is
curl https://app.prapi.dev/api/v1/whoami -H "Authorization: Bearer $PRAPI_KEY"
# Revoke it
curl -X DELETE https://app.prapi.dev/api/v1/api-keys/$KEY_ID \
-H "Authorization: Bearer $PRAPI_KEY"Hand PRAPI to your AI assistant.
Two MCP servers. The PR-Pitch server exposes 220+ tools over JSON-RPC for everything the API does. The Directory server is public and unauthenticated, for AI agents looking up brand sources.
220+ tools at /api/pr-pitch/mcp. Accepts your Entra session or a bearer key. Same coverage as the REST API — pitches, calendar, content, outbound, assets, research, the agent.
Four public tools — search_sources, verify_source, get_brand_profile, get_brand_coverage — at /api/directory/mcp. No auth, rate-limited, with a schema-derived OpenAPI document at /api/v1/directory/openapi.json.
Browse the directory API →Queue to sent, no dashboard.
The core PR-Pitch loop over REST. Every step has an MCP-tool and CLI equivalent.
# 1. List today's scored pitch queue
curl "https://app.prapi.dev/api/v1/pitches?sinceHours=72&minScore=40" \
-H "Authorization: Bearer $PRAPI_KEY" | jq '.items[].queryId'
# 2. Draft one in a brand's voice (docks for review)
curl -X POST https://app.prapi.dev/api/v1/pitches/$QUERY_ID/drafts \
-H "Authorization: Bearer $PRAPI_KEY" \
-H "Content-Type: application/json" -d '{"brandId":"'$BRAND_ID'"}'
# 3. Send it — from your own sender, replies attributed back
curl -X POST https://app.prapi.dev/api/v1/drafts/$DRAFT_ID/send \
-H "Authorization: Bearer $PRAPI_KEY" -d '{}'
→ { "ok": true, "messageId": "...", "sentAt": "..." }
# Same loop, two other ways:
prapi pitches list --since-hours 72 --min-score 40
mcp call list_pitches { "since_hours": 72, "min_score": 40 }The send endpoint refuses an already-sent draft, requires the per-draft attribution URL in the body, and respects the 14-day trial gate — the same rules the dashboard enforces.
Is PRAPI’s API a bolt-on, or first-class?
First-class. The web app is just one client of the same backend. Every module ships a REST API, an MCP server, and a CLI alongside the dashboard — same scoring engine, same brief.md merge, same voice validator. If a capability is hard to expose over the API, we treat that as a design smell.
How do I authenticate?
A bearer API key: Authorization: Bearer prapi_<key>. The same key works across the REST API, the PR-Pitch MCP server, and the CLI. The web app uses your Entra session instead; the public Directory MCP needs no auth at all.
How do I get and manage API keys?
Self-serve. Create one from the dashboard (Settings → API keys) or POST /api/v1/api-keys; list them with GET, and revoke with DELETE /api/v1/api-keys/{id}. The plaintext key is shown once on creation — save it then.
What can I do over the API?
Essentially everything the dashboard does: 200+ REST endpoints across 25+ resource groups — pitches, drafts, briefs, calendar, content, outbound, assets, directory, research, portfolio, the agent, and account/keys.
Can my AI assistant drive PRAPI?
Yes. The PR-Pitch MCP server exposes 220+ tools over JSON-RPC and accepts your Entra session or a bearer key — drop it into Claude Code, Cursor, or ChatGPT. The public Directory MCP exposes four read tools (search_sources, verify_source, get_brand_profile, get_brand_coverage) with no auth, plus an OpenAPI document.
Is there a CLI?
Yes — a single binary (no Node install) across 29 command groups, a thin client over the same /api/v1 endpoints. See prapi.dev/cli.
Get a key, hit an endpoint.
Sign in once via Entra to bootstrap your workspace, mint an API key from settings, and you never need the dashboard again. The CLI and MCP server use the same key.