POST https://{entorno}.ticketbaiws.eus/tbai/
Este método permite enviar una factura a la hacienda foral correspondiente y devolverá la huella TBAI, la imagen código QR en base64 y la URL de validación de la factura de la hacienda foral que contiene el QR. El entorno de test permite generar TBAIs en el entorno de pruebas de la hacienda correspondiente.
ZUZENDU: El servicio de Zuzendu para poder modificar facturas enviadas erróneamente o poder reenviar facturas que previamente habían dado error, se ha de hacer reenviando de nuevo la factura que se desea corregir con el parámetro zuzendu a true. (*) La serie, el número y el importe total de la factura no pueden ser modificados, deben ser los mismos que contenía la factura original
PARÁMETROS
fecha string obligatorio Fecha de emisión de la factura en formato dd/mm/yyyy | 13/11/2021 | ||||||||||||||||
hora string obligatorio Hora de emisión de la factura en formato HH:MM:SS | 12:14:00 | ||||||||||||||||
fecha_operacion string opcional Fecha de la operación en formato dd/mm/yyyy | 12/11/2021 | ||||||||||||||||
nif string obligatorio NIF del cliente al que se le emite la factura | B01000012 | ||||||||||||||||
tipo_documento string opcional Tipo de documento identificativo para clientes extranjeros. Por defecto 02 para intracomunitarias ó 06 para el resto. Posibles valores: 02 => NIF-IVA 03 => Pasaporte 04 => Documento oficial de identificación expedido por el país o territorio de residencia, 05 => Certificado de residencia 06 => Otro documento probatorio | 02 | ||||||||||||||||
simplificada boolean obligatorio Es factura simplificada. Si se define como simplificada, los datos del cliente no se requerirán. | true | ||||||||||||||||
pais_cliente string opcional Código 2 letras del país del cliente si el NIF del cliente es extranjero (formato ISO-3166 Alpha-2 code) | ES | ||||||||||||||||
nombre string obligatorio Nombre social del cliente al que se le emite la factura | Empresa de ejemplo S.L. | ||||||||||||||||
direccion string obligatorio Dirección de facturación del cliente al que se le emite la factura | Calle de ejemplo 123 | ||||||||||||||||
cp string obligatorio Código postal del cliente al que se le emite la factura | 01013 | ||||||||||||||||
serie string obligatorio Serie de la factura | A | ||||||||||||||||
numero string obligatorio Número de factura | 2021000123 | ||||||||||||||||
rectificativa boolean obligatorio Es factura rectificativa | false | ||||||||||||||||
clave_rectificativa string opcional Clave de la factura rectificativa (R1, R2, R3, R4, R5). Si no se define se cogerá la R1 ó la R5 si es simplificada | R1 | ||||||||||||||||
tipo_rectificativa string opcional Tipo de factura rectificativa: (S)ustitutiva (I) por diferencias. Si no se define se interpretará como I (por diferencias) | I | ||||||||||||||||
rectificadas object array obligatorio si rectificativa
| |||||||||||||||||
tipo_operacion string opcional El tipo de operación: servicios o bienes. En caso de no definirlo, se considerará la operación como servicios | servicios | ||||||||||||||||
intracomunitaria boolean opcional Es factura intracomunitaria | false | ||||||||||||||||
exportacion boolean opcional Es factura de exportación a fuera de la comunidad | false | ||||||||||||||||
retencion float obligatorio Importe de retención aplicado | 0.00 | ||||||||||||||||
lineas object array. MÁX 1000 líneas obligatorio
| |||||||||||||||||
total_factura float obligatorio Importe total de la factura | 132.00 | ||||||||||||||||
zuzendu boolean opcional Modificación o reenvío de una factura que ha dado error previamente. No disponible para Bizkaia | false |
regimen_iva integer opcional Clave de régimen especial de IVA | 17 |
causa_exencion integer opcional Código de causa de exención de IVA. Si no se define, la aplicación determinará la más indicada Opciones: E1: Operaciones interiores (Artículo 20 de la ley de IVA) E2: Exportaciones de bienes (Artículo 21 de la ley de IVA) E3: Exportaciones (Buques, pesca...) (Artículo 22 de la ley de IVA) E4: Zonas francas, depósitos francos y regímenes aduaneros (Artículo 23 y 24 de la ley de IVA) E5: Operationes intracomunitarias (Artículo 25 de la ley de IVA) E6: Exenta por otra causa RL: No sujeta por reglas de localización OT: Otras causas de no-sujeción (Artículo 7 de la ley de IVA) IE: No sujeto por reglas de localización pero repercute impuesto extranjero, IPSI/IGIC o IVA VT: No sujeto, ventas realizadas por cuenta de terceros (importe no computable a efectos de IVA ni de IRPF) | E6 |
inversion_sujeto_pasivo boolean opcional Factura con inversión de sujeto pasivo | false |
emitida_terceros string opcional Factura emitida por terceros o por destinatario. Valores posibles: N(no), T(tercero), D(destinatario) | N |
modo_recargo_equivalencia boolean opcional Operación en régimen de recargo de equivalencia | false |
modo_regimen_simplificado boolean opcional Operación en régimen simplificado | false |
epigrafe string opcional Epígrafe para la factura. Si no se informa, se enviará el epígrafe especificado en la ficha de la empresa. Este parámetro sólo es válido para personas físicas que tengan que enviar ticketbai a Bizkaia Batuz y trabajen en más de un epígrafe. | 165960 |
$ curl --request POST \
--url https://api-test.ticketbaiws.eus/tbai/ \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Token: xxx' \
--header 'Nif: 00000014Z'
--data '
{
"fecha": "13\/11\/2021",
"hora": "12:14:00",
"fecha_operacion": "12\/11\/2021",
"pais_cliente": "ES",
"nif": "B00000011",
"nombre": "Empresa de ejemplo S.L.",
"direccion": "Calle Falsa 123",
"cp": "28080",
"serie": "A",
"numero": "2021000123",
"simplificada": false,
"rectificativa": false,
"clave_rectificativa": "R1",
"tipo_rectificativa": "I",
"rectificadas" : [
{
"serie": "A"
"numero": "20210000075",
"fecha": "10\/11\/2021"
}
],
"tipo_operacion": "servicios",
"intracomunitaria": false,
"exportacion": false,
"retencion": 0,
"lineas": [
{
"descripcion": "Producto normal",
"cantidad": 1,
"importe_unitario": 100.00,
"tipo_iva": 21.00,
"tipo_req": 0
},
{
"descripcion": "Producto alimentario",
"cantidad": 1,
"importe_unitario": 10,
"tipo_iva": 10.00,
"tipo_req": 0
}
],
"total_factura": 132.00,
"zuzendu" : false
}'
$ composer require guzzlehttp/guzzle
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api-test.ticketbaiws.eus/tbai/', [
'body' => '{"fecha":"13\/11\/2021","hora":"12:14:00","fecha_operacion":"12\/11\/2021","nif":"B00000011","nombre":"Empresa de ejemplo S.L.","direccion":"Calle Falsa 123","cp":"28080","serie":"A-","numero":"2021000123","simplificada":false,"rectificativa":false,"tipo_operacion":"servicios","intracomunitaria":false,"retencion":0,"lineas":[{"descripcion":"Producto normal","cantidad":1,"importe_unitario":100.00,"tipo_iva":"21.00","tipo_req":0},{"descripcion":"Producto alimentario","cantidad":1,"importe_unitario":10,"tipo_iva":10.00,"tipo_req":0}],"total_factura":132.00,"zuzendu":false}',
'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-test.ticketbaiws.eus/tbai/"
payload = {
"fecha": "13\/11\/2021",
"hora": "12:14:00",
"fecha_operacion":"12\/11\/2021",
"nif": "B00000011",
"nombre": "Empresa de ejemplo S.L.",
"direccion": "Calle Falsa 123",
"cp": "28080",
"serie": "A-",
"numero": "2021000123",
"simplificada": false,
"rectificativa": false,
"tipo_operacion":"servicios",
"intracomunitaria": false,
"retencion": 0,
"lineas": [
{
"descripcion": "Producto normal",
"cantidad": 1,
"importe_unitario": 100.00,
"tipo_iva": 21.00,
"tipo_req": 0
},
{
"descripcion": "Producto alimentario",
"cantidad": 1,
"importe_unitario": 10,
"tipo_iva": 10.00,
"tipo_req": 0
}
],
"total_factura": 132.00,
"zuzendu":false
}
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-test.ticketbaiws.eus/tbai/");
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, '{"fecha":"13\/11\/2021","hora":"12:14:00","fecha_operacion":"12\/11\/2021","nif":"B00000011","nombre":"Empresa de ejemplo S.L.","direccion":"Calle Falsa 123","cp":"28080","serie":"A-","numero":"2021000123","simplificada":false,"rectificativa":false,"tipo_operacion":"servicios","intracomunitaria":false,"retencion":0,"lineas":[{"descripcion":"Producto normal","cantidad":1,"importe_unitario":100.00,"tipo_iva":"21.00","tipo_req":0},{"descripcion":"Producto alimentario","cantidad":1,"importe_unitario":10,"tipo_iva":10.00,"tipo_req":0}],"total_factura":132.00,"zuzendu":false}');
CURLcode ret = curl_easy_perform(hnd);
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, '{"fecha":"13\/11\/2021","hora":"12:14:00","fecha_operacion":"12\/11\/2021","nif":"B00000011","nombre":"Empresa de ejemplo S.L.","direccion":"Calle Falsa 123","cp":"28080","serie":"A-","numero":"2021000123","simplificada":false,"rectificativa":false,"tipo_operacion":"servicios","intracomunitaria":false,"retencion":0,"lineas":[{"descripcion":"Producto normal","cantidad":1,"importe_unitario":100.00,"tipo_iva":"21.00","tipo_req":0},{"descripcion":"Producto alimentario","cantidad":1,"importe_unitario":10,"tipo_iva":10.00,"tipo_req":0}],"total_factura":132.00,"zuzendu":false}');
Request request = new Request.Builder()
.url("https://api-test.ticketbaiws.eus/tbai/")
.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": {
"huella_tbai" : "TBAI-B01000012-131121-zG3wtCW3WlOSN-108",
"qr" : "iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAIAAABEtEjdAAAABmJ...",
"url" : "https://batuz.eus/QRTBAI/?id=TBAI-..."
},
"msg": null
}