Skip to main content
Platform Integrations

Custom SIEM Feed

Send INKY events to your SIEM or any HTTPS endpoint that accepts JSON.

Written By Matt Sywulak

Last updated About 2 hours ago

The Custom SIEM Feed sends INKY events to your SIEM, or to any other system that accepts JSON over HTTPS, as they happen: analysis results, link clicks, user reports, outbound detections and more.

Security and navigation

INKY NAVIGATION: Admin Center > Integrations > Custom SIEM Feed.

INKY PERMISSIONS: Super Admin or Policy Admin role required.

SIEM NAVIGATION: Your SIEM's settings for receiving data over HTTPS (often called an HTTP collector, HTTP event collector or webhook input). The name and location depend on your SIEM provider.

SIEM PERMISSIONS: An account in your SIEM that can create an HTTPS input and its access token.

Prerequisites

  • A license that includes the SIEM feed. INKY Pro includes it; INKY Advanced does not. Some legacy INKY plans include it. Without it, the form says Your license does not include SIEM feed functionality.

  • An HTTPS endpoint that accepts a POST request with a JSON body, answers within 5 seconds, and can be reached from the INKY addresses below.

  • If your endpoint only accepts traffic from known addresses, allow the INKY addresses for your region.

United States:

  • 3.231.237.226/32

  • 100.24.129.5/32

  • 3.132.108.44/32

  • 3.132.222.232/32

  • 100.21.157.149/32

  • 34.210.15.192/32

Europe:

  • 3.121.161.229/32

  • 18.198.39.243/32

  • 34.249.87.65/32

  • 52.17.160.9/32

About this integration

The Custom SIEM Feed is a one-way integration. INKY sends each event to your endpoint as its own HTTPS POST request with a JSON body, as soon as the event happens. Events are not batched.

INKY does not have a built-in connector for any particular SIEM. Any product that accepts raw JSON over an HTTPS POST works. INKY also creates the access token for Azure Event Hubs for you (see Send events to Azure Event Hubs below).

You choose which events to send:

Event in INKY

When INKY sends it

event_type

Inbound Analysis Results

Each inbound message INKY analyzes. You can limit this to Caution and Danger, or Danger only.

analysis_result

Link Clicks

A user clicks a link INKY rewrote, and again if they choose to continue to the site. Only if you use link rewriting. You can limit this to Caution and Danger, or Danger only.

link_click

User Reports

A user reports a message as safe, spam or phishing.

user_report

Outbound Analysis Results

Each outbound message INKY analyzes, with the outbound rules and conditions it matched.

omp_analysis_result

Workflow Actions

Each step and action as an outbound message moves through an approval or encryption workflow.

workflow_action_taken

Outbound Burst Detections

A user starts sending an unusual burst of mail.

omp_burst_state_change

Outbound Dangerous Link Detections

An outbound message contains a dangerous link.

omp_dangerous_link_detected

Outbound Spam/Phish in Body Detections

The body of an outbound message contains spam or phishing content.

omp_spam_phish_detected

Outbound Account Takeover Detections

A sender is flagged for a possible account takeover: a new enforcement, or an existing one escalated.

omp_account_takeover

Organization-level and team-level settings

On a Kaseya organization, you can set up the feed once for the whole organization. Every team in the organization uses those settings unless it sets its own. Each event carries the teamid of the team the message belongs to, so you can tell customers apart in your SIEM.

Events are only sent for teams licensed for INKY Pro. A team on INKY Advanced inherits the settings but sends nothing.

Each setting on the form has a small badge showing whether it is inherited from the organization or overridden on the team. Click the badge to add or remove an override.

How INKY delivers events

  • INKY waits up to 5 seconds for your endpoint to answer.

  • If INKY cannot connect to your endpoint, it tries again up to five times, waiting a little longer each time.

  • If your endpoint answers with an error, or does not answer in time, INKY does not try again.

  • An event that is not delivered is not queued or sent later. Keep your endpoint available, and use your SIEM's own alerting to spot gaps.

  • INKY checks your endpoint's certificate unless you turn on Disable SSL certificate validation. That option turns off all certificate checks, so use it only for an endpoint with a self-signed certificate.

  • Requests are not signed. To prove a request came from your setup, send an access token in a header such as Authorization.

Use case

Security teams and MSPs watch many tools from one place. Without this integration, INKY's detections, user reports and link clicks stay in the INKY console, and someone has to look there to see them.

The Custom SIEM Feed puts those events in your SIEM next to everything else, so you can alert on them, connect them with other activity (for example, a phishing message, then a click, then a suspicious sign-in) and keep them for as long as your SIEM retains data.

How to...

Set up the feed

Before you start, create an HTTPS input in your SIEM and note its URL and any access token it gives you.

  1. Select Admin Center > Integrations.

  2. In the Team selector, select the team, or the Kaseya organization (building icon) to set it up for every team in it.

  3. Click the Custom SIEM Feed card.

  4. In Webhook URL, enter your SIEM's HTTPS URL.

  5. Under the HTTP headers, click Add Header and enter each header your SIEM needs. Most need an Authorization header with the access token, for example Authorization / Bearer your-token or Splunk your-token. Check your SIEM's documentation for the exact format. INKY sends Content-Type: application/json on its own.

  6. Only if your endpoint uses a self-signed certificate, select Disable SSL certificate validation.

  7. Under Validate Webhook Configuration, click Validate Now. INKY sends a test event using what is on the screen, saved or not. See Validate the connection below.

  8. Under Customize Your SIEM Feed, select the events to send. None are selected at first, so nothing is sent until you choose.

  9. Optionally, under Inbound Analysis Results and Link Clicks, choose which threat levels to include: all (Neutral, Caution and Danger), Caution and Danger only, or Danger only.

  10. Click Save Changes, then Save Changes again to confirm.

The card now shows Connected.

Note: Validating does not save anything. Changes take effect only after you click Save Changes.

Validate the connection

When you click Validate Now, INKY sends this test event to your endpoint, using the URL, headers and certificate setting currently on the screen:

{  "identifier": "inky-event",  "data": {    "validation": true  },  "teamid": "yourteam",  "event_type": "analysis_result"}

Its event_type is analysis_result and its data holds only "validation": true, so make sure your SIEM accepts it and does not alert on it.

If it works, you see Success! If not, you see Validation Failed! with the error INKY received. Common errors:

  • 401 Client Error: Unauthorized for url: the Authorization header is missing or wrong, or the token is disabled or lacks access in your SIEM. Check the header name, the format your SIEM expects and the token.

  • Max retries exceeded: INKY could not connect. Usually a firewall is blocking INKY. Allow the addresses listed under Prerequisites, and check the URL and port.

  • Certificate errors (for example CERTIFICATE_VERIFY_FAILED): your endpoint's certificate cannot be verified. Use a certificate from a public certificate authority, or, if the certificate is self-signed, select Disable SSL certificate validation.

  • No URL specified.: enter a Webhook URL.

Send events to Azure Event Hubs

INKY can create the Event Hubs access token for you, for example to bring INKY events into Microsoft Sentinel through an event hub.

  1. In Azure, create a shared access policy with Send rights on your event hub, and note its name and key.

  2. In Webhook URL, enter https://NAMESPACE.servicebus.windows.net/EVENT-HUB/messages, with your Event Hubs namespace and event hub names.

  3. Add a header named Authorization with this value, all on one line with no spaces: $SharedAccessSignature,NAMESPACE,EVENT-HUB,POLICY-NAME,POLICY-KEY

  4. Click Validate Now, then save.

INKY turns that value into a signed Event Hubs token on each request. If the value does not have all five parts, validation fails with a message showing the expected format.

Set up the feed for a Kaseya organization

  1. Select Admin Center > Integrations.

  2. In the Team selector, select the organization (building icon).

  3. Click the Custom SIEM Feed card. A note at the top confirms that every team in the organization uses these settings unless it sets its own, and that events are only sent for teams licensed for INKY Pro.

  4. Set up the feed as described in Set up the feed. The confirmation shows how many teams the change may affect.

To give one team different settings, select that team, open the card, and click the badge beside a setting to add an override.

Stop sending events

Do either of the following, then click Save Changes:

  • Clear the selected events under Customize Your SIEM Feed to keep the connection but send nothing.

  • Clear the Webhook URL. The card then shows Not Connected.

On a team that inherits from an organization, remove the team's overrides to go back to the organization's settings.

Event reference

Every event has the same outer fields:

Field

Meaning

identifier

Always inky-event.

event_type

Which event this is. See the table under About this integration.

teamid

The INKY team the event belongs to.

data

The event's details. The fields depend on the event type and are described below.

Fields with no value may be left out. Times are Unix timestamps in seconds (UTC). Treat any field not listed here as optional, and allow for new fields to appear. The examples are shortened.

Inbound analysis result (analysis_result)

data.meta_data describes the message:

Field

Meaning

subject, from_email

The message's subject and From address.

message_id

The Message-ID header, with angle brackets, or <unknown>.

mail_from

The envelope sender (MAIL FROM).

rcpt_to_addresses

The recipients.

sender_IP, helo_string

The sending server's IP address and HELO name.

internaldate_utc_seconds

When the message was received.

internal, origin

internal is true for mail between your own domains. origin says the same as Internal or External.

authenticated_sources, spf_passes, dkim_passes, dmarc_passes

The sender authentication checks that passed.

delivery_target

Where the message went: Inbox, Junk Folder, User Quarantine or Admin Quarantine.

silent_mode

True if the team runs INKY without banners.

google_spam, google_phish, microsoft_SCL

The email platform's own verdicts, when INKY has them.

dashboard_url

A link to the message in the INKY console.

data.inky_analysis.suspicious_details holds INKY's verdict:

Field

Meaning

threat_level

0 Neutral, 1 Caution, 2 Danger.

result_bucket

A finer grouping: NEUTRAL, CAUTION-NON-SPAM, CAUTION-SPAM, CAUTION-HI-SPAM, DANGER or DANGER-HI.

reason_titles

The reasons shown in the banner, in the team's language.

reason_ids_ordered

The reason codes, in the same order as reason_titles. See Reason codes.

reason_ids

The same reason codes, in no particular order.

reason_short_codes, short_reasons

Short names for the reasons (for example brand_impersonation). short_reasons has no repeats.

reason_htmls

The banner text for each reason.

SCL

Spam confidence on the Microsoft scale: 0 not spam, 6 spam, 9 high-confidence spam. For a blocked sender it reflects where the message was sent (1 Inbox, 5 Junk, 7 user quarantine, 10 admin quarantine).

PCL

Phishing confidence: 0 for Neutral, 4 for Caution, 8 or higher for Danger.

data.inky_analysis.threat_indicators lists the evidence behind each reason as reason_id, reason_short_code and data. What is in data depends on the reason: for example a URL, the brand impersonated, the observed_domain and the confused_with_domain, or an attachment's filename, size and sha256. Spam and phishing content reasons have no indicators. phishing_test is true when the message is one of your recognized phishing simulations.

{  "identifier": "inky-event",  "event_type": "analysis_result",  "teamid": "yourteam",  "data": {    "meta_data": {      "dashboard_url": "https://app.inkyphishfence.com/...",      "from_email": "billing@example-invoices.com",      "internal": false,      "internaldate_utc_seconds": 1761487200,      "rcpt_to_addresses": [        "jane@example.com"      ],      "mail_from": "bounce@example-invoices.com",      "sender_IP": "203.0.113.25",      "helo_string": "mail.example-invoices.com",      "message_id": "<abc123@mail.example-invoices.com>",      "subject": "Your invoice is overdue",      "authenticated_sources": [],      "spf_passes": [],      "dkim_passes": [],      "dmarc_passes": [],      "origin": "External",      "silent_mode": false,      "delivery_target": "Inbox"    },    "inky_analysis": {      "suspicious_details": {        "threat_level": 2,        "result_bucket": "DANGER",        "reason_titles": [          "Brand Impersonation",          "Phishing Content"        ],        "reason_ids_ordered": [          4,          15        ],        "reason_ids": [          15,          4        ],        "reason_short_codes": [          "brand_impersonation",          "phishing_content"        ],        "short_reasons": [          "brand_impersonation",          "phishing_content"        ],        "reason_htmls": [          "...",          "..."        ],        "SCL": 9,        "PCL": 8      },      "threat_indicators": [        {          "reason_id": 4,          "reason_short_code": "brand_impersonation",          "data": {            "brand": "Microsoft"          }        }      ]    }  }}

Link click (link_click)

Field

Meaning

data.link_data.original_url

Where the link goes.

data.link_data.rewritten_url

The INKY link the user clicked.

data.link_data.alert_level

INKY's rating of the click: 0 Neutral, 1 Caution, 2 Danger.

data.link_data.alert_reason_html

The warning the user saw, if any.

data.link_data.confirmation_needed, continue_allowed, continued

Whether the user had to confirm, whether they were allowed to continue, and whether they did. INKY sends one event for the click and another if the user continues.

data.link_data.timestamp

When the user clicked.

data.link_data.client_ip, client_user_agent

The user's IP address and browser.

data.link_data.tracking_id

INKY's ID for the link.

data.meta_data

message_id, rcpt_to_addresses, threat_level (the message's) and dashboard_url.

{  "identifier": "inky-event",  "event_type": "link_click",  "teamid": "yourteam",  "data": {    "link_data": {      "tracking_id": 1203604,      "original_url": "http://login.example-phish.com/",      "rewritten_url": "https://...",      "confirmation_needed": true,      "continue_allowed": true,      "timestamp": 1761487500,      "client_ip": "198.51.100.7",      "client_user_agent": "Mozilla/5.0 ...",      "alert_level": 2,      "alert_reason_html": "..."    },    "meta_data": {      "dashboard_url": "https://app.inkyphishfence.com/...",      "message_id": "<abc123@mail.example-invoices.com>",      "rcpt_to_addresses": [        "jane@example.com"      ],      "threat_level": 2    }  }}

User report (user_report)

Field

Meaning

data.user_data.label

safe, spam or phish.

data.user_data.contact_email, email_verified

Who reported it, and whether INKY verified that address.

data.user_data.comment

The user's comment, or the text None if they left none.

data.user_data.clicked_link, opened_attachment

What the user said they did with the message.

data.user_data.client_ip, client_user_agent

The user's IP address and browser.

data.meta_data

The message fields as in an analysis result, without the authentication, origin, silent mode and delivery fields.

data.inky_analysis

INKY's analysis of the message, as in an analysis result, plus threat_level and reason_titles repeated at this level.

Reports of your recognized phishing simulations are sent too, with data.inky_analysis.phishing_test set to true.

{  "identifier": "inky-event",  "event_type": "user_report",  "teamid": "yourteam",  "data": {    "user_data": {      "label": "phish",      "contact_email": "jane@example.com",      "email_verified": true,      "comment": "Asked me to sign in to see an invoice",      "clicked_link": false,      "opened_attachment": false,      "client_ip": "198.51.100.7",      "client_user_agent": "Mozilla/5.0 ..."    },    "meta_data": {      "dashboard_url": "https://app.inkyphishfence.com/...",      "from_email": "billing@example-invoices.com",      "subject": "Your invoice is overdue",      "message_id": "<abc123@mail.example-invoices.com>",      "rcpt_to_addresses": [        "jane@example.com"      ]    },    "inky_analysis": {      "threat_level": 2,      "reason_titles": [        "Brand Impersonation",        "Phishing Content"      ],      "suspicious_details": {        "threat_level": 2,        "reason_ids_ordered": [          4,          15        ]      },      "threat_indicators": []    }  }}

Outbound events

Outbound events carry data.meta_data with the message's from_email, subject, message_id, rcpt_to_addresses, internaldate_utc_seconds and dashboard_url. The dangerous link and spam/phish events also include internal, mail_from, sender_IP and helo_string.

Event

Fields in data

omp_analysis_result

omp_analysis: a list of the outbound rules the message matched, each with its name and conditions_matched (each condition's name, reason and matched values). For content conditions, each match also gives the file or part it was found in and the text around it (context_text).

omp_burst_state_change

reason: why INKY detected the burst.

omp_dangerous_link_detected

link_count: how many dangerous links were found.

omp_spam_phish_detected

reasons: spam_content, phishing_content or both.

omp_account_takeover

risk_level (LOW, MEDIUM or HIGH), action, reasons, enforcement_id, is_new and escalated. Sent only when an enforcement is new or escalated, not for every message.

workflow_action_taken

operation (notify_sender_confirmation, notify_approvers, discard, encrypt, expire_approval or expire_encrypted_msg), last_status, last_status_user, for_sender, first_action_ts, last_status_ts, teamid, and for notifications the recipients and approvers. This event has no meta_data.

{  "identifier": "inky-event",  "event_type": "omp_account_takeover",  "teamid": "yourteam",  "data": {    "risk_level": "HIGH",    "action": "...",    "reasons": [      "..."    ],    "enforcement_id": "...",    "is_new": true,    "escalated": false,    "meta_data": {      "dashboard_url": "https://app.inkyphishfence.com/...",      "from_email": "sam@example.com",      "internaldate_utc_seconds": 1761487800,      "rcpt_to_addresses": [        "someone@example.org"      ],      "message_id": "<def456@example.com>",      "subject": "Updated bank details"    }  }}

Reason codes

These are the numbers in reason_ids, reason_ids_ordered and threat_indicators. The title is in the team's language in events; the number and short code are the same in every language.

Code

Title

Short code

1

Blocked Domain

blackhost_domain, dnsbl_link_domain

2

Blocked Sender IP

dnsbl_sender_ip

4

Brand Impersonation

brand_impersonation

6

Confusable Domain

confusable_domain

7

Failed Sender Authentication

failed_sender_authentication

8

Google Safe Browsing URL

safebrowsing_URL

10

IP Address URL

IP_URL

12

Malware Attachment

bad_attachment

13

Misleading Link

misleading_link

14

Misleading Reply-To

misleading_replyto

15

Phishing Content

phishing_content

16

PhishTank URL

phishtank_URL

17

Potential Sender Forgery

confusable_display_name, sender_outlier

18

Sensitive Content

unsigned_sensitive_content

20

Spam Content

spam_content

21

Spammy Top-Level Domain

spammy_tld

22

Spoofed Internal Sender

spoofed_internal_sender

30

Suspicious URL

suspicious_URL

31

Free Web Hosting URL

free_web_host_URL

32

Netcraft Phishing Feed URL

netcraft_URL

33

First-Time Sender

first_time_sender

35

Invalid Sender

invalid_from_address

36

Possible Brand Impersonation

brand_impersonation

37

Brand Impersonation Site

brand_impersonation_site

39

Potentially Dangerous Content

high_html_sanitization_loss

40

Potentially Dangerous Content Removed

high_html_sanitization_loss

41

Signing Policy Violation

signing_policy_violation

43

Reported Phish

similar_to_reported_phish

44

Reported Spam

similar_to_reported_spam

45

Signing Verification Failure

signing_verification_failed

46

JavaScript Detected

javascript_detected

47

JavaScript Removed

javascript_detected

48

Spoofed VIP

spoofed_VIP

49

Cryptocurrency Scam

bitcoin_blackmail_scam

50

Invalid From Header

invalid_from_header

51

Malware Content

malware_content

52

Possibly Misconfigured Service

spoofed_internal_sender_recognized

53

Potentially Dangerous Attachment Removed

disallowed_attachment_removed

54

Phishing Site

phishing_site

55

Blocked Sender

blocked_sender

56

Potential Phish

potential_phish

57

Possible Banner Interference

possible_banner_interference

58

Phone Scam

phone_scam

59

Macro-Enabled Document

macro_enabled_document

60

Suspicious Sender

suspicious_sender

61

Google Web Risk URL

webrisk_URL

62

Advance Fee Scam

advance_fee_scam

63

Possible Spoofed VIP

possible_spoofed_VIP

64

Potential Exploit

potential_exploit

65

Protected File

protected_file

66

OpenPhish URL

openphish_URL

67

Prize Scam

prize_scam

68

Graymail

graymail

69

Blocked Sender Location

blocked_sender_location

70

Blocked Top-Level Domain

blocked_tld

71

QR Code

qr_code

72

Potential Conversation Hijack

potential_conversation_hijack

73

Potential Fake Conversation

potential_fake_conversation

74

Newly Registered Domain

newly_registered_domain

75

Potential Sender Risk

potential_sender_risk

76

Possible Spoofed Known Sender

unauthenticated_known_external_sender

77

Released From Quarantine

released_from_quarantine

78

External Sharing Link

external_sharing_link

79

Executable File

executable_file

80

Suspicious Mail Burst

burst_detected

81

Abused Service

abused_service

82

Internal Name Match

internal_name_match

83

Automatically Released From Quarantine

auto_released_from_quarantine

84

Reply Bait

reply_bait

A reason INKY cannot map has code -1 and the title Unknown. New reasons are added over time, so handle codes that are not in this list.

FAQ

Why don't I see the Custom SIEM Feed settings?

The form shows only when the selected team's license includes the SIEM feed, or when a Kaseya organization is selected. Otherwise it says Your license does not include SIEM feed functionality. You also need the Super Admin or Policy Admin role. Admins who can read but not change policy settings see the form with its fields turned off.

Validation succeeded, but no events arrive. Why?

  • Check that you clicked Save Changes. Validating uses what is on the screen and does not save it.

  • Check that at least one event is selected under Customize Your SIEM Feed. None are selected at first.

  • Check the threat-level filters. With Danger only, Neutral and Caution messages and clicks send nothing.

  • On an organization, check that the team's license is INKY Pro. Teams on INKY Advanced send no events.

Are events that fail to arrive sent again later?

No. INKY retries briefly when it cannot connect, but an event that is not delivered is not queued or resent.

Can I send events to more than one SIEM?

Each team has one Webhook URL. An organization and the teams in it can each have their own. To send the same events to more than one system, forward them from your SIEM or from an event hub.

Why did my SIEM receive an analysis_result with "validation": true?

That is the test event INKY sends when someone clicks Validate Now. It carries no message data.