API > Nueva factura TicketBAI

Nueva factura TicketBAI

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
12:14:00
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
serie string obligatorio
Serie de la factura que se está rectificando
A
numero string obligatorio
Número de factura que se está rectificando
2021000100
fecha string obligatorio
Fecha de la factura que se está rectificando en formato dd/mm/yyyy
13/11/2021
base float opcional
Base de la factura que se está rectificando. Solo necesario si la factura no ha sido enviada previamente a través de Ticketbai WS.
100.00
cuota float opcional
Cuota de IVA de la factura que se está rectificando. Solo necesario si la factura no ha sido enviada previamente a través de Ticketbai WS.
21.00
recargo float opcional
Recargo de la factura que se está rectificando. Solo necesario si la factura no ha sido enviada previamente a través de Ticketbai WS.
5.20
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
descripcion string
Descripción de la línea de la factura (opcional)
Producto normal
cantidad float obligatorio
Número de unidades de la línea
1
importe_unitario float obligatorio
Importe SIN IVA de la línea
100.00
tipo_iva float obligatorio
Porcentaje de IVA aplicado para la línea
21.00
tipo_req float obligatorio
Porcentaje de recargo de equivalencia aplicado a la línea
0.00
descuento float opcional
Porcentaje de descuento aplicado para la línea
10.00
regimen_general boolean opcional
Indica que el concepto va en régimen general cuando el resto de la factura va en régimen simplificado o de recargo de equivalencia. Sólo se tendrá en cuenta si el flag de modo_recargo_equivalencia ó modo_regimen_simplificado está a true.
true
epigrafe integer opcional únicamente para personas físicas en Bizkaia (LROE 140)
Indica que el concepto va en un epígrafe específico diferente al epígrafe general definido en la ficha de empresa o diferente del definido en la factura.
197210
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


OTROS PARÁMETROS OPCIONALES

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

POST https://{entorno}.ticketbaiws.eus/tbai/
$ 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();
{ } Response JSON
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 
}