List a monitor's firings
curl --request GET \
--url https://tako.com/api/v1/monitors/{id}/firings \
--header 'X-API-Key: <api-key>'import requests
url = "https://tako.com/api/v1/monitors/{id}/firings"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://tako.com/api/v1/monitors/{id}/firings', 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://tako.com/api/v1/monitors/{id}/firings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tako.com/api/v1/monitors/{id}/firings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://tako.com/api/v1/monitors/{id}/firings")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tako.com/api/v1/monitors/{id}/firings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"monitor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fired_at": "2023-11-07T05:31:56Z",
"occurred_at": "2023-11-07T05:31:56Z",
"trigger": "push",
"occurrence_key": "<string>",
"payload": {},
"deliveries": [
{
"channel_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "pending",
"attempts": 123,
"last_status_code": 123,
"finished_at": "2023-11-07T05:31:56Z"
}
],
"actions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"position": 123,
"kind": "<string>",
"state": "pending",
"ended_reason": "error",
"output": {
"text": "<string>",
"url": "<string>",
"structured": {},
"structured_error": {
"code": "arbiter_failed",
"message": "<string>"
}
},
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"deliveries": [
{
"channel_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "pending",
"attempts": 123,
"last_status_code": 123,
"finished_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
],
"next_cursor": "<string>"
}{
"error_message": "<string>",
"error_type": "BAD_REQUEST"
}{
"error_message": "<string>",
"error_type": "BAD_REQUEST"
}{
"error_message": "<string>",
"error_type": "BAD_REQUEST"
}Monitor Management
List a monitor's firings
Page through the occurrences a monitor has fired for, and how each delivery went
GET
/
v1
/
monitors
/
{id}
/
firings
List a monitor's firings
curl --request GET \
--url https://tako.com/api/v1/monitors/{id}/firings \
--header 'X-API-Key: <api-key>'import requests
url = "https://tako.com/api/v1/monitors/{id}/firings"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://tako.com/api/v1/monitors/{id}/firings', 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://tako.com/api/v1/monitors/{id}/firings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tako.com/api/v1/monitors/{id}/firings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://tako.com/api/v1/monitors/{id}/firings")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tako.com/api/v1/monitors/{id}/firings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"monitor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fired_at": "2023-11-07T05:31:56Z",
"occurred_at": "2023-11-07T05:31:56Z",
"trigger": "push",
"occurrence_key": "<string>",
"payload": {},
"deliveries": [
{
"channel_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "pending",
"attempts": 123,
"last_status_code": 123,
"finished_at": "2023-11-07T05:31:56Z"
}
],
"actions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"position": 123,
"kind": "<string>",
"state": "pending",
"ended_reason": "error",
"output": {
"text": "<string>",
"url": "<string>",
"structured": {},
"structured_error": {
"code": "arbiter_failed",
"message": "<string>"
}
},
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"deliveries": [
{
"channel_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "pending",
"attempts": 123,
"last_status_code": 123,
"finished_at": "2023-11-07T05:31:56Z"
}
]
}
]
}
],
"next_cursor": "<string>"
}{
"error_message": "<string>",
"error_type": "BAD_REQUEST"
}{
"error_message": "<string>",
"error_type": "BAD_REQUEST"
}{
"error_message": "<string>",
"error_type": "BAD_REQUEST"
}Notes
- To authenticate, you’ll need a Tako API key. It’s best practice to store it as an environment variable to avoid hardcoding sensitive credentials in your code.
- Returns firings newest first.
limitis 1–100 and defaults to 20. To get the next page, pass a response’snext_cursorback ascursor. occurred_atis when the occurrence happened, andfired_atis when Tako fired for it. The gap between them is however long the source took to report the occurrence. For each type’s reporting delay, see itsdescriptionin List monitor types.occurrence_keyis what Tako deduplicates on. Tako records one firing per key, so a source that reposts the same occurrence doesn’t fire twice.payloadholds the values that caused the firing. Tako sends the same object to your channels underpayload, and its fields depend on the monitor type. For the fields each type sends, see Webhook deliveries.deliveriesrecords what happened on each channel. After 2 consecutive failed deliveries, Tako pauses the channel. See Pause or resume a notification channel.- A delivery’s
stateischannel_pausedwhen the channel was paused, so Tako didn’t send a request.failedmeans the delivery ended without a2xx, including a delivery that expired before Tako sent it. Readattemptsandlast_status_codeto tell them apart. deliveriescovers the last 30 days. An older firing lists none.- Tako removes firings older than the monitor type’s
lookback_seconds.
Authorizations
Path Parameters
Resource id
Query Parameters
Opaque pagination cursor from a previous response's next_cursor.
Max items to return (default 20, max 100).
Required range:
1 <= x <= 100