API: liveVersion: v1 · 2026-04Median latency: 142 ms
Pitchwire/Developers
Developer documentation · REST + MCP

Pitchwire API & MCP. One REST endpoint, one MCP server, the same editorial pipeline.

Submit press releases programmatically from any application, script, or AI agent. Every submission gets AI editorial polish, editorial review, and multi-channel distribution — the same pipeline as the web UI.

01 — Quickstart

Send your first release in 60 seconds

  1. Generate an API key in Settings → API Keys.
  2. Purchase credits (each submission consumes one paid release).
  3. Submit your first release:
curl
curl -X POST https://pitchwire.ai/api/v1/releases \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Acme Corp Launches AI-Powered Widget",
    "body": "SAN FRANCISCO -- Acme Corp today announced the launch of its new AI-powered widget, designed to streamline enterprise workflows and reduce operational costs by up to 40 percent.",
    "plan": "starter"
  }'
02 — Authentication

Bearer tokens, no cookies

All API requests require a Bearer token in the Authorization header. Generate your key at /settings/api-keys.

Authorization: Bearer pk_a1b2c3d4e5f6...

Keep your API key secret. Do not expose it in client-side code or public repositories.

03 — Submit

Submit a release

POST /api/v1/releases

Submit a press release for AI editorial polish and review. Deducts one paid release credit. Returns the editorial score, status, and generated content (social posts, email subject).

Request body

FieldTypeRequiredDescription
titlestringYesPress release headline
bodystringYesFull body text (min 50 characters)
datelinestringNoe.g. "NEW YORK, April 14, 2026". Auto-generated if omitted.
boilerplatestringNoCompany about section
contact_namestringNoMedia contact name
contact_emailstringNoMedia contact email
contact_phonestringNoMedia contact phone
planstringNoDistribution plan: "starter", "standard", or "premium"
polishbooleanNoRun AI editorial polish before review (default: true)
idempotency_keystringNoPrevents duplicate submissions on retry
webhook_urlstringNoURL to POST status updates to when editorial review completes

Response (201 Created)

JSON
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "approved",
  "editorial_score": 87,
  "editorial_summary": "Strong AP-style release with clear news hook.",
  "editorial_issues": [],
  "content": {
    "social_posts": {
      "linkedin": "Excited to announce...",
      "twitter": "Breaking: Acme Corp launches..."
    },
    "email_subject": "Acme Corp Launches AI-Powered Widget"
  },
  "plan": "starter",
  "credits_remaining": 4,
  "newsroom_url": null,
  "created_at": "2026-04-14T15:30:00.000Z"
}

Python example

Python
import requests

response = requests.post(
    "https://pitchwire.ai/api/v1/releases",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "title": "Acme Corp Launches AI-Powered Widget",
        "body": "SAN FRANCISCO -- Acme Corp today announced...",
        "dateline": "SAN FRANCISCO, April 14, 2026",
        "boilerplate": "About Acme Corp: ...",
        "contact_name": "Jane Doe",
        "contact_email": "jane@acme.com",
        "plan": "starter",
    },
)

release = response.json()
print(f"Release {release['id']} — score: {release['editorial_score']}")
04 — Retrieve

Check status

GET /api/v1/releases/:id

Get full details of a release including editorial score, issues, distribution logs, generated content, and newsroom URL.

curl
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://pitchwire.ai/api/v1/releases/550e8400-e29b-41d4-a716-446655440000
05 — List

List releases

GET /api/v1/releases

List all your releases with status, editorial scores, and newsroom URLs.

curl
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://pitchwire.ai/api/v1/releases
05a — OpenAPI

Machine-readable spec

GET /api/v1/openapi.json

The full REST API is described in OpenAPI 3.1 at /api/v1/openapi.json. Drop it into Postman, Stoplight, or any OpenAPI-aware client generator.

06 — MCP

MCP for AI agents

Connect Pitchwire to any MCP-compatible AI agent (Claude Desktop, Cursor, ChatGPT, VS Code Copilot) for programmatic press release submission. The MCP server exposes the same tools as the REST API.

Connect

The Pitchwire MCP server is an HTTP endpoint at https://api.pitchwire.ai/mcp. Add it to your MCP client's config file using the snippet for your client below.

Claude Desktop — ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "pitchwire": {
      "url": "https://api.pitchwire.ai/mcp",
      "headers": {
        "Authorization": "Bearer pw_live_..."
      }
    }
  }
}
Cursor — ~/.cursor/mcp.json
{
  "mcpServers": {
    "pitchwire": {
      "url": "https://api.pitchwire.ai/mcp",
      "headers": {
        "Authorization": "Bearer pw_live_..."
      }
    }
  }
}
Claude Code CLI
claude mcp add pitchwire https://api.pitchwire.ai/mcp \
  --transport http \
  --header "Authorization: Bearer pw_live_..."

Replace pw_live_... with the API key you generated in Settings → API keys. Restart your client after editing the config.

Available tools

ToolDescription
get_accountCheck credits balance, company, available plans, and Stripe checkout URL before submitting.
submit_releaseSubmit a press release with AI polish + editorial review. Deducts one credit. Returns 402 with checkout URL when credits are exhausted.
get_releaseGet release details, editorial score, distribution logs.
list_releasesList all your releases with status.
edit_releaseEdit a release (title, body, dateline, boilerplate, contacts, plan). Resets needs_revision → draft. 409 if already published.
publish_releasePublish an approved release to your branded newsroom. Returns the canonical newsroom URL.
distribute_releaseDistribute a published release across wire (ein_presswire) and digital (email, linkedin, x) channels.
07 — Webhooks

Async release events

Pass a webhook_urlwhen submitting a release to receive a POST callback when editorial review completes. Useful for async workflows where you don't want to poll.

Request
{
  "title": "...",
  "body": "...",
  "webhook_url": "https://your-app.com/hooks/pitchwire"
}

Webhook payload

POST to your webhook_url
{
  "event": "release.reviewed",
  "release_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "approved",
  "editorial_score": 87,
  "editorial_summary": "Strong AP-style release.",
  "credits_remaining": 4,
  "timestamp": "2026-04-14T15:30:05.000Z"
}

Webhook delivery is best-effort with 3 retries. If your endpoint returns a non-2xx status, we retry after 10s, 60s, and 300s.

Verifying the signature

Every webhook includes an X-Pitchwire-Signature header of the form sha256=<hex>. Compute HMAC-SHA256 of the raw request body using your webhook secret and compare in constant time.

Python verification
import hmac, hashlib

def verify(raw_body: bytes, header: str, secret: str) -> bool:
    expected = "sha256=" + hmac.new(
        secret.encode(), raw_body, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, header)
08 — Embed

Drop-in release widget

Drop your latest published releases onto any website with a single script tag. The widget is read-only and uses your API key as a read token.

HTML
<div id="pitchwire-releases"></div>
<script src="https://pitchwire.ai/api/v1/embed?key=YOUR_API_KEY"></script>
09 — Errors

HTTP status codes

StatusMeaningResolution
401Invalid or missing API keyCheck your Bearer token
402No paid releases remainingPurchase credits at /pricing
422Validation errorCheck required fields (title, body min 50 chars)
429Rate limit exceeded (10 POST / 120 GET per minute per API key)Honor Retry-After header and back off
500Server errorContact support@pitchwire.ai

Ready to integrate?

Generate your API key and submit your first release in under a minute.