curl --request POST \
--url https://api.example.com/v1/panel/customers/{customerID}/notifications/test \
--header 'X-CSRF-Token: <x-csrf-token>'import requests
url = "https://api.example.com/v1/panel/customers/{customerID}/notifications/test"
headers = {"X-CSRF-Token": "<x-csrf-token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-CSRF-Token': '<x-csrf-token>'}};
fetch('https://api.example.com/v1/panel/customers/{customerID}/notifications/test', 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/panel/customers/{customerID}/notifications/test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-CSRF-Token: <x-csrf-token>"
],
]);
$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/panel/customers/{customerID}/notifications/test"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-CSRF-Token", "<x-csrf-token>")
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.example.com/v1/panel/customers/{customerID}/notifications/test")
.header("X-CSRF-Token", "<x-csrf-token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/panel/customers/{customerID}/notifications/test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-CSRF-Token"] = '<x-csrf-token>'
response = http.request(request)
puts response.read_body{
"status": "<string>",
"queued": true,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scheduledAt": "2023-11-07T05:31:56Z"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"request_id": "<string>"
}Post v1panelcustomers notificationstest
Requires support.write. Queues one test message to this customer through the ordinary outbox. Queued, not sent — and that is the point. The panel process holds no Telegram connection; the notifier does. A test that took its own path would prove the test path works, which nobody asked. This one is claimed by the same worker, sent by the same call, and recorded with the same failure codes, so when real notifications are failing the test fails identically. Quiet hours, the marketing frequency cap, and the per-kind preferences are deliberately not applied: a test deferred until nine in the morning answers nothing at the moment somebody is asking. Delivery health still is, because a customer who blocked the bot cannot be reached by wanting it more — and that is the finding the operator needs. Answers 202. The outcome appears in the history, not in this response. Deduplicated by operator and minute, so a double-click is one message.
curl --request POST \
--url https://api.example.com/v1/panel/customers/{customerID}/notifications/test \
--header 'X-CSRF-Token: <x-csrf-token>'import requests
url = "https://api.example.com/v1/panel/customers/{customerID}/notifications/test"
headers = {"X-CSRF-Token": "<x-csrf-token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-CSRF-Token': '<x-csrf-token>'}};
fetch('https://api.example.com/v1/panel/customers/{customerID}/notifications/test', 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/panel/customers/{customerID}/notifications/test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-CSRF-Token: <x-csrf-token>"
],
]);
$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/panel/customers/{customerID}/notifications/test"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-CSRF-Token", "<x-csrf-token>")
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.example.com/v1/panel/customers/{customerID}/notifications/test")
.header("X-CSRF-Token", "<x-csrf-token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/panel/customers/{customerID}/notifications/test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-CSRF-Token"] = '<x-csrf-token>'
response = http.request(request)
puts response.read_body{
"status": "<string>",
"queued": true,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scheduledAt": "2023-11-07T05:31:56Z"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"request_id": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"request_id": "<string>"
}Headers
Echoes the token from the current session. Required on every unsafe method.