elmah.io API V3 API

This is the public REST API for elmah.io. All of the integrations communicates with elmah.io through this API.For additional help getting started with the API, visit the following help articles:[Using the REST API](https://docs.elmah.io/using-the-rest-api/)[Where is my API key?](https://docs.elmah.i

GitHub OpenAPI

Operations 24

GET /v3/deployments Fetch a list of deployments. #
POST /v3/deployments Create a new deployment. #
GET /v3/deployments/{id} Fetch a deployment by its ID. #
DELETE /v3/deployments/{id} Delete a deployment by its ID. #
POST /v3/heartbeats/{logId}/{id} Create a new heartbeat. #
POST /v3/installations/{logId} Create a new installation. #
GET /v3/logs Fetch a list of logs. #
POST /v3/logs Create a new log. #
GET /v3/logs/{id} Fetch a log by its ID. #
DELETE /v3/logs/{id} Delete a log by its ID. #
POST /v3/logs/{id}/_disable Disable a log by its ID. #
POST /v3/logs/{id}/_enable Enable a log by its ID. #
GET /v3/logs/{id}/_diagnose Help diagnose logging problems. #
GET /v3/messages/{logId} Fetch messages from a log. #
DELETE /v3/messages/{logId} Deletes a list of messages by logid and query. #
POST /v3/messages/{logId} Create a new message. #
GET /v3/messages/{logId}/{id} Fetch a message by its ID. #
DELETE /v3/messages/{logId}/{id} Delete a message by its ID. #
POST /v3/messages/{logId}/_fix Mark a list of messages as fixed by logid and query. #
POST /v3/messages/{logId}/{id}/_hide Hide a message by its ID. #
POST /v3/messages/{logId}/{id}/_fix Fix a message by its ID. #
POST /v3/messages/{logId}/_bulk Create one or more new messages. #
POST /v3/sourcemaps/{logId} Create or update a translation between a minified JavaScript path to the minified JavaScript and source map files. #
GET /v3/uptimechecks Fetch a list of uptime checks. Currently in closed beta. Get in contact to get access to this endpoint. #

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/elmah-io:elmah-io-api-v3-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

elmah-io-v3-openapi.json Raw ↑
{
  "swagger": "2.0",
  "info": {
    "title": "elmah.io API",
    "description": "This is the public REST API for elmah.io. All of the integrations communicates with elmah.io through this API.<br/><br/>For additional help getting started with the API, visit the following help articles:<br/><ul><li>[Using the REST API](https://docs.elmah.io/using-the-rest-api/)</li><li>[Where is my API key?](https://docs.elmah.io/where-is-my-api-key/)</li><li>[Where is my log ID?](https://docs.elmah.io/where-is-my-log-id/)</li><li>[How to configure API key permissions](https://docs.elmah.io/how-to-configure-api-key-permissions/)</li></ul>",
    "version": "v3"
  },
  "paths": {
    "/v3/deployments": {
      "get": {
        "tags": [
          "Deployments"
        ],
        "summary": "Fetch a list of deployments.",
        "description": "Required permission: `deployments_read`",
        "operationId": "Deployments_GetAll",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Request for deployments successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Deployment"
              }
            }
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the deployment API without deployment tracking enabled or trial expired."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      },
      "post": {
        "tags": [
          "Deployments"
        ],
        "summary": "Create a new deployment.",
        "description": "Required permission: `deployments_write`",
        "operationId": "Deployments_Create",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The deployment object to create.",
            "schema": {
              "$ref": "#/definitions/CreateDeployment"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Deployment was created.",
            "schema": {
              "$ref": "#/definitions/CreateDeploymentResult"
            }
          },
          "400": {
            "description": "Model not valid."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the deployment API without deployment tracking enabled or trial expired."
          },
          "404": {
            "description": "Specified log not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/deployments/{id}": {
      "get": {
        "tags": [
          "Deployments"
        ],
        "summary": "Fetch a deployment by its ID.",
        "description": "Required permission: `deployments_read`",
        "operationId": "Deployments_Get",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the deployment to fetch.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Request for deployment successful.",
            "schema": {
              "$ref": "#/definitions/Deployment"
            }
          },
          "400": {
            "description": "Id not specified."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Deployment with specified id not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      },
      "delete": {
        "tags": [
          "Deployments"
        ],
        "summary": "Delete a deployment by its ID.",
        "description": "This endpoint doesn't clear the version number of messages already annotated with this deployment version.<br/><br/>Required permission: `deployments_delete`",
        "operationId": "Deployments_Delete",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the deployment to delete.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Deployment was deleted."
          },
          "400": {
            "description": "Id not specified."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the deployment API without deployment tracking enabled or trial expired."
          },
          "404": {
            "description": "Deployment with specified id not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/heartbeats/{logId}/{id}": {
      "post": {
        "tags": [
          "Heartbeats"
        ],
        "summary": "Create a new heartbeat.",
        "description": "Required permission: `heartbeats_write`",
        "operationId": "Heartbeats_Create",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the heartbeat check.",
            "required": true,
            "type": "string"
          },
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the heartbeat check.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The details of the heartbeat.",
            "schema": {
              "$ref": "#/definitions/CreateHeartbeat"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Heartbeat was created."
          },
          "400": {
            "description": "Model not valid."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the heartbeats API without heartbeats enabled or trial expired."
          },
          "404": {
            "description": "The specified log or heartbeat was not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/installations/{logId}": {
      "post": {
        "tags": [
          "Installations"
        ],
        "summary": "Create a new installation.",
        "description": "Required permission: `messages_write`",
        "operationId": "Installations_Create",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the installation.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The installation object to create.",
            "schema": {
              "$ref": "#/definitions/CreateInstallation"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Installation was created."
          },
          "400": {
            "description": "Model not valid."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "404": {
            "description": "Specified log not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/logs": {
      "get": {
        "tags": [
          "Logs"
        ],
        "summary": "Fetch a list of logs.",
        "description": "Required permission: `logs_read`",
        "operationId": "Logs_GetAll",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Request for logs successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Log"
              }
            }
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      },
      "post": {
        "tags": [
          "Logs"
        ],
        "summary": "Create a new log.",
        "description": "Required permission: `logs_write`",
        "operationId": "Logs_Create",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The log object to create.",
            "schema": {
              "$ref": "#/definitions/CreateLog"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Log where successfully created.",
            "schema": {
              "$ref": "#/definitions/CreateLogResult"
            }
          },
          "400": {
            "description": "Something wrong with the parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/logs/{id}": {
      "get": {
        "tags": [
          "Logs"
        ],
        "summary": "Fetch a log by its ID.",
        "description": "Required permission: `logs_read`",
        "operationId": "Logs_Get",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the log to fetch.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Request for log successful.",
            "schema": {
              "$ref": "#/definitions/Log"
            }
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      },
      "delete": {
        "tags": [
          "Logs"
        ],
        "summary": "Delete a log by its ID.",
        "description": "Only empty logs can be deleted. Make sure to delete all messages (including hidden messages) before calling this endpoint.<br/><br/>Required permission: `logs_delete`",
        "operationId": "Logs_Delete",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the log to delete.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Log was deleted."
          },
          "400": {
            "description": "Id not specified."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log not found."
          },
          "409": {
            "description": "Log contains data and cannot be deleted."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/logs/{id}/_disable": {
      "post": {
        "tags": [
          "Logs"
        ],
        "summary": "Disable a log by its ID.",
        "description": "Required permission: `logs_write`",
        "operationId": "Logs_Disable",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the log to disable.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Log was disabled."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/logs/{id}/_enable": {
      "post": {
        "tags": [
          "Logs"
        ],
        "summary": "Enable a log by its ID.",
        "description": "Required permission: `logs_write`",
        "operationId": "Logs_Enable",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the log to enable.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Log was enabled."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/logs/{id}/_diagnose": {
      "get": {
        "tags": [
          "Logs"
        ],
        "summary": "Help diagnose logging problems.",
        "description": "Required permission: `messages_write`",
        "operationId": "Logs_Diagnose",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the log to diagnose.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Log was diagnosed.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/messages/{logId}": {
      "get": {
        "tags": [
          "Messages"
        ],
        "summary": "Fetch messages from a log.",
        "description": "Required permission: `messages_read`",
        "operationId": "Messages_GetAll",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the messages.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "pageIndex",
            "description": "The page number of the result. When using pageIndex and pageSize only 10,000 messages can be returned. For example, if setting pageSize to 100 and pageIndex to 100, no log messages will be returned. To request more than 10,000 log messages you should use the searchAfter property instead.",
            "type": "integer",
            "format": "int32",
            "default": 0
          },
          {
            "in": "query",
            "name": "pageSize",
            "description": "The number of messages to load (max 100) or 15 if not set.",
            "type": "integer",
            "format": "int32",
            "default": 15
          },
          {
            "in": "query",
            "name": "query",
            "description": "A full-text or Lucene query to limit the messages by.",
            "type": "string"
          },
          {
            "in": "query",
            "name": "from",
            "description": "A start date and time to search from (not included).",
            "type": "string",
            "format": "date-time"
          },
          {
            "in": "query",
            "name": "to",
            "description": "An end date and time to search to (not included).",
            "type": "string",
            "format": "date-time"
          },
          {
            "in": "query",
            "name": "includeHeaders",
            "description": "Include headers like server variables and cookies in the result (slower).",
            "type": "boolean",
            "default": false
          },
          {
            "in": "query",
            "name": "searchAfter",
            "description": "Search after is an alternative to using pageIndex that will let you get more than 10,000 messages. Each search result contains a searchAfter property that should be set on future requests to continue from the end of the previous request, but only until the returned list of log messages is empty. When using searchAfter any value in the pageIndex property will be ignored.",
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Log found and may contain messages.",
            "schema": {
              "$ref": "#/definitions/MessagesResult"
            }
          },
          "400": {
            "description": "Something wrong with the query parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      },
      "delete": {
        "tags": [
          "Messages"
        ],
        "summary": "Deletes a list of messages by logid and query.",
        "description": "Required permission: `messages_delete`",
        "operationId": "Messages_DeleteAll",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the message.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "A search object containing query, time filters etc.",
            "schema": {
              "$ref": "#/definitions/Search"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Messages where deleted."
          },
          "400": {
            "description": "Something wrong with the query parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      },
      "post": {
        "tags": [
          "Messages"
        ],
        "summary": "Create a new message.",
        "description": "Required permission: `messages_write`",
        "operationId": "Messages_Create",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log which should contain the new message.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The message object to create.",
            "schema": {
              "$ref": "#/definitions/CreateMessage"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Message was not created.",
            "schema": {
              "$ref": "#/definitions/CreateMessageResult"
            }
          },
          "201": {
            "description": "Message was successfully created.",
            "schema": {
              "$ref": "#/definitions/CreateMessageResult"
            }
          },
          "400": {
            "description": "Something wrong with the query parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log not found."
          },
          "413": {
            "description": "Message too large. Messages must not exceed 256 kb. As additional information, some fields are trimmed down when processed on the backend."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/messages/{logId}/{id}": {
      "get": {
        "tags": [
          "Messages"
        ],
        "summary": "Fetch a message by its ID.",
        "description": "Required permission: `messages_read`",
        "operationId": "Messages_Get",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the message to fetch.",
            "required": true,
            "type": "string"
          },
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the message.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Message found.",
            "schema": {
              "$ref": "#/definitions/Message"
            }
          },
          "400": {
            "description": "Something wrong with the query parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Message not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      },
      "delete": {
        "tags": [
          "Messages"
        ],
        "summary": "Delete a message by its ID.",
        "description": "Required permission: `messages_delete`",
        "operationId": "Messages_Delete",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the message to delete.",
            "required": true,
            "type": "string"
          },
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the message.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Message where deleted."
          },
          "400": {
            "description": "Something wrong with the query parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log or message not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/messages/{logId}/_fix": {
      "post": {
        "tags": [
          "Messages"
        ],
        "summary": "Mark a list of messages as fixed by logid and query.",
        "description": "Required permission: `messages_write`",
        "operationId": "Messages_FixAll",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the messages.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "A search object containing query, time filters etc.",
            "schema": {
              "$ref": "#/definitions/Search"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Messages where marked as fixed."
          },
          "400": {
            "description": "Something wrong with the query parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Log not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/messages/{logId}/{id}/_hide": {
      "post": {
        "tags": [
          "Messages"
        ],
        "summary": "Hide a message by its ID.",
        "description": "Required permission: `messages_write`",
        "operationId": "Messages_Hide",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the message to hide.",
            "required": true,
            "type": "string"
          },
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the message.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Message was hidden."
          },
          "400": {
            "description": "Something wrong with the query parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Message not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/messages/{logId}/{id}/_fix": {
      "post": {
        "tags": [
          "Messages"
        ],
        "summary": "Fix a message by its ID.",
        "description": "Required permission: `messages_write`",
        "operationId": "Messages_Fix",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "description": "The ID of the message to fix.",
            "required": true,
            "type": "string"
          },
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log containing the message.",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "markAllAsFixed",
            "description": "If set to true, all instances of the log message are set to fixed.",
            "type": "boolean",
            "default": false
          }
        ],
        "responses": {
          "200": {
            "description": "Message was fixed."
          },
          "400": {
            "description": "Something wrong with the query parameters."
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the logs API but the trial expired."
          },
          "404": {
            "description": "Message not found."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    },
    "/v3/messages/{logId}/_bulk": {
      "post": {
        "tags": [
          "Messages"
        ],
        "summary": "Create one or more new messages.",
        "description": "Required permission: `messages_write`",
        "operationId": "Messages_CreateBulk",
        "consumes": [
          "application/json-patch+json",
          "application/json",
          "text/json",
          "application/*+json"
        ],
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log which should contain the new messages.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "bo

# --- truncated at 32 KB (72 KB total) ---
# Full source: https://artifacts.apis.io/elmah-io/openapi/_original/elmah-io-v3-openapi.json