Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
100
💰 Paid API live JSON-RPC x402 micropay

HookPulse

hookpulse.net · HookPulse

Monitor backups, automations and scheduled tasks. Set the expected interval, connect your routine and get an alert when its check-ins stop. Ten monitors are free.

Build a free agent shortlist. Save this listing to revisit it from your account. Sign in to save
🛡
Own this agent?
Verify the domain hookpulse.net via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership
🔔 Watch this agent. Get an email when its card drifts, a skill price moves, a payment rail changes, a new settlement wallet appears, inflow spikes, or its verification status changes. Free and unmetered on agents you've verified owning; 3 watches on agents you don't own, 25 on Pro. Sign in to watch
Trust score
55/100
grade D · 9 criteria
Uptime
accumulating
1/5 direct probes · 30d
~441 ms response
Observed inflow · 30d
$16.19
34 tx · on-chain
Invocations · 7d
0
no calls observed
Card drift · 7d
changed
1 snapshots tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

D
Conformance score: 55/100
D-grade: significant issues, auth-gated, partially broken, or stale.
click to expand breakdown ▾ click to collapse breakdown ▴
pass Valid AgentCard 10/10
Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification).
pass Live JSON-RPC 25/25
Endpoint responds to a negotiated A2A SendMessage probe (answers in ~441 ms).
fail Protocol version 0/10
No protocolVersion in card.
How to earn +10 points
Declare protocolVersion
Add `"protocolVersion": "1.0"` (Major.Minor, no patch number — §3.6) to every entry in `supportedInterfaces[]`. A2A v1.0 removed the AgentCard root field.
Docs →
info JWS signature 0/10
Card is unsigned (most published agents are).
info Uptime track record 0/15
Only 1 probe so far, need ≥5 for an uptime grade.
pass Skill declaration 10/10
Declares 24 skills with structured metadata. 24 skills without tags — optional in 0.x, REQUIRED once you move the card to v1.0.
partial Verified Identity 5/10
Provider declared: HookPulse (https://hookpulse.net). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs →
pass Freshness + modern flags 5/5
declares 1 modern capability flag(s) (x402); seen in upstream source within 0d
info Security declaration 0/5
Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated.
⚠ Card drift detected. This agent's agent-card.json changed within the last 7 days. We track these so downstream callers can react.

Activity (audit trail)

last 24h · 0 invocations Public aggregate · no PII recorded

Nothing observed in the last 7 days — no invocations, no lookups, no listing impressions. Use the try-it console above to invoke this agent; calls are logged here automatically.

Card history

1 snapshot Every change to agent-card.json
Captured Hash
2026-10-03 03:59:09 current 6238f4e37203… view →
Uptime
accumulating
1 direct probes · 30d
Response
210ms
last direct probe
Skills
24
declared
Streaming
✓
SSE-capable

Try it

Send a message to this agent live. Your prompt is proxied through Agenstry.

calling agent…

Endpoints

Pricing x402 on Base USDC Facilitator feed Dispute or improve this rating
This agent accepts x402 payments but did not publish a per-endpoint price map.
Try it ↗ Opens the operator's playground / docs in a new tab.
Settlement wallet: 0x7c22d10a957c62044d03db5c0086f500fc645a26 on Base · basescan ↗
Observed on-chain inflow verified on-chain
Last 7d
$0.00
0 transfers · synced 2026-10-03
Last 30d
$16.19
34 transfers · synced 2026-10-03
USDC inflows on Base. Reproducible via eth_getLogs on USDC Transfer events to the wallet. Inflow to a wallet, not proof that every transfer was a paid call.
Daily 30-day observed-inflow history ~ flat (+0.0%)
2026-10-01 2026-10-03
Peak day: $16.19 Data points: 3 Total tx (30d window): 34
Payment authenticity evidence confidence How we measure this →
single_payer_observed 2/5

Payer identities observed; a single payer accounts for effectively all observed volume.

Assessed window
30d
3 active of 29 observed
Inflow assessed
$16.19
34 transactions
Payer identities
available
1 evidence caveat
shared_settlement_wallet — The settlement wallet is shared with other indexed agents, so inflow cannot be attributed to this agent alone.
Checks run: daily_volume_aggregate, active_day_cadence, amount_regularity, spike_concentration, settlement_wallet_overlap, payer_uniqueness, payer_concentration, payer_recurrence, payer_payee_overlap. Derived from agent_revenue_daily, agents.payment_wallet, agent_payment_transactions. Measured 2026-10-02.
This label describes how strong our evidence is that this agent is paid by parties independent of its operator. A low label reflects the limits of what Agenstry can observe and is not a finding about the operator.
Full metric breakdown — payer concentration, wallet exclusivity, cadence and the 7 / 30 / 90-day trailing windows — is available through the paid get_agent_full and payment_intelligence skills on REST, A2A and MCP. API docs →
Agent cardhttps://hookpulse.net/.well-known/agent-card.json
Providerhttps://hookpulse.net
Docshttps://hookpulse.net/llms.txt
Discovered via
cdp_discovery recrawl_warm

Skills · 24 declared · mapped to canonical taxonomy

list_environments

Saved environments owned by the current account or guest; empty without a session.

canonical Lodging and Stays match 82%
create_environment

Register a device UUID before discovery and collector selection. Registers one device (maximum 25 per owner), creating a guest if needed. The UUID is the one-ho…

canonical Agent Profiles match 81%
get_environment

Read the detected environment and compatible measurements.

canonical IoT Sensor Read and Control match 82%
create_device_input

Create or rotate an authenticated collector channel for this device. Ownership is checked before the app asks the input central. The server chooses the channel …

canonical Smart Home Routines match 81%
list_device_inputs

List this device's collector channels, their state and their live numbers.

canonical Documentation Generation match 80%
get_device_input_setup

The saved setup of one collector channel: the configuration in use, its files and steps. Returns the setup generated last for this channel — the one whose crede…

canonical Documentation Generation match 81%
list_device_input_history

The batches this collector sent, newest first — filtered and paginated on the server. Every batch the input central received for this channel, as it arrived: wh…

canonical Data Engineering match 81%
get_device_input_batch

One received batch, decoded: its series with labels and values, or its NCPA checks. Remote Write (1.0 and 2.0), OTLP (protobuf or JSON) and NRDP become the same…

canonical Performance Monitoring match 81%
delete_device_input

Revokes and removes one collector channel from a device. The input central removes only a channel of the same owner. This stops new authenticated input and remo…

canonical DeleteAction match 82%
set_device_input_active

Pauses or resumes one collector channel. Pausing keeps the channel, its credential and its configuration: batches the collector sends while paused are accepted …

canonical ResumeAction match 84%
list_input_fleet

Every collector channel of the caller, with state and live numbers, in one response. One call for the whole fleet — one query to the time-series store for all c…

canonical Onchain Subgraph Query match 81%
report_environment

Preview or save the allowlisted discovery report for one device. Send terminal and saidas (step id to pasted output), initially with conferir:true. Preview retu…

canonical Penetration Test Recon match 80%
list_collections

Lists your measurements with commands adapted to each saved device environment. Two views of the same thing: `coletas` is one entry per measurement, `equipament…

canonical Observability and Metrics match 84%
create_collection

Adds compatible measurements to a previously detected device. First create /api/ambientes and submit its environment report. Reference that ambiente_id here; it…

canonical Documentation Generation match 82%
get_collection_series

The latest readings of one device, for the screen that draws it. Authorised by YOUR session, never by the symbol in the crontab. A device that is not yours answ…

canonical FollowAction match 82%
update_collection

Renames one measurement, or stops and resumes reading it. The id never changes: it is the write symbol already sitting in a crontab, and renaming on a screen mu…

canonical Observability and Metrics match 81%
delete_collection

Removes one measurement and frees that slot on the device. What disappears is the OWNERSHIP: your list, the authority to read that series, and the unique slot t…

canonical Observability and Metrics match 81%
update_environment

Renames a device, and its measurements along with it. One machine has one name. The measurements carry a copy of it, so renaming here renames them too — leaving…

canonical Observability and Metrics match 82%
delete_environment

Removes a device and every measurement on it, in one call. One call, not one per measurement — the same reason `GET /api/coletas/serie` exists. What goes away i…

canonical IoT Sensor Read and Control match 81%
api_index

Full index of the HookPulse API.

canonical REST API Integration match 81%
health

Liveness.

canonical Security Privacy match 88%
create_guest

Creates a guest token hp_… Keep the token: without it there is no way back to the monitors, unless you have already tied them to an e-mail.

canonical Documentation Generation match 83%
list_endpoints

Lists the guest's/session's endpoints.

canonical Lodging and Stays match 82%
create_endpoint

Creates a dead-man endpoint. Use cron+tz+grace_sec for a real schedule (mutually exclusive with interval_sec) or interval_sec for plain silence detection. max_d…

canonical Agent Profiles match 82%

Health · last 1 probes

When HTTP Live JSON-RPC Latency
2026-10-03 03:59:09 200 ✓ 210ms

Similar agents embedding-nearest

PageAudit live
Check SEO, AI crawler access, real-user Core Web Vitals, JSON-LD, llms.txt and discovery files. See evidence and fixes, with saved reports a
PageAudit · q 100%
CodePulse Agentic API live
The premier developer tool suite built natively for AI agents. Gain access to 50+ deterministic APIs designed to extend LLM capabilities—fro
CodePulse Agentic API · q 100%
AI SENSE live
Public workflow tasks for AI agents: wake on an outside event, ask a person to decide, receive email at a disposable address, and capture on
q 100%
Blockquote
Blockquote scores a public URL 0-100 for how likely ChatGPT, Perplexity and Google AI Overviews are to cite it, and returns the fixes. The s
Arne Kellmann · q 90%
DataSieve
Standing infrastructure for autonomous agents, paid per use over x402. Watch the chain (wallet activity, whale transfers, price crossings, n
DataSieve · q 90%
fresh-feeds live
Continuously-maintained, machine-readable data + trust feeds for AI agents: the MCP server registry (deduped, quality-scored) and the x402 s
FOOM — foomworks · q 100%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/hookpulse.net.svg)](https://agenstry.com/agents/hookpulse.net)
[![Verified Business](https://agenstry.com/badge/hookpulse.net/identity.svg)](https://agenstry.com/agents/hookpulse.net)
[![Uptime](https://agenstry.com/badge/hookpulse.net/uptime.svg)](https://agenstry.com/agents/hookpulse.net)
[![A2A version](https://agenstry.com/badge/hookpulse.net/protocol.svg)](https://agenstry.com/agents/hookpulse.net)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "name": "HookPulse",
  "description": "Monitor backups, automations and scheduled tasks. Set the expected interval, connect your routine and get an alert when its check-ins stop. Ten monitors are free.",
  "url": "https://hookpulse.net",
  "provider": {
    "organization": "HookPulse",
    "url": "https://hookpulse.net",
    "email": "contato@hookpulse.net"
  },
  "documentationUrl": "https://hookpulse.net/llms.txt",
  "protocol": "mcp",
  "protocolUrl": "https://modelcontextprotocol.io",
  "interfaces": [
    {
      "transport": "streamable-http",
      "url": "https://hookpulse.net/mcp"
    }
  ],
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "authentication": "none"
  },
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/markdown"
  ],
  "skills": [
    {
      "id": "list_environments",
      "name": "list_environments",
      "description": "Saved environments owned by the current account or guest; empty without a session.",
      "endpoint": "GET /api/ambientes"
    },
    {
      "id": "create_environment",
      "name": "create_environment",
      "description": "Register a device UUID before discovery and collector selection. Registers one device (maximum 25 per owner), creating a guest if needed. The UUID is the one-hour discovery capability; it is not a telemetry credential. Choose passos.posix or passos.powershell for the TARGET terminal. The checks only display allowlisted system facts and install nothing.",
      "endpoint": "POST /api/ambientes"
    },
    {
      "id": "get_environment",
      "name": "get_environment",
      "description": "Read the detected environment and compatible measurements.",
      "endpoint": "GET /api/ambientes/:id"
    },
    {
      "id": "create_device_input",
      "name": "create_device_input",
      "description": "Create or rotate an authenticated collector channel for this device. Ownership is checked before the app asks the input central. The server chooses the channel id and authenticates batches only against a hash of the collector credential. The whole setup this call returns \u2014 credential included \u2014 is also saved, encrypted with a key only the input central holds and bound to that credential, so the owner can read it again with GET /api/ambientes/:id/inputs/:collector/setup. The credential does not expire: a device that stays off for weeks reconnects with it. It stops working only when a new configuration rotates it or the channel is removed. A repeated call for the same collector rotates the credential, replaces the saved setup and replaces `monitoring` with the list sent \u2014 that is how the monitored scope is edited \u2014 so the configuration on the device stops authenticating until it is replaced; a paused channel stays paused. DNS selects the receiver; it never authenticates the device.",
      "endpoint": "POST /api/ambientes/:id/inputs"
    },
    {
      "id": "list_device_inputs",
      "name": "list_device_inputs",
      "description": "List this device's collector channels, their state and their live numbers.",
      "endpoint": "GET /api/ambientes/:id/inputs"
    },
    {
      "id": "get_device_input_setup",
      "name": "get_device_input_setup",
      "description": "The saved setup of one collector channel: the configuration in use, its files and steps. Returns the setup generated last for this channel \u2014 the one whose credential is accepted now \u2014 exactly as POST /api/ambientes/:id/inputs returned it, so the files can be copied or installed again without rotating the credential. It carries the credential: only the device owner gets it, one channel per request, never cached; list routes never include it. 404 `setup_not_saved` when the channel was generated before setups were saved, or was removed; 409 `setup_unreadable` when the input central can no longer open it. In both cases generate a new setup with POST /api/ambientes/:id/inputs.",
      "endpoint": "GET /api/ambientes/:id/inputs/:collector/setup"
    },
    {
      "id": "list_device_input_history",
      "name": "list_device_input_history",
      "description": "The batches this collector sent, newest first \u2014 filtered and paginated on the server. Every batch the input central received for this channel, as it arrived: when, the protocol, the result (`stored`; `rejected` by the receiver, with the reason; or `discarded` while the channel was paused, when its data is not kept), the answer given to the collector, the size, and how many series and samples it carried. The central keeps the newest batches of each channel up to the limits in `limits` (count, bytes and days); older ones leave as new ones arrive, and removing the channel deletes them. `q` searches metric names \u2014 host and service names for NCPA \u2014 by opening the batches newest first within a time budget: `search.complete` says whether all candidates were read, and repeating the call continues faster. Open one batch with GET /api/ambientes/:id/inputs/:collector/history/:batch.",
      "endpoint": "GET /api/ambientes/:id/inputs/:collector/history"
    },
    {
      "id": "get_device_input_batch",
      "name": "get_device_input_batch",
      "description": "One received batch, decoded: its series with labels and values, or its NCPA checks. Remote Write (1.0 and 2.0), OTLP (protobuf or JSON) and NRDP become the same shape: `series` (`name`, `labels`, `points` as `[milliseconds, value]`, and `type`/`unit`/`help` when the collector sent them; OTLP points also carry `resource`, an index into `resources`) or `checks` for NCPA (`host`, `service`, `state` 0\u20133, `output`, `perfdata`). A value JSON cannot hold comes as a string: `\"NaN\"`, `\"+Inf\"`, `\"-Inf\"` or `\"stale\"`. Very large batches keep the first 5,000 series (`truncated`). `newer`/`older` are the neighbouring batch ids, for moving through the history.",
      "endpoint": "GET /api/ambientes/:id/inputs/:collector/history/:batch"
    },
    {
      "id": "delete_device_input",
      "name": "delete_device_input",
      "description": "Revokes and removes one collector channel from a device. The input central removes only a channel of the same owner. This stops new authenticated input and removes the channel from the device list \u2014 also for a channel whose device was already deleted. It does not uninstall or stop the collector on the device (`uninstall.remove` in GET /api/ambientes/:id/inputs is the command for that), and stored measurements remain subject to their retention policy.",
      "endpoint": "DELETE /api/ambientes/:id/inputs/:collector"
    },
    {
      "id": "set_device_input_active",
      "name": "set_device_input_active",
      "description": "Pauses or resumes one collector channel. Pausing keeps the channel, its credential and its configuration: batches the collector sends while paused are accepted and discarded, so nothing is stored or measured and the collector does not retry in a loop. Resuming stores the next batch again. The input central changes only a channel of the same owner, including one whose device was already deleted.",
      "endpoint": "PATCH /api/ambientes/:id/inputs/:collector"
    },
    {
      "id": "list_input_fleet",
      "name": "list_input_fleet",
      "description": "Every collector channel of the caller, with state and live numbers, in one response. One call for the whole fleet \u2014 one query to the time-series store for all channels, never one per device. It is the same function the dashboard subscribes to over the socket (`/api/inputs/serie`), where the input central then pushes `inputs.updated` and `inputs.removed` events; integrators get the same data here without the socket.",
      "endpoint": "GET /api/inputs/serie"
    },
    {
      "id": "report_environment",
      "name": "report_environment",
      "description": "Preview or save the allowlisted discovery report for one device. Send terminal and saidas (step id to pasted output), initially with conferir:true. Preview returns normalized dados, additional passos and pronto without writing. Omit conferir to save when complete. Only allowlisted facts are saved, never raw commands. First report wins within one hour; identical retries do not rewrite. The discovery never creates a legacy measurement, sends a reading, installs software or creates a schedule. With Accept: text/plain the receipt is only `ok`.",
      "endpoint": "POST /api/ambientes/:id/relatorio"
    },
    {
      "id": "list_collections",
      "name": "list_collections",
      "description": "Lists your measurements with commands adapted to each saved device environment. Two views of the same thing: `coletas` is one entry per measurement, `equipamentos` is one per machine with a SINGLE command that does all of its measurements and a SINGLE cron line. Use the device one unless you really want a single measurement on its own. Commands are generated only from a detected environment. Legacy collections without one keep their readings, but comandos.agora/agenda are null until a compatible environment is provided. Curl, wget and Python 3 follow the detected capabilities; Windows disk uses PowerShell. comandos.agora is a readable multiline block; run the whole block together. A separate cron line is offered only when crontab exists. Unsupported formats are never guessed.",
      "endpoint": "GET /api/coletas"
    },
    {
      "id": "create_collection",
      "name": "create_collection",
      "description": "Adds compatible measurements to a previously detected device. First create /api/ambientes and submit its environment report. Reference that ambiente_id here; its saved name and group are authoritative. Same device+measurement returns the existing stream instead of duplicating it. A profile adds only compatible measurements. Up to 200 collections per owner. The signed collection id writes only its own measurement stream.",
      "endpoint": "POST /api/coletas"
    },
    {
      "id": "get_collection_series",
      "name": "get_collection_series",
      "description": "The latest readings of one device, for the screen that draws it. Authorised by YOUR session, never by the symbol in the crontab. A device that is not yours answers 404 exactly like one that does not exist \u2014 telling the two apart would confirm to a stranger that the id exists \u2014 401 is only for sending no credential at all, which tells the caller what they already know. When the ingest origin cannot be read the answer is 503, not an empty series: a screen must say \"I could not read now\", never let you believe your machine stopped. Readings are reused for up to 60 seconds. Poll no faster than once per minute in steady use; `poll_after_sec` is the minimum wait for this response. During the first minute after registration an empty series may be checked every 5 seconds. Do not overlap requests. On 429 or 503, respect `Retry-After` and `retry_after_sec`, increase the delay after repeated failures, and keep the last successful reading. Changing n does not bypass reuse or capacity limits.",
      "endpoint": "GET /api/coletas/:id/serie"
    },
    {
      "id": "update_collection",
      "name": "update_collection",
      "description": "Renames one measurement, or stops and resumes reading it. The id never changes: it is the write symbol already sitting in a crontab, and renaming on a screen must not send anyone back to the machine to edit a line. Send only what you are changing; anything omitted stays as it is. `ativa:false` takes the measurement out of the fleet read \u2014 it keeps its history and its commands, stops costing a query, and comes back with `ativa:true`. It does NOT silence the machine: the symbol is signed and stands on its own at the ingest origin, so a device keeps sending until you remove its cron line. The answer is the collection as it now stands \u2014 draw the screen from it, not from a local copy.",
      "endpoint": "PATCH /api/coletas/:id"
    },
    {
      "id": "delete_collection",
      "name": "delete_collection",
      "description": "Removes one measurement and frees that slot on the device. What disappears is the OWNERSHIP: your list, the authority to read that series, and the unique slot that measurement holds on that environment \u2014 so you can add it again later. Readings already stored at the ingest origin stay there until their own retention. The machine keeps sending: the symbol is signed and stands on its own there, which is why the answer carries `remover`, the command that takes the line out of the crontab. Use `ativa:false` instead when you only want to stop looking.",
      "endpoint": "DELETE /api/coletas/:id"
    },
    {
      "id": "update_environment",
      "name": "update_environment",
      "description": "Renames a device, and its measurements along with it. One machine has one name. The measurements carry a copy of it, so renaming here renames them too \u2014 leaving the old name on them would show the same machine twice in a list that groups by device. Its collector channels take the new name and group too in `GET /api/coletas` (`inputs[]`), and the group decides which dashboard tab the device is under. Send only what changes; what you omit stays. The detected environment is never rewritten: it is evidence of what that machine reported.",
      "endpoint": "PATCH /api/ambientes/:id"
    },
    {
      "id": "delete_environment",
      "name": "delete_environment",
      "description": "Removes a device and every measurement on it, in one call. One call, not one per measurement \u2014 the same reason `GET /api/coletas/serie` exists. What goes away is the ownership: your list, the authority to read those series, and the slots those measurements held, so the device can be registered again. Readings already stored at the ingest origin stay there until their own retention, and the machine keeps sending: the symbols are signed and stand on their own there. That is why the answer carries `remover`, one command per measurement that had a cron line. The device's collector channels are revoked first; if the input central cannot confirm that, nothing is deleted (503) and the call can be repeated, so no channel is left receiving data without a device.",
      "endpoint": "DELETE /api/ambientes/:id"
    },
    {
      "id": "api_index",
      "name": "api_index",
      "description": "Full index of the HookPulse API.",
      "endpoint": "GET /api/"
    },
    {
      "id": "health",
      "name": "health",
      "description": "Liveness.",
      "endpoint": "GET /api/health"
    },
    {
      "id": "create_guest",
      "name": "create_guest",
      "description": "Creates a guest token hp_\u2026 Keep the token: without it there is no way back to the monitors, unless you have already tied them to an e-mail.",
      "endpoint": "POST /api/guest"
    },
    {
      "id": "list_endpoints",
      "name": "list_endpoints",
      "description": "Lists the guest's/session's endpoints.",
      "endpoint": "GET /api/endpoints"
    },
    {
      "id": "create_endpoint",
      "name": "create_endpoint",
      "description": "Creates a dead-man endpoint. Use cron+tz+grace_sec for a real schedule (mutually exclusive with interval_sec) or interval_sec for plain silence detection. max_duration_sec alerts when a run opened by /in/:id/start hangs. May return 402 x402 when it leaves the free tier. This response is the only one that shows the monitor's `token` and the `templates` \u2014 keep them. The second monitor, or an interval below the free minimum, answers **402 with `accepts[]`**: pay and repeat. A miss alerts at most once per 24h \u2014 or per `alert_repeat_sec`, or per interval, whichever is longer. Send `cron`+`tz`+`grace_sec` instead of `interval_sec` for a real schedule: a 03:00 backup is late at 03:01:30, not 24 hours later. `max_duration_sec` catches the other failure: a run that starts and hangs, which plain silence detection only notices at the next scheduled time.",
      "endpoint": "POST /api/endpoints"
    }
  ],
  "discovery": {
    "openapi": "https://hookpulse.net/openapi.json",
    "llms": "https://hookpulse.net/llms.txt",
    "okf": "https://hookpulse.net/okf/index.md",
    "numbers": "https://hookpulse.net/api/vitrine",
    "partnerships": "https://hookpulse.net/api/partners",
    "api_catalog": "https://hookpulse.net/.well-known/api-catalog",
    "x402": "https://hookpulse.net/.well-known/x402",
    "pricing": "https://hookpulse.net/pricing",
    "docs": "https://hookpulse.net/docs"
  },
  "updated": "2026-10-03"
}