Skip to content

Get where a monitor's alerts go

GET
/servers/{id}/channels
curl --request GET \
--url https://dev.tunnelhq.com/api/v1/servers/srv_42/channels \
--header 'X-API-Key: <X-API-Key>' \
--header 'X-Project-Id: prj_12'

The channels a check’s or tunnel’s alerts go to. A channel that is switched off is listed too, with active: false; it sends nothing until it’s switched back on. Any role in the project can call it.

Need an API key? See Getting an API key.

id
required
string

The monitor, as srv_42 or 42.

Example
srv_42
X-Project-Id
required
string

The project, as prj_12 or 12. A workspace key can only reach its own workspace’s projects.

Example
prj_12

Its channels.

Media typeapplication/json
object
id
required

The check or tunnel.

string
channel_ids
required

The IDs of channels, ready to change and send back.

Array<string>
channels
required
Array<object>

An alert channel, without its settings.

object
id
required
string
name
required
string
type
required

The kind of channel, such as slack, telegram, smtp (email), or webhook.

string | null
active
required

Whether the channel is switched on. One that is off sends nothing.

boolean
Examples
Exampledefault

A check whose alerts go to two channels

{
"id": "srv_42",
"channel_ids": [
"chn_21",
"chn_22"
],
"channels": [
{
"id": "chn_21",
"name": "Ops Slack",
"type": "slack",
"active": true
},
{
"id": "chn_22",
"name": "On call email",
"type": "smtp",
"active": true
}
]
}
X-RateLimit-Limit
integer

Requests the workspace’s plan allows per minute.

X-RateLimit-Remaining
integer

Requests left in the current minute.

X-RateLimit-Reset
integer

Unix time, in seconds, when the current minute ends.

The ID is a group’s. A group sends no alerts of its own.

Media typeapplication/json
object
error
required
boolean
code
required

The HTTP status, repeated.

integer
message
required

What went wrong.

string
details

More detail, on some errors.

retry_after

Seconds to wait, on the 429 for wrong keys.

integer
Example
{
"error": true,
"code": 400,
"message": "A group sends no alerts of its own: give its checks or tunnels their channels."
}

The API key is missing, wrong, expired, switched off, or no longer valid.

Media typeapplication/json
object
error
required
boolean
code
required

The HTTP status, repeated.

integer
message
required

What went wrong.

string
details

More detail, on some errors.

retry_after

Seconds to wait, on the 429 for wrong keys.

integer
Examples
{
"error": true,
"code": 401,
"message": "API key is required. Provide X-API-Key header or Authorization: Bearer <key>"
}

The project has no check or tunnel with this ID, or the project doesn’t exist.

Media typeapplication/json
object
error
required
boolean
code
required

The HTTP status, repeated.

integer
message
required

What went wrong.

string
details

More detail, on some errors.

retry_after

Seconds to wait, on the 429 for wrong keys.

integer
Examples
{
"error": true,
"code": 404,
"message": "Check or tunnel not found"
}

A usage limit was reached, or this IP address made too many requests with a wrong key.

Usage limits are per workspace and plan: per minute (Retry-After: 60), per day (Retry-After: 3600), and per month (no Retry-After). They use their own body shape. An IP address may send 10 wrong keys a minute; one more is allowed every 6 seconds. While that allowance is used up, every request from the address is refused, even one with a valid key.

Media typeapplication/json
One of:
object
error
required
string
Allowed values: Rate limit exceeded Daily limit exceeded Monthly limit exceeded
message
required
string
retry_after

Seconds to wait. Absent for the monthly limit.

integer
Examples
{
"error": "Rate limit exceeded",
"message": "Per-minute limit of 60 requests exceeded",
"retry_after": 60
}
Retry-After
integer

Seconds to wait. 60 for the per-minute limit, 3600 for the daily limit, 6 after wrong keys. Absent for the monthly limit.

Something failed on TunnelHQ’s side.

Media typeapplication/json
object
error
required
boolean
code
required

The HTTP status, repeated.

integer
message
required

What went wrong.

string
details

More detail, on some errors.

retry_after

Seconds to wait, on the 429 for wrong keys.

integer
Example
{
"error": true,
"code": 500,
"message": "Internal server error"
}