POST https://{entorno}.ticketbaiws.eus/webhooks/
Permite crear un webhook para notificar del cambio de estado de una factura cuando se hacen envíos asíncronos.
PARÁMETROS
| url string obligatorio URL a la que enviar el webhook | https://... |
| secret string obligatorio Clave para la firma del webhook para validación del contenido. La firma se realiza mediante HMAC SHA256 y la firma se envía en base64 en el header X-Tbaiws-Hmac-Sha256 | xajky22kjasy |
| solo_errores boolean opcional Parámetro para enviar el webhook únicamente si se producen errores o si la factura es aceptada con errores o avisos | true |
| activo boolean opcional Webhook activado. Permite apagar el webhook temporalmente | true |
Método de cálculo de firma en PHP:
$calculated_hmac = base64_encode(hash_hmac('sha256', $request_body , $secret, true));
$ curl --request POST \
--url https://api.ticketbaiws.eus/webhooks/ \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Token: xxx' \
--header 'Nif: 00000014Z'
--data '
{
"url": "https://www.berein.com/",
"secret": "xajky22kjasy",
"solo_errores" : true,
"activo": true
}'
$ composer require guzzlehttp/guzzle
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.ticketbaiws.eus/webhooks/', [
'body' => '{"url": "https://www.berein.com/","secret": "xajky22kjasy","solo_errores" : true,"activo": true}',
'headers' => [
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Token' => 'xxx',
'Nif' => '00000014Z'
],
]);
echo $response->getBody();
$ python -m pip install requests
import requests
url = "https://api.ticketbaiws.eus/webhooks/"
payload = {
"url": "https://www.berein.com/",
"secret": "xajky22kjasy",
"solo_errores" : true,
"activo": true
}
headers = {"Accept": "application/json", "Token" : "xxx", "Nif" : "00000014Z"}
response = requests.request("POST", url, json=payload, headers=headers)
print(response.text)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.ticketbaiws.eus/webhooks/");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, '{"url": "https://www.berein.com/","secret": "xajky22kjasy","solo_errores" : true,"activo": true}');
CURLcode ret = curl_easy_perform(hnd);
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, '{"url": "https://www.berein.com/","secret": "xajky22kjasy","solo_errores" : true,"activo": true}');
Request request = new Request.Builder()
.url("https://api.ticketbaiws.eus/webhooks/")
.post(body)
.addHeader("Accept", "application/json")
.addHeader("Token", "xxx")
.addHeader("Nif", "00000014Z")
.build();
Response response = client.newCall(request).execute();
HTTP/1.1 200 OK
{
"result": "OK",
"return": {
"codigo": "6904a3501874e",
"url": "https://www.berein.com/",
"entorno": "test",
"secret": "xajky22kjasy",
"solo_errores": true,
"activo": true,
"fecha_creado": "2025-10-31T12:53:52+01:00",
"fecha_modificado": "2025-11-03T10:16:15+01:00"
},
"msg": ""
}
Headers:
array (
'X-Tbaiws-Hmac-Sha256' => 'Hl+X3FT/r5yH3wsgaku46votvTpUPSLPeDNCiCj+syM=',
'X-Tbaiws-Topic' => 'cambio_estado',
'X-Tbaiws-Environment' => 'real',
'X-Tbaiws-Id' => '6904a3501884e',
'User-Agent' => 'TbaiWS Hook',
'Content-Type' => 'application/json',
'Content-Length' => '144',
'Connection' => 'close'
)
Payload:
{"nif":"B123456789","serie":"5","numero":"500593135","fecha_emision":"03\\/11\\/2025","estado":"OK","avisos":"null"}