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.
Simple pricing
No per-query surcharges. Every endpoint included in every tier.
- 100 queries / day
- 10 requests / minute burst
- All 7 endpoints + webhooks
- JSON responses
- Email support
- 10,000 queries / day
- 60 requests / minute burst
- All 7 endpoints + webhooks
- JSON responses
- Priority support
- Bulk exports
Quick start
Install the official SDK for your stack:
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); // ACTIVEpip install ejectseat
from ejectseat import EjectSeat
client = EjectSeat("es_YOUR_KEY")
risk = client.company(ticker="INTC")
print(risk["data"]["risk"]["state"]) # ACTIVEOr 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 -H "X-API-Key: es_YOUR_KEY" \
https://ejectseat.io/api/v1/company?ticker=INTCimport 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"]) # ACTIVEconst 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); // ACTIVERate 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:
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
/api/v1/companyCompany 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
| Name | Type | Required | Description |
|---|---|---|---|
ticker | string | No | Stock ticker (e.g. INTC). One of ticker or name required. |
name | string | No | Company 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": "..." }
}/api/v1/companiesBulk 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
| Name | Type | Required | Description |
|---|---|---|---|
state | string | No | CLEAR | WATCH | LIKELY | ACTIVE |
band | string | No | LOW | MEDIUM | HIGH |
sort | string | No | score (default) | name | updated |
limit | integer | No | 1–200 (default 100) |
offset | integer | No | Pagination 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
}
}/api/v1/eventsSEC 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
| Name | Type | Required | Description |
|---|---|---|---|
days | integer | No | Lookback window, 1–120 (default 45) |
limit | integer | No | 1–100 (default 40) |
ticker | string | No | Filter 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
}
}/api/v1/warnWARN 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
| Name | Type | Required | Description |
|---|---|---|---|
state | string | No | Two-letter state: TX, MD, MO, IN, NC, OR, TN, UT, VA, NE |
limit | integer | No | 1–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
}
}/api/v1/activeActive 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
| Name | Type | Required | Description |
|---|---|---|---|
state | string | No | LIKELY | ACTIVE |
limit | integer | No | 1–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"
}
}/api/v1/workforce-eventsPrivate-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
| Name | Type | Required | Description |
|---|---|---|---|
type | string | No | layoff | voluntary_buyout | early_retirement | hiring_freeze | closure (comma-separated) |
ownership | string | No | private | public | subsidiary | nonprofit | government (comma-separated) |
unlisted | boolean | No | true = only organisations with no US ticker |
company | string | No | Company slug, e.g. canva |
ticker | string | No | US ticker of the company or its listed parent, e.g. MSFT |
days | integer | No | Lookback window 1–365 (default 365) |
limit | integer | No | 1–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" }
}/api/v1/webhooksWebhooks (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
| Name | Type | Required | Description |
|---|---|---|---|
url | string | Yes | HTTPS URL that receives the POST (JSON body) |
events | string[] | No | workforce.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"
}
}/api/v1/usageAPI 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
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | MISSING_PARAM | Required parameter not provided |
| 400 | INVALID_PARAM | Parameter value out of range or invalid |
| 401 | UNAUTHORIZED | Missing or invalid API key |
| 404 | NOT_FOUND | Company not in our database yet |
| 429 | RATE_LIMITED | Daily or burst limit exceeded |
| 500 | INTERNAL_ERROR | Server 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