Indicators
Ingests Indicators of Compromise (IOCs) from OpenCTI via GraphQL for threat intelligence integration and analysis.
Sync Type: Incremental
Description
The OpenCTI Indicators input connector retrieves threat indicator data from your OpenCTI instance. Indicators represent observations about suspicious activity or artifacts that may indicate compromise, such as file hashes, IP addresses, domain names, email addresses, and URLs. This input provides continuous visibility into threat intelligence data from your OpenCTI deployment.
Requirements
Before configuring this input, you need:
-
OpenCTI Instance: An operational OpenCTI instance with API access enabled
- Cloud-hosted or on-premises deployment
- GraphQL API endpoint accessible from Monad
-
API Credentials: An API key with proper permissions
- API keys can be created by OpenCTI users with appropriate roles
- The API key is used as a Bearer token for authentication
-
Network Access: The connector makes an outbound HTTPS call from Monad to your OpenCTI GraphQL endpoint (
{base_url}/graphql). Both sides can be cloud-hosted or on-premises, so open the path for your specific combination:- Monad SaaS → OpenCTI cloud-hosted (public endpoint): ensure your OpenCTI instance (and any WAF/firewall in front of it) allows inbound HTTPS from Monad's egress IP ranges.
- Monad SaaS → OpenCTI on-premises: a purely internal OpenCTI is not reachable from Monad SaaS. Publish the GraphQL endpoint so Monad can reach it — e.g. through your gateway/reverse proxy with Monad's egress IPs allowlisted, or over a VPN/tunnel Monad can use.
- Self-hosted Monad → OpenCTI cloud-hosted (public endpoint): ensure your Monad cluster has outbound internet access, and that any egress firewall or proxy permits connections to the OpenCTI endpoint.
- Self-hosted Monad → OpenCTI on-premises: ensure the Monad cluster can route to the OpenCTI endpoint on your network — DNS resolution, network policies/security groups, and any internal firewall between them.
- In every case the endpoint must be HTTPS (HTTP endpoints are rejected). When Monad SaaS must reach OpenCTI through a firewall or IP allowlist, allow Monad's published egress IPs — see Monad Egress IP Addresses.
Setup Instructions
-
Generate an API Key:
- Log in to your OpenCTI instance with administrator or privileged user account
- Navigate to Profile > Settings > API access
- Click Create a new token or Generate new API key
- Copy the generated API key and store it securely (this is the secret for configuration)
- Note the API key cannot be viewed again after generation
-
Obtain the Endpoint URL:
- Identify your OpenCTI instance base URL (e.g.,
https://opencti.example.comorhttps://opencti-prod.mycompany.net) - The GraphQL endpoint will be at
{base_url}/graphql
- Identify your OpenCTI instance base URL (e.g.,
-
Configure the Connector:
- Use the API key and base URL in the configuration settings
Configuration
The following configuration defines the input parameters. Each field's specifications, such as type, requirements, and descriptions, are detailed below.
Settings
| Setting | Type | Required | Default | Description |
|---|---|---|---|---|
| Endpoint URL | string | Yes | - | Base URL of your OpenCTI instance (e.g., https://opencti.example.com) |
| Minimum Confidence | integer | No | 50 | Minimum value of the OpenCTI confidence field, 0-100. Only indicators with confidence >= this value are ingested. This filters on confidence, not x_opencti_score — see the note below the table. |
| Pattern Type | string | No | "stix" | Filters on the indicator's pattern language (stix, yara, sigma, snort, …), not a category. Indicators whose pattern_type differs are excluded. Set to an empty string to include all pattern types. |
| Filter Mode | string | Yes | "and" | Logical operator for combining filters: "and" or "or" |
| Backfill Start Time | string | No | - | Start time for initial data fetch in RFC3339 format (e.g., 2024-01-01T00:00:00Z). If not specified, the first sync starts from the current time; subsequent runs then fetch indicators created or modified since the last run (the connector checkpoints on updated_at). |
Which field the confidence filter uses. OpenCTI stores two different numbers on an indicator:
confidence— the credibility/quality of the information. This is the fieldMinimum Confidencefilters on.x_opencti_score— how malicious the observable is. This is the large number shown on the indicator's page in the OpenCTI UI, and it is not used by this connector.They often differ (in the sample record below,
x_opencti_scoreis 85 whileconfidenceis 90). If an indicator you expect is missing, check itsconfidence, not its score. Theconfidencenumber comes from OpenCTI's per-instance Confidence Level → value mapping (Settings > Customization > Indicators > Confidence), so a level such as "Good / Possibly True" can map to a value just under 50 and be excluded by the default threshold.Filters are applied server-side and silently. Under the default
andFilter Mode an indicator must satisfy every active filter (confidence, pattern type) to be ingested; one that fails any of them is simply not returned, with no per-record error. Set Filter Mode toorto include an indicator that matches any filter, or lower Minimum Confidence / clear Pattern Type, to widen what is ingested.
Secrets
| Secret | Type | Required | Description |
|---|---|---|---|
| API Key | string | Yes | API key used as a Bearer token for authentication against the OpenCTI instance. |
Troubleshooting
Common Issues
-
Authentication Errors:
- Verify the API key is correct and has not expired or been revoked
- Confirm the API key was created for the correct OpenCTI user/role
- Check that the API key still has access permissions in OpenCTI
- Regenerate the API key if needed and update the configuration
-
Connection Issues:
- Verify the Endpoint URL is correct and accessible from your network
- Check for firewall or network restrictions blocking access to the OpenCTI instance
- Ensure the URL uses HTTPS (HTTP endpoints are rejected for security)
- For on-premises instances, verify DNS resolution and routing
-
Invalid Confidence Score:
- Confidence must be a number between 0 and 100
- Default is 50 if not specified
- Common values: 0 (all indicators), 50 (medium and above), 75 (high and above), 100 (only highest confidence)
-
Filter Mode Errors:
- Filter mode must be either "and" or "or" (case-sensitive, lowercase only)
- Default is "and" if not specified
- "and" means all filters must be satisfied; "or" means any filter can be satisfied
-
No Data Retrieved:
- Check if indicators exist in your OpenCTI instance with the configured confidence level
- Verify the pattern type filter matches indicators in your instance (empty string includes all types)
- Check the backfill start time; if set to a future date, no data will be retrieved
- Review connector logs for detailed error messages
-
Invalid Backfill Start Time:
- Backfill start time must be in RFC3339 format (e.g.,
2024-01-01T00:00:00Z) - The timestamp cannot be in the future
- Backfill time affects only the initial sync; subsequent syncs use the saved cursor timestamp
- Backfill start time must be in RFC3339 format (e.g.,
-
Some indicators are missing while others from the same time period appear:
- This is almost always a filter excluding the specific indicator server-side — not a sync gap. On the missing indicator in OpenCTI, check:
- Confidence — is its
confidencefield (notx_opencti_score) below your Minimum Confidence? A value just under the threshold (e.g. 49 against the default of 50) is the most common cause. - Pattern type — does its
pattern_typediffer from your Pattern Type setting (e.g. ayara/sigmaindicator when the filter isstix)?
- Confidence — is its
- To include it going forward: lower Minimum Confidence, widen or clear Pattern Type, or set Filter Mode to
or. Alternatively, correct the value at the source (e.g. OpenCTI's Confidence Level mapping). - Because the connector checkpoints on
updated_at, editing the indicator in OpenCTI (which updates its modified time) makes it eligible for re-ingestion on the next sync — so a confidence raised past the threshold later will be picked up.
- This is almost always a filter excluding the specific indicator server-side — not a sync gap. On the missing indicator in OpenCTI, check:
Related Articles
- OpenCTI GraphQL API Documentation
- OpenCTI Indicators Overview
- Monad Egress IP Addresses — allowlisting when Monad SaaS reaches your OpenCTI instance
Sample Record
Code
Sync frequency
By default this input polls approximately every 10 seconds, with each sync beginning after the previous one completes. A cron schedule configured on the pipeline overrides this cadence. See Input Sync Frequency for details.