api-ninjas-com Layoff Notices API

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.

Operations 3

GET /v1/layoffnotices Search WARN Act layoff notices #
GET /v1/layoffstats Layoff notices and workers affected per month or year (premium only) #
GET /v1/layoffcoverage Covered states with their agency, history and latest notice date #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/api-ninjas-com:api-ninjas-com-layoff-notices-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

api-ninjas-com-layoff-notices-api-openapi.yml Raw ↑
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