Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Ninjas Layoff Notices API
description: 'Combined OpenAPI specification for every API Ninjas endpoint. Requests go to https://api.api-ninjas.com with an `X-Api-Key` header; get a free key at https://api-ninjas.com/register. Human-readable docs: https://api-ninjas.com/api. Index for LLMs: https://api-ninjas.com/llms.txt.'
version: 1.0.0
contact:
name: API Ninjas
url: https://api-ninjas.com
license:
name: Proprietary
servers:
- url: https://api.api-ninjas.com
description: API Ninjas Production
security:
- ApiKeyAuth: []
tags:
- name: Layoff Notices
description: 'Official WARN Act layoff notices filed with state labor agencies, from every state that publishes WARN notices plus Washington, DC, updated daily: search by company, ticker, state, city, county, ZIP code and radius, date, workers affected and event type; monthly and yearly totals; and the covered states. The free plan gets notices dated from January 1 of last year, with company and notice_url masked. Paid plans (Developer and above) get the full history, company matching, links to the official notice documents and /v1/layoffstats.'
paths:
/v1/layoffnotices:
get:
tags:
- Layoff Notices
summary: Search WARN Act layoff notices
description: 'Searches official WARN Act layoff notices by company, ticker, location, date, number of workers and event type, newest first. All parameters are optional; without any, the latest notices from every state are returned.
Free plans get notices dated from January 1 of last year, and the company and notice_url fields hold "This field is for premium subscribers only." instead of their values.'
operationId: getLayoffNotices
parameters:
- name: id
in: query
required: false
description: A notice id from an earlier response. Returns that notice.
schema:
type: string
example: NY-3b9e5f1c07a2
- name: company
in: query
required: false
description: Part of the employer or company name. Each word matches the start of a word in the name; case and legal suffixes such as Inc. and LLC are ignored.
schema:
type: string
maxLength: 100
example: example manufacturing
- name: ticker
in: query
required: false
description: Current stock ticker of the matched company or of its parent company. Returns the notices of the company and its subsidiaries. Share classes and preferred shares can be written in any common form, e.g. BRK.B, BRK-B, BRK/B or BRKB, and BAC.PRL or BAC-PL.
schema:
type: string
example: EXMF
- name: state
in: query
required: false
description: Two-letter state code, or several separated by commas, e.g. NY or CA,TX. Use DC for Washington, DC.
schema:
type: string
example: NY
- name: city
in: query
required: false
description: City of an affected location (not case-sensitive).
schema:
type: string
example: Rochester
- name: county
in: query
required: false
description: County of an affected location, with or without the word County or Parish.
schema:
type: string
example: Monroe
- name: zip
in: query
required: false
description: 5-digit ZIP code of an affected location. With radius, the center of the search.
schema:
type: string
pattern: ^[0-9]{5}$
example: '14623'
- name: radius
in: query
required: false
description: 'With zip: returns notices with an affected location within this many miles of the ZIP code (1-100).'
schema:
type: integer
minimum: 1
maximum: 100
example: 25
- name: start_date
in: query
required: false
description: Earliest notice date (YYYY-MM-DD), inclusive. A notice without a notice_date is dated by the date the state received or posted it, or else by its effective_date. On the free plan, January 1 of last year or later; earlier dates return an error.
schema:
type: string
format: date
example: '2026-01-01'
- name: end_date
in: query
required: false
description: Latest notice date (YYYY-MM-DD), inclusive.
schema:
type: string
format: date
example: '2026-10-31'
- name: min_workers
in: query
required: false
description: Only notices affecting at least this many workers.
schema:
type: integer
minimum: 0
example: 100
- name: event_type
in: query
required: false
description: 'One or more event types, separated by commas: layoff, closure, relocation, furlough, reduced_hours, other, unknown.'
schema:
type: string
example: layoff,closure
- name: updated_since
in: query
required: false
description: ISO 8601 date or date-time. Only notices added or changed since then, to keep a copy in sync.
schema:
type: string
format: date-time
example: '2026-10-01T00:00:00Z'
- name: sort
in: query
required: false
description: date (default, newest first) or workers (most workers first).
schema:
type: string
enum:
- date
- workers
default: date
- name: limit
in: query
required: false
description: Number of notices to return (1-100). Default 25.
schema:
type: integer
minimum: 1
maximum: 100
default: 25
- name: offset
in: query
required: false
description: Number of notices to skip, for paging (0-10000). Default 0.
schema:
type: integer
minimum: 0
maximum: 10000
default: 0
security:
- ApiKeyAuth: []
responses:
'200':
description: 'Successful response: a JSON array of notices (empty when nothing matches).'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LayoffNotice'
example:
- id: NY-3b9e5f1c07a2
state: NY
agency: New York State Department of Labor
employer: Example Manufacturing, Inc.
employer_dba: null
company:
name: Example Manufacturing, Inc.
ticker: EXMF
exchange: NYSE
cik: '9999999'
domain: example.com
parent: null
match_confidence: high
event_type: layoff
temporary: false
warn_notice: true
status: filed
notice_date: '2026-10-14'
received_date: '2026-10-14'
effective_date: '2027-01-12'
effective_date_end: '2027-03-31'
date_precision: null
workers: 148
locations:
- address: 1200 Example Parkway
city: Rochester
county: Monroe
state: NY
zip: '14623'
workers: 148
type: site
naics: '333314'
industry: Manufacturing
union: null
reason: Economic
notice_url: https://dol.ny.gov/system/files/documents/2026/10/warn-example-manufacturing-inc-2026-0412.pdf
first_seen: '2026-10-15'
updated: '2026-10-15T10:02:41+00:00'
'400':
description: Bad Request. The body holds a readable error message.
content:
application/json:
schema:
$ref: '#/components/schemas/LayoffError'
example:
error: Invalid state. Use two-letter US state codes, e.g. CA or CA,TX.
'401':
description: Unauthorized
'500':
description: Internal Server Error
/v1/layoffstats:
get:
tags:
- Layoff Notices
summary: Layoff notices and workers affected per month or year (premium only)
description: 'PREMIUM ONLY - Developer plans and above; requests below that return an error.
Returns the number of layoff notices and workers affected per month or per year, nationally or for one state, counted by notice date.'
operationId: getLayoffStats
parameters:
- name: state
in: query
required: false
description: 'Two-letter state code. Default: national totals.'
schema:
type: string
enum:
- AK
- AL
- AZ
- CA
- CO
- CT
- DC
- DE
- FL
- GA
- HI
- IA
- ID
- IL
- IN
- KS
- KY
- LA
- MA
- MD
- ME
- MI
- MN
- MO
- MS
- MT
- NC
- ND
- NE
- NH
- NJ
- NM
- NV
- NY
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VA
- VT
- WA
- WI
- WV
example: CA
- name: start_month
in: query
required: false
description: 'First month (YYYY-MM). Default: January of last year.'
schema:
type: string
pattern: ^(19|20)[0-9]{2}-(0[1-9]|1[0-2])$
example: 2026-01
- name: end_month
in: query
required: false
description: 'Last month (YYYY-MM). Default: the current month.'
schema:
type: string
pattern: ^(19|20)[0-9]{2}-(0[1-9]|1[0-2])$
example: 2026-06
- name: period
in: query
required: false
description: month (default) or year.
schema:
type: string
enum:
- month
- year
default: month
security:
- ApiKeyAuth: []
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/LayoffStatsResponse'
example:
state: CA
period: month
results:
- period: 2026-01
notices: 121
workers: 10723
- period: 2026-02
notices: 97
workers: 6273
- period: 2026-03
notices: 81
workers: 4372
- period: 2026-04
notices: 140
workers: 5915
- period: 2026-05
notices: 92
workers: 9223
- period: 2026-06
notices: 121
workers: 4655
'400':
description: Bad Request. The body holds a readable error message.
content:
application/json:
schema:
$ref: '#/components/schemas/LayoffError'
example:
error: This endpoint is available on Developer plans and above.
'401':
description: Unauthorized
'500':
description: Internal Server Error
/v1/layoffcoverage:
get:
tags:
- Layoff Notices
summary: Covered states with their agency, history and latest notice date
description: Lists every covered state with the agency that receives its notices, the date of its earliest notice, its latest notice date and its number of notices. Available on every plan.
operationId: getLayoffCoverage
parameters:
- name: state
in: query
required: false
description: 'Two-letter state code. Default: every state.'
schema:
type: string
enum:
- AK
- AL
- AZ
- CA
- CO
- CT
- DC
- DE
- FL
- GA
- HI
- IA
- ID
- IL
- IN
- KS
- KY
- LA
- MA
- MD
- ME
- MI
- MN
- MO
- MS
- MT
- NC
- ND
- NE
- NH
- NJ
- NM
- NV
- NY
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VA
- VT
- WA
- WI
- WV
example: CA
security:
- ApiKeyAuth: []
responses:
'200':
description: 'Successful response: one entry per state.'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LayoffCoverage'
example:
- state: CA
agency: California Employment Development Department
history_from: '2008-09-04'
latest_notice_date: '2026-10-21'
notices: 12556
'400':
description: Bad Request. The body holds a readable error message.
content:
application/json:
schema:
$ref: '#/components/schemas/LayoffError'
example:
error: Invalid state. Use a two-letter US state code, e.g. CA.
'401':
description: Unauthorized
'500':
description: Internal Server Error
components:
schemas:
LayoffCompanyParent:
type: object
description: The publicly traded parent company on the notice date, when the employer is a subsidiary.
properties:
name:
type: string
description: The parent company's name.
ticker:
type:
- string
- 'null'
description: The parent company's current stock ticker.
cik:
type:
- string
- 'null'
description: The parent company's SEC Central Index Key (CIK), without leading zeros.
LayoffStatsPeriod:
type: object
properties:
period:
type: string
description: The month (YYYY-MM) or year (YYYY).
example: 2026-01
notices:
type: integer
description: Number of notices dated in the period.
example: 121
workers:
type: integer
description: Total workers affected by those notices.
example: 10723
LayoffCoverage:
type: object
properties:
state:
type: string
description: Two-letter state code.
example: CA
agency:
type: string
description: The state agency that receives WARN notices.
example: California Employment Development Department
history_from:
type: string
description: Date of the state's earliest notice (YYYY-MM-DD).
format: date
example: '2008-09-04'
latest_notice_date:
type: string
description: Date of the state's latest notice (YYYY-MM-DD).
format: date
example: '2026-10-21'
notices:
type: integer
description: Number of notices from the state.
example: 12556
LayoffNotice:
type: object
properties:
id:
type: string
description: Unique id of the notice. It does not change when the notice is updated.
example: NY-3b9e5f1c07a2
state:
type: string
description: Two-letter code of the state the notice was filed in.
enum:
- AK
- AL
- AZ
- CA
- CO
- CT
- DC
- DE
- FL
- GA
- HI
- IA
- ID
- IL
- IN
- KS
- KY
- LA
- MA
- MD
- ME
- MI
- MN
- MO
- MS
- MT
- NC
- ND
- NE
- NH
- NJ
- NM
- NV
- NY
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VA
- VT
- WA
- WI
- WV
example: NY
agency:
type: string
description: The state agency that received the notice.
example: New York State Department of Labor
employer:
type: string
description: The employer's name, as filed.
example: Example Manufacturing, Inc.
employer_dba:
type:
- string
- 'null'
description: The "doing business as" or site name in the notice, if any.
company:
allOf:
- $ref: '#/components/schemas/LayoffCompany'
x-premium: true
description: Premium only (Developer plans and above). The company the notice is matched to, or null when the employer is not matched to a company. The free plan receives the string "This field is for premium subscribers only." instead.
event_type:
type: string
description: The action in the notice.
enum:
- layoff
- closure
- relocation
- furlough
- reduced_hours
- other
- unknown
example: layoff
temporary:
type:
- boolean
- 'null'
description: true for a temporary layoff, false for a permanent one, null when the notice does not say.
example: false
warn_notice:
type:
- boolean
- 'null'
description: true for a notice filed under the federal WARN Act or a state WARN law; false for a layoff the state reports below the WARN thresholds; null when the state does not say.
example: true
status:
type: string
description: filed, amended (the employer filed an amendment), rescinded (withdrawn) or postponed.
enum:
- filed
- amended
- rescinded
- postponed
example: filed
notice_date:
type:
- string
- 'null'
description: Date of the notice (YYYY-MM-DD).
format: date
example: '2026-10-14'
received_date:
type:
- string
- 'null'
description: Date the agency received the notice (YYYY-MM-DD).
format: date
example: '2026-10-14'
effective_date:
type:
- string
- 'null'
description: Date the layoff or closure takes effect (YYYY-MM-DD).
format: date
example: '2027-01-12'
effective_date_end:
type:
- string
- 'null'
description: 'For a layoff that takes place over a period, e.g. in phases: its last date (YYYY-MM-DD).'
format: date
example: '2027-03-31'
date_precision:
type:
- object
- 'null'
description: 'Only for dates known to the month or year: each such date field with month or year, e.g. {"effective_date": "month"}. The date is then the first day of that month or year. null when every date is exact.'
additionalProperties:
type: string
enum:
- month
- year
example:
effective_date: month
workers:
type:
- integer
- 'null'
description: Number of workers affected.
example: 148
locations:
type: array
description: Every location in the notice.
items:
$ref: '#/components/schemas/LayoffLocation'
naics:
type:
- string
- 'null'
description: NAICS industry code, 2 to 6 digits.
example: '333314'
industry:
type:
- string
- 'null'
description: Industry.
example: Manufacturing
union:
type:
- string
- 'null'
description: The union representing the affected workers, or whether they have one, as given in the notice.
reason:
type:
- string
- 'null'
description: The reason given for the layoff.
example: Economic
notice_url:
type:
- string
- 'null'
description: Premium only (Developer plans and above). Link to the official notice document. The free plan receives the string "This field is for premium subscribers only." instead.
format: uri
x-premium: true
example: https://dol.ny.gov/system/files/documents/2026/10/warn-example-manufacturing-inc-2026-0412.pdf
first_seen:
type:
- string
- 'null'
description: Date the notice was added to the API (YYYY-MM-DD).
format: date
example: '2026-10-15'
updated:
type: string
description: When any field of the notice last changed (ISO 8601, UTC). Use it with updated_since.
format: date-time
example: '2026-10-15T10:02:41+00:00'
LayoffError:
type: object
properties:
error:
type: string
description: A readable error message.
example: radius requires zip.
LayoffLocation:
type: object
properties:
address:
type:
- string
- 'null'
description: Street address, as filed.
example: 1200 Example Parkway
city:
type:
- string
- 'null'
description: City.
example: Rochester
county:
type:
- string
- 'null'
description: County.
example: Monroe
state:
type:
- string
- 'null'
description: Two-letter state code of an affected site.
example: NY
zip:
type:
- string
- 'null'
description: 5-digit ZIP code.
example: '14623'
workers:
type:
- integer
- 'null'
description: Number of workers affected at the location.
example: 148
type:
type:
- string
- 'null'
description: site (an affected workplace) or headquarters (the employer's headquarters address given in the notice); null when the notice does not say.
enum:
- site
- headquarters
- null
example: site
LayoffStatsResponse:
type: object
properties:
state:
type:
- string
- 'null'
description: The state, or null for national totals.
example: CA
period:
type: string
description: month or year.
enum:
- month
- year
example: month
results:
type: array
description: One entry per month or year, oldest first. Periods without notices are not listed.
items:
$ref: '#/components/schemas/LayoffStatsPeriod'
LayoffCompany:
type: object
description: The company a notice is matched to.
properties:
name:
type: string
description: The company's name on the notice date.
example: Example Manufacturing, Inc.
ticker:
type:
- string
- 'null'
description: The company's current stock ticker, when the company itself is listed. A ticker can change over time; cik does not. Returned for high-confidence matches; null for medium.
example: EXMF
exchange:
type:
- string
- 'null'
description: The exchange the ticker trades on, e.g. NYSE or Nasdaq. Returned for high-confidence matches; null for medium.
example: NYSE
cik:
type:
- string
- 'null'
description: The company's SEC Central Index Key (CIK), without leading zeros. Returned for high-confidence matches; null for medium.
example: '9999999'
domain:
type:
- string
- 'null'
description: The company's website domain.
example: example.com
parent:
allOf:
- $ref: '#/components/schemas/LayoffCompanyParent'
description: 'When the employer is a subsidiary: its publicly traded parent company on the notice date, with name, ticker and cik. Returned for high-confidence matches; otherwise null.'
match_confidence:
type: string
description: How confident the match is.
enum:
- high
- medium
example: high
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-Api-Key
externalDocs:
description: API Ninjas documentation
url: https://api-ninjas.com/api