> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs-parschat.parstechai.com/api-reference/webhooks/get-webhook-config/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs-parschat.parstechai.com/_mcp/server. # Get webhook configuration GET https://api-chat.parstechai.com/v1/webhooks Returns where we deliver your events, so you can verify the configuration from code. There is no write counterpart. The URL and secret are set in the ParsChat panel, which means a stolen key can act within your account but cannot redirect your event stream out of it. The secret is never returned, only whether one is set. Reference: https://docs-parschat.parstechai.com/api-reference/webhooks/get-webhook-config ## Authentication - `Authorization` header (bearer token, required) — Your API key, issued by ParsChat sales. One key per account, spanning every robot you own. Send it as `Authorization: Bearer pk_live_…`. ## Response ### 200 Your webhook configuration. - `url` (string, optional) — Where we deliver events. - `secret_set` (boolean, optional) — Whether a signing secret exists. The secret itself is never returned: it is shown once, in the panel, when it is created. - `events` (list of string, optional) — Event types you receive. - `updated_at` (datetime, optional) — When the configuration last changed. ## Errors ### 400 Bad Request Error The request itself is malformed: a parameter is missing, unparseable, or out of range. Unlike 422, the request never reached validation of its contents. - `error` (ErrorError, optional) ### 401 Unauthorized Error The key is missing, wrong, revoked, or past its expiry date. All four answer `invalid_key`: telling an expired key from an unknown one would confirm to whoever holds a leaked key that it was once real. - `error` (ErrorError, optional) ### 403 Forbidden Error The call is understood but not permitted: a missing role, a lapsed plan, or exhausted capacity. - `error` (ErrorError, optional) ### 429 Too Many Requests Error You are calling the API too fast. `details` names the limit you are held to. This never means an automated reply to an end customer was discarded: those are queued, not dropped. - `error` (ErrorError, optional) ### 500 Internal Server Error Something failed on our side. Retry with backoff, and quote `request_id` if it persists. - `error` (ErrorError, optional) ### 503 Service Unavailable Error A service we depend on (a channel provider, or our AI service) is unavailable. Retry with backoff. - `error` (ErrorError, optional) ## Types ### ErrorError - `code` (string, optional) — Stable machine-readable code. Branch on this, not on the message. - `message` (string, optional) — Human-readable explanation. Wording may change. - `request_id` (string, optional) — Log this. It is what lets support find your exact request. - `details` (map from string to any, optional) — Machine-readable context for the code. On `capacity_exhausted` it carries `occupied`, `requested` and `capacity`; on `rate_limited`, `limit_per_minute` and `window_seconds`. ## Examples **Response** ```json { "url": "https://partner.example/parschat/events", "secret_set": true, "events": [ "message", "message.generating", "chat", "reaction", "is_typing" ], "updated_at": "2026-09-12T08:15:00Z" } ``` **SDK Code** ```python Configured import requests url = "https://api-chat.parstechai.com/v1/webhooks" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript Configured const url = 'https://api-chat.parstechai.com/v1/webhooks'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go Configured package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api-chat.parstechai.com/v1/webhooks" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby Configured require 'uri' require 'net/http' url = URI("https://api-chat.parstechai.com/v1/webhooks") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java Configured import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api-chat.parstechai.com/v1/webhooks") .header("Authorization", "Bearer ") .asString(); ``` ```php Configured request('GET', 'https://api-chat.parstechai.com/v1/webhooks', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp Configured using RestSharp; var client = new RestClient("https://api-chat.parstechai.com/v1/webhooks"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift Configured import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api-chat.parstechai.com/v1/webhooks")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```