Tags
Tags are colored labels you can attach to monitors for easy filtering and organization. For example, tag monitors by environment (production, staging), priority (critical, low), or team. Each tag has a name and an optional hex color code. You can then filter monitors by tag name using the list monitors endpoint.
List tags
Returns all tags on your account with a count of how many monitors are assigned to each one.
GET
/v1/tagsbash
curl "https://api.snapshotarchive.com/v1/tags" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"$response = Http::withToken('YOUR_API_KEY')
->get('https://api.snapshotarchive.com/v1/tags');
$tags = $response->json('data');resp = requests.get('https://api.snapshotarchive.com/v1/tags',
headers={'Authorization': 'Bearer YOUR_API_KEY', 'Accept': 'application/json'})
tags = resp.json()['data']const resp = await fetch('https://api.snapshotarchive.com/v1/tags', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Accept': 'application/json' }
});
const { data: tags } = await resp.json();uri = URI('https://api.snapshotarchive.com/v1/tags')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer YOUR_API_KEY'
req['Accept'] = 'application/json'
resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
tags = JSON.parse(resp.body)['data']req, _ := http.NewRequest("GET", "https://api.snapshotarchive.com/v1/tags", nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Accept", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()Response
200 OK
{
"data": [
{
"id": 1,
"name": "Production",
"color": "#FF0000",
"monitors_count": 3,
"created_at": "2026-09-15T10:00:00Z"
}
]
}Create a tag
Creates a new tag with a name and optional color. After creating, use Sync Tags to attach it to monitors.
POST
/v1/tagsRequest body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Tag name (max 50 characters) |
color | string | No | Hex color code (e.g. #FF0000) |
bash
curl -X POST https://api.snapshotarchive.com/v1/tags \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"name": "Production", "color": "#FF0000"}'$response = Http::withToken('YOUR_API_KEY')
->post('https://api.snapshotarchive.com/v1/tags', [
'name' => 'Production',
'color' => '#FF0000',
]);
$tag = $response->json('data');resp = requests.post('https://api.snapshotarchive.com/v1/tags',
headers={'Authorization': 'Bearer YOUR_API_KEY', 'Accept': 'application/json'},
json={'name': 'Production', 'color': '#FF0000'})
tag = resp.json()['data']const resp = await fetch('https://api.snapshotarchive.com/v1/tags', {
method: 'POST',
headers: { 'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify({ name: 'Production', color: '#FF0000' }),
});
const { data: tag } = await resp.json();uri = URI('https://api.snapshotarchive.com/v1/tags')
req = Net::HTTP::Post.new(uri)
req['Authorization'] = 'Bearer YOUR_API_KEY'
req['Content-Type'] = 'application/json'
req['Accept'] = 'application/json'
req.body = { name: 'Production', color: '#FF0000' }.to_json
resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
tag = JSON.parse(resp.body)['data']body := strings.NewReader(`{"name":"Production","color":"#FF0000"}`)
req, _ := http.NewRequest("POST", "https://api.snapshotarchive.com/v1/tags", body)
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()Update and delete a tag
GET
/v1/tags/{id}
Get a single tag with its monitors_count.
PUT
/v1/tags/{id}
Update a tag's name or color.
DELETE
/v1/tags/{id}
Delete a tag. It will be automatically detached from all monitors. Returns 204 No Content.
bash
curl -X DELETE https://api.snapshotarchive.com/v1/tags/1 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"$response = Http::withToken('YOUR_API_KEY')
->delete('https://api.snapshotarchive.com/v1/tags/1');
// 204 No Contentresponse = requests.delete(
'https://api.snapshotarchive.com/v1/tags/1',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
) # 204 No Contentconst response = await fetch('https://api.snapshotarchive.com/v1/tags/1', {
method: 'DELETE',
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}); // 204 No Contenturi = URI('https://api.snapshotarchive.com/v1/tags/1')
req = Net::HTTP::Delete.new(uri)
req['Authorization'] = 'Bearer YOUR_API_KEY'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
# 204 No Contentreq, _ := http.NewRequest("DELETE", "https://api.snapshotarchive.com/v1/tags/1", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)
// 204 No Content# Update tag color
curl -X PUT https://api.snapshotarchive.com/v1/tags/1 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"color": "#00FF00"}'
# Delete tag
curl -X DELETE https://api.snapshotarchive.com/v1/tags/1 \
-H "Authorization: Bearer YOUR_API_KEY" -H "Accept: application/json"// Update tag color
$response = Http::withToken('YOUR_API_KEY')
->put('https://api.snapshotarchive.com/v1/tags/1', [
'color' => '#00FF00',
]);
$tag = $response->json('data');# Update tag color
resp = requests.put('https://api.snapshotarchive.com/v1/tags/1',
headers={'Authorization': 'Bearer YOUR_API_KEY', 'Accept': 'application/json'},
json={'color': '#00FF00'})
tag = resp.json()['data']// Update tag color
const resp = await fetch('https://api.snapshotarchive.com/v1/tags/1', {
method: 'PUT',
headers: { 'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json', 'Accept': 'application/json' },
body: JSON.stringify({ color: '#00FF00' }),
});
const { data: tag } = await resp.json();# Update tag color
uri = URI('https://api.snapshotarchive.com/v1/tags/1')
req = Net::HTTP::Put.new(uri)
req['Authorization'] = 'Bearer YOUR_API_KEY'
req['Content-Type'] = 'application/json'
req['Accept'] = 'application/json'
req.body = { color: '#00FF00' }.to_json
resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
tag = JSON.parse(resp.body)['data']// Update tag color
body := strings.NewReader(`{"color":"#00FF00"}`)
req, _ := http.NewRequest("PUT", "https://api.snapshotarchive.com/v1/tags/1", body)
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()