Make

Every Make scenario can end with an HTTP heartbeat. One HTTP module on the success path, one on the error route. Same shape as the n8n and Zapier docs.

Setup

  1. In your scenario, add a connection variable AGENTPING_PING_TOKEN. Paste the per-agent ping token from the AgentPing settings page.
  2. At the end of the success path, add an HTTP module configured as below.
  3. Add an Error handler route on any module that can fail; point it at a second HTTP module with status=fail.

The success heartbeat

HTTP module configuration:

  • URL: https://eu.ingest.agentping.io/v1/ping
  • Method: GET
  • Query string:
Key Value
key {{connection.AGENTPING_PING_TOKEN}}
agent customer-enrichment
status ok
duration_ms {{round((now - executionStart) * 1000)}}

The dashboard shows the run within a second. For richer payloads, use a POST against /v1/heartbeats with a JSON body assembled from Make expressions.

Capturing cost

If your scenario calls an LLM via Make's OpenAI or Anthropic modules, the response includes usage.prompt_tokens and usage.completion_tokens. Add a "Set variable" module to compute cost:

cost_usd = (1.usage.prompt_tokens / 1000000) * 5.00 + (1.usage.completion_tokens / 1000000) * 15.00

Pipe cost_usd into the heartbeat as a query parameter. See Heartbeats for why heartbeat cost is trusted as-supplied.

The error heartbeat

On any module that can fail, right-click → "Add error handler" → "Resume". Route the error path to a second HTTP module:

  • URL: https://eu.ingest.agentping.io/v1/ping
  • Method: GET
  • Query string:
Key Value
key {{connection.AGENTPING_PING_TOKEN}}
agent customer-enrichment
status fail
metadata {{1.error.message}}

Two modules, same agent slug, opposite outcomes.

Schedule monitoring

If the scenario runs on a Make schedule (every 15 minutes, daily at 3am, etc.), set the same cron on the agent in the dashboard. Pulse pages you when an expected fire is missed; Make doesn't notify you when a scheduled scenario fails to start.

Idempotency

For long scenarios with retries, include Make's execution ID as the run ID so retries are deduplicated:

id = run_eu_{{ replace(executionId, "-", "") }}

Heartbeat retries with the same id and matching fields are 200 no-ops. See Identifiers.