curl --request POST \
--url 'https://api.flashcat.cloud/rum/issue/export?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"application_ids": [
"eWbr4xk3ZRnLabRa6unqwD"
],
"console_origin": "https://console.flashcat.cloud",
"end_time": 1775961914595,
"export_fields": [
"issue_id",
"error_type",
"error_message",
"status",
"error_count",
"session_count",
"last_seen_at"
],
"orderby": "updated_at",
"start_time": 1772611200000,
"statuses": [
"for_review"
],
"time_zone": "Asia/Shanghai"
}
'import requests
url = "https://api.flashcat.cloud/rum/issue/export?app_key="
payload = {
"application_ids": ["eWbr4xk3ZRnLabRa6unqwD"],
"console_origin": "https://console.flashcat.cloud",
"end_time": 1775961914595,
"export_fields": ["issue_id", "error_type", "error_message", "status", "error_count", "session_count", "last_seen_at"],
"orderby": "updated_at",
"start_time": 1772611200000,
"statuses": ["for_review"],
"time_zone": "Asia/Shanghai"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
application_ids: ['eWbr4xk3ZRnLabRa6unqwD'],
console_origin: 'https://console.flashcat.cloud',
end_time: 1775961914595,
export_fields: [
'issue_id',
'error_type',
'error_message',
'status',
'error_count',
'session_count',
'last_seen_at'
],
orderby: 'updated_at',
start_time: 1772611200000,
statuses: ['for_review'],
time_zone: 'Asia/Shanghai'
})
};
fetch('https://api.flashcat.cloud/rum/issue/export?app_key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.flashcat.cloud/rum/issue/export?app_key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'application_ids' => [
'eWbr4xk3ZRnLabRa6unqwD'
],
'console_origin' => 'https://console.flashcat.cloud',
'end_time' => 1775961914595,
'export_fields' => [
'issue_id',
'error_type',
'error_message',
'status',
'error_count',
'session_count',
'last_seen_at'
],
'orderby' => 'updated_at',
'start_time' => 1772611200000,
'statuses' => [
'for_review'
],
'time_zone' => 'Asia/Shanghai'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.flashcat.cloud/rum/issue/export?app_key="
payload := strings.NewReader("{\n \"application_ids\": [\n \"eWbr4xk3ZRnLabRa6unqwD\"\n ],\n \"console_origin\": \"https://console.flashcat.cloud\",\n \"end_time\": 1775961914595,\n \"export_fields\": [\n \"issue_id\",\n \"error_type\",\n \"error_message\",\n \"status\",\n \"error_count\",\n \"session_count\",\n \"last_seen_at\"\n ],\n \"orderby\": \"updated_at\",\n \"start_time\": 1772611200000,\n \"statuses\": [\n \"for_review\"\n ],\n \"time_zone\": \"Asia/Shanghai\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.flashcat.cloud/rum/issue/export?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"application_ids\": [\n \"eWbr4xk3ZRnLabRa6unqwD\"\n ],\n \"console_origin\": \"https://console.flashcat.cloud\",\n \"end_time\": 1775961914595,\n \"export_fields\": [\n \"issue_id\",\n \"error_type\",\n \"error_message\",\n \"status\",\n \"error_count\",\n \"session_count\",\n \"last_seen_at\"\n ],\n \"orderby\": \"updated_at\",\n \"start_time\": 1772611200000,\n \"statuses\": [\n \"for_review\"\n ],\n \"time_zone\": \"Asia/Shanghai\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/rum/issue/export?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"application_ids\": [\n \"eWbr4xk3ZRnLabRa6unqwD\"\n ],\n \"console_origin\": \"https://console.flashcat.cloud\",\n \"end_time\": 1775961914595,\n \"export_fields\": [\n \"issue_id\",\n \"error_type\",\n \"error_message\",\n \"status\",\n \"error_count\",\n \"session_count\",\n \"last_seen_at\"\n ],\n \"orderby\": \"updated_at\",\n \"start_time\": 1772611200000,\n \"statuses\": [\n \"for_review\"\n ],\n \"time_zone\": \"Asia/Shanghai\"\n}"
response = http.request(request)
puts response.read_body"Issue ID,Error type,Error message,Status,Error count,Affected sessions,Last seen (Asia/Shanghai)\nNHEacQHi2DhXqobr9qPQz9,Error,Script error.,for_review,752,381,2026-04-12 10:43:59\nH8kZSmxiE7EgdyD4fCyyNa,Error,\"API ERROR: We encountered an internal error | POST /api/access/logout\",for_review,3,1,2026-04-03 12:41:24"{
"error": {
"code": "InvalidParameter",
"message": "The specified parameter is not valid."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}Export issues as CSV
Export the filtered RUM error tracking issues as a CSV file. The response is a text/csv stream delivered with Content-Disposition: attachment — it is not a JSON envelope; non-console callers can read the X-Export-Total and X-Export-Truncated response headers.
curl --request POST \
--url 'https://api.flashcat.cloud/rum/issue/export?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"application_ids": [
"eWbr4xk3ZRnLabRa6unqwD"
],
"console_origin": "https://console.flashcat.cloud",
"end_time": 1775961914595,
"export_fields": [
"issue_id",
"error_type",
"error_message",
"status",
"error_count",
"session_count",
"last_seen_at"
],
"orderby": "updated_at",
"start_time": 1772611200000,
"statuses": [
"for_review"
],
"time_zone": "Asia/Shanghai"
}
'import requests
url = "https://api.flashcat.cloud/rum/issue/export?app_key="
payload = {
"application_ids": ["eWbr4xk3ZRnLabRa6unqwD"],
"console_origin": "https://console.flashcat.cloud",
"end_time": 1775961914595,
"export_fields": ["issue_id", "error_type", "error_message", "status", "error_count", "session_count", "last_seen_at"],
"orderby": "updated_at",
"start_time": 1772611200000,
"statuses": ["for_review"],
"time_zone": "Asia/Shanghai"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
application_ids: ['eWbr4xk3ZRnLabRa6unqwD'],
console_origin: 'https://console.flashcat.cloud',
end_time: 1775961914595,
export_fields: [
'issue_id',
'error_type',
'error_message',
'status',
'error_count',
'session_count',
'last_seen_at'
],
orderby: 'updated_at',
start_time: 1772611200000,
statuses: ['for_review'],
time_zone: 'Asia/Shanghai'
})
};
fetch('https://api.flashcat.cloud/rum/issue/export?app_key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.flashcat.cloud/rum/issue/export?app_key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'application_ids' => [
'eWbr4xk3ZRnLabRa6unqwD'
],
'console_origin' => 'https://console.flashcat.cloud',
'end_time' => 1775961914595,
'export_fields' => [
'issue_id',
'error_type',
'error_message',
'status',
'error_count',
'session_count',
'last_seen_at'
],
'orderby' => 'updated_at',
'start_time' => 1772611200000,
'statuses' => [
'for_review'
],
'time_zone' => 'Asia/Shanghai'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.flashcat.cloud/rum/issue/export?app_key="
payload := strings.NewReader("{\n \"application_ids\": [\n \"eWbr4xk3ZRnLabRa6unqwD\"\n ],\n \"console_origin\": \"https://console.flashcat.cloud\",\n \"end_time\": 1775961914595,\n \"export_fields\": [\n \"issue_id\",\n \"error_type\",\n \"error_message\",\n \"status\",\n \"error_count\",\n \"session_count\",\n \"last_seen_at\"\n ],\n \"orderby\": \"updated_at\",\n \"start_time\": 1772611200000,\n \"statuses\": [\n \"for_review\"\n ],\n \"time_zone\": \"Asia/Shanghai\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.flashcat.cloud/rum/issue/export?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"application_ids\": [\n \"eWbr4xk3ZRnLabRa6unqwD\"\n ],\n \"console_origin\": \"https://console.flashcat.cloud\",\n \"end_time\": 1775961914595,\n \"export_fields\": [\n \"issue_id\",\n \"error_type\",\n \"error_message\",\n \"status\",\n \"error_count\",\n \"session_count\",\n \"last_seen_at\"\n ],\n \"orderby\": \"updated_at\",\n \"start_time\": 1772611200000,\n \"statuses\": [\n \"for_review\"\n ],\n \"time_zone\": \"Asia/Shanghai\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/rum/issue/export?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"application_ids\": [\n \"eWbr4xk3ZRnLabRa6unqwD\"\n ],\n \"console_origin\": \"https://console.flashcat.cloud\",\n \"end_time\": 1775961914595,\n \"export_fields\": [\n \"issue_id\",\n \"error_type\",\n \"error_message\",\n \"status\",\n \"error_count\",\n \"session_count\",\n \"last_seen_at\"\n ],\n \"orderby\": \"updated_at\",\n \"start_time\": 1772611200000,\n \"statuses\": [\n \"for_review\"\n ],\n \"time_zone\": \"Asia/Shanghai\"\n}"
response = http.request(request)
puts response.read_body"Issue ID,Error type,Error message,Status,Error count,Affected sessions,Last seen (Asia/Shanghai)\nNHEacQHi2DhXqobr9qPQz9,Error,Script error.,for_review,752,381,2026-04-12 10:43:59\nH8kZSmxiE7EgdyD4fCyyNa,Error,\"API ERROR: We encountered an internal error | POST /api/access/logout\",for_review,3,1,2026-04-03 12:41:24"{
"error": {
"code": "InvalidParameter",
"message": "The specified parameter is not valid."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}Restrictions
| Aspect | Value |
|---|---|
| Rate limits | 200 requests/day; 100 requests/minute; 10 requests/second per account |
| Permissions | None — any valid app_key can call this operation |
Usage
- The response is a
text/csvstream delivered withContent-Disposition: attachment— it is not wrapped in the standard envelope. The filename isrum-issues-<timestamp>.csv, stamped in the requestedtime_zone. ReadX-Export-TotalandX-Export-Truncatedresponse headers instead of a body field. - The export reads the first 100 matching rows (
ExportMaxRows);X-Export-Truncatedistruewhen more issues match.pandlimitare ignored. - The request filters are exactly those of
POST /rum/issue/list— an export is “what I am looking at, as a file”. export_fieldsnames the CSV columns in the order they appear. Unknown keys are rejected with a parameter error; an empty array uses the default column set.time_zonemust be a valid IANA zone name (e.g.Asia/Shanghai,UTC); timestamps are rendered in that zone and time columns carry the zone in their header. Invalid names are rejected.console_originis used to build theissue_urlcolumn; the service cannot infer it (SaaS, on-premises and dev releases answer on different origins).- Every call is recorded in the account’s audit log with the caller’s member ID, request payload, and resulting error (if any). Do not put secrets in request fields.
Authorizations
App key issued from the Flashduty console under Account → APP Keys. Required on every public API call. Keep it secret — it grants the same access as the owning account.
Body
Filters for exporting RUM error tracking issues to CSV.
End of the time range, Unix epoch milliseconds. Must be greater than start_time; maximum range: 183 days.
Start of the time range, Unix epoch milliseconds.
Filter by application IDs. Get IDs via POST /rum/application/list.
Sort ascending when true; descending by default.
When true, match by time-range overlap: export issues still active within the window (last_seen_timestamp >= start_time) even if created before it. Default false exports only issues created inside the window.
Console origin used to build the issue_url column, e.g. https://console.flashcat.cloud. The service cannot infer it (SaaS, on-premises and dev releases answer on different origins).
DQL query for advanced filtering. Cannot be used with sql.
If true, only export issues with at least one associated error event.
CSV columns to export, in the order they appear. Unknown keys are rejected with a parameter error; an empty array uses the default column set.
| Value | Column content |
|---|---|
issue_id | Issue ID |
issue_url | Console URL of the issue detail page (built from console_origin) |
application_name | Owning application name |
service | Service name |
error_type | Error type |
error_message | Error message |
status | Triage status |
severity | Severity |
is_crash | Whether the error caused a crash |
error_count | Error occurrence count |
session_count | Affected session count |
first_seen_at | First occurrence time (rendered in time_zone) |
first_seen_version | Application version at first occurrence |
last_seen_at | Most recent occurrence time (rendered in time_zone) |
last_seen_version | Application version at the most recent occurrence |
versions | All affected versions |
suspected_cause | Suspected cause category |
resolved_at | Resolution time (rendered in time_zone) |
issue_id, issue_url, application_name, service, error_type, error_message, status, severity, is_crash, error_count, session_count, first_seen_at, first_seen_version, last_seen_at, last_seen_version, versions, suspected_cause, resolved_at Page size (1–100). Ignored by the export — the row cap is fixed at 100.
1 <= x <= 100Sort field; defaults to updated_at when omitted.
| Value | Meaning |
|---|---|
created_at | Issue creation time |
updated_at | Last update time |
session_count | Affected session count |
error_count | Error occurrence count |
severity | Severity rank (Critical > Warning > Info) |
created_at, updated_at, session_count, error_count, severity Page number (1-based). Ignored by the export — the first 100 matching rows are always read.
x >= 1SQL-style query for advanced filtering. Cannot be used with dql.
Filter by triage status; any other value is rejected with a parameter error.
| Value | Meaning |
|---|---|
for_review | Pending triage |
reviewed | Reviewed |
ignored | Ignored |
resolved | Resolved |
for_review, reviewed, ignored, resolved Filter by suspected cause category.
| Value | Meaning |
|---|---|
api.failed_request | API request failure (e.g. HTTP 4xx/5xx responses) |
network.error | Network connectivity error (offline, aborted requests, etc.) |
code.exception | Code exception (Syntax/Reference/Range and similar runtime errors) |
code.invalid_object_access | Invalid object access (e.g. reading a property of undefined/null) |
code.invalid_argument | Invalid argument passed to a function |
unknown | Cause could not be determined |
api.failed_request, network.error, code.exception, code.invalid_object_access, code.invalid_argument, unknown Filter by team IDs. Get team IDs via POST /team/list.
IANA time zone used to render timestamps in the CSV, e.g. Asia/Shanghai or UTC. Default: Asia/Shanghai.
Response
Success. CSV attachment, not a JSON envelope.
CSV file content. The header row matches the exported columns in order; values are sanitized against spreadsheet formula injection.
Was this page helpful?