EjectSeat API v1

Layoff risk data for your product

Structured risk scores, SEC 8-K events, WARN Act notices, private-company layoffs, voluntary buyouts and active-layoff feeds — all behind a single REST API. Built for recruiters, outplacement firms, HR-tech platforms and investor tools.

Where the data comes from

📄

SEC EDGAR

Form 8-K Item 2.05 filings — the legal disclosure companies must file when executing layoffs or plant closings.

📊

Earnings transcripts

NLP analysis of quarterly calls for restructuring language, headcount guidance and cost-action signals.

📰

Tier A/B media

Reuters, Bloomberg, WSJ, and other high-confidence outlets. Filtered for verified layoff events, not rumour.

⚖️

WARN Act filings

12 US state labor departments. Covers private companies that never file with the SEC.

🏢

Private companies and buyouts

Startup and private-company layoffs, voluntary buyouts and early-retirement offers, each verified against named sources.

Try it — live data, no key needed

This is a real response from the /api/v1/active endpoint. The preview shows the 3 most recent results; paid plans return up to 40.

GET/api/v1/active
Want the full dataset? Get an API key for up to 10,000 queries/day.

Simple pricing

No per-query surcharges. Every endpoint included in every tier.

Starter
$49/mo
  • 100 queries / day
  • 10 requests / minute burst
  • All 7 endpoints + webhooks
  • JSON responses
  • Email support
Get started

Quick start

Install the official SDK for your stack:

Node.js / TypeScript
npm install ejectseat

import EjectSeat from "ejectseat";

const client = new EjectSeat("es_YOUR_KEY");
const risk = await client.company("INTC");
console.log(risk.data.risk.state); // ACTIVE
Python
pip install ejectseat

from ejectseat import EjectSeat

client = EjectSeat("es_YOUR_KEY")
risk = client.company(ticker="INTC")
print(risk["data"]["risk"]["state"])  # ACTIVE

Or call the API directly with curl, fetch, or any HTTP client — see authentication below.

Authentication

Every request requires an API key sent as the X-API-Key header (recommended) or as the api_key query parameter.

cURL
curl -H "X-API-Key: es_YOUR_KEY" \
  https://ejectseat.io/api/v1/company?ticker=INTC
Python
import requests

resp = requests.get(
    "https://ejectseat.io/api/v1/company",
    params={"ticker": "INTC"},
    headers={"X-API-Key": "es_YOUR_KEY"},
)
data = resp.json()
print(data["data"]["risk"]["state"])  # ACTIVE
Node.js
const resp = await fetch(
  "https://ejectseat.io/api/v1/company?ticker=INTC",
  { headers: { "X-API-Key": "es_YOUR_KEY" } }
);
const { data } = await resp.json();
console.log(data.risk.state); // ACTIVE

Rate limits

Responses include X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers. When you exceed your daily quota, requests return 429 Too Many Requests with a Retry-After header.

Risk model

Every company is assigned a state and a score:

CLEARNo material layoff signals detected.
WATCHForward-looking indicators present — cost cuts, hiring freezes, or restructuring language in earnings calls.
LIKELYMultiple corroborating signals from independent sources.
ACTIVEConfirmed event or programme in motion — SEC filing, WARN notice, or verified media report.

The score (0–100) is a continuous measure within each state. The band (LOW / MEDIUM / HIGH) is a discretised risk tier. Pipeline version is v7.2 — updated scores are cached for 24–72 hours.

Endpoints

Base URL: https://ejectseat.io

GET/api/v1/company

Company risk lookup

Full layoff risk assessment for a single company — score, band, state, signals, programme details, headcount estimates, bankruptcy flags and function-level risk.

Parameters

NameTypeRequiredDescription
tickerstringNoStock ticker (e.g. INTC). One of ticker or name required.
namestringNoCompany name (fuzzy match).
Example response
{
  "data": {
    "company": {
      "name": "Intel Corporation",
      "ticker": "INTC",
      "cik": "50863",
      "isPublic": true,
      "isUSListed": true
    },
    "risk": {
      "score": 78,
      "band": "HIGH",
      "state": "ACTIVE",
      "confidence": "high",
      "updatedAt": "2026-11-02T14:30:00Z"
    },
    "signals": [
      {
        "type": "confirmed_event",
        "description": "Workforce reduction of ~15,000 employees",
        "source": "SEC 8-K Item 2.05",
        "date": "2026-10-28",
        "verified": true
      }
    ],
    "programme": {
      "name": "IDM 2.0 Restructuring",
      "totalSizeUsd": 10000000000,
      "phase": "execution",
      "timeline": "Q4 2026 – Q2 2027"
    },
    "headcount": {
      "estimateLow": 12000,
      "estimateMid": 15000,
      "estimateHigh": 18000,
      "pctOfWorkforce": 15
    },
    "functionsAtRisk": ["Manufacturing", "Sales"],
    "functionsProtected": ["Foundry Engineering"],
    "summary": "Intel is executing a major restructuring...",
    "disclaimer": "Predictive signal, not financial advice."
  },
  "meta": { "apiVersion": "v1", "requestedAt": "..." }
}
GET/api/v1/companies

Bulk company scores

Paginated list of all scored companies with summary risk data. Filter by state, band, or sort by score, name or last updated.

Parameters

NameTypeRequiredDescription
statestringNoCLEAR | WATCH | LIKELY | ACTIVE
bandstringNoLOW | MEDIUM | HIGH
sortstringNoscore (default) | name | updated
limitintegerNo1–200 (default 100)
offsetintegerNoPagination offset (default 0)
Example response
{
  "data": [
    {
      "name": "Intel Corporation",
      "ticker": "INTC",
      "score": 78,
      "band": "HIGH",
      "state": "ACTIVE",
      "updatedAt": "2026-11-02T14:30:00Z"
    }
  ],
  "meta": {
    "total": 842,
    "limit": 100,
    "offset": 0,
    "hasMore": true
  }
}
GET/api/v1/events

SEC 8-K layoff events

Confirmed layoff and restructuring events from SEC EDGAR Form 8-K Item 2.05 filings. Every US-listed company that files a cost-disposal 8-K appears here.

Parameters

NameTypeRequiredDescription
daysintegerNoLookback window, 1–120 (default 45)
limitintegerNo1–100 (default 40)
tickerstringNoFilter by ticker symbol
Example response
{
  "data": [
    {
      "company": "Acme Corp",
      "ticker": "ACME",
      "filedAt": "2026-10-30",
      "kind": "reduction",
      "headline": "Workforce reduction of 800 employees",
      "employees": 800,
      "chargesUsdM": 45.2,
      "filingUrl": "https://sec.gov/..."
    }
  ],
  "meta": {
    "source": "SEC EDGAR Form 8-K Item 2.05",
    "count": 12
  }
}
GET/api/v1/warn

WARN Act notices

Worker Adjustment and Retraining Notification Act filings from 12 US state labor departments. Covers private companies that never file with the SEC.

Parameters

NameTypeRequiredDescription
statestringNoTwo-letter state: TX, MD, MO, IN, NC, OR, TN, UT, VA, NE
limitintegerNo1–500 (default 200)
Example response
{
  "data": [
    {
      "company": "FooBar Industries",
      "state": "TX",
      "location": "Austin, TX",
      "employees": 350,
      "noticeDate": "2026-10-15",
      "effectiveDate": "2026-12-15",
      "type": "Plant Closing"
    }
  ],
  "meta": {
    "supportedStates": ["CA","WA","TX","MD","MO","IN","NC","OR","TN","UT","VA","NE"],
    "count": 87
  }
}
GET/api/v1/active

Active layoff companies

Companies currently in LIKELY or ACTIVE layoff states. Updated every 6 hours from SEC EDGAR full-text search and Tier A/B media.

Parameters

NameTypeRequiredDescription
statestringNoLIKELY | ACTIVE
limitintegerNo1–40 (default 40)
Example response
{
  "data": [
    {
      "company": "Acme Corp",
      "ticker": "ACME",
      "score": 82,
      "band": "HIGH",
      "state": "ACTIVE",
      "keySignal": "SEC 8-K Item 2.05 filing",
      "scoredAt": "2026-11-02T08:00:00Z"
    }
  ],
  "meta": {
    "lookbackDays": 14,
    "updateFrequency": "6 hours"
  }
}
GET/api/v1/workforce-events

Private-company layoffs and buyouts

Workforce events that SEC filings and WARN notices miss: layoffs at private companies and startups, voluntary buyouts, early-retirement offers, hiring freezes and closures. Each event carries ownership, headcount or eligibility, confidence and named sources. Updated daily.

Parameters

NameTypeRequiredDescription
typestringNolayoff | voluntary_buyout | early_retirement | hiring_freeze | closure (comma-separated)
ownershipstringNoprivate | public | subsidiary | nonprofit | government (comma-separated)
unlistedbooleanNotrue = only organisations with no US ticker
companystringNoCompany slug, e.g. canva
tickerstringNoUS ticker of the company or its listed parent, e.g. MSFT
daysintegerNoLookback window 1–365 (default 365)
limitintegerNo1–100 (default 40)
Example response
{
  "data": [
    {
      "id": "microsoft-voluntary-buyout-2026-10",
      "company": "Microsoft",
      "ownership": "public",
      "ticker": "MSFT",
      "type": "voluntary_buyout",
      "confidence": "confirmed",
      "announcedAt": "2026-10-26",
      "employeesAffected": null,
      "employeesEligible": 60000,
      "countries": ["United States", "United Kingdom", "Canada", "India"],
      "headline": "Microsoft offers voluntary buyouts to about 60,000 employees",
      "terms": "Comparable to standard severance, which varies by market...",
      "sources": [{ "publisher": "KUOW", "url": "https://www.kuow.org/...", "date": "2026-10-26" }],
      "url": "https://ejectseat.io/layoffs/MSFT"
    }
  ],
  "meta": { "count": 1, "totalMatching": 1, "updateFrequency": "daily" }
}
POST/api/v1/webhooks

Webhooks (Zapier, Make, your server)

Get a POST to your HTTPS URL the moment something happens, instead of polling. Events: workforce.reported (a new private-company layoff, voluntary buyout, early-retirement offer, hiring freeze or closure), workforce.updated (new numbers, terms or confirmation on an existing one), layoff.detected (a company scored LIKELY or ACTIVE). Up to 5 webhooks per key; GET /api/v1/webhooks lists yours. Deduplicate on data.id + data.updatedAt.

Parameters

NameTypeRequiredDescription
urlstringYesHTTPS URL that receives the POST (JSON body)
eventsstring[]Noworkforce.reported | workforce.updated | layoff.detected (default ["layoff.detected"])
Example response
// What your URL receives for workforce.reported
{
  "event": "workforce.reported",
  "timestamp": "2026-11-06T04:02:11Z",
  "data": {
    "id": "canva-layoff-2026-11",
    "company": "Canva",
    "ownership": "private",
    "type": "layoff",
    "confidence": "confirmed",
    "announcedAt": "2026-11-04",
    "employeesAffected": 1271,
    "pctWorkforce": 22,
    "headline": "Canva cuts 1,271 jobs, 22% of staff, as growth slows",
    "sources": [{ "publisher": "TechCrunch", "url": "https://techcrunch.com/..." }],
    "url": "https://ejectseat.io/layoffs/company/canva",
    "updatedAt": "2026-11-05"
  }
}
GET/api/v1/usage

API usage stats

Your key's current usage: today's count, remaining quota, and a 30-day daily breakdown. Useful for dashboards and alerting.

Example response
{
  "data": {
    "key": {
      "tier": "starter",
      "price": "$49/mo"
    },
    "usage": {
      "today": {
        "used": 42,
        "limit": 100,
        "remaining": 58
      },
      "last30Days": {
        "total": 1847,
        "daily": [{ "date": "2026-11-02", "count": 42 }]
      }
    }
  }
}

Error handling

All errors return a consistent envelope:

{
  "error": {
    "message": "Company not found for ticker \"XYZ\"",
    "code": "NOT_FOUND",
    "status": 404
  }
}
StatusCodeMeaning
400MISSING_PARAMRequired parameter not provided
400INVALID_PARAMParameter value out of range or invalid
401UNAUTHORIZEDMissing or invalid API key
404NOT_FOUNDCompany not in our database yet
429RATE_LIMITEDDaily or burst limit exceeded
500INTERNAL_ERRORServer error — retry with backoff

Ready to integrate?

Pick a plan above and your API key is provisioned instantly after checkout. Also available on RapidAPI Marketplace if you prefer managed billing. Questions? Email api@ejectseat.io.

Choose a plan