HackNotice Alerts API

Cross-service alert retrieval.

Operations 7

POST /domainalerts/page/{pageNum} Read first-party alerts page #
POST /enduseralerts/page/{pageNum} Read end-user alerts page #
POST /hackalerts/page/{pageNum} Read third-party alerts page #
POST /research8/search/filename/term/page/{pageNum} Search research phrase+filename alerts page #
POST /research8/search/pool/page/{pageNum} Search research word pool alerts page #
POST /research8/search/term/page/{pageNum} Search research phrase alerts page #
GET /saved-searches/{productKey} List saved searches by product-key #

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/hacknotice-alerts-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

hacknotice-alerts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: HackNotice Alerts API
  version: '2026-08-22'
  summary: External threat-intelligence API for first-party, third-party and end-user breach monitoring, threat research and vendor assessments.
  description: 'HackNotice''s REST API over its external threat-intelligence platform: credential and breach alerts for first-party domains, third-party vendors and end users; dark-web / hacker-forum research search; and AI-assisted vendor security assessments.


    PROVENANCE: this document was DERIVED by API Evangelist from HackNotice''s own published Postman collection "HackNotice-API", reached at https://api-docs.hacknotice.com (HTTP 301 -> https://documenter.getpostman.com/view/806684/2sBXiri7pT), linked from HackNotice''s help centre article "API". Paths, methods, parameters, request bodies and tags are transcribed from that collection; nothing was invented. Concrete record ids in the collection''s example URLs were templated into path parameters, and every token-shaped example value was redacted.


    HackNotice publishes a rate limit of 1 query per second, and states that API access is granted to approved accounts only after a 30-minute consultation call.'
  termsOfService: https://hacknotice.com/businesstandc/
  contact:
    name: HackNotice Support
    url: https://hacknotice.zendesk.com/hc/en-us
    email: support@hacknotice.com
  x-api-evangelist-derived-from: https://api-docs.hacknotice.com
servers:
- url: https://extensionapi.hacknotice.com
  description: HackNotice production API host, as declared by HackNotice's own first-party n8n node (API_BASE_URL in credentials/HackNoticeApi.credentials.ts, github.com/HackNotice/n8n-nodes-hacknotice). The published Postman collection ships an internal {{url}} variable pointing at a developer VPN host, which is not the production base.
security:
- jwtAuth: []
- apiKeyAuth: []
tags:
- name: Alerts
  description: Cross-service alert retrieval.
paths:
  /domainalerts/page/{pageNum}:
    post:
      tags:
      - Alerts
      summary: Read first-party alerts page
      operationId: postReadFirstPartyAlertsPage
      description: 'Read First-Party Alerts Page Route: POST /domainalerts/page/:pageNum Returns paginated domain/first-party alerts. Common body filters tier , tag , unmatchTier domainwatchlist_id remediated , deleted sort ( timestamp supported) Time filters: start_date , end_date , hours_ago Credential/detail toggles: creds , credsonly , strongonly , allkeys , csv , keyonly Optional leak/credential filters: leaks , infostealer , credentialdump , redact_password , password_length , password_criteria pageNum is zero-based.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                tier:
                  type: string
                tag:
                  type: string
                remediated:
                  type: boolean
                start_date:
                  type: string
                end_date:
                  type: string
            example:
              tier: high
              tag: password
              remediated: false
              start_date: '2026-03-01T00:00:00.000Z'
              end_date: '2026-03-26T00:00:00.000Z'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Unauthorized — missing or invalid JWT / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - jwtAuth: []
      - apiKeyAuth: []
      parameters:
      - name: pageNum
        in: path
        required: true
        schema:
          type: integer
  /enduseralerts/page/{pageNum}:
    post:
      tags:
      - Alerts
      summary: Read end-user alerts page
      operationId: postReadEndUserAlertsPage
      description: 'Read End-User Alerts Page Route: POST /enduseralerts/page/:pageNum Returns paginated end-user alerts. Common body filters term (exact email match) tier , tag remediated , deleted days sort ( timestamp ) and pubsort Credential/detail toggles: hashpass , leaks , creds , credsonly , csv , allkeys , keyonly pageNum is zero-based.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                term:
                  type: string
                tier:
                  type: string
                tag:
                  type: string
                remediated:
                  type: boolean
                days:
                  type: integer
            example:
              term: user@example.com
              tier: medium
              tag: credential
              remediated: false
              days: 7
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Unauthorized — missing or invalid JWT / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - jwtAuth: []
      - apiKeyAuth: []
      parameters:
      - name: pageNum
        in: path
        required: true
        schema:
          type: integer
  /hackalerts/page/{pageNum}:
    post:
      tags:
      - Alerts
      summary: Read third-party alerts page
      operationId: postReadThirdPartyAlertsPage
      description: 'Read Third-Party Alerts Page Route: POST /hackalerts/page/:pageNum Returns paginated third-party alerts. Common body filters sort : alphabetically , timestamp , severity tier , tag , harvester , sourcetype remediated : true|false Time filters: days , start_date , end_date , hours_ago Industry/geo filters: topnaicscode , topnaicscodearray , region , regionarray Other switches used by clients: rss , allkeys , csv , credsonly , creds , deleted pageNum is zero-based.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                sort:
                  type: string
                tier:
                  type: string
                tag:
                  type: string
                remediated:
                  type: boolean
                hours_ago:
                  type: integer
            example:
              sort: timestamp
              tier: high
              tag: password
              remediated: false
              hours_ago: 24
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Unauthorized — missing or invalid JWT / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - jwtAuth: []
      - apiKeyAuth: []
      parameters:
      - name: pageNum
        in: path
        required: true
        schema:
          type: integer
  /research8/search/filename/term/page/{pageNum}:
    post:
      tags:
      - Alerts
      summary: Search research phrase+filename alerts page
      operationId: postSearchResearchPhraseFilenameAlertsPage
      description: 'Search Research Phrase + Filename Alerts Page Route: POST /research8/search/filename/term/page/:pageNum Uses the same options as phrase search, with filename matching enabled. Required fields term searchtype Filename-specific fields filename filesearchtype (for example wildcard_post ) Additional optional fields order , startdate , enddate , hours_ago , searchafter , allkeys , fullrecords , creds , credsonly , csv , word , blob , redacted , domainfilter , monthly .'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                term:
                  type: string
                searchtype:
                  type: string
                filename:
                  type: string
                filesearchtype:
                  type: string
                order:
                  type: string
                hours_ago:
                  type: integer
                allkeys:
                  type: boolean
                fullrecords:
                  type: boolean
            example:
              term: acme.com
              searchtype: match_phrase
              filename: dump
              filesearchtype: wildcard_post
              order: desc
              hours_ago: 24
              allkeys: false
              fullrecords: false
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Unauthorized — missing or invalid JWT / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - jwtAuth: []
      - apiKeyAuth: []
      parameters:
      - name: pageNum
        in: path
        required: true
        schema:
          type: integer
  /research8/search/pool/page/{pageNum}:
    post:
      tags:
      - Alerts
      summary: Search research word pool alerts page
      operationId: postSearchResearchWordPoolAlertsPage
      description: 'Search Research Word Pool Alerts Page Route: POST /research8/search/pool/page/:pageNum Required fields pool (array of terms) match (minimum match threshold; must be > 0) Optional fields searchtype order Date filters: startdate , enddate , hours_ago Paging cursor: searchafter Output toggles: allkeys , fullrecords , csv , word , blob , redacted Credential toggles: creds , credsonly Other: domainfilter , monthly pageNum is zero-based.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                pool:
                  type: array
                match:
                  type: integer
                searchtype:
                  type: string
                order:
                  type: string
                hours_ago:
                  type: integer
                searchafter:
                  type: integer
                allkeys:
                  type: boolean
                fullrecords:
                  type: boolean
                creds:
                  type: boolean
                credsonly:
                  type: boolean
                csv:
                  type: boolean
                word:
                  type: boolean
                blob:
                  type: boolean
                redacted:
                  type: boolean
                domainfilter:
                  type: boolean
            example:
              pool:
              - acme.com
              - example.com
              match: 1
              searchtype: match_phrase
              order: desc
              hours_ago: 24
              searchafter: -1
              allkeys: false
              fullrecords: false
              creds: false
              credsonly: false
              csv: false
              word: false
              blob: false
              redacted: false
              domainfilter: false
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Unauthorized — missing or invalid JWT / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - jwtAuth: []
      - apiKeyAuth: []
      parameters:
      - name: pageNum
        in: path
        required: true
        schema:
          type: integer
  /research8/search/term/page/{pageNum}:
    post:
      tags:
      - Alerts
      summary: Search research phrase alerts page
      operationId: postSearchResearchPhraseAlertsPage
      description: 'Search Research Phrase Alerts Page Route: POST /research8/search/term/page/:pageNum Required fields term (string) searchtype (string) Optional filters/options order : asc|desc Date filters: startdate , enddate , hours_ago Paging cursor: searchafter Output toggles: allkeys , fullrecords , csv , word , blob , redacted Credential toggles: creds , credsonly Other: domainfilter , monthly pageNum is zero-based (server enforces an upper page cap in this endpoint family).'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                term:
                  type: string
                searchtype:
                  type: string
                order:
                  type: string
                hours_ago:
                  type: integer
                allkeys:
                  type: boolean
                fullrecords:
                  type: boolean
                creds:
                  type: boolean
                credsonly:
                  type: boolean
                csv:
                  type: boolean
                word:
                  type: boolean
                blob:
                  type: boolean
                redacted:
                  type: boolean
                domainfilter:
                  type: boolean
            example:
              term: acme.com
              searchtype: match_phrase
              order: desc
              hours_ago: 24
              allkeys: false
              fullrecords: false
              creds: false
              credsonly: false
              csv: false
              word: false
              blob: false
              redacted: false
              domainfilter: false
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Unauthorized — missing or invalid JWT / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - jwtAuth: []
      - apiKeyAuth: []
      parameters:
      - name: pageNum
        in: path
        required: true
        schema:
          type: integer
  /saved-searches/{productKey}:
    get:
      tags:
      - Alerts
      summary: List saved searches by product-key
      operationId: getListSavedSearchesByProductKey
      description: 'List Saved Searches by Product Key Purpose: Return saved searches for the authenticated customer and selected product line. Path Parameters Parameter Required Description product-key Yes Product domain for saved searches Allowed product-key Values Value firstparty enduser thirdparty research Query Parameters Parameter Required Applies To Allowed Values endpoint Yes product-key=research phrase , wordpool Responses Status Description 200 Saved search records 401 Unauthorized user 500 Internal server error'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
        '401':
          description: Unauthorized — missing or invalid JWT / API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - jwtAuth: []
      - apiKeyAuth: []
      parameters:
      - name: productKey
        in: path
        required: true
        schema:
          type: string
components:
  schemas:
    Error:
      type: object
      description: HackNotice error envelope observed on the live API hosts.
      properties:
        message:
          type: string
          description: Human-readable error message, e.g. "Unauthorized user!" or "Not found".
  securitySchemes:
    jwtAuth:
      type: apiKey
      in: header
      name: Authorization
      description: 'Session token from POST /auth/sign_in, sent as the literal prefix "JWT " followed by the token — e.g. Authorization: JWT <token>. Note this is HackNotice''s own scheme, not RFC 6750 Bearer.'
    apiKeyAuth:
      type: apiKey
      in: header
      name: apikey
      description: Per-account API key issued by HackNotice, sent in the lower-case "apikey" header alongside the JWT on most operations.
    integrationKeyAuth:
      type: apiKey
      in: header
      name: X-HackNotice-Integration-Key
      description: Per-user HackNotice integration secret (hn_ik_ prefix). Single-header alternative to apikey + email + password; also the credential used by the HackNotice MCP server.