Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion flashduty/en/1. On-call/2. Incidents/2.2 View Incidents.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Flashduty provides two entry points to view the incident list: one within the ch
8. **Pagination Settings**: Adjust page numbers and items per page.

:::highlight orange 💡
For performance reasons, when search conditions match more than **1000** incidents, the system only shows 1000+, rather than an exact number. Therefore, you can only view 1000 incidents through pagination. If you need to view more, please adjust your search time interval or use the [Incident Query](https://developer-en.flashcat.cloud/api-110655782) API to get all data.
For performance reasons, when search conditions match more than **1000** incidents, the system only shows 1000+, rather than an exact number. Therefore, you can only view 1000 incidents through pagination. If you need to view more, please adjust your search time interval or use the [Incident Query](https://docs.flashcat.cloud/en/api-reference/on-call/incidents/incident-list) API to get all data.
:::

### Using Group Views
Expand Down
2 changes: 1 addition & 1 deletion flashduty/en/1. On-call/2. Incidents/2.6 Custom Actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,4 @@ After creation, you can find the action button under [Incident Details-More Acti
<img src="https://download.flashcat.cloud/flashduty/doc/en/fd/action-1.png" alt="drawing" width="800"/>
### How to implement webhook?

Visit [Webhook Getting Started](https://developer-en.flashcat.cloud/doc-2996930) to learn more.
Visit [Webhook Getting Started](https://docs.flashcat.cloud/en/on-call/integration/webhooks/incident-webhook) to learn more.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Each alert event in the integration center has label enrichment configuration op
### Types of Label Enrichment
- **Extract:** Using regular expressions to extract needed information from alert titles, detailed descriptions, and existing label fields to automatically generate additional labels.
- **Compose:** Composition rules can build new labels using Go template syntax, extracting label values with {{.Labels.Field}} format or generating new labels using fixed values.
- **Map:** Maps source key-value pairs to new key-value pairs through mapping relationships. Requires pre-creating [schema](https://developer-en.flashcat.cloud/api-142409927) mapping relationships and [uploading metadata](https://developer-en.flashcat.cloud/api-145679479) before configuration. See configuration examples below.
- **Map:** Maps source key-value pairs to new key-value pairs through mapping relationships. Requires pre-creating [schema](https://docs.flashcat.cloud/en/api-reference/on-call/alert-enrichment/mapping-schema-write-create) mapping relationships and [uploading metadata](https://docs.flashcat.cloud/en/api-reference/on-call/alert-enrichment/mapping-data-write-upsert) before configuration. See configuration examples below.
- **Delete:** Removes labels with specified names. If the label to be deleted doesn't exist, the operation is ineffective.

![2025-09-22-13-56-46](https://docs-cdn.flashcat.cloud/images/png/51492ca5b84e5f84f1b90c0c7c13800a.png)
Expand Down Expand Up @@ -132,6 +132,6 @@ In the mapping table details page, you can manage the mapping table data, includ

::: tip

If you do not want the source label to exist, you can achieve this through the delete rule. Also, label mapping supports API management, which can be referred to [Label Mapping API](https://developer-en.flashcat.cloud/api-142429470).
If you do not want the source label to exist, you can achieve this through the delete rule. Also, label mapping supports API management, which can be referred to [Label Mapping API](https://docs.flashcat.cloud/en/api-reference/on-call/alert-enrichment/mapping-data-write-upsert).

:::
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ url: "https://docs.flashcat.cloud/en/flashduty/customize-incident-attrs"

By referencing alert labels and attributes, you can customize incident severity and title information. This feature is mainly used in the following two scenarios:

1. When reporting custom alert events using the [Alert Event API](https://developer-en.flashcat.cloud/en/flashduty/event-api/alert-event?nav=01JCQ7A4N4WRWNXW8EWEHXCMF5), you can use the `title_rule` field to customize the alert title.
1. When reporting custom alert events using the [Alert Event API](https://docs.flashcat.cloud/en/on-call/integration/alert-integration/alert-sources/standard alert), you can use the `title_rule` field to customize the alert title.

```
# Example: Specify resource and check labels as alert title
Expand Down
4 changes: 2 additions & 2 deletions flashduty/en/1. On-call/6. Advanced/6.3 Insights.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,14 +77,14 @@ Export incident list data in CSV format, supporting incident list, team, channel
</div>

#### Export Limitations
- Incident list exports exclude Labels data; for more detailed data, use the [Incident List](https://developer-en.flashcat.cloud/api-110655782) API.
- Incident list exports exclude Labels data; for more detailed data, use the [Incident List](https://docs.flashcat.cloud/en/api-reference/on-call/incidents/incident-list) API.
- Maximum query and export limit is 100,000 records; for more data, export in time segments.

### FAQ

<details>
<summary>How to query older data?</summary>
The insights dashboard currently supports querying last 180 days of data. For older data, use the [API query](https://developer-en.flashcat.cloud/api-213441443).
The insights dashboard currently supports querying last 180 days of data. For older data, use the [API query](https://docs.flashcat.cloud/en/api-reference/on-call/analytics/insight-incident-list).
</details>

<details>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ Field|Required|Type|Description
Field|Required|Type|Description
:-:|:-:|:-:|:---
| alt | No | string | Image alternative text, limit 128 characters, truncated if exceeded.
| src | Yes | string | Image source, value: http/https URL or image_key returned by [Image Upload API](https://developer.flashcat.cloud/api-344943718). Limit 256 characters, discarded if exceeded
| src | Yes | string | Image source, value: http/https URL or image_key returned by Image Upload API. Limit 256 characters, discarded if exceeded
| href | No | string | Hyperlink reference path, limit 256 characters, truncated if exceeded

</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
---
title: "HTTP Pull alert integration"
description: "Ingest alert events by periodically pulling from an external HTTP endpoint, ideal for systems that cannot push alerts."
---

<Tip>**Plan requirement**: HTTP Pull integration requires a Pro or higher On-call plan.</Tip>

Flashduty supports two alert ingestion modes: **Push** and **Pull**. Most integrations use the push mode, where the external monitoring system actively sends alerts to Flashduty. However, some systems do not support webhook push, or alert data can only be retrieved through an API query.

HTTP Pull integration is designed for these scenarios — you simply provide an HTTP endpoint that returns alert data in JSON format, and Flashduty will periodically pull the data on a schedule you define, converting it into standard alert events for processing.

## Use cases

- The monitoring system only provides a query API and does not support webhook push
- Alert data is stored in a database or object storage and must be queried via an HTTP endpoint
- A custom system cannot be retrofitted for push mode yet, and you want to integrate quickly via pull

## Configuration steps

<Steps>
<Step title="Create the integration">
Go to the Flashduty console, navigate to **Integration Center → Alert Events**, search for and select the **HTTP Pull** integration.
</Step>

<Step title="Configure request parameters">
Configure the parameters Flashduty uses when making requests to your endpoint:

| Parameter | Required | Description |
| :--- | :--- | :--- |
| **URL** | Yes | Target HTTP endpoint URL. Only `http` and `https` are supported. Supports [template variables](#template-variables) |
| **Method** | No | Request method, `GET` or `POST`. Defaults to `GET`. Body cannot be set when using GET |
| **Headers** | No | Custom request headers in key-value format. For security reasons, sensitive headers such as `Authorization` and `Cookie` are not allowed |
| **Body** | No | Request body, only available for POST. Supports [template variables](#template-variables) and must be valid JSON |
| **Timeout** | No | Per-request timeout, 1–10 seconds. Defaults to 5 seconds |
| **RetryCount** | No | Number of retries on failure, 0–2. Defaults to 1 |

</Step>

<Step title="Configure the pull cycle">
Set the **pull cycle (cycle_seconds)** — how often data is pulled. Minimum is 30 seconds, default is 300 seconds (5 minutes).
</Step>

<Step title="Configure severity mapping (optional)">
If the severity values returned by your endpoint differ from Flashduty's standard, use **severity_mapping** to map them.

For example, if your system uses `high` / `medium` / `low`, you can map them to Flashduty's `Critical` / `Warning` / `Info`.
</Step>

<Step title="Configure pagination (optional)">
If your endpoint supports pagination, configure pagination parameters to retrieve complete data. See [Pagination configuration](#pagination-configuration) for details.
</Step>

<Step title="Save and enable">
After saving, the integration will automatically pull data on the configured schedule. You can also manually trigger a pull from the integration details page.
</Step>
</Steps>

## Response format requirements

<a id="response-format"></a>

Your HTTP endpoint must meet the following requirements:

1. **Return an HTTP 200 status code**
2. **Content-Type must contain `json`** (e.g., `application/json`)
3. **The response body must be JSON and contain an `items` array**

Each element in `items` corresponds to one alert event. The fields are consistent with the [standard alert event](/en/on-call/integration/alert-integration/alert-sources/standard%20alert) protocol:

```json
{
"items": [
{
"event_status": "Warning",
"title_rule": "CPU idle lower than 20%",
"alert_key": "host-01::cpu-idle",
"description": "Host host-01 CPU idle is 15%",
"labels": {
"host": "host-01",
"check": "cpu.idle",
"metric": "node_cpu_seconds_total"
}
},
{
"event_status": "Ok",
"alert_key": "host-02::cpu-idle"
}
]
}
```

### Event field reference

| Field | Required | Type | Description |
| :--- | :--- | :--- | :--- |
| event_status | Yes | string | Alert status. Enum (capitalized): `Critical`, `Warning`, `Info`, `Ok` (recovery) |
| title_rule | Yes | string | Alert title, up to 512 characters |
| alert_key | No | string | Alert identifier for updating or recovering existing alerts. Up to 255 characters; auto-generated if not specified |
| description | No | string | Alert description, up to 2048 characters |
| labels | No | map | Alert label collection in key-value format. Up to 50 labels |

<Warning>
A maximum of 100 events are processed per page, and up to 2000 events in total across all pages per pull. Excess events are truncated and recorded in the pull history.
</Warning>

## Template variables

<a id="template-variables"></a>

URL and Body support Go `text/template` syntax. The following variables are available to dynamically generate request content:

| Variable | Type | Description |
| :--- | :--- | :--- |
| `{{.LastPullTime}}` | int64 | Last pull time (Unix timestamp in seconds) |
| `{{.NowTime}}` | int64 | Current time (Unix timestamp in seconds) |
| `{{.LastPullTimeISO}}` | string | Last pull time (ISO 8601 format, e.g., `2026-05-13T06:00:00Z`) |
| `{{.NowTimeISO}}` | string | Current time (ISO 8601 format) |
| `{{.CursorValue}}` | string | Pagination cursor value, empty for the first page |

### Examples

Using time range parameters in the URL:

```
https://api.example.com/alerts?start={{.LastPullTime}}&end={{.NowTime}}
```

Using ISO-formatted time in the Body:

```json
{
"start_time": "{{.LastPullTimeISO}}",
"end_time": "{{.NowTimeISO}}"
}
```

## Pagination configuration

<a id="pagination-configuration"></a>

If your endpoint cannot return all data in a single response, you can configure cursor-based pagination.

| Parameter | Description |
| :--- | :--- |
| **mode** | Pagination mode. Currently supports `cursor` |
| **max_pages** | Maximum number of pages to pull. Defaults to 20 |
| **next_value_path** | Path to extract the next-page cursor value from the response JSON, using [gjson](https://github.com/tidwall/gjson) syntax. For example, `pagination.next_cursor` |
| **param_name** | Pagination parameter name, e.g., `cursor` or `page_token` |
| **inject_to** | Where to inject the pagination parameter: `query` (append to URL query string) or `body` (merge into request body JSON) |

### Pagination workflow

<Steps>
<Step title="Initial request">
Flashduty sends the first request without pagination parameters.
</Step>

<Step title="Extract cursor">
The next-page cursor value is extracted from the response JSON using `next_value_path`.
</Step>

<Step title="Subsequent requests">
The cursor value is injected into the next request using `param_name` as the key, either in the query string or the body.
</Step>

<Step title="Termination conditions">
Pagination stops when `next_value_path` returns no value, the response contains an empty array, or the `max_pages` limit is reached.
</Step>
</Steps>

### Pagination response example

```json
{
"items": [
{ "event_status": "Critical", "title_rule": "Disk full", "alert_key": "disk-01" }
],
"pagination": {
"next_cursor": "eyJpZCI6MTAwfQ=="
}
}
```

With `next_value_path` set to `pagination.next_cursor`, the system will automatically use `eyJpZCI6MTAwfQ==` as the parameter value for the next page request.

## FAQ

<AccordionGroup>
<Accordion title="Pull failed with a URL access denied error?">
For security reasons, Flashduty (non-private deployment) does not allow access to private network addresses (e.g., `127.0.0.1`, `10.x.x.x`, `192.168.x.x`). Ensure your endpoint is accessible from the public internet.

This restriction does not apply to private deployment versions.
</Accordion>

<Accordion title="How do I view pull history and error details?">
In the integration details page under **Pull History**, you can view the results of each pull execution, including status, number of events pulled, error messages, and more.
</Accordion>

<Accordion title="Pull succeeds but no new alerts are generated?">
Check the following:

1. Confirm the JSON response contains an `items` array and it is not empty.
2. Confirm each event has `event_status` and `title_rule` fields.
3. If you use `alert_key`, check whether the alert is a duplicate — events with identical status and content are deduplicated and discarded.
4. Check if any drop rules, inhibit rules, or silence rules are matching.

For more information, see [Noise reduction](/en/on-call/channel/noise-reduction).
</Accordion>

<Accordion title="Can I manually trigger a pull?">
Yes. Click the manual trigger button on the integration details page. Manual triggers have a 60-second cooldown and cannot run concurrently with an ongoing scheduled pull.
</Accordion>

<Accordion title="How does severity mapping work?">
If your system uses custom severity identifiers (e.g., `P1`, `high`), you can configure mapping rules in the integration settings. For example:

| Your value | Flashduty value |
| :--- | :--- |
| P1 | Critical |
| P2 | Warning |
| P3 | Info |

Values that do not match any mapping are processed as-is.
</Accordion>
</AccordionGroup>
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Flashduty has already adapted webhook protocols for several commonly used ticket
## Implementation Protocol
---

Please refer to the [Developer Documentation](https://developer-en.flashcat.cloud/en/flashduty/event-api/change-event) to complete the protocol development.
Please refer to the [Developer Documentation](https://docs.flashcat.cloud/en/on-call/integration/change-integration/custom-event) to complete the protocol development.

## Best Practices
---
Expand Down
Loading
Loading