canonical: https://jentic.com/apis/elmah.io/elmah

# elmah.io API

elmah.io is an error-logging and uptime-monitoring service for .NET, JavaScript, and other web applications. The public REST API exposes 24 endpoints across logs, messages, deployments, heartbeats, installations, source maps, and uptime checks - every integration that ships log entries to elmah.io speaks this API. Authentication is a single api_key passed as a query parameter against https://api.elmah.io. The API is the only supported way to ingest log messages, mark them as fixed, and read deployment markers programmatically.

## For AI agents

Ingest and query application error logs in elmah.io: create messages, mark messages as fixed, manage logs and deployments, and submit heartbeats. Authenticated with an api_key query parameter.

## Scope

Does not handle metrics, distributed tracing, real-user monitoring, or paging on-call engineers - use for application error logging, deployment markers, and heartbeat monitoring only.

## Capabilities

- Ingest error and log messages via POST `/v3/messages/{logId}` including bulk submission with `/v3/messages/{logId}/_bulk`
- Mark a single message or a queryable batch as fixed using the _fix endpoints
- List and delete logs, and disable or enable a log without deleting it
- Record deployment markers via `/v3/deployments` to correlate releases with error spikes
- Submit heartbeats from scheduled jobs and monitor missed heartbeats
- Upload source maps for minified JavaScript stack-trace symbolication
- Diagnose ingestion problems with GET `/v3/logs/{id}/_diagnose`

## Use cases

### Application Error Logging

Ship error and log entries from a web application into elmah.io for triage and search. POST `/v3/messages/{logId}` accepts a single message and `/v3/messages/{logId}/_bulk` handles batched submissions during high-volume incidents. Once ingested, GET `/v3/messages/{logId}` supports query-based filtering so an on-call engineer can drill into a specific error class. Designed for production traffic of millions of messages per day per log.

Example prompt: POST a message with severity=Error and title='NullReferenceException at /checkout' to log_id=abc123, then query the log for the last 10 messages with the same title

### Deployment Tracking and Release Correlation

Record a deployment marker at every release so error spikes can be attributed to specific deploys. POST `/v3/deployments` creates the marker, and GET `/v3/deployments` lists prior releases for the dashboard. Combined with the messages endpoints, this lets a release-engineering tool answer 'which deploy introduced this error class?' programmatically.

Example prompt: POST a deployment with version='2026.6.10', then list deployments and confirm the new entry is at the top

### Heartbeat Monitoring for Scheduled Jobs

Use elmah.io as a dead-man's-switch for cron jobs and scheduled workers by calling POST `/v3/heartbeats/{logId}/{id}` on every successful run. Missed heartbeats raise an alert in elmah.io, which lets an SRE team detect silent failures in batch jobs without building a separate uptime system.

Example prompt: Send a heartbeat with reason='nightly billing run completed' for log_id=abc123 and heartbeat_id=billing-nightly

### Triaging and Marking Errors Fixed

Build an internal triage tool that lets engineers mark errors as fixed in bulk after a deploy. POST `/v3/messages/{logId}/_fix` accepts a query so a single call can mark every NullReferenceException in /checkout as fixed, while POST `/v3/messages/{logId}/{id}/_fix` handles single-message fixes. Hide endpoints exist for noisy errors that should be suppressed without claiming a fix.

Example prompt: Mark all messages in log_id=abc123 with title='NullReferenceException at /checkout' as fixed via POST `/v3/messages/{logId}/_fix`

### AI Agent Integration via Jentic

Build an AI on-call agent that pages an engineer when a new error class spikes, then drafts a fix and marks the matching messages as fixed once a PR merges. Through Jentic, the agent searches by intent, loads the message-fix schema, and executes without holding the elmah.io api_key in its prompt.

Example prompt: Search Jentic for 'mark elmah messages as fixed', load the schema for POST `/v3/messages/{logId}/_fix`, and mark messages matching the resolved error query as fixed

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/v3/messages/{logId}` | Create a new message |
| POST | `/v3/messages/{logId}/_bulk` | Create one or more new messages |
| POST | `/v3/messages/{logId}/_fix` | Mark a list of messages as fixed by query |
| POST | `/v3/deployments` | Create a deployment marker |
| POST | `/v3/heartbeats/{logId}/{id}` | Create a heartbeat |
| GET | `/v3/logs/{id}/_diagnose` | Diagnose ingestion problems for a log |
| POST | `/v3/sourcemaps/{logId}` | Upload a source map |

## Key resources

- **Logs** — List, fetch, delete, enable, disable, and diagnose individual logs
- **Messages** — Submit single and bulk messages, fetch, fix, hide, and delete
- **Deployments** — Record and list deployment markers
- **Heartbeats** — Send heartbeats from scheduled jobs
- **Installations** — Register installations against a log
- **Source Maps** — Upload source maps for JavaScript stack-trace symbolication
- **Uptime Checks** — Manage uptime monitoring (closed beta)

## Why Jentic

- **Setup:** Wiring elmah.io by hand means handling its API-key auth, appending the api_key query parameter to every call, and mapping message, deployment, and heartbeat operations yourself. Through Jentic you install once, import the elmah.io API from the API Directory, store the API key once, and your agent calls it.
- **Permission scoping:** elmah.io puts the log id in the URL path (`/v3/messages/{logId}`, `/v3/heartbeats/{logId}/{id}`), so a rule can pin your agent to one log. You choose the operations it may call, so bulk writes or marking messages fixed are not included unless you add them.
- **Credential handling:** Your elmah.io API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'send an error log' or 'record a deployment marker', and Jentic returns the matching elmah.io operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Sentry API** — Sentry is a broader application-monitoring alternative to elmah.io's error-logging focus
- **PagerDuty API** — PagerDuty pages on-call engineers when elmah.io detects an error spike
- **GitHub REST API** — GitHub Releases mark deployments that elmah.io can correlate with error spikes

## FAQ

### What authentication does the elmah.io API use?

The elmah.io API uses an API key passed as a query parameter named api_key on every request. Through Jentic, the api_key is stored encrypted in the vault and appended to outgoing requests at execution time so the agent never sees the raw key. See https://docs.elmah.io/where-is-my-api-key/ for where to find your key.

### Can I bulk-submit messages to elmah.io?

Yes. POST `/v3/messages/{logId}/_bulk` accepts an array of messages in a single request, which is the recommended path for ingestion clients shipping more than a few messages per second to a single log.

### How do I mark a class of errors as fixed at once?

Use POST `/v3/messages/{logId}/_fix` with a query in the body to fix every matching message in one call. Single-message fixes go through POST `/v3/messages/{logId}/{id}/_fix` instead.

### Does elmah.io support deployment markers?

Yes. POST `/v3/deployments` records a deployment with version, description, and user metadata, and GET `/v3/deployments` lists prior markers. The dashboard overlays markers on error charts so spikes can be attributed to releases.

### How do I send a heartbeat for a scheduled job through Jentic?

Run the Jentic search query 'send an elmah.io heartbeat', load the input schema for POST `/v3/heartbeats/{logId}/{id}`, then execute with the heartbeat ID and a status. Missed heartbeats raise alerts in the elmah.io dashboard.

### Is the uptime-checks endpoint generally available?

GET `/v3/uptimechecks` is documented as currently in closed beta in the API spec; contact elmah.io support to be enrolled. The other endpoints in this API are generally available.

### Can I limit what my agent is allowed to do with the elmah.io API?

Yes. Because you run Jentic One yourself, your own rules decide which elmah.io operations and credentials the agent may use. Since elmah.io puts the log id in the URL path for calls like POST `/v3/messages/{logId}` and POST `/v3/heartbeats/{logId}/{id}`, you can pin the agent to a single log, and you choose the exact operations it may call. That means writes such as bulk ingestion via `/v3/messages/{logId}/_bulk` or marking messages fixed via `/v3/messages/{logId}/_fix` are excluded unless you grant them.
