YoloWire — File 003/APIv2025-10-14 · stableAuth: Bearer
The wire, programmatically

A small REST API
for a large network.

Stable since 2018

Submit a release, track placements, reconcile invoices. Eleven endpoints, a signed webhook stream and an OpenAPI 3.1 spec. Available on every plan, including Single.

Base · https://api.yolowire.app/v1
§ 01Quickstart — first placement in 90 secondsAPI·QS

Authenticate once.

All requests carry a bearer token in the Authorization header. Issue keys from your dashboard. Test keys are prefixed yw_test_; live keys are prefixed yw_live_.

Test keys route to a sandbox network of mirror outlets — no real placements, full webhook fidelity. New to wires? Start with what a newswire actually does.

curl https://api.yolowire.app/v1/releases \
  -H "Authorization: Bearer yw_live_••••••••" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 9c1b4e2a-1f6e-4a7d-9b30-71d2dd0e2b14" \
  -d '{
    "headline": "Acme raises $14M Series A to expand European operations",
    "dateline": "PARIS — October 14, 2026",
    "body_html": "<p>Acme today announced…</p>",
    "company": "Acme, Inc.",
    "contact": { "name": "J. Marais", "email": "press@acme.io" },
    "outlets": ["investing.com", "barchart.com", "theglobeandmail.com"],
    "embargo_until": null
  }'
§ 02AuthenticationAPI·AUTH

Bearer tokens

Tokens are 40 characters, prefixed yw_live_ or yw_test_. Rotate from the dashboard. Revocation is immediate; in-flight requests with a revoked key receive 401 token_revoked.

Scopes

  • releases:write — submit and update releases
  • releases:read — fetch a release and its placements
  • webhooks:manage — create and rotate webhook endpoints
  • network:read — list outlets and live pricing
§ 03Core endpointsAPI·EP
POST
/v1/releases
Submit a new release. Returns a release object in pending_review or scheduled. Supports Idempotency-Key.
GET
/v1/releases/{id}
Fetch a release with its current status and the placements observed so far.
GET
/v1/releases/{id}/placements
Paginated list of every outlet placement, with URL, timestamp and indexer status.
PATCH
/v1/releases/{id}
Edit a release before approval. After approval, edits create a corrected re-run on supported outlets.
POST
/v1/releases/{id}/cancel
Cancel a pending release. Refunds to balance if no outlet has accepted yet.
GET
/v1/outlets
List outlets in the network, with live pricing, vertical tags and acceptance rules.
POST
/v1/estimates
Price a release against a list of outlets before submission, with applied volume discounts.
POST
/v1/webhooks
Register a webhook endpoint. Returns a signing secret used to validate inbound events.
GET
/v1/webhooks/deliveries
Inspect the last 7 days of webhook deliveries with status codes and retry history.
GET
/v1/balance
Account balance and credit usage for the current billing period.
GET
/v1/invoices
Itemized invoices, downloadable as PDF or JSON, for accounting reconciliation.
§ 04Release objectAPI·OBJ
{
  "id": "rel_01HG7Q4XK8C8AN3M4M5J3T6Y2P",
  "object": "release",
  "status": "distributed",          // pending_review | scheduled | distributing | distributed | partially_distributed | rejected
  "headline": "Acme raises $14M Series A…",
  "company": "Acme, Inc.",
  "created_at": "2026-10-14T08:14:22Z",
  "approved_at": "2026-10-14T08:14:34Z",
  "distributed_at": "2026-10-14T08:26:04Z",
  "outlets_requested": ["investing.com","barchart.com","theglobeandmail.com"],
  "placements": [
    {
      "outlet": "investing.com",
      "url": "https://www.investing.com/news/stock-market-news/acme-raises-14m-3219412",
      "indexed_at": "2026-10-14T08:21:02Z",
      "indexed_in": ["google_news","gemini","gptbot"]
    }
  ],
  "amount_cents": 56000,
  "currency": "usd",
  "report_url": "https://api.yolowire.app/v1/releases/rel_01HG7Q4XK8C8AN3M4M5J3T6Y2P/report.pdf"
}
§ 05WebhooksAPI·HOOK

We push a signed event to your endpoint for every state change. Signatures are HMAC-SHA256 of the raw body using your endpoint's signing secret, sent as YoloWire-Signature: t=…,v1=…. Reject any request older than five minutes. Retries follow an exponential backoff up to 24 hours.

POST /your-endpoint
YoloWire-Signature: t=1760431592,v1=4f2c1d…

{
  "id": "evt_01HG7QH7M9C7N8R3P4P3R4R5S6",
  "type": "release.distributed",
  "created": 1760431592,
  "data": { "object": { /* release */ } }
}

Event types

  • release.created · release.approved · release.rejected
  • release.distributing · release.distributed · release.partially_distributed
  • placement.observed · placement.indexed · placement.lost
  • invoice.finalized · balance.low
§ 06Errors & rate limitsAPI·ERR

Error shape

{
  "error": {
    "type": "invalid_request_error",
    "code": "outlet_not_available",
    "message": "Outlet 'foo.com' is not in the network.",
    "param": "outlets[2]",
    "request_id": "req_8f3…"
  }
}

Limits

  • Default: 60 req/min, burst 120. Per-key.
  • Webhook delivery: up to 8 retries over 24h.
  • Idempotency keys retained for 24h; safe to retry on network errors.
  • Sandbox keys share quota with live keys.
§ 07SDKs & OpenAPIAPI·SDK
Node / TypeScript
npm i @yolowire/sdk
Python
pip install yolowire
OpenAPI 3.1
/v1/openapi.json

New to the wire? Read how distribution actually works behind the scenes, then create an account to mint your first test key.