HookPulse S API

The S API from HookPulse — 2 operation(s) for s.

Operations 2

GET /s/{token}.json The status dashboard as JSON, with no header at all — the token in the path is… #
GET /s/{token}.rss The same dashboard as RSS 2.0, for a feed reader, a chat bot or a status page #

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/hookpulse-s-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

hookpulse-s-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: HookPulse S API
  version: 2d690e87
  description: 'Dead-man switch for webhooks/cron. Index: GET /api/.'
servers:
- url: https://hookpulse.net
tags:
- name: S
paths:
  /s/{token}.json:
    get:
      operationId: get_s_by_token_json
      summary: The status dashboard as JSON, with no header at all — the token in the path is…
      description: '`summary.all_ok` is the field for an external monitor to check without understanding the rest. The `id` of each row is a label of this dashboard, not the ingest id — rotating the feed changes both.

        Returns: { generated_at, summary{total,ok,overdue,waiting_first_ping,inactive,all_ok}, endpoints[{id,name,status,healthy,overdue,interval_sec,last_event_at,miss_count,alerts}], _links }'
      security: []
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: '{ generated_at, summary{total,ok,overdue,waiting_first_ping,inactive,all_ok}, endpoints[{id,name,status,healthy,overdue,interval_sec,last_event_at,miss_count,alerts}], _links }'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeedStatus'
        '404':
          description: Unknown feed token.
      tags:
      - S
  /s/{token}.rss:
    get:
      operationId: get_s_by_token_rss
      summary: The same dashboard as RSS 2.0, for a feed reader, a chat bot or a status page
      description: 'The `guid` of each item changes when the STATE changes, not on every generation — with a fixed guid the reader would never re-notify.

        Returns: `application/rss+xml` — one item per monitor, with the state in the title.'
      security: []
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: '`application/rss+xml` — one item per monitor, with the state in the title.'
        '404':
          description: Unknown feed token.
      tags:
      - S
components:
  schemas:
    FeedStatus:
      type: object
      properties:
        generated_at:
          type: string
          description: When this dashboard was built (UTC).
        summary:
          allOf:
          - $ref: '#/components/schemas/ResumoStatus'
          description: The number you look at first.
        endpoints:
          type: array
          items:
            $ref: '#/components/schemas/LinhaStatus'
          description: One row per monitor, with no secret at all.
        _links:
          type: object
          description: This dashboard as JSON, as RSS and the API index.
      required:
      - generated_at
      - summary
      - endpoints
      - _links
      description: The owner's whole status dashboard, addressable by URL. The token in the path IS the credential — whoever has the link, reads.
    ResumoStatus:
      type: object
      properties:
        total:
          type: integer
          description: Monitors on the dashboard.
        ok:
          type: integer
          description: Active and healthy.
        overdue:
          type: integer
          description: Active and silent beyond the interval.
        waiting_first_ping:
          type: integer
          description: Active ones that never pinged.
        inactive:
          type: integer
          description: Deactivated.
        all_ok:
          type: boolean
          description: '`true` only with at least one monitor, none overdue and none waiting for the first ping — one that never pinged does not count as healthy.'
      required:
      - total
      - ok
      - overdue
      - waiting_first_ping
      - inactive
      - all_ok
      description: The set in numbers. `all_ok` is the field for an external monitor to check without understanding the rest.
    LinhaStatus:
      type: object
      properties:
        id:
          type: string
          description: 'Stable label of THIS dashboard, derived from the pair (feed token, monitor) — it is not the ingest id, and it changes when the owner rotates the token. The real id does not leave here because `GET /in/:id` asks for no credential: publishing it would give whoever only reads the power to reset the silence counter.'
        name:
          type: string
          description: Name given by the owner.
        status:
          type: string
          description: State in one word.
        healthy:
          type: boolean
          description: Whether it is healthy now.
        overdue:
          type: boolean
          description: Whether it is silent beyond the interval.
        interval_sec:
          type: integer
          description: Tolerated silence, in seconds.
        last_event_at:
          type: string
          description: Last ping (UTC).
          nullable: true
        miss_count:
          type: integer
          description: How many misses have happened.
        alerts:
          type: object
          description: 'Which alert channels are on: `{ email, url }` — booleans, never the address.'
      required:
      - id
      - name
      - status
      - healthy
      - overdue
      - interval_sec
      - last_event_at
      - miss_count
      - alerts
      description: 'A monitor on the public dashboard: enough to know the state, with no token, no e-mail and no ingest id.'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Guest token (`POST /api/guest`) in `X-Guest-Token: hp_…` or `Authorization: Bearer hp_…`. A `sess_…` session also works.'