# HookPulse > Dead-man switch: you create an endpoint, the cron/webhook pings `/in/:id`. > If the silence outlasts the interval, it counts as a miss: e-mail and/or an HTTPS POST to `alert_url` (at most 1× / 24h). Main client: AI agents. > Without paying: a person signs in with an account at `/conta/global` — 90 days without > the usage paywall, counted from the account's first use of HookPulse (the session is an > HttpOnly cookie, not a bearer). **Partnership, sponsorship and advertising** Product placements on request, with a suggested price in USD per 30 days, the public numbers next to them and a proposal that reaches the person who answers. - `GET https://staging.hookpulse.net/api/partners` — placements, suggested price, wallet and the proposal fields. - [Send a proposal](https://staging.hookpulse.net/partners) — the same offer for people, with the form. - `GET https://staging.hookpulse.net/okf/parceria.md` — the offer in markdown, to read without parsing JSON. **Public data archives** Browse addresses and procurement by location, then open the records you need. Up to 20 items per page, in formats ready for people and agents. Check coverage and the reference date before using a result. Access options are shown by each product. - [Postal codes and addresses](https://api.pontofato.com/enderecos/index.json): Find addresses by location, with coordinates and a 2022 reference date. Not a current postal-code certification. State → municipality → locality → street → addresses. [HTML](https://api.pontofato.com/enderecos/) · [llms.txt](https://api.pontofato.com/enderecos/llms.txt) · [OKF](https://api.pontofato.com/enderecos/okf/index.md) - [Public procurement](https://api.editalmd.com/licitacoes/index.json): Find public procurement by location and date. View documents and reading options in EditalMD. Procedure → state → year → month → day → municipality → purchases. [HTML](https://api.editalmd.com/licitacoes/) · [llms.txt](https://api.editalmd.com/licitacoes/llms.txt) · [OKF](https://api.editalmd.com/licitacoes/okf/index.md) **Quota** - Free: dead-man endpoints — 10 per owner. - Free: minimum interval at no cost — 90s. - Free: ingest (`/in/:id`) — no charge per ping. - Free: webhook alert (`alert_url`) — no quota — it is a fetch of ours. - Free: e-mail alert (`alert_to`) — 1 registration. - Free: status dashboard by URL (JSON and RSS) — no quota. - Paid: endpoint beyond the allowance — **$0.10** USDC via x402. - Paid: interval below the free minimum — **$0.05** USDC via x402. - Paid: e-mail alert registration beyond the 1st — **$0.10** USDC via x402. - Trial: sign up and CONFIRM the e-mail → **90 days** of full access, free. Loop: Sign in with your account at /conta/global (browser: e-mail code or link, password or Google) → 90 days without the usage paywall, counted from the account's first use of HookPulse (extra endpoints and fast intervals; e-mail alerts beyond the 1st stay $0.10) Past the allowance → **402** with `accepts[]` (x402, USDC on Base). Pay and repeat the same call with `X-PAYMENT`. Numbers in force: https://staging.hookpulse.net/api/billing **MCP** - **Endpoint:** `POST https://staging.hookpulse.net/mcp` — Streamable HTTP, JSON-RPC 2.0. Nothing to install. - Check it with `GET https://staging.hookpulse.net/mcp` (server card) or `tools/list`. - Every tool is a call on this same API — the MCP has no backend of its own. - Credentials (`X-Guest-Token`, `Authorization`, `X-PAYMENT`) go in the header and are forwarded. **Skill** - `.agents/skills/hookpulse/SKILL.md` — parity with this surface. - **Parity:** touched the UI/API → apidocs + skill + this file in the same PR. ## Discovery - [API index](https://staging.hookpulse.net/api/) - [llms.txt](https://staging.hookpulse.net/llms.txt): this file - [OpenAPI](https://staging.hookpulse.net/openapi.json) - [Health](https://staging.hookpulse.net/api/health) - [Billing](https://staging.hookpulse.net/api/billing) - [Integrations and agents](https://staging.hookpulse.net/developers): contracts, MCP and examples. The human UI follows routine → interval and alert → chosen integration → status. ## Conventions - Read routes accept `GET` and also `POST`, `PUT` or `PATCH` with the same parameters as JSON or form data. - JSON is the default; `Accept: text/html` returns the same answer as HTML. - `/skill.md` is the ready-made agent skill; `/.well-known/api-catalog` (or `/discovery/resources`) lists every surface; `/mcp` also answers at `/mcp/v1`. ## Main endpoints - [`GET /agent.json`](/llms-full.txt?prefix=%2Fagent.json): Agent card: identity, operator, documentation, the MCP endpoint and the tools it serves. Same document as `/.well-known/agent-card.json`. (auth: none) - [`GET /okf/:arquivo`](/llms-full.txt?prefix=%2Fokf%2F%3Aarquivo): OKF bundle (Open Knowledge Format v0.1): markdown with frontmatter so an agent reads the whole product without parsing HTML. (auth: none) - [`GET /.well-known/:arquivo`](/llms-full.txt?prefix=%2F.well-known%2F%3Aarquivo): Machine discovery before the home page: `api-catalog` (RFC 9727, a linkset with the API and the MCP), `security.txt` (RFC 9116), `x402` (payment manifest: network, wallet and the routes that charge) and `mcp-registry-auth` (the official MCP registry key). (auth: none) - [`GET /apis.json`](/llms-full.txt?prefix=%2Fapis.json): APIs.json (apisjson.org, 0.19): the index APIs.io harvests — the API, the MCP, OpenAPI, guide and OKF bundle in one file. Also at `/.well-known/apis.json`. (auth: none) - [`POST /mcp`](/llms-full.txt?prefix=%2Fmcp): MCP server over HTTP (Streamable HTTP, JSON-RPC 2.0) — plugs into the client with nothing to install. (auth: none) - [`POST /api/guest`](/llms-full.txt?prefix=%2Fapi%2Fguest): Creates a guest `hp_…` — it is the anonymous owner of your monitors. (auth: none) - [`GET /api/endpoints`](/llms-full.txt?prefix=%2Fapi%2Fendpoints): Lists the owner's monitors, with the state of each one. (auth: guest) - [`POST /api/import/crontab`](/llms-full.txt?prefix=%2Fapi%2Fimport%2Fcrontab): Paste a `crontab -l` and get one monitor per scheduled line. (auth: guest) - [`GET /api/endpoints/:id/events`](/llms-full.txt?prefix=%2Fapi%2Fendpoints%2F%3Aid%2Fevents): The latest pings received at this monitor's ingest. (auth: hook) - [`POST /api/endpoints`](/llms-full.txt?prefix=%2Fapi%2Fendpoints): Creates a dead-man switch: silence beyond the interval becomes an alert. (auth: guest) - [`GET /api/endpoints/:id`](/llms-full.txt?prefix=%2Fapi%2Fendpoints%2F%3Aid): State of one monitor — accepts the owner's token or the monitor's own token. (auth: hook) - [`PATCH /api/endpoints/:id`](/llms-full.txt?prefix=%2Fapi%2Fendpoints%2F%3Aid): Changes the monitor's name, interval or alert channels. (auth: guest) - [`DELETE /api/endpoints/:id`](/llms-full.txt?prefix=%2Fapi%2Fendpoints%2F%3Aid): Deactivates the owner's monitor; it stops taking pings and alerting. (auth: guest) - [`GET /api/ingest-key`](/llms-full.txt?prefix=%2Fapi%2Fingest-key): Returns (minting it the first time) the key that lets a ping create its own monitor. (auth: guest) - [`DELETE /api/ingest-key`](/llms-full.txt?prefix=%2Fapi%2Fingest-key): Rotates the ingest key: the previous one stops creating monitors immediately. (auth: guest) - [`GET /in/:ingestKey/:slug`](/llms-full.txt?prefix=%2Fin%2F%3AingestKey%2F%3Aslug): Ping that CREATES its own monitor on the first hit — a whole fleet with no setup. (auth: none) - [`GET /in/:id`](/llms-full.txt?prefix=%2Fin%2F%3Aid): The ingest URL: this is where your cron or webhook proves it is alive. (auth: none) - [`GET /in/:id/start`](/llms-full.txt?prefix=%2Fin%2F%3Aid%2Fstart): Says the routine STARTED — it is what turns silence into duration. (auth: none) - [`GET /in/:id/fail`](/llms-full.txt?prefix=%2Fin%2F%3Aid%2Ffail): Says the routine FAILED — the alert leaves on the next 5-minute check. (auth: none) - [`GET /in/:id/:exit_code`](/llms-full.txt?prefix=%2Fin%2F%3Aid%2F%3Aexit_code): The shell's exit status, straight from `$?`: 0 is success, anything else is a failure. (auth: none) - [`POST /in/:id`](/llms-full.txt?prefix=%2Fin%2F%3Aid): The same ingest by POST, for whoever can only send webhooks. (auth: none) - [`GET /api/status-feed`](/llms-full.txt?prefix=%2Fapi%2Fstatus-feed): Returns (minting it the first time) the public status URL of all your monitors. (auth: guest) - [`DELETE /api/status-feed`](/llms-full.txt?prefix=%2Fapi%2Fstatus-feed): Rotates the feed token: the previous URL stops working immediately. (auth: guest) - [`GET /s/:token`](/llms-full.txt?prefix=%2Fs%2F%3Atoken): The status dashboard as a page — the link you send to the team, no header, no JS needed. (auth: none) - [`GET /s/:token.json`](/llms-full.txt?prefix=%2Fs%2F%3Atoken.json): The status dashboard as JSON, with no header at all — the token in the path is the credential. (auth: none) - [`GET /s/:token.rss`](/llms-full.txt?prefix=%2Fs%2F%3Atoken.rss): The same dashboard as RSS 2.0, for a feed reader, a chat bot or a status page. (auth: none) - [`GET /s/:token/metrics`](/llms-full.txt?prefix=%2Fs%2F%3Atoken%2Fmetrics): The same dashboard as a Prometheus scrape target — point your existing alerting at it. (auth: none) - [`GET /s/:token/:monitor.svg`](/llms-full.txt?prefix=%2Fs%2F%3Atoken%2F%3Amonitor.svg): A badge of one monitor, as an SVG you paste straight into a README. (auth: none) - [`GET /api/templates`](/llms-full.txt?prefix=%2Fapi%2Ftemplates): Ingest snippets (curl, cron, n8n) and the exact JSON we POST on a miss and on a recovery. (auth: none) - [`GET /api/billing`](/llms-full.txt?prefix=%2Fapi%2Fbilling): Free allowance, x402 prices in force and the state of the account's trial. (auth: none) - [`GET /api/me`](/llms-full.txt?prefix=%2Fapi%2Fme): The session's account, its monitors and the state of the trial. (auth: session) - [`GET /api/auth/bootstrap`](/llms-full.txt?prefix=%2Fapi%2Fauth%2Fbootstrap): Prepare the browser for global sign-in. (auth: none) - [`GET /api/account/profile`](/llms-full.txt?prefix=%2Fapi%2Faccount%2Fprofile): Read your global profile. (auth: session) - [`GET /api/account/avatar`](/llms-full.txt?prefix=%2Fapi%2Faccount%2Favatar): Read your global profile photo. (auth: session) - [`POST /api/auth/logout`](/llms-full.txt?prefix=%2Fapi%2Fauth%2Flogout): Revoke this product session. (auth: session) - [`GET /api/account/keys`](/llms-full.txt?prefix=%2Fapi%2Faccount%2Fkeys): List your API keys in this product. (auth: session) - [`POST /api/account/keys/create`](/llms-full.txt?prefix=%2Fapi%2Faccount%2Fkeys%2Fcreate): Create an API key for agents and scripts. (auth: session) - [`POST /api/account/keys/revoke`](/llms-full.txt?prefix=%2Fapi%2Faccount%2Fkeys%2Frevoke): Revoke one of your API keys. (auth: session) - [`POST /api/auth/claim`](/llms-full.txt?prefix=%2Fapi%2Fauth%2Fclaim): Moves what the guest created to the signed-in account: monitors, devices and their measurements, the status feed and the ingest key. (auth: session) - [`POST /api/contact`](/llms-full.txt?prefix=%2Fapi%2Fcontact): Write to the people behind the product — free, for people and agents alike. (auth: none) - [`POST /api/visit`](/llms-full.txt?prefix=%2Fapi%2Fvisit): Ping from the interface that increments the day's visits. Agents need not call it. (auth: none) - [`POST /api/pagamento/aberto`](/llms-full.txt?prefix=%2Fapi%2Fpagamento%2Faberto): The interface reports a visible payment prompt. Agents must not call this route. (auth: none) - [`GET /api/vitrine`](/llms-full.txt?prefix=%2Fapi%2Fvitrine): The product's public numbers: traffic, agents, usage and reliability, no money. (auth: none) - [`GET /api/vitrine/operador`](/llms-full.txt?prefix=%2Fapi%2Fvitrine%2Foperador): The product's full document on the operator panel — operator token only. (auth: none) - [`GET /api/vitrine/painel`](/llms-full.txt?prefix=%2Fapi%2Fvitrine%2Fpainel): The whole house panel, in the shape the gm reads — operator token only. (auth: none) - [`GET /api/vitrine/cursores`](/llms-full.txt?prefix=%2Fapi%2Fvitrine%2Fcursores): The resolved-error cursor per product (`borda`, `cli`) — operator token only. (auth: none) - [`GET /api/partners`](/llms-full.txt?prefix=%2Fapi%2Fpartners): Partnership, sponsorship and advertising: the product's placements with a suggested price, the public numbers next to them and how to propose. (auth: none) - [`GET /api/metrics`](/llms-full.txt?prefix=%2Fapi%2Fmetrics): Metrics of the last 7 days. With the operator token, includes payments. (auth: none) - [`GET /api/coletas`](/llms-full.txt?prefix=%2Fapi%2Fcoletas): Lists your measurements with commands adapted to each saved device environment. (auth: none) - [`POST /api/coletas`](/llms-full.txt?prefix=%2Fapi%2Fcoletas): Adds compatible measurements to a previously detected device. (auth: none) - [`GET /api/coletas/serie`](/llms-full.txt?prefix=%2Fapi%2Fcoletas%2Fserie): The latest readings of EVERY device you own, in one call. (auth: guest) - [`GET /api/coletas/:id/serie`](/llms-full.txt?prefix=%2Fapi%2Fcoletas%2F%3Aid%2Fserie): The latest readings of one device, for the screen that draws it. (auth: guest) - [`PATCH /api/coletas/:id`](/llms-full.txt?prefix=%2Fapi%2Fcoletas%2F%3Aid): Renames one measurement, or stops and resumes reading it. (auth: guest) - [`DELETE /api/coletas/:id`](/llms-full.txt?prefix=%2Fapi%2Fcoletas%2F%3Aid): Removes one measurement and frees that slot on the device. (auth: guest) - [`GET /api/ambientes`](/llms-full.txt?prefix=%2Fapi%2Fambientes): Saved environments owned by the current account or guest; empty without a session. (auth: none) - [`POST /api/ambientes`](/llms-full.txt?prefix=%2Fapi%2Fambientes): Register a device UUID before discovery and collector selection. (auth: none) - [`GET /api/ambientes/:id`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid): Read the detected environment and compatible measurements. (auth: guest) - [`POST /api/ambientes/:id/relatorio`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Frelatorio): Preview or save the allowlisted discovery report for one device. (auth: none) - [`GET /api/ambientes/:id/sonda.sh`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Fsonda.sh): The same identification script, served for people who prefer one short line. (auth: none) - [`POST /api/ambientes/:id/inputs`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Finputs): Create or rotate an authenticated collector channel for this device. (auth: guest) - [`GET /api/ambientes/:id/inputs`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Finputs): List this device's collector channels, their state and their live numbers. (auth: guest) - [`GET /api/ambientes/:id/inputs/:collector/setup`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Finputs%2F%3Acollector%2Fsetup): The saved setup of one collector channel: the configuration in use, its files and steps. (auth: guest) - [`GET /api/ambientes/:id/inputs/:collector/history`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Finputs%2F%3Acollector%2Fhistory): The batches this collector sent, newest first — filtered and paginated on the server. (auth: guest) - [`GET /api/ambientes/:id/inputs/:collector/history/:batch`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Finputs%2F%3Acollector%2Fhistory%2F%3Abatch): One received batch, decoded: its series with labels and values, or its NCPA checks. (auth: guest) - [`DELETE /api/ambientes/:id/inputs/:collector`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Finputs%2F%3Acollector): Revokes and removes one collector channel from a device. (auth: guest) - [`PATCH /api/ambientes/:id/inputs/:collector`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid%2Finputs%2F%3Acollector): Pauses or resumes one collector channel. (auth: guest) - [`GET /api/inputs/serie`](/llms-full.txt?prefix=%2Fapi%2Finputs%2Fserie): Every collector channel of the caller, with state and live numbers, in one response. (auth: guest) - [`PATCH /api/ambientes/:id`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid): Renames a device, and its measurements along with it. (auth: guest) - [`DELETE /api/ambientes/:id`](/llms-full.txt?prefix=%2Fapi%2Fambientes%2F%3Aid): Removes a device and every measurement on it, in one call. (auth: guest) - [`POST /api/credito`](/llms-full.txt?prefix=%2Fapi%2Fcredito): Top up prepaid credit: pay once with x402 and get the token that debits on any API of the house. (auth: none) - [`GET /api/credito`](/llms-full.txt?prefix=%2Fapi%2Fcredito): Credit balance and statement — the latest movements, without returning the token. (auth: credito) - [`GET /api/pricing`](/llms-full.txt?prefix=%2Fapi%2Fpricing): Current prices and free allowances. (auth: none)