List Channel Providers
curl --request GET \
--url https://api.example.com/v1/channels/providersimport requests
url = "https://api.example.com/v1/channels/providers"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/channels/providers', 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.example.com/v1/channels/providers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.example.com/v1/channels/providers"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/channels/providers")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/channels/providers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"providers": [
{
"channel": "<string>",
"connected": true,
"display_name": "<string>",
"account_id": "<string>",
"connected_at": "<string>",
"last_sync_at": "<string>",
"status": "<string>",
"error_message": "<string>",
"capabilities": [
{}
]
}
]
}
}Channels
List Channel Providers
Return the status of every messaging channel provider connected to the workspace
GET
/
v1
/
channels
/
providers
List Channel Providers
curl --request GET \
--url https://api.example.com/v1/channels/providersimport requests
url = "https://api.example.com/v1/channels/providers"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/channels/providers', 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.example.com/v1/channels/providers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.example.com/v1/channels/providers"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/channels/providers")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/channels/providers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"providers": [
{
"channel": "<string>",
"connected": true,
"display_name": "<string>",
"account_id": "<string>",
"connected_at": "<string>",
"last_sync_at": "<string>",
"status": "<string>",
"error_message": "<string>",
"capabilities": [
{}
]
}
]
}
}Request
Use this endpoint to detect which channels are ready to send/receive messages, and to surface connection errors to users before they attempt to send.Query Parameters
None.Headers
Authorization: Bearer wbk_your_api_key_here
Response
object
Show properties
Show properties
array
Show Provider object
Show Provider object
string
slack, teams, whatsapp, telegram, or emailboolean
true when an authorised provider existsstring
Friendly name (for example the Slack workspace name)
string
Provider-side account identifier
string
ISO 8601 timestamp of the initial connection
string
ISO 8601 timestamp of the last successful sync
string
healthy, degraded, needs_reauth, or disconnectedstring
Human-readable error when
status is not healthyarray
List of supported operations (e.g.
send, receive, attachments)X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and X-Request-ID.
curl https://data.leadlex.com/functions/v1/api-gateway/v1/channels/providers \
-H "Authorization: Bearer wbk_your_api_key_here"
import requests
API_KEY = "wbk_your_api_key_here"
BASE_URL = "https://data.leadlex.com/functions/v1/api-gateway"
r = requests.get(
f"{BASE_URL}/v1/channels/providers",
headers={"Authorization": f"Bearer {API_KEY}"},
)
for p in r.json()["data"]["providers"]:
print(p["channel"], p["status"])
const res = await fetch(
'https://data.leadlex.com/functions/v1/api-gateway/v1/channels/providers',
{ headers: { Authorization: 'Bearer wbk_your_api_key_here' } },
);
const { data } = await res.json();
data.providers.forEach((p) => console.log(p.channel, p.status));
Example Response
{
"data": {
"providers": [
{
"channel": "slack",
"connected": true,
"display_name": "LeadLex Eng",
"account_id": "T01234567",
"connected_at": "2026-02-11T09:00:00Z",
"last_sync_at": "2026-04-17T10:30:00Z",
"status": "healthy",
"error_message": null,
"capabilities": ["send", "receive", "attachments"]
},
{
"channel": "teams",
"connected": false,
"display_name": null,
"account_id": null,
"connected_at": null,
"last_sync_at": null,
"status": "disconnected",
"error_message": null,
"capabilities": []
}
]
}
}
Errors
| Status | Code | Description |
|---|---|---|
| 401 | invalid_key | Invalid or expired API key |
| 403 | insufficient_permissions | Missing read:channels permission |
| 429 | rate_limited | Rate limit exceeded |