Pingr API · V1
Pricing Dashboard Get a key →
PINGR DEVELOPER API · V1

Build on the signal.

The same SEC insider trading intelligence that powers the Pingr dashboard — exposed as a clean REST API. Plug it into your bots, dashboards, trading systems, newsletters. Read-only. JSON. Versioned.

60-second quickstart.

Three steps. One curl. You're live.

1. Generate a key

Scroll to your key workspace below and hit + Test Key. Test keys are free on every tier — use one to explore before committing.

2. Make your first call

Bash
# Replace with your actual key
curl https://pingr-signup-api.onrender.com/api/v1/ping \\
  -H "X-API-Key: pgr_test_YOUR_KEY_HERE"

3. You'll get back

JSON
{
  "data": {
    "pong": true,
    "mode": "test",
    "tier": "investor",
    "test_mode": true,
    "server_time": "2026-04-18T15:22:01Z"
  },
  "meta": { "version": "v1" },
  "error": null
}

That's it. You've authenticated, hit a live endpoint, and seen the response envelope. Now go build something.

Authentication.

Every request needs an API key. Generated in your account settings. Sent as a header. That's the whole system.

Two kinds of keys

pgr_live_ keys hit production data. Available on Pro (60 req/hr) and Investor (1,000 req/hr). Pro sees the live feed; Investor sees the feed plus every intelligence engine.

pgr_test_ keys return deterministic mock data. Free on every tier. Same 1,000/hr quota. Use them while you're building — your bot can parse real-shaped responses without burning live quota or polluting your analytics.

Two ways to send them

Preferred
X-API-Key: pgr_live_abc123...
Also works
Authorization: Bearer pgr_live_abc123...
Guard the raw key. We only show it once at generation, then we keep a hash. If you lose it, you generate a new one — we can't recover the original. Don't commit it to git. Use environment variables or a secrets manager.

Your workspace.

Generate a key. Use it. Revoke it. All without leaving the docs.

DEVELOPER API
Keys under your name.

Test keys are free on every tier — use one to explore before you ship. Live keys are Investor-only and hit production data at full rate.

Booting workspace…
Checking your session and pulling your keys from the vault.

Test Mode.

Build your integration against realistic mock data before you touch production. Same endpoints, same response shapes, but the data is deterministic and free.

Use a pgr_test_ key and every endpoint returns mock data that looks like the real thing — famous tickers (NVDA, AAPL, TSLA), plausible insiders, realistic category distributions, live P&L on holdings, frozen ROI on sold trades. The same query with the same test key will always return the same data, which means you can write tests that don't flake.

Ready for production? Swap your test key for a live key. Nothing else changes.

Response Shape.

Every response. Every endpoint. Same shape.

Success
{
  "data": // array or object, never null on success
  "meta": {
    "count":     50,
    "total":     437,
    "has_more":  true,
    "test_mode": false
  },
  "error": null
}
Error
{
  "data": null,
  "meta": {},
  "error": {
    "code":    "invalid_param",
    "message": "limit must be an integer",
    "hint":    "Use ?limit=50 (default). Max 200."
  }
}

Every error has a code you can branch on, a message you can show users, and a hint that tells you how to fix it.

Plans & Access.

Three tiers. Same shape of data. Different scope and volume.

FREE
Test Only
$0 · Test keys only
1,000 / hrmock data
Every endpoint, test mode
Realistic mock data (NVDA, AAPL, TSLA…)
Deterministic — same query, same answer
Real SEC data
PRO · SAMPLER
The Live Feed
$15 / month
60 / hrlive data
Real-time /signals feed
Single-signal drill-down via /signals/{id}
Full 29-field signal shape · AI summary · live P&L
Sector aggregates
Insider profiles & leaderboard
Intelligence engines (Graveyard, Whales, Exits)
INVESTOR · FULL
Everything.
$49 / month
1,000 / hrlive data
Everything in Pro
/sectors — capital flow by industry
/insiders/{name} — full profiles
/insiders/leaderboard — 4 sort modes
/intelligence/exits — curated insider sales
/intelligence/graveyard & /intelligence/beached-whales
16× the hourly volume

Endpoint access

Endpoint FREE PRO INVESTOR
GET /ping TEST
GET /signals TEST
GET /signals/{id} TEST
GET /sectors TEST
GET /insiders/{name} TEST
GET /insiders/leaderboard TEST
GET /intelligence/exits TEST
GET /intelligence/convergence TEST
GET /intelligence/graveyard TEST
GET /intelligence/beached-whales TEST
GET /intelligence/10b5-1-breaks TEST
GET /insiders/{name}/trades TEST
GET /tickers/{ticker}/insider-activity TEST
Rate limit headers. Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. If you hit the ceiling, you'll get a 429 with a Retry-After header. Just wait and try again.

Inside a Signal.

Every signal is a single JSON object with 29 fields — grouped below by purpose. Same shape on every endpoint, test or live, Pro or Investor.

Identity
Who, what, where.
  • tickerstr
  • companystr
  • insider_namestr
  • rolestr
  • sectorstr
  • idint
Money
The trade itself — dollars and shares.
  • pricefloat
  • shares_boughtint
  • total_valuefloat
  • pct_increasefloat
Timing
Bought when, filed when, how late.
  • transaction_datedate
  • filing_datedate
  • filing_lag_daysint
Conviction
Pingr Magnum Engine classification.
  • categorystr
  • score0–99
  • ai_summarystr
Live P&L · holding
Populated only when the position is still open.
  • current_pricefloat
  • current_pnl_pctfloat
  • peak_pnl_pctfloat
Frozen ROI · closed
Populated only when the position is sold or partial.
  • soldbool
  • is_partialbool
  • pct_soldfloat
  • roifloat
  • sale_datedate
Context flags
Scoring inputs that matter for edge cases.
  • is_10b5_planbool
  • has_derivativesbool
  • is_foreignbool
Links & attribution
Source filing + pre-built broker deep-links.
  • filing_urlurl
  • broker_linksobject

Holding vs closed — only one state is populated at a time.

◈ Still holding
Insider hasn't sold. Live mark-to-market.
sold = false
current_price, current_pnl_pct, peak_pnl_pct → live
roi, sale_date → null / empty
◆ Sold (full or partial)
Position closed. ROI is frozen at the exit.
sold or is_partial = true
roi, sale_date, pct_sold → populated
current_pnl_pct, peak_pnl_pct → null
The signal shape is identical on Pro and Investor. Same 29 fields, same AI synthesis, same live P&L. The tier difference is volume (60/hr vs 1,000/hr) and scope — Pro gets the live feed, Investor gets the feed plus every intelligence engine.

Error Codes.

CodeStatusMeaning
missing_api_key401No X-API-Key header.
invalid_api_key401Key doesn't match or was revoked.
tier_required403Your tier can't access this endpoint.
rate_limit_exceeded429You've used your hour's quota.
invalid_param400One of your query params is malformed.
not_found404The requested resource doesn't exist.
database_unavailable503Transient — retry in a few seconds.
internal_error500Something broke on our end. Please report.

GET /ping

GET /api/v1/ping INVESTOR + PRO
Confirms your key works. Returns your current tier, mode, and the server time. Use this as a health check in your app.
Example
curl https://pingr-signup-api.onrender.com/api/v1/ping \\
  -H "X-API-Key: pgr_live_..."

GET /signals

GET /api/v1/signals INVESTOR + PRO
The workhorse. The same trade feed you see on the Pingr dashboard. Filter by category, score, ticker, insider, date range. Returns newest first.
ParamTypeDescription
categorystringOne or more: golden, cluster, whale, penny, basic. Comma-separated or repeated.
min_scoreintMinimum conviction score (0–100).
tickerstringExact ticker match (case-insensitive).
insiderstringSubstring match on insider name.
sinceISO dateReturn signals filed on or after this date.
beforeISO dateReturn signals filed before this date.
limitintMax results per page. Default 50, max 200.
Example
curl "https://pingr-signup-api.onrender.com/api/v1/signals?category=golden&min_score=90&limit=10" \\
  -H "X-API-Key: pgr_live_..."
Response · single signal
{
  "id":               204512,
  "ticker":           "NVDA",
  "company":          "NVIDIA Corporation",
  "insider_name":     "Jensen Huang",
  "role":             "CEO",
  "category":         "Golden",
  "score":            96,
  "price":            135.82,
  "shares_bought":    50000,
  "total_value":      6791000.00,
  "filing_date":      "2026-04-15",
  "transaction_date": "2026-04-14",
  "filing_lag_days":  1,
  "pct_increase":     42.3,
  "is_10b5_plan":     false,
  "has_derivatives":  false,
  "is_foreign":       false,
  "sector":           "Technology",
  "sold":             false,
  "is_partial":       false,
  "pct_sold":         0.0,
  "roi":              null,
  "sale_date":        "",
  "current_price":    148.30,
  "current_pnl_pct":  9.19,
  "peak_pnl_pct":     12.4,
  "ai_summary":       "CEO Jensen Huang purchased $6.8M of NVDA...",
  "filing_url":       "https://www.sec.gov/...",
  "broker_links": {
    "etoro":      "https://www.etoro.com/markets/nvda",
    "ibkr":       "https://...",
    "trading212": "https://...",
    "robinhood":  "https://..."
  }
}
Sold vs holding. If sold or is_partial is true, roi is populated and current_pnl_pct is null — the position has been closed, ROI is frozen. Otherwise roi is null and current_pnl_pct reflects live market value vs entry.

GET /signals/{id}

GET /api/v1/signals/{id} INVESTOR + PRO
Fetch a single signal by its numeric id. Useful for webhook-style flows where you got notified of an id and want the full context.
curl https://pingr-signup-api.onrender.com/api/v1/signals/204512 \\
  -H "X-API-Key: pgr_live_..."

GET /insiders/{name}

GET /api/v1/insiders/{name} INVESTOR
An insider's full profile: trades history, win rate, avg return, capital deployed, top tickers, best and worst trades. URL-encode the name if it has spaces.
curl "https://pingr-signup-api.onrender.com/api/v1/insiders/Jensen%20Huang" \\
  -H "X-API-Key: pgr_live_..."

GET /insiders/leaderboard

GET /api/v1/insiders/leaderboard INVESTOR
Ranked list of insiders. Four sort modes. Same data that powers the Pingr dashboard leaderboard.
ParamTypeDescription
sortstringavg_return (default), win_rate, capital, speed.
limitint1–100, default 50.
min_tradesintExclude insiders with fewer than this many trades. Default 3.
curl "https://pingr-signup-api.onrender.com/api/v1/insiders/leaderboard?sort=win_rate&limit=25" \\
  -H "X-API-Key: pgr_live_..."

GET /insiders/{name}/trades

GET /api/v1/insiders/{name}/trades PRO + INVESTOR
Every Form 4 filing by a specific insider, sorted by filing date descending. The natural companion to /insiders/{name} — that one gives you the summary, this one gives you the full trade history, paginated. Case-insensitive substring match on the name.
ParamTypeDescription
limitint1–100, default 25.
offsetintPagination offset, default 0.
curl "https://pingr-signup-api.onrender.com/api/v1/insiders/Jensen%20Huang/trades?limit=50" \\
  -H "X-API-Key: pgr_live_..."
Pagination. Response meta includes total — the full count matching the insider across the entire dataset. Use offset to walk pages when total > limit.

GET /tickers/{ticker}/insider-activity

GET /api/v1/tickers/{ticker}/insider-activity PRO + INVESTOR
Every insider filing on a specific ticker, sorted by filing date descending. Same shape as /insiders/{name}/trades but indexed the other way. Useful for deep-diving a single ticker's insider flow.
ParamTypeDescription
limitint1–100, default 25.
offsetintPagination offset, default 0.
sinceISO dateOptional. Only filings on or after this date (YYYY-MM-DD).
curl "https://pingr-signup-api.onrender.com/api/v1/tickers/NVDA/insider-activity?since=2026-01-01" \\
  -H "X-API-Key: pgr_live_..."

GET /sectors

GET /api/v1/sectors INVESTOR
Sector-level aggregates: capital deployed, distinct insider count, top 5 tickers per sector. Built for sector-rotation strategies.
ParamTypeDescription
periodstring7d, 30d (default), 90d, 1y.
curl "https://pingr-signup-api.onrender.com/api/v1/sectors?period=90d" \\
  -H "X-API-Key: pgr_live_..."

GET /intelligence/exits

GET /api/v1/intelligence/exits INVESTOR
Curated insider sales. Pingr filters out the 95% that's noise — routine diversification, vesting cashouts, 10b5-1 plans — and surfaces only the five patterns that actually mean something: marquee CEO dumps, cluster exits, post-rally sell-offs, oversized sales, pre-earnings moves. Each row carries its trigger tag, a severity band, and a one-line Pingr interpretation.

GET /intelligence/convergence

GET /api/v1/intelligence/convergence INVESTOR
Multi-signal stacking. Detects tickers where three or more distinct Pingr signal types — Cluster, Golden, Accumulation, Whale, Sector Surge — fire in the same 30-day window. One trade is noise. Three stacked on the same ticker is a thesis. Each event returns: type_count, types array, total capital deployed, insider count, window dates, severity band (EXTREME / STRONG / NOTABLE), and a one-line Pingr interpretation.
curl "https://pingr-signup-api.onrender.com/api/v1/intelligence/convergence" \\
  -H "X-API-Key: pgr_live_..."

GET /intelligence/graveyard

GET /api/v1/intelligence/graveyard INVESTOR
Stocks where insiders have exited heavily. Each entry: ticker, exit count, total value sold, latest exit date, avg ROI at exit. A signal to pay attention — insiders are leaving.

GET /intelligence/beached-whales

GET /api/v1/intelligence/beached-whales INVESTOR
Large insider trades ($500K+) currently down 30% or more from entry. Could be a thesis-break, could be a bargain — you decide.

GET /intelligence/10b5-1-breaks

GET /api/v1/intelligence/10b5-1-breaks INVESTOR
Plan-break events. Detects insiders who traded exclusively under 10b5-1 plans for the prior 12 months, then suddenly filed a non-plan transaction. This is the textbook "opportunistic inflection" signal from Cohen-Malloy-Pomorski (Journal of Finance, 2012) — arguably the strongest single-signal alpha available on public Form 4 data. Each event returns the trigger trade, the prior-plan streak count, the plan window, and a severity band.
curl "https://pingr-signup-api.onrender.com/api/v1/intelligence/10b5-1-breaks" \\
  -H "X-API-Key: pgr_live_..."
Why this matters. When an executive has been trading mechanically under a scheduled plan for a year — and then breaks that pattern to trade on their own discretion — that non-plan transaction is statistically more predictive than a plan-bound trade by a wide margin. It's the purest signal that the insider actively chose to act.
Built by founders, for builders. Questions? support@pingr.app