curl --request GET \
--url https://api.tupana.ai/v1/webhooks \
--header 'Authorization: <api-key>'import requests
url = "https://api.tupana.ai/v1/webhooks"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.tupana.ai/v1/webhooks', 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.tupana.ai/v1/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$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.tupana.ai/v1/webhooks"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
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.tupana.ai/v1/webhooks")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v1/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": 1,
"url": "https://mi-sistema.com/webhook",
"events": [
"document.issued",
"document.delivered"
],
"events_display": [
"Emitido",
"Entregado"
],
"secret": "mi-clave-secreta",
"is_active": true,
"last_status_code": 200,
"last_sent_at": "2025-01-13T10:30:00Z",
"success_rate": 95.5,
"last_delivery": {
"id": 123,
"event": "document.issued",
"is_success": true,
"status_code": 200,
"sent_at": "2025-01-13T10:30:00Z",
"document_id": 456
},
"created_at": "2025-01-01T09:00:00Z",
"updated_at": "2025-01-13T10:30:00Z"
}
]{
"error": "VALIDATION_ERROR",
"message": "<string>"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}Listar webhooks
Obtiene la lista de webhooks configurados para las entidades accesibles del usuario autenticado. Si se proporciona master_entity_id, filtra solo los webhooks de esa entidad.
curl --request GET \
--url https://api.tupana.ai/v1/webhooks \
--header 'Authorization: <api-key>'import requests
url = "https://api.tupana.ai/v1/webhooks"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.tupana.ai/v1/webhooks', 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.tupana.ai/v1/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$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.tupana.ai/v1/webhooks"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
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.tupana.ai/v1/webhooks")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tupana.ai/v1/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": 1,
"url": "https://mi-sistema.com/webhook",
"events": [
"document.issued",
"document.delivered"
],
"events_display": [
"Emitido",
"Entregado"
],
"secret": "mi-clave-secreta",
"is_active": true,
"last_status_code": 200,
"last_sent_at": "2025-01-13T10:30:00Z",
"success_rate": 95.5,
"last_delivery": {
"id": 123,
"event": "document.issued",
"is_success": true,
"status_code": 200,
"sent_at": "2025-01-13T10:30:00Z",
"document_id": 456
},
"created_at": "2025-01-01T09:00:00Z",
"updated_at": "2025-01-13T10:30:00Z"
}
]{
"error": "VALIDATION_ERROR",
"message": "<string>"
}{
"error": "VALIDATION_ERROR",
"message": "<string>"
}master_entity_id, filtra solo los webhooks de esa entidad específica.
¿Para qué se usa?
Permite obtener la lista de webhooks configurados para las entidades accesibles del usuario. Útil para:- Ver todos los webhooks configurados
- Verificar la configuración de notificaciones
- Revisar el estado y métricas de entrega de webhooks
Qué hace
- Retorna todos los webhooks de las entidades accesibles del usuario
- Si se proporciona
master_entity_id, filtra solo los webhooks de esa entidad específica - Incluye información de eventos configurados, URLs de callback, estado activo/inactivo y métricas de entrega
- Solo retorna webhooks de entidades a las que el usuario tiene acceso
Ejemplos de uso
- Listar todos los webhooks: Consultar todos los webhooks configurados para todas las entidades accesibles
- Filtrar por entidad: Obtener solo los webhooks de una entidad específica usando
master_entity_id - Monitorear estado: Revisar el estado de entrega y tasas de éxito de los webhooks configurados
Consideraciones Importantes
Acceso a Entidades
Solo se pueden consultar webhooks de entidades a las que el usuario tiene acceso. Si el usuario no tiene entidades accesibles, se retorna una lista vacía.Métricas de Entrega
Cada webhook incluye métricas de entrega como tasa de éxito, último código de estado HTTP, fecha del último envío e información de la última entrega. Esto permite monitorear la salud y confiabilidad de tus webhooks.Authorizations
API Key para autenticación. Debe proporcionarse en el header Authorization con el formato: 'Api-Key YOUR-API-KEY' (incluye el prefijo 'Api-Key ' seguido de tu API key)
Query Parameters
ID de la entidad maestra para filtrar webhooks. Opcional. Si no se proporciona, retorna webhooks de todas las entidades accesibles del usuario autenticado.
Response
Lista de webhooks obtenida exitosamente
ID único del webhook
URL del endpoint que recibe las notificaciones
Lista de eventos configurados
document.issued, document.delivered, document.rejected, document.trace_updated, document.paid, document.unpaid, document.cancelled Nombres legibles de los eventos
["Emitido", "Entregado", "Rechazado SII"]
Clave secreta para verificar notificaciones
Si el webhook está activo
Último código HTTP de respuesta
Fecha de último envío
Tasa de éxito de entregas (0-100)
0 <= x <= 100Información de la última entrega
Show child attributes
Show child attributes
Fecha de creación
Fecha de última actualización
De qué ambiente recibe eventos de documentos: both (default), production o sandbox. Los eventos que no son de documento (credenciales, folios, cobros, programados) se entregan como producción.
both, production, sandbox Formato de los identificadores que viajan en el payload. 2: todos los ids son public_id (docu_… documento, ment_… emisor/receptor, scdo_… programado, fir_… solicitud de folios, dowe_… webhook). 1: ids enteros, el contrato de la API v1. Si se omite, el default sigue la ruta de creación: /v2/webhooks/ crea en 2 y /v1/webhooks/ crea en 1 (desde la plataforma, la versión que ya usa la empresa). Los webhooks creados antes de octubre 2026 quedaron en 1: súbelos con PATCH o desde la plataforma.
1, 2 