Summary

The testWebhookAction() mutation sends a test HTTP request to a webhook action endpoint. Use it to verify that a webhook action is correctly configured before alerts or scheduled searches trigger it. Provide mock event data to simulate the payload LogScale sends during a real trigger.

API Stability Long-Term
Security Requirement & Control CreateActions API permission

Syntax

graphql
testWebhookAction(
      input: TestWebhookAction!
   ): TestResult!

The mutation accepts a single required input argument of type TestWebhookAction!. All fields in that input type are required. The mutation returns a non-null TestResult! containing the outcome of the test request and a descriptive message.

Supply mock eventData as a JSON object for a single event or a JSON array for multiple events. LogScale uses this data to render the bodyTemplate before sending the request.

Example

Raw
graphql
mutation {
  testWebhookAction( input: 
    { viewName: "humio",
      name: "tug",
      url: "https://webhook.company.com",
      method: "POST",
      headers: [ {header: "Content-Type", value: "application/json"} ],
      bodyTemplate: 
             """{"repository": "{repo_name}","timestamp": "{triggered_timestamp}",
                "alert": { "name": "{name}", "query": {"queryString": "{query_string}"} },
                "warnings": "{warnings}", 
                "events": {events}, 
                "numberOfEvents": {event_count} }""",
      ignoreSSL: false,
      useProxy: false,
      triggerName: "wake-up",
      eventData: "[{\"#type\":\"kv\"}]",
      } )
  { success }
}
Mac OS or Linux (curl)
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "mutation {
  testWebhookAction( input: 
    { viewName: \"humio\",
      name: \"tug\",
      url: \"https://webhook.company.com\",
      method: \"POST\",
      headers: [ {header: \"Content-Type\", value: \"application/json\"} ],
      bodyTemplate: 
             \"\"\"{\"repository\": \"{repo_name}\",\"timestamp\": \"{triggered_timestamp}\",
                \"alert\": { \"name\": \"{name}\", \"query\": {\"queryString\": \"{query_string}\"} },
                \"warnings\": \"{warnings}\", 
                \"events\": {events}, 
                \"numberOfEvents\": {event_count} }\"\"\",
      ignoreSSL: false,
      useProxy: false,
      triggerName: \"wake-up\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}
EOF
Mac OS or Linux (curl) One-line
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "mutation {
  testWebhookAction( input: 
    { viewName: \"humio\",
      name: \"tug\",
      url: \"https://webhook.company.com\",
      method: \"POST\",
      headers: [ {header: \"Content-Type\", value: \"application/json\"} ],
      bodyTemplate: 
             \"\"\"{\"repository\": \"{repo_name}\",\"timestamp\": \"{triggered_timestamp}\",
                \"alert\": { \"name\": \"{name}\", \"query\": {\"queryString\": \"{query_string}\"} },
                \"warnings\": \"{warnings}\", 
                \"events\": {events}, 
                \"numberOfEvents\": {event_count} }\"\"\",
      ignoreSSL: false,
      useProxy: false,
      triggerName: \"wake-up\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}
EOF
Windows Cmd and curl
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql ^
    -H "Authorization: Bearer $TOKEN" ^
    -H "Content-Type: application/json" ^
    -d @'{"query" : "mutation { ^
  testWebhookAction( input:  ^
    { viewName: \"humio\", ^
      name: \"tug\", ^
      url: \"https://webhook.company.com\", ^
      method: \"POST\", ^
      headers: [ {header: \"Content-Type\", value: \"application/json\"} ], ^
      bodyTemplate:  ^
             \"\"\"{\"repository\": \"{repo_name}\",\"timestamp\": \"{triggered_timestamp}\", ^
                \"alert\": { \"name\": \"{name}\", \"query\": {\"queryString\": \"{query_string}\"} }, ^
                \"warnings\": \"{warnings}\",  ^
                \"events\": {events},  ^
                \"numberOfEvents\": {event_count} }\"\"\", ^
      ignoreSSL: false, ^
      useProxy: false, ^
      triggerName: \"wake-up\", ^
      eventData: \"[{\\"#type\\":\\"kv\\"}]\", ^
      } ) ^
  { success } ^
}" ^
} '
Windows Powershell and curl
powershell
curl.exe -X POST 
    -H "Authorization: Bearer $TOKEN"
    -H "Content-Type: application/json"
    -d '{"query" : "mutation {
  testWebhookAction( input: 
    { viewName: \"humio\",
      name: \"tug\",
      url: \"https://webhook.company.com\",
      method: \"POST\",
      headers: [ {header: \"Content-Type\", value: \"application/json\"} ],
      bodyTemplate: 
             \"\"\"{\"repository\": \"{repo_name}\",\"timestamp\": \"{triggered_timestamp}\",
                \"alert\": { \"name\": \"{name}\", \"query\": {\"queryString\": \"{query_string}\"} },
                \"warnings\": \"{warnings}\", 
                \"events\": {events}, 
                \"numberOfEvents\": {event_count} }\"\"\",
      ignoreSSL: false,
      useProxy: false,
      triggerName: \"wake-up\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}'
    "$YOUR_LOGSCALE_URL/graphql"
Perl
perl
#!/usr/bin/perl

use HTTP::Request;
use LWP;

my $TOKEN = "TOKEN";

my $uri = '$YOUR_LOGSCALE_URL/graphql';

my $query = "mutation {
  testWebhookAction( input: 
    { viewName: \"humio\",
      name: \"tug\",
      url: \"https://webhook.company.com\",
      method: \"POST\",
      headers: [ {header: \"Content-Type\", value: \"application/json\"} ],
      bodyTemplate: 
             \"\"\"{\"repository\": \"{repo_name}\",\"timestamp\": \"{triggered_timestamp}\",
                \"alert\": { \"name\": \"{name}\", \"query\": {\"queryString\": \"{query_string}\"} },
                \"warnings\": \"{warnings}\", 
                \"events\": {events}, 
                \"numberOfEvents\": {event_count} }\"\"\",
      ignoreSSL: false,
      useProxy: false,
      triggerName: \"wake-up\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}";
$query =~ s/\n/ /g;
my $json = sprintf('{"query" : "%s"}',$query);
my $req = HTTP::Request->new("POST", $uri );

$req->header("Authorization" => "Bearer $TOKEN");
$req->header("Content-Type" => "application/json");

$req->content( $json );

my $lwp = LWP::UserAgent->new;

my $result = $lwp->request( $req );

print $result->{"_content"},"\n";
Python
python
#! /usr/local/bin/python3

import requests

url = '$YOUR_LOGSCALE_URL/graphql'
mydata = r'''{"query" : "mutation {
  testWebhookAction( input: 
    { viewName: \"humio\",
      name: \"tug\",
      url: \"https://webhook.company.com\",
      method: \"POST\",
      headers: [ {header: \"Content-Type\", value: \"application/json\"} ],
      bodyTemplate: 
             \"\"\"{\"repository\": \"{repo_name}\",\"timestamp\": \"{triggered_timestamp}\",
                \"alert\": { \"name\": \"{name}\", \"query\": {\"queryString\": \"{query_string}\"} },
                \"warnings\": \"{warnings}\", 
                \"events\": {events}, 
                \"numberOfEvents\": {event_count} }\"\"\",
      ignoreSSL: false,
      useProxy: false,
      triggerName: \"wake-up\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}'''

resp = requests.post(url,
                     data = mydata,
                     headers = {
   "Authorization" : "Bearer $TOKEN",
   "Content-Type" : "application/json"
}
)

print(resp.text)
Node.js
javascript
const https = require('https');

const data = JSON.stringify(
    {"query" : "mutation {
  testWebhookAction( input: 
    { viewName: \"humio\",
      name: \"tug\",
      url: \"https://webhook.company.com\",
      method: \"POST\",
      headers: [ {header: \"Content-Type\", value: \"application/json\"} ],
      bodyTemplate: 
             \"\"\"{\"repository\": \"{repo_name}\",\"timestamp\": \"{triggered_timestamp}\",
                \"alert\": { \"name\": \"{name}\", \"query\": {\"queryString\": \"{query_string}\"} },
                \"warnings\": \"{warnings}\", 
                \"events\": {events}, 
                \"numberOfEvents\": {event_count} }\"\"\",
      ignoreSSL: false,
      useProxy: false,
      triggerName: \"wake-up\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}
);


const options = {
  hostname: '$YOUR_LOGSCALE_URL',
  path: 'graphql',
  port: 443,
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length,
    Authorization: 'BEARER ' + process.env.TOKEN,
    'User-Agent': 'Node',
  },
};

const req = https.request(options, (res) => {
  let data = '';
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', (d) => {
    data += d;
  });
  res.on('end', () => {
    console.log(JSON.parse(data).data);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.write(data);
req.end();
Example Responses
Success (HTTP Response Code 200 OK)
json
{
  "data": {
    "testWebhookAction": {
      "success": false
    }
  }
}

Input Parameters

Provide the view name and action name to identify the webhook action, the target URL, HTTP method, headers, and body template. Set ignoreSSL and useProxy to match your network configuration. Supply a triggerName as a mock value — the trigger does not need to exist. Include eventData as a JSON object or JSON array to populate the body template during the test.

Table: TestWebhookAction Input Datatype

ParameterTypeRequiredDefaultStabilityAvailabilityDescription
Some input parameters may be required, as indicated in the Required column. For return values, this indicates that you are assured a value if the field is requested for the results. 
Table last updated: Oct 14, 2026 
bodyTemplateStringyes Long-Term The body of the http(s) request. Can be templated with values from the result.
eventDataStringyes Long-Term JSON data representing one or more events. One event can be supplied as a JSON object. Multiple events must be supplied as a list of JSON objects.
headersHttpHeaderEntryInputyes Long-Term The headers of the http(s) request. See HttpHeaderEntryInput.
ignoreSSLBooleanyes Long-Term Whether SSL should be ignored for the request.
methodStringyes Long-Term The method to use for the request.
nameStringyes Long-Term The name of the action.
triggerNameStringyes Long-Term The name of the action. This is a mock value, the trigger doesn't have to exist.
urlStringyes Long-Term The URL where to send the http(s) request.
useProxyBooleanyes Long-Term Defines whether the action should use the configured proxy to make web requests.
viewNameStringyes Long-Term The name of the view of the action.

Returned Values

The mutation returns a non-null TestResult! value. The result includes a boolean success indicator and a message describing the outcome of the test request. Use these values to confirm the webhook endpoint received the request and responded as expected.

Table: TestResult Datatype

ParameterTypeRequiredDefaultStabilityAvailabilityDescription
Some input parameters may be required, as indicated in the Required column. For return values, this indicates that you are assured a value if the field is requested for the results. 
Table last updated: Oct 14, 2026 
messageStringyes Long-Term A message explaining the test result.
successBooleanyes Long-Term True if the test was a success, false otherwise.