Listar webhooks
Os webhooks do app, sem o segredo.
Escopo do app: webhooks:write. Só a chave do app; pelo OAuth, 403.
curl --request GET \
--url https://api.westhetics.io/v1/webhooks \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.westhetics.io/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.westhetics.io/v1/webhooks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"integrationId": "8d3e2f1a-0b9c-4d7e-a6f5-4e3d2c1b0a99",
"url": "https://crm.exemplo.com.br/webhooks/westhetics",
"description": "CRM da clínica",
"events": [
"anamnesis.completed",
"signature_request.completed"
],
"status": "active",
"disabledReason": null,
"disabledAt": null,
"failingSince": null,
"lastDeliveryAt": "2026-10-15T14:30:00Z",
"lastSuccessAt": "2026-10-15T14:30:00Z",
"hasPreviousSecret": false,
"previousSecretValidUntil": null,
"deliveries": {
"pending": 0,
"failed": 0
},
"createdAt": "2026-10-15T14:30:00Z",
"updatedAt": "2026-10-15T14:30:00Z"
}
],
"meta": {
"limit": 25,
"nextCursor": null
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"requestId": "<string>",
"fields": {}
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"requestId": "<string>",
"fields": {}
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"requestId": "<string>",
"fields": {}
}
}Autorizações
A chave do app de integração, criada em Integrações. Escopos: patients:read (Listar, buscar e ler pacientes; os eventos patient..); patients:write (Criar e editar pacientes. Inclui ler.); anamneses:read (Listar e ler anamneses, sem as respostas; os eventos anamnesis..); anamneses:write (Enviar, reenviar e cancelar anamnese. Inclui ler.); anamneses:answers (Ler as respostas da anamnese preenchida. É dado de saúde.); documents:read (Atendimentos, documentos, status da assinatura e o PDF; os eventos appointment.* e signature_request.*.); documents:write (Gerar contrato e termos e enviar para assinatura, reenviar e cancelar. Inclui ler.); catalog:read (Procedimentos, prestadores e modelos de documento da clínica.); webhooks:write (Criar, alterar e remover os webhooks do próprio app pela API.)
curl --request GET \
--url https://api.westhetics.io/v1/webhooks \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.westhetics.io/v1/webhooks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.westhetics.io/v1/webhooks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"integrationId": "8d3e2f1a-0b9c-4d7e-a6f5-4e3d2c1b0a99",
"url": "https://crm.exemplo.com.br/webhooks/westhetics",
"description": "CRM da clínica",
"events": [
"anamnesis.completed",
"signature_request.completed"
],
"status": "active",
"disabledReason": null,
"disabledAt": null,
"failingSince": null,
"lastDeliveryAt": "2026-10-15T14:30:00Z",
"lastSuccessAt": "2026-10-15T14:30:00Z",
"hasPreviousSecret": false,
"previousSecretValidUntil": null,
"deliveries": {
"pending": 0,
"failed": 0
},
"createdAt": "2026-10-15T14:30:00Z",
"updatedAt": "2026-10-15T14:30:00Z"
}
],
"meta": {
"limit": 25,
"nextCursor": null
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"requestId": "<string>",
"fields": {}
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"requestId": "<string>",
"fields": {}
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"requestId": "<string>",
"fields": {}
}
}