{
  "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": "body",
            "description": "The messages to create.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/CreateMessage"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Zero or more messages where successfully created. Check the response body for details.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/CreateBulkMessageResult"
              }
            }
          },
          "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/sourcemaps/{logId}": {
      "post": {
        "tags": [
          "SourceMaps"
        ],
        "summary": "Create or update a translation between a minified JavaScript path to the minified JavaScript and source map files.",
        "description": "Required permission: `sourcemaps_write`",
        "operationId": "SourceMaps_CreateOrUpdate",
        "consumes": [
          "multipart/form-data"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "logId",
            "description": "The ID of the log which should contain the minified JavaScript and source map.",
            "required": true,
            "type": "string"
          },
          {
            "in": "formData",
            "name": "Path",
            "description": "An URL to the online minified JavaScript file. The URL can be absolute or relative but will always be converted to a relative path (no protocol, domain, and query parameters).\r\nelmah.io uses this path to lookup any lines in a JS stack trace that will need de-minification.",
            "required": true,
            "type": "string",
            "format": "uri",
            "maxLength": 2048
          },
          {
            "in": "formData",
            "name": "SourceMap",
            "description": "The source map file. Only files with an extension of .map and content type of application/json will be accepted.",
            "required": true,
            "type": "file"
          },
          {
            "in": "formData",
            "name": "MinifiedJavaScript",
            "description": "The minified JavaScript file. Only files with an extension of .js and content type of text/javascript will be accepted.",
            "required": true,
            "type": "file"
          }
        ],
        "responses": {
          "200": {
            "description": "Source map was successfully created."
          },
          "400": {
            "description": "Something wrong with the query parameters or form."
          },
          "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/uptimechecks": {
      "get": {
        "tags": [
          "UptimeChecks"
        ],
        "summary": "Fetch a list of uptime checks. Currently in closed beta. Get in contact to get access to this endpoint.",
        "description": "Required permission: `uptimechecks_read`",
        "operationId": "UptimeChecks_GetAll",
        "produces": [
          "text/plain",
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Request for uptime checks successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/UptimeCheck"
              }
            }
          },
          "401": {
            "description": "API key not valid or no access to resource."
          },
          "402": {
            "description": "Tried to call the uptime checks API but the trial expired."
          },
          "429": {
            "description": "A maximum of 500 requests per minute and 3600 requests per hour are permitted"
          }
        }
      }
    }
  },
  "definitions": {
    "AssemblyInfo": {
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the assembly. This should include an assembly name like \"Elmah.Io.NLog\".",
          "type": "string"
        },
        "version": {
          "description": "The version of the assembly. This should include a SemVer string like \"1.0.0.0\".",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Breadcrumb": {
      "description": "A breadcrumb represent a step preceding a log message.",
      "type": "object",
      "properties": {
        "dateTime": {
          "format": "date-time",
          "description": "The date and time in UTC of the breadcrumb. If no date and time is provided, we will use the current date and time in UTC.",
          "type": "string"
        },
        "severity": {
          "description": "An enum value representing the severity of this breadcrumb. The following values are allowed: Verbose, Debug, Information, Warning, Error, Fatal.",
          "type": "string"
        },
        "action": {
          "description": "An action representing the breadcrumb. You can set a custom action or use one of the built-in: click, submit, navigation, request, error.",
          "type": "string"
        },
        "message": {
          "description": "A message representing the breadcrumb. This should elaborate on the action.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Check": {
      "description": "A check represent one of many checks included in a heartbeat.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the check.",
          "maxLength": 256,
          "type": "string"
        },
        "took": {
          "format": "int64",
          "description": "Optional long for specifying how many milliseconds it took to execute the check.",
          "type": "integer"
        },
        "result": {
          "description": "The result of this check. Can be \"Healthy, \"Degraded\", or \"Unhealthy\". Defaults to \"Healthy\"",
          "maxLength": 9,
          "type": "string"
        },
        "reason": {
          "description": "If result is \"Degraded\" or \"Unhealthy\" you can use this property to specify why.",
          "maxLength": 8192,
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "ConfigFile": {
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the config file. Examples: appsettings.json, log4net.config, web.config.",
          "type": "string"
        },
        "content": {
          "description": "The content of the config file. This should at least include the content needed to configure the logger.",
          "type": "string"
        },
        "contentType": {
          "description": "The content type of the content in the file. The value of this field should be a valid MIME type like: application/xml, application/json.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "CreateBulkMessageResult": {
      "type": "object",
      "properties": {
        "statusCode": {
          "format": "int32",
          "description": "Status code of the individual messages as if it were being created through the non-bulk endpoint.\r\nIf a message was succesfully created, the status code will be 201 and location will contain an URL.\r\nIf a message was ignored, the status code will be 200 and the location will be empty.",
          "type": "integer"
        },
        "location": {
          "format": "uri",
          "description": "The location of the created message if StatusCode equals Created.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "CreateDeployment": {
      "required": [
        "version"
      ],
      "type": "object",
      "properties": {
        "version": {
          "description": "The version number of this deployment. The value of version can be a SemVer compliant string or any other\r\nsyntax that you are using as your version numbering scheme.",
          "maxLength": 256,
          "minLength": 1,
          "type": "string"
        },
        "created": {
          "format": "date-time",
          "description": "When was this deployment created in UTC. Defaults to current time if not specified.",
          "type": "string"
        },
        "description": {
          "description": "Optional description of this deployment. Can be markdown or clear text.",
          "maxLength": 8192,
          "type": "string"
        },
        "userName": {
          "description": "The name of the person responsible for creating this deployment. This can be the name taken from\r\nyour deployment server (like Azure DevOps or Octopus).",
          "maxLength": 256,
          "type": "string"
        },
        "userEmail": {
          "format": "email",
          "description": "The email of the person responsible for creating this deployment. This can be the email taken from\r\nyour deployment server (like Azure DevOps or Octopus).",
          "maxLength": 320,
          "type": "string"
        },
        "logId": {
          "description": "As default, deployments are attached all logs of the organization. If you want a deployment to\r\nattach to a single log only, set this to the ID of that log.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "CreateDeploymentResult": {
      "type": "object",
      "properties": {
        "location": {
          "format": "uri",
          "description": "The location of the created deployment.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "CreateHeartbeat": {
      "type": "object",
      "properties": {
        "result": {
          "description": "The result of this heartbeat. Can be \"Healthy, \"Degraded\", or \"Unhealthy\". Defaults to \"Healthy\"",
          "maxLength": 9,
          "type": "string"
        },
        "reason": {
          "description": "If result is \"Degraded\" or \"Unhealthy\" you can use this property to specify why.",
          "maxLength": 8192,
          "type": "string"
        },
        "application": {
          "description": "Optional string to identify which application logged this message. You can use this if you have multiple applications and services logging to the same log.\r\nIf not set, the application name \"Heartbeats\" will be set on all log messages generated from this heartbeat.",
          "maxLength": 256,
          "type": "string"
        },
        "version": {
          "description": "Optional string to identify which version of your application logged this message. If not specified, any errors, warnings, or information messages will get\r\nthe newest version number created through deployment tracking as with normal log messages.",
          "maxLength": 256,
          "type": "string"
        },
        "took": {
          "format": "int64",
          "description": "Optional long for specifying how many milliseconds it took to execute the task resulting in this heartbeat. This can be used to get a better overview\r\nof how long a scheduled task or service is running or to figure out if the grace period should be increased.",
          "type": "integer"
        },
        "checks": {
          "description": "A list of checks in this heartbeat.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Check"
          }
        }
      },
      "additionalProperties": false
    },
    "CreateInstallation": {
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the installation. This will typically be the application name. If creating\r\nmultiple installations on the same name, they will show up as one application in the UI.",
          "type": "string"
        },
        "type": {
          "description": "The type of installation. The following values will be recognized within the elmah.io but you\r\ncan provide a custom type if preferred:\r\naspnet, aspnetcore, console, azurefunction, service, windowsapp.",
          "type": "string"
        },
        "loggers": {
          "description": "A list of loggers in this installation. When calling this from a web or logging framework\r\nintegration, the list will often contain just a single item which is the integration itself.\r\nIf the installation is created manually, please provide all of the installed loggers in\r\nthis list. Example: Elmah.Io.AspNetCore, Elmah.Io.Extensions.Logging.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/LoggerInfo"
          }
        }
      },
      "additionalProperties": false
    },
    "CreateLog": {
      "required": [
        "name"
      ],
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of the new log.",
          "maxLength": 256,
          "minLength": 1,
          "type": "string"
        },
        "color": {
          "description": "Color of the log. The color must be one of the following (green on unknown value or missing):\r\ngreen, lightgreen, lime, yellow, orange, deeporange, red, pink, purple, deeppurple, blue, lightblue",
          "type": "string"
        },
        "environmentName": {
          "description": "Environment name of the new log. Must match an environment name (case insensitive).\r\nIf a matching environment name was not found or the property is not set, the log\r\nwill appear under \"Other\" in the UI.",
          "type": "string"
        },
        "disabled": {
          "description": "Set to true to disable the log on creation. Defaults to false. A log can be enabled/disabled\r\nafterwards by calling the _disable and _enable endpoints.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "CreateLogResult": {
      "type": "object",
      "properties": {
        "location": {
          "format": "uri",
          "description": "The location of the created log.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "CreateMessage": {
      "type": "object",
      "properties": {
        "application": {
          "description": "Used to identify which application logged this message. You can use this if you have multiple applications and services logging to the same log",
          "type": "string"
        },
        "detail": {
          "description": "A longer description of the message. For errors this could be a stacktrace, but it's really up to you what to log in there.",
          "type": "string"
        },
        "hostname": {
          "description": "The hostname of the server logging the message.",
          "type": "string"
        },
        "title": {
          "description": "The textual title or headline of the message to log. The first 50k characters are searchable.",
          "type": "string"
        },
        "titleTemplate": {
          "description": "The title template of the message to log. This property can be used from logging frameworks that supports\r\nstructured logging like: \"{user} says {quote}\". In the example, titleTemplate will be this string and title\r\nwill be \"Gilfoyle says It's not magic. It's talent and sweat\". The first 50k characters are searchable.",
          "type": "string"
        },
        "source": {
          "description": "The source of the code logging the message. This could be the assembly name.",
          "type": "string"
        },
        "statusCode": {
          "format": "int32",
          "description": "If the message logged relates to a HTTP status code, you can put the code in this property. This would probably only be relevant for errors,\r\nbut could be used for logging successful status codes as well.",
          "type": "integer"
        },
        "dateTime": {
          "format": "date-time",
          "description": "The date and time in UTC of the message. If you don't provide us with a value in dateTime, we will set the current date and time in UTC.",
          "type": "string"
        },
        "type": {
          "description": "The type of message. If logging an error, the type of the exception would go into type but you can put anything in there, that makes sense for your domain.",
          "type": "string"
        },
        "user": {
          "description": "An identification of the user triggering this message. You can put the users email address or your user key into this property.",
          "type": "string"
        },
        "severity": {
          "description": "An enum value representing the severity of this message. The following values are allowed: Verbose, Debug, Information, Warning, Error, Fatal",
          "type": "string"
        },
        "url": {
          "description": "If message relates to a HTTP request, you may send the URL of that request. If you don't provide us with an URL, we will try to find a key named URL in serverVariables.",
          "type": "string"
        },
        "method": {
          "description": "If message relates to a HTTP request, you may send the HTTP method of that request. If you don't provide us with a method, we will try to find a key named REQUEST_METHOD in serverVariables.",
          "type": "string"
        },
        "version": {
          "description": "Versions can be used to distinguish messages from different versions of your software. The value of version can be a SemVer compliant string or any other\r\nsyntax that you are using as your version numbering scheme.",
          "type": "string"
        },
        "correlationId": {
          "description": "CorrelationId can be used to group similar log messages together into a single discoverable batch. A correlation ID could be a session ID from ASP.NET Core,\r\na unique string spanning multiple microsservices handling the same request, or similar.",
          "type": "string"
        },
        "code": {
          "description": "Code can be used to include source code related to the log message. The code will typically span from a few lines before the line causing the log message\r\nto a few lines after. For now, all lines above 21 will be removed. This makes room for showing 10 lines before the logging line, the logging line, and\r\n10 lines after the logging line. Don't include a very large string in this property since that will quickly make the entire messages exceed the max limit\r\nof 256 kb.",
          "type": "string"
        },
        "category": {
          "description": "The log message category. Category can be a string of choice but typically contain a logging category set by a logging framework like NLog or Serilog.\r\nWhen logging through a logging framework, this field will be provided by the framework and not something that needs to be set manually.",
          "type": "string"
        },
        "cookies": {
          "description": "A key/value pair of cookies. This property only makes sense for logging messages related to web requests.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "form": {
          "description": "A key/value pair of form fields and their values. This property makes sense if logging message related to users inputting data in a form.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "queryString": {
          "description": "A key/value pair of query string parameters. This property makes sense if logging message related to a HTTP request.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "serverVariables": {
          "description": "A key/value pair of server values. Server variables are typically related to handling requests in a webserver but could be used for other types of information as well.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "data": {
          "description": "A key/value pair of user-defined fields and their values. When logging an exception, the Data dictionary of\r\nthe exception is copied to this property. You can add additional key/value pairs, by modifying the Data\r\ndictionary on the exception or by supplying additional key/values to this API.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "breadcrumbs": {
          "description": "A list of breadcrumbs preceding this log message.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Breadcrumb"
          }
        }
      },
      "additionalProperties": false
    },
    "CreateMessageResult": {
      "type": "object",
      "properties": {
        "location": {
          "format": "uri",
          "description": "The location of the created message.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Deployment": {
      "type": "object",
      "properties": {
        "id": {
          "description": "The ID of this deployment.",
          "type": "string"
        },
        "version": {
          "description": "The version number of this deployment. The value of version can be a SemVer compliant string or any other\r\nsyntax that you are using as your version numbering scheme.",
          "type": "string"
        },
        "created": {
          "format": "date-time",
          "description": "When was this deployment created.",
          "type": "string"
        },
        "createdBy": {
          "description": "The elmah.io id of the user creating this deployment. Since deployments are created on a subscription,\r\nthe CreatedBy will contain the id of the user with the subscription.",
          "type": "string"
        },
        "description": {
          "description": "Sescription of this deployment in markdown or clear text.",
          "type": "string"
        },
        "userName": {
          "description": "The name of the person responsible for creating this deployment.",
          "type": "string"
        },
        "userEmail": {
          "description": "The email of the person responsible for creating this deployment.",
          "type": "string"
        },
        "logId": {
          "description": "If the deployment is attached a single log, this property is set to the ID of that log.\r\nIf null, the deployment is attached all logs on the organization.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Item": {
      "description": "Represents a key value pair.",
      "type": "object",
      "properties": {
        "key": {
          "description": "The key of the item.",
          "type": "string"
        },
        "value": {
          "description": "The value of the item.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Log": {
      "type": "object",
      "properties": {
        "id": {
          "description": "ID of the log.",
          "type": "string"
        },
        "name": {
          "description": "Name of the log.",
          "type": "string"
        },
        "color": {
          "description": "Color of the log. The color will always be one of the following (green being the default):\r\ngreen, lightgreen, lime, yellow, orange, deeporange, red, pink, purple, deeppurple, blue, lightblue",
          "type": "string"
        },
        "environmentName": {
          "description": "Environment name this log is in or \"Other\" if not in an environment.\r\n\"Other\" is chosen over null to mimic the experience in the elmah.io UI.",
          "type": "string"
        },
        "disabled": {
          "description": "Returns true if the log is currently disabled. A log can be disabled either through the API\r\nor in the elmah.io UI.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "LoggerInfo": {
      "type": "object",
      "properties": {
        "type": {
          "description": "The type of logger. This is typically set by the logging/web framework integration.",
          "type": "string"
        },
        "assemblies": {
          "description": "A list of assemblies and versions installed as part of this logger.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/AssemblyInfo"
          }
        },
        "properties": {
          "description": "A list of properties for this logger.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "configFiles": {
          "description": "A list of config files, including their content, used to configure this logger.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ConfigFile"
          }
        }
      },
      "additionalProperties": false
    },
    "Message": {
      "type": "object",
      "properties": {
        "id": {
          "description": "The ID of this message.",
          "type": "string"
        },
        "application": {
          "description": "Used to identify which application logged this message. You can use this if you have multiple applications and services logging to the same log",
          "type": "string"
        },
        "detail": {
          "description": "A longer description of the message. For errors this could be a stacktrace, but it's really up to you what to log in there.",
          "type": "string"
        },
        "hostname": {
          "description": "The hostname of the server logging the message.",
          "type": "string"
        },
        "title": {
          "description": "The textual title or headline of the message to log.",
          "type": "string"
        },
        "titleTemplate": {
          "description": "The title template of the message to log. This property can be used from logging frameworks that supports\r\nstructured logging like: \"{user} says {quote}\". In the example, titleTemplate will be this string and title\r\nwill be \"Gilfoyle says It's not magic. It's talent and sweat\".",
          "type": "string"
        },
        "source": {
          "description": "The source of the code logging the message. This could be the assembly name.",
          "type": "string"
        },
        "statusCode": {
          "format": "int32",
          "description": "If the message logged relates to a HTTP status code, you can put the code in this property. This would probably only be relevant for errors,\r\nbut could be used for logging successful status codes as well.",
          "type": "integer"
        },
        "dateTime": {
          "format": "date-time",
          "description": "The date and time in UTC of the message. If you don't provide us with a value in dateTime, we will set the current date and time in UTC.",
          "type": "string"
        },
        "type": {
          "description": "The type of message. If logging an error, the type of the exception would go into type but you can put anything in there, that makes sense for your domain.",
          "type": "string"
        },
        "user": {
          "description": "An identification of the user triggering this message. You can put the users email address or your user key into this property.",
          "type": "string"
        },
        "severity": {
          "description": "An enum value representing the severity of this message. The following values are allowed: Verbose, Debug, Information, Warning, Error, Fatal",
          "type": "string"
        },
        "url": {
          "description": "If message relates to a HTTP request, you may send the URL of that request. If you don't provide us with an URL, we will try to find a key named URL in serverVariables.",
          "type": "string"
        },
        "method": {
          "description": "If message relates to a HTTP request, you may send the HTTP method of that request. If you don't provide us with a method, we will try to find a key named REQUEST_METHOD in serverVariables.",
          "type": "string"
        },
        "version": {
          "description": "Versions can be used to distinguish messages from different versions of your software. The value of version can be a SemVer compliant string or any other\r\nsyntax that you are using as your version numbering scheme.",
          "type": "string"
        },
        "correlationId": {
          "description": "CorrelationId can be used to group similar log messages together into a single discoverable batch. A correlation ID could be a session ID from ASP.NET Core,\r\na unique string spanning multiple microsservices handling the same request, or similar.",
          "type": "string"
        },
        "code": {
          "description": "Code can be used to include source code related to the log message. The code will typically span from a few lines before the line causing the log message\r\nto a few lines after. For now, all lines above 21 will be removed. This makes room for showing 10 lines before the logging line, the logging line, and\r\n10 lines after the logging line. Don't include a very large string in this property since that will quickly make the entire messages exceed the max limit\r\nof 256 kb.",
          "type": "string"
        },
        "category": {
          "description": "The log message category. Category can be a string of choice but typically contain a logging category set by a logging framework like NLog or Serilog.",
          "type": "string"
        },
        "cookies": {
          "description": "A key/value pair of cookies. This property only makes sense for logging messages related to web requests.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "form": {
          "description": "A key/value pair of form fields and their values. This property makes sense if logging message related to users inputting data in a form.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "queryString": {
          "description": "A key/value pair of query string parameters. This property makes sense if logging message related to a HTTP request.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "serverVariables": {
          "description": "A key/value pair of server values. Server variables are typically related to handling requests in a webserver but could be used for other types of information as well.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "data": {
          "description": "A key/value pair of user-defined fields and their values. When logging an exception, the Data dictionary of\r\nthe exception is copied to this property. You can add additional key/value pairs, by modifying the Data\r\ndictionary on the exception or by supplying additional key/values to this API.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "breadcrumbs": {
          "description": "A list of breadcrumbs preceding this log message.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Breadcrumb"
          }
        }
      },
      "additionalProperties": false
    },
    "MessageOverview": {
      "type": "object",
      "properties": {
        "id": {
          "description": "The ID of this message.",
          "type": "string"
        },
        "application": {
          "description": "Used to identify which application logged this message. You can use this if you have multiple applications and services logging to the same log",
          "type": "string"
        },
        "detail": {
          "description": "A longer description of the message. For errors this could be a stacktrace, but it's really up to you what to log in there.",
          "type": "string"
        },
        "hostname": {
          "description": "The hostname of the server logging the message.",
          "type": "string"
        },
        "title": {
          "description": "The textual title or headline of the message to log.",
          "type": "string"
        },
        "titleTemplate": {
          "description": "The title template of the message to log. This property can be used from logging frameworks that supports\r\nstructured logging like: \"{user} says {quote}\". In the example, titleTemplate will be this string and title\r\nwill be \"Gilfoyle says It's not magic. It's talent and sweat\".",
          "type": "string"
        },
        "source": {
          "description": "The source of the code logging the message. This could be the assembly name.",
          "type": "string"
        },
        "statusCode": {
          "format": "int32",
          "description": "If the message logged relates to a HTTP status code, you can put the code in this property. This would probably only be relevant for errors,\r\nbut could be used for logging successful status codes as well.",
          "type": "integer"
        },
        "dateTime": {
          "format": "date-time",
          "description": "The date and time in UTC of the message. If you don't provide us with a value in dateTime, we will set the current date and time in UTC.",
          "type": "string"
        },
        "type": {
          "description": "The type of message. If logging an error, the type of the exception would go into type but you can put anything in there, that makes sense for your domain.",
          "type": "string"
        },
        "user": {
          "description": "An identification of the user triggering this message. You can put the users email address or your user key into this property.",
          "type": "string"
        },
        "severity": {
          "description": "An enum value representing the severity of this message. The following values are allowed: Verbose, Debug, Information, Warning, Error, Fatal",
          "type": "string"
        },
        "url": {
          "description": "If message relates to a HTTP request, you may send the URL of that request. If you don't provide us with an URL, we will try to find a key named URL in serverVariables.",
          "type": "string"
        },
        "method": {
          "description": "If message relates to a HTTP request, you may send the HTTP method of that request. If you don't provide us with a method, we will try to find a key named REQUEST_METHOD in serverVariables.",
          "type": "string"
        },
        "version": {
          "description": "Versions can be used to distinguish messages from different versions of your software. The value of version can be a SemVer compliant string or any other\r\nsyntax that you are using as your version numbering scheme.",
          "type": "string"
        },
        "correlationId": {
          "description": "CorrelationId can be used to group similar log messages together into a single discoverable batch. A correlation ID could be a session ID from ASP.NET Core,\r\na unique string spanning multiple microsservices handling the same request, or similar.",
          "type": "string"
        },
        "code": {
          "description": "Code can be used to include source code related to the log message. The code will typically span from a few lines before the line causing the log message\r\nto a few lines after. For now, all lines above 21 will be removed. This makes room for showing 10 lines before the logging line, the logging line, and\r\n10 lines after the logging line. Don't include a very large string in this property since that will quickly make the entire messages exceed the max limit\r\nof 256 kb.",
          "type": "string"
        },
        "category": {
          "description": "The log message category. Category can be a string of choice but typically contain a logging category set by a logging framework like NLog or Serilog.",
          "type": "string"
        },
        "cookies": {
          "description": "A key/value pair of cookies. This property only makes sense for logging messages related to web requests.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "form": {
          "description": "A key/value pair of form fields and their values. This property makes sense if logging message related to users inputting data in a form.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "queryString": {
          "description": "A key/value pair of query string parameters. This property makes sense if logging message related to a HTTP request.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "serverVariables": {
          "description": "A key/value pair of server values. Server variables are typically related to handling requests in a webserver but could be used for other types of information as well.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "data": {
          "description": "A key/value pair of user-defined fields and their values. When logging an exception, the Data dictionary of\r\nthe exception is copied to this property. You can add additional key/value pairs, by modifying the Data\r\ndictionary on the exception or by supplying additional key/values to this API.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Item"
          }
        },
        "breadcrumbs": {
          "description": "A list of breadcrumbs preceding this log message.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Breadcrumb"
          }
        }
      },
      "additionalProperties": false
    },
    "MessagesResult": {
      "type": "object",
      "properties": {
        "messages": {
          "description": "Log messages.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/MessageOverview"
          }
        },
        "searchAfter": {
          "description": "You can use the value in this property to continue from this point on future search results. This is an alternative to using pageIndex.",
          "type": "string"
        },
        "total": {
          "format": "int32",
          "description": "The total number of log messages found.",
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "Search": {
      "type": "object",
      "properties": {
        "query": {
          "description": "Lucene query.",
          "type": "string"
        },
        "from": {
          "format": "date-time",
          "description": "Search from this date.",
          "type": "string"
        },
        "to": {
          "format": "date-time",
          "description": "Search to this date.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "UptimeCheck": {
      "type": "object",
      "properties": {
        "id": {
          "description": "ID of the uptime check.",
          "type": "string"
        },
        "name": {
          "description": "Name of the uptime check.",
          "type": "string"
        },
        "url": {
          "description": "Url of the uptime check.",
          "type": "string"
        },
        "status": {
          "description": "Current status of the uptime check.",
          "type": "string"
        }
      },
      "additionalProperties": false
    }
  },
  "securityDefinitions": {
    "api_key": {
      "type": "apiKey",
      "name": "api_key",
      "in": "query",
      "description": "All requests on the elmah.io API needs to include an API key. The API key can be provided as part of the query string or as a request header. The name of the API key needs to be <code>api_key</code>.<br/><br/>Additional resources:<br/><ul><li>[Where is my API key?](https://docs.elmah.io/where-is-my-api-key/)</li><li>[How to configure API key permissions](https://docs.elmah.io/how-to-configure-api-key-permissions/)</li></ul>"
    }
  },
  "security": [
    {
      "api_key": [ ]
    }
  ]
}