Referencia · API

Documentación de la API VeriFactu

Referencia completa de todos los endpoints de la API VeriFactu: autenticación, emisores, VeriFactu, TBAI, webhooks, consultas externas y otorgamientos. Cada endpoint incluye parámetros, ejemplos de respuesta y código listo para usar en PHP, JavaScript, cURL y Python.

Introducción

La API Verifactu es una herramienta potente para que adaptes tu Software de Facturación o tu ERP Sistema de Facturación a Verifactu. Permite una integración sencilla con múltiples entornos de desarrollo. Te ofrecemos nuestra API como un servicio, hospedada en nuestros servidores como un SAAS. Para ti, menos preocupaciones, soporte y facilidad en la integración.

Link a nuestro GitHub: https://github.com/NemonInvocash

Descarga la colección Postman para realizar pruebas sobre la API Verifactu de NEMON INVOCASH aquí.

Pasos a seguir:

  • Registrate en https://verifactuapi.es/ para obtener tus credenciales de acceso.
  • Login para obtener token.
  • Asignar el Token en Environment.
  • Ejecutar alguno de los ejemplos de Registro de Alta, o Registro de Anulación.
  • Si se ha definido WebHook, se notificará al EndPoint indicado cuando tengamos la respuesta de AEAT al envío.
  • Con el Id obtenido, del POST de Alta o Anulación, se puede llamar también al GET Consulta Registro Alta indicando el Id.
  • Cuando se haya comunicado a AEAT, tendrás disponible el campo Envío AEAT.

Autenticación

Para autenticar las peticiones, incluye un encabezado Authorization con el valor "Bearer your-token".

Todos los endpoints autenticados están marcados con un badge requiere autenticación en la documentación a continuación.

Autentificación

LogIn

Iniciar sesión para obtener el token de la API y asi poder utilizar sus funcionalidades.

POSTapi/login

Headers

Content-Type      

Example: application/json

Body Parameters

email   string   

El email del usuario. Example: ejemplo@verifatuAPI.com

password   string   

La contraseña del usuario. Example: 123456789

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/login';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "email": "ejemplo@verifatuAPI.com",
    "password": "123456789"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
 "success": true,
 "user_name": "VerifactuAPI",
 "user_email": "ejemplo@verifatuAPI.com",
 "message": "Inicio de sesión exitoso",
 "token": "1234567890",
 "expires_at": "2025-06-17 12:00:00",
}
Respuesta 401
{
    "success": false,
    "message": "Credenciales incorrectas",
    "error": 401,
    "code": 401
}

Login Emisor

Iniciar sesión como emisor para obtener el token de la API para utilizar las funcionalidades limitadas al propio nif del emisor usando la APIKey. Aqui se muestra como generar el APIKey y username para el emisor.

POSTapi/loginEmisor

Headers

Content-Type      

Example: application/json

Body Parameters

username   string   

El nombre de usuario del emisor. Example: aa.aaaaaaaaa

api_key   string   

APIKey unica del emisor. Example: 5d4f3d3bb1284e7cb3f5b7e7881d55d22ef5c1b35d693e6e4b9e5d2293ff1c16

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/loginEmisor';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "username": "aa.aaaaaaaaa",
    "api_key": "5d4f3d3bb1284e7cb3f5b7e7881d55d22ef5c1b35d693e6e4b9e5d2293ff1c16"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "user_name": "aa.aaaaaaaaa",
    "message": "Inicio de sesión exitoso",
    "token": "1234567890",
    "expires_at": "2025-06-17 12:00:00"
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el emisor especificado.",
    "error": 401,
    "code": 401
}

Emisores

Listado de emisores

Requiere autenticación

Obtener el listado de todos los emisores de la base de datos vinculados al usuario actual. Añadiendo los campos del body se puede filtrar el listado.

GETapi/emisor

Headers

Authorization      

Example: Bearer 6PEv3fa8DVhc65ad1bZke4g

Content-Type      

Example: application/json

Query Parameters

nif   string  optional  

El nif del emisor. Example: P1716358E

nombre   string  optional  

El nombre del emisor. Example: Nombre del emisor

type   string  optional  

El tipo de emisor(verifactu/tbai). Example: verifactu

id_zona_tbai   integer  optional  

El id de la zona de TBAI(1(Álava), 2(Gipuzkoa), 3(Bizkaia), 4(Todos)). Example: 1

id_emisor_autofactura   integer  optional  

El id del emisor principal al que está vinculado el emisor de autofactura. Example: 1

id_emisor_tercero   integer  optional  

El id del emisor principal al que está vinculado el emisor tercero. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 6PEv3fa8DVhc65ad1bZke4g',
            'Content-Type' => 'application/json',
        ],
        'query' => [
            'nif' => 'P1716358E',
            'nombre' => 'Nombre del emisor',
            'type' => 'verifactu',
            'id_zona_tbai' => '1',
            'id_emisor_autofactura' => '1',
            'id_emisor_tercero' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
  "success": true,
  "code": 200,
  "message": "Emisores listed successfully",
  "data": {
     "items": [
         {
             "id": 1,
             "nif": "A39200019",
             "nombre": "EMPRESA TEST",
             "created_at": "2025-06-09T08:49:53.000000Z",
             "updated_at": "2025-06-09T08:49:53.000000Z",
             "deleted_at": null,
             "representante_razon_social": null,
             "representante_nif": null,
             "default_webhook_id": null,
             "enviar_aeat": true,
             "sistema_informatico_id": 1,
             "cp": "43791",
             "type": "verifactu",
             "id_zona_tbai": null,
             "test_production": "t",
             "production_since": null,
             "datos_otorgamiento": null,
             "datos_otorgamiento_representante": null,
             "otorgamiento_base64": null,
             "otorgamiento_importado_base64": null,
             "otorgamiento_adjunto_base64": null,
             "otorgamiento_validado": "pendiente",
             "motivo_rechazo": null,
             "software_tbai": null
         },
     ],
     "count": 1
 },
 "pagination": {
     "total": 1,
     "perPage": 1,
     "currentPage": 1,
     "lastPage": 1
 }
}

Obtener un emisor

Requiere autenticación

Obtener los datos de un emisor en concreto filtrando por el ID del emisor

GETapi/emisor/{id}

Headers

Authorization      

Example: Bearer da8aEfbVev6PhcZD513g4k6

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del emisor que se desea obtener. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer da8aEfbVev6PhcZD513g4k6',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
 "success": true,
 "code": 200,
 "message": "Emisor obtained successfully",
 "data": {
         "items": {
             "id": 1,
             "nif": "A39200019",
             "nombre": "EMPRESA TEST",
             "created_at": "2025-06-09T08:49:53.000000Z",
             "updated_at": "2025-06-09T08:49:53.000000Z",
             "deleted_at": null,
             "representante_razon_social": null,
             "representante_nif": null,
             "default_webhook_id": null,
             "enviar_aeat": true,
             "sistema_informatico_id": 1,
             "cp": "43791",
             "type": "verifactu",
             "id_zona_tbai": null,
             "test_production": "t",
             "production_since": null,
             "datos_otorgamiento": null,
             "datos_otorgamiento_representante": null,
             "otorgamiento_base64": null,
             "otorgamiento_importado_base64": null,
             "otorgamiento_adjunto_base64": null,
             "otorgamiento_validado": "pendiente",
             "motivo_rechazo": null,
             "software_tbai": null,
             "sistema_informatico": {
                 "id": 1,
                 "nombre_razon": "NEMON INVOICE TO CASH, SL",
                 "nif": "B70912613",
                 "nombre_sistema_informatico": "NEMON INVOCASH VERIFACTU API",
                 "id_sistema_informatico": "01",
                 "version": "1.0",
                 "numero_instalacion": "20250609104953_772645",
                 "tipo_uso_posible_solo_verifactu": true,
                 "tipo_uso_posible_multi_ot": false,
                 "indicador_multiples_ot": false,
                 "created_at": "2025-06-09T08:49:53.000000Z",
                 "updated_at": "2025-06-09T08:49:53.000000Z",
                 "is_test": true
             }
         }
     },
     "count": 1
 }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el emisor especificado.",
    "error": 404,
    "code": 404
}

Habilitar/Deshabilitar emisor

Requiere autenticación

Habilita o deshabilita un emisor para que no pueda realizar registros, tanto altas como anulaciones.

PATCHapi/emisor/{id}/enabled

Headers

Authorization      

Example: Bearer b1Dfch4kvea835V6ZdPga6E

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del emisor que se desea habilitar/deshabilitar. Example: 1

Body Parameters

enabled   boolean   

El estado del emisor. Example: true

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1/enabled';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer b1Dfch4kvea835V6ZdPga6E',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "enabled": true
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Emisor P1716358E habilitado correctamente",
    "code": 200,
    "data": null
}
Respuesta 400
{
    "success": false,
    "message": "El campo enabled es obligatorio.",
    "error": 400,
    "code": 400
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el emisor especificado.",
    "error": 404,
    "code": 404
}

Crear un nuevo emisor

Requiere autenticación

Crea un nuevo emisor en la base de datos.

POSTapi/emisor

Headers

Authorization      

Example: Bearer he4fP6a65vV8ga3kDd1bZEc

Content-Type      

Example: application/json

Body Parameters

nif   string   

El NIF/CIF del emisor. Example: P1716358E

nombre   string   

El nombre del emisor. Example: Nombre del emisor

cp   string   

El Codigo Postal del emisor. Example: 43791

representante_razon_social   string  optional  

El nombre de la razón social del representante del emisor.

representante_nif   string  optional  

El NIF/CIF del representante del emisor.

default_webhook_id   integer  optional  

El ID del webhook por defecto. Example: 1

emisor_autofactura   string  optional  

El NIF/CIF del emisor principal al que se vincula este emisor de autofactura.

emisor_tercero   string  optional  

El NIF/CIF del emisor principal al que se vincula este emisor tercero.

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer he4fP6a65vV8ga3kDd1bZEc',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "P1716358E",
    "nombre": "Nombre del emisor",
    "cp": "43791",
    "default_webhook_id": 1
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 201
{
    "success": true,
    "message": "Emisor created successfully",
    "code": 201,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 4,
                "nombre": "EMPRESA TEST",
                "nif": "76877256D",
                "representante_razon_social": null,
                "representante_nif": null,
                "default_webhook_id": null,
                "enviar_aeat": true,
                "sistema_informatico_id": 3,
                "cp": "43791",
                "type": "verifactu",
                "id_zona_tbai": null,
                "test_production": "t",
                "production_since": null,
                "id_emisor_autofactura": null,
                "id_emisor_tercero": 1
            }
        ]
    }
}
Respuesta 409
{
    "success": false,
    "message": "El NIF proporcionado ya está registrado para otro emisor.",
    "error": 409,
    "code": 409
}

Actualizar un emisor

Requiere autenticación

Permite actualizar el nombre, el cp y el webhook por defecto de un emisor

PUTapi/emisor/{id}

Headers

Authorization      

Example: Bearer VcP6h81d4EDbg35vkea6Zfa

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del emisor que se desea actualizar. Example: 1

Body Parameters

nombre   string  optional  

El nombre del emisor. Example: Nombre del emisor

cp   string  optional  

El cp del emisor. Example: 12345

default_webhook_id   integer  optional  

El ID del webhook por defecto. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer VcP6h81d4EDbg35vkea6Zfa',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nombre": "Nombre del emisor",
    "cp": "12345",
    "default_webhook_id": 1
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
 "success": true,
 "message": "Emisor updated successfully",
 "code": 200,
 "data": {
     "count": 1,
     "items": [
         {
             "id": 1,
             "nif": "A39200019",
             "nombre": "EMPRESA TEST",
             "created_at": "2025-06-09T08:49:53.000000Z",
             "updated_at": "2025-06-09T08:49:53.000000Z",
             "deleted_at": null,
             "representante_razon_social": null,
             "representante_nif": null,
             "default_webhook_id": null,
             "enviar_aeat": true,
             "sistema_informatico_id": 1,
             "cp": "43791",
             "type": "verifactu",
             "id_zona_tbai": null,
             "test_production": "t",
             "production_since": null,
             "datos_otorgamiento": null,
             "datos_otorgamiento_representante": null,
             "otorgamiento_base64": null,
             "otorgamiento_importado_base64": null,
             "otorgamiento_adjunto_base64": null,
             "otorgamiento_validado": "pendiente",
             "motivo_rechazo": null,
             "software_tbai": null
         }
     ]
 }
Respuesta 400
{
 "success": false,
 "message": "El campo CP debe ser una cadena de texto formada por 5 números",
 "error": 400,
 "code": 400

Pasar a produccion

Pasar a produccion

Requiere autenticación

Pasar un emisor a produccion

PATCHapi/emisor/produccion/{id}

Headers

Authorization      

Example: Bearer 4kD5PaVhvgEcfbZ366e18ad

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del emisor. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/produccion/1';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 4kD5PaVhvgEcfbZ366e18ad',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Emisor pasado a produccion correctamente",
    "data": null
}
Respuesta 400
{
    "success": false,
    "message": "No tienes nifs disponibles. Nifs comprados: 100 Nifs activos: 100",
    "error": 400,
    "code": 400
}

Credenciales

Generar ApiKey

Requiere autenticación

Genera un Api Key y username para el emisor indicado a traves del id. Este Api Key se usa para obtener un token limitado al nif del emisor y que solo pueda gestionar sus facturas.

GETapi/emisor/{id}/api-key

Headers

Authorization      

Example: Bearer hgP658aakfe6bZd1E4D3cVv

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del emisor que se desea generar el Api Key. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1/api-key';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer hgP658aakfe6bZd1E4D3cVv',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "ApiKey generated successfully",
    "username": "em.p1716358e",
    "api_key": "5d4f3d3bb1284e7cb3f5b7e7881d55d22ef5c1b35d693e6e4b9e5d2293ff1c16"
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el emisor especificado.",
    "error": 404,
    "code": 404
}

Generar Contraseña

Requiere autenticación

Genera la contraseña y username para el emisor indicado a traves del id. Esta contraseña se usa para que el emisor pueda entrar en modo lectura al entorno web. La contraseña caduca cada 180 días.

GETapi/emisor/{id}/credentials

Headers

Authorization      

Example: Bearer eV4d8Dhbf6Za5gkvPc31Ea6

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del emisor que se desea generar las credenciales. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1/credentials';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer eV4d8Dhbf6Za5gkvPc31Ea6',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Credentials generated successfully",
    "username": "em.p1716358e",
    "password": "****************",
    "expiration_date": "2025-07-28"
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el emisor especificado.",
    "error": 404,
    "code": 404
}

Verifactu

Listas

Listar listas

Requiere autenticación

Muestra un listado con los nombres de todas las listas de Verifactu.

GETapi/listas

Headers

Authorization      

Example: Bearer VZga1dh8fDvc5a3P6e46kbE

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer VZga1dh8fDvc5a3P6e46kbE',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Nombres de listas listed successfully",
    "data": {
        "items": [
            "l1",
            "l10",
            "l12",
            "l14",
            "l15",
            "l16",
            "l17",
            "l1e",
            "l2",
            "l2e",
            "l3",
            "l3e",
            "l4",
            "l4e",
            "l5",
            "l6",
            "l7",
            "l8a",
            "l8b",
            "l9"
        ],
        "count": 20
    },
    "pagination": {
        "total": 1,
        "perPage": 1,
        "currentPage": 1,
        "lastPage": 1
    }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontraron listas para el tipo especificado.",
    "error": 404,
    "code": 404
}

Obtener una lista

Requiere autenticación

Muestra una lista verifactu en especifico filtrando por el nombre de la lista. Se pueden ver los valores y su descripción.

GETapi/listas/{lista}

Headers

Authorization      

Example: Bearer vgZh6acd4b6EkfDaeP8V315

Content-Type      

Example: application/json

URL Parameters

lista   string   

El nombre de la lista que se desea obtener. Example: l1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas/l1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer vgZh6acd4b6EkfDaeP8V315',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Lista obtenida correctamente",
    "data": {
        "items": [
            {
                "id": 1,
                "valor": "01",
                "descripcion": "Impuesto sobre el Valor Añadido (IVA)"
            },
            {
                "id": 2,
                "valor": "02",
                "descripcion": "Impuesto sobre la Producción, los Servicios y la Importación (IPSI) de Ceuta y Melilla"
            },
            {
                "id": 3,
                "valor": "03",
                "descripcion": "Impuesto General Indirecto Canario (IGIC)"
            },
            {
                "id": 4,
                "valor": "05",
                "descripcion": "Otros"
            }
        ],
        "count": 1
    }
}
Respuesta 404
{
    "success": false,
    "message": "La lista solicitada no existe",
    "error": 404,
    "code": 404
}

Obtener un valor de una lista

Requiere autenticación

Muestra un valor de una lista verifactu en especifico filtrando por el nombre de la lista y el valor.

GETapi/listas/{lista}/{valor}

Headers

Authorization      

Example: Bearer 3aVfv1dE6kgacDePh8564Zb

Content-Type      

Example: application/json

URL Parameters

lista   string   

El nombre de la lista donde se encuentra el valor. Example: l1

valor   string   

El valor de la linea de la lista que se desea obtener. Example: 01

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas/l1/01';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3aVfv1dE6kgacDePh8564Zb',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Lista obtenida correctamente",
    "data": {
        "items": {
            "id": 1,
            "valor": "01",
            "descripcion": "Impuesto sobre el Valor Añadido (IVA)"
        },
        "count": 1
    }
}
Respuesta 404
{
    "success": false,
    "message": "El registro solicitado no existe en la lista",
    "error": 404,
    "code": 404
}
Respuesta 404
{
    "success": false,
    "message": "La lista solicitada no existe",
    "error": 404,
    "code": 404
}

Alta Registros Facturacion

Registrar una factura de Verifactu.

Requiere autenticación

Registra una nuevo registro de factura en la base de datos para ser procesada y enviada.

POSTapi/alta-registro-facturacion

Headers

Authorization      

Example: Bearer c35h6bg1VkaZad4E6Pve8fD

Content-Type      

Example: application/json

Body Parameters

IDEmisorFactura   string   

El NIF del emisor. Example: A39200019

NumSerieFactura   string   

El número de serie de la factura. Example: AX/202412-1

FechaExpedicionFactura   string   

La fecha de expedición de la factura. Example: 2025-1-1

RefExterna   string  optional  

optional Referencia externa de la factura. Example: Test Ref Externa

Subsanacion   string  optional  

optional Indica si se trata de una subsanación (lista l4).

RechazoPrevio   string  optional  

optional Indica si se trata de una re-emision de subsanacion tras un rechazo (lista l17).

TipoFactura   string   

Tipo de factura (lista_l2). Example: F1

TipoRectificativa   string  optional  

optional Indica el tipo de rectificativa (lista l3).

FechaOperacion   string  optional  

optional Fecha de la operación.

DescripcionOperacion   string   

Descripción de la operación. Example: test

FacturaSimplificadaArt7273   string  optional  

optional Factura simplificada Articulo 7.2 Y 7.3 RD 1619/2012 (lista l4).

FacturaSinIdentifDestinatarioArt61d   string  optional  

optional Factura sin identificación destinatario artículo 6.1.d) RD 1619/2012 (lista l5).

EmitidaPorTercODesti   string   

Indica si se trata de una factura emitida por tercero o destinatario (lista l6).

Tercero   Object  optional  

optional Tercero que emite la factura.

NombreRazon   string   

Nombre o razón social del tercero. Example: "IVAN SOLE MARTINEZ"

NIF   string   

NIF del tercero. Example: "39707287H"

OtroCodPais   string  optional  

optional Otro código de país. Example: ES

OtroIDType   string  optional  

optional Otro tipo de identificación (lista l7). Example: 1

OtroID   string  optional  

optional Otro número de identificación. Example: 39707287H

Destinatarios   string[]   

Lista de destinatarios de la factura.

*   object  optional  
NombreRazon   string   

Nombre o razón social del destinatario. Example: "IVAN SOLE MARTINEZ"

NIF   string   

NIF del destinatario. Example: "39707287H"

OtroCodPais   string  optional  

optional Otro código de país. Example: ES

OtroIDType   string  optional  

optional Otro tipo de identificación (lista l7). Example: 1

OtroID   string  optional  

optional Otro número de identificación. Example: 39707287H

Cupon   string  optional  

optional Indica si se trata de una factura con minoracion de la base imponible (lista l4).

Desglose   string[]   

Lista de desgloses de la factura.

*   object  optional  
Impuesto   string  optional  

optional Código del impuesto (lista l1). Example: 01

ClaveRegimen   integer  optional  

optional Clave del régimen especial (lista l8a/l8b). Example: 1

CalificacionOperacion   integer  optional  

optional Calificación de la operación (lista l9). Example: 1

OperacionExenta   numeric  optional  

optional Operacion exenta (lista l10). Example: 100

TipoImpositivo   numeric  optional  

optional Tipo impositivo aplicado. Example: 21

BaseImponibleOImporteNoSujeto   numeric  optional  

optional Base imponible. Example: 100

BaseImponibleACoste   numeric  optional  

optional Base imponible a coste.

CuotaRepercutida   numeric  optional  

optional Cuota repercutida. Example: 21

TipoRecargoEquivalencia   numeric  optional  

optional Porcentaje de recargo de equivalencia. Example: 21

CuotaRecargoEquivalencia   numeric  optional  

optional Valor del recargo de equivalencia. Example: 21

CuotaTotal   number   

Cuota total de la factura. Example: 21

ImporteTotal   number   

Importe total de la factura. Example: 121

BaseRectificada   number  optional  

optional Base rectificada.

CuotaRectificada   number  optional  

optional Cuota rectificada.

CuotaRecargoRectificada   number  optional  

optional Cuota de recargo rectificada.

FacturasRectificadas   string[]  optional  

optional Lista de facturas rectificadas.

*   object  optional  
IDEmisorFactura   string   

El NIF del emisor de la factura rectificada. Example: A39200019

NumSerieFactura   string   

El número de serie de la factura rectificada. Example: AX/202412-1

FechaExpedicionFactura   string   

La fecha de expedición de la factura rectificada. Example: 2025-1-1

FacturasSustituidas   string[]  optional  

optional Lista de facturas sustituidas.

*   object  optional  
IDEmisorFactura   string   

El NIF del emisor de la factura sustituida. Example: A39200019

NumSerieFactura   string   

El número de serie de la factura sustituida. Example: AX/202412-1

FechaExpedicionFactura   string   

La fecha de expedición de la factura sustituida. Example: 2025-1-1

Incidencia   boolean  optional  

optional Indica si el envio se ha realizado posteriormente a la generación de la factura por alguna incidencia.

webhook_id   integer  optional  

optional El ID del webhook asociado a la factura.

tag   string  optional  

optional Etiqueta personalizada para la factura. Example: test

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-facturacion';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer c35h6bg1VkaZad4E6Pve8fD',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "IDEmisorFactura": "A39200019",
    "NumSerieFactura": "AX/202412-1",
    "FechaExpedicionFactura": "2025-1-1",
    "RefExterna": "Test Ref Externa",
    "TipoFactura": "F1",
    "DescripcionOperacion": "test",
    "EmitidaPorTercODesti": null,
    "Destinatarios": [
        {
            "NombreRazon": "IVAN SOLE MARTINEZ",
            "NIF": "39707287H"
        }
    ],
    "Desglose": [
        {
            "Impuesto": 1,
            "ClaveRegimen": 1,
            "CalificacionOperacion": 1,
            "TipoImpositivo": 21,
            "BaseImponibleOImporteNoSujeto": 100,
            "BaseImponibleACoste": 100,
            "CuotaRepercutida": 21
        }
    ],
    "CuotaTotal": 21,
    "ImporteTotal": 121,
    "tag": "test"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 201
{
    "success": true,
    "message": "AltaRegistroFacturacion created successfully",
    "code": 201,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 2,
                "previous_id": null,
                "alta_o_anulacion": 1,
                "id_registro_anulado": null,
                "modificacionOSubsanacion": null,
                "id_registro_modificadoOSubsanado": null,
                "IDEmisorFactura": "A39200019",
                "NumSerieFactura": "2025/002",
                "NumSerie": null,
                "NumFactura": null,
                "FechaExpedicionFactura": "2025-12-16",
                "HoraExpedicionFactura": null,
                "FechaOperacion": null,
                "DescripcionOperacion": "TEST",
                "NombreRazonDestinatario": null,
                "NIFDestinatario": null,
                "RefExterna": null,
                "CuotaTotal": 21,
                "ImporteTotal": 121,
                "moneda": "EUR",
                "BaseRectificada": null,
                "CuotaRectificada": null,
                "CuotaRecargoRectificada": null,
                "tag": null,
                "webhook_id": null,
                "verifactu": true,
                "no_verifactu": false,
                "tbai": false,
                "face": 0,
                "json": "JSON recibido por la API",
                "base64_pdf": null,
                "base64_qr_pdf": null,
                "url_qr": "https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR?nif=A39200019&numserie=2025/002&fecha=18-09-2025&importe=121",
                "qr_image": "QR formato base64",
                "qr_x": null,
                "qr_y": null,
                "qr_page": 1,
                "remitenteNacional": 1,
                "next_id": null,
                "IDVersion": 1,
                "Subsanacion": 2,
                "RechazoPrevio": 1,
                "TipoFactura": 2,
                "TipoRectificativa": null,
                "FacturaSimplificadaArt7273": 2,
                "FacturaSinIdentifDestinatarioArt61d": 2,
                "Macrodato": 2,
                "EmitidaPorTercODesti": null,
                "TercNombreRazon": null,
                "TercNIF": null,
                "TercOtroCodPais": null,
                "TercOtroIDType": null,
                "TercOtroID": null,
                "Cupon": 2,
                "SinRegistroPrevio": null,
                "RechazoPrevioA": 1,
                "GeneradoPor": null,
                "Generador_NombreRazon": null,
                "Generador_NIF": null,
                "Generador_OtroCodPais": null,
                "Generador_OtroIDType": null,
                "Generador_OtroID": null,
                "Huella": null,
                "Signature": null,
                "Signature2": null,
                "TipoHuella": 1,
                "NumRegistroAcuerdoFacturacion": null,
                "IdAcuerdoSistemaInformatico": null,
                "FechaHoraHusoGenRegistro": null,
                "IDEmisorFacturaAnterior": null,
                "NumSerieFacturaAnterior": null,
                "FechaExpedicionFacturaAnterior": null,
                "HuellaAnterior": null,
                "incidencia": false,
                "xml_aeat": null,
                "xml_signed": null,
                "xml_aeat_response": null,
                "estado_aeat": "No Registrado",
                "estado_registro_aeat": null,
                "codigo_error_aeat": null,
                "descripcion_error_aeat": null,
                "envios_aeat_id": null,
                "envios_aeat_lineas_id": null
            }
        ]
    }
}
Respuesta 400
{
    "success": false,
    "message": "El campo IDEmisorFactura es obligatorio y no puede ser null.",
    "error": 400,
    "code": 400
}

Validar una factura de Verifactu.

Requiere autenticación

Valida el formato y los datos de una factura de Verifactu sin generar el registro en la base de datos.

POSTapi/alta-registro-facturacion/validar

Headers

Authorization      

Example: Bearer Pg1a6dvDa8VefEbh36c45kZ

Content-Type      

Example: application/json

Body Parameters

IDEmisorFactura   string   

El NIF del emisor. Example: A39200019

NumSerieFactura   string   

El número de serie de la factura. Example: AX/202412-1

FechaExpedicionFactura   string   

La fecha de expedición de la factura. Example: 2025-1-1

RefExterna   string  optional  

optional Referencia externa de la factura. Example: Test Ref Externa

Subsanacion   string  optional  

optional Indica si se trata de una subsanación (lista l4).

RechazoPrevio   string  optional  

optional Indica si se trata de una re-emision de subsanacion tras un rechazo (lista l17).

TipoFactura   string   

Tipo de factura (lista_l2). Example: F1

TipoRectificativa   string  optional  

optional Indica el tipo de rectificativa (lista l3).

FechaOperacion   string  optional  

optional Fecha de la operación.

DescripcionOperacion   string   

Descripción de la operación. Example: test

FacturaSimplificadaArt7273   string  optional  

optional Factura simplificada Articulo 7.2 Y 7.3 RD 1619/2012 (lista l4).

FacturaSinIdentifDestinatarioArt61d   string  optional  

optional Factura sin identificación destinatario artículo 6.1.d) RD 1619/2012 (lista l5).

EmitidaPorTercODesti   string   

Indica si se trata de una factura emitida por tercero o destinatario (lista l6).

Tercero   Object  optional  

optional Tercero que emite la factura.

NombreRazon   string   

Nombre o razón social del tercero. Example: "IVAN SOLE MARTINEZ"

NIF   string   

NIF del tercero. Example: "39707287H"

OtroCodPais   string  optional  

optional Otro código de país. Example: ES

OtroIDType   string  optional  

optional Otro tipo de identificación (lista l7). Example: 1

OtroID   string  optional  

optional Otro número de identificación. Example: 39707287H

Destinatarios   string[]   

Lista de destinatarios de la factura.

*   object  optional  
NombreRazon   string   

Nombre o razón social del destinatario. Example: "IVAN SOLE MARTINEZ"

NIF   string   

NIF del destinatario. Example: "39707287H"

OtroCodPais   string  optional  

optional Otro código de país. Example: ES

OtroIDType   string  optional  

optional Otro tipo de identificación (lista l7). Example: 1

OtroID   string  optional  

optional Otro número de identificación. Example: 39707287H

Cupon   string  optional  

optional Indica si se trata de una factura con minoracion de la base imponible (lista l4).

Desglose   string[]   

Lista de desgloses de la factura.

*   object  optional  
Impuesto   string  optional  

optional Código del impuesto (lista l1). Example: 01

ClaveRegimen   integer  optional  

optional Clave del régimen especial (lista l8a/l8b). Example: 1

CalificacionOperacion   integer  optional  

optional Calificación de la operación (lista l9). Example: 1

OperacionExenta   numeric  optional  

optional Operacion exenta (lista l10). Example: 100

TipoImpositivo   numeric  optional  

optional Tipo impositivo aplicado. Example: 21

BaseImponibleOImporteNoSujeto   numeric  optional  

optional Base imponible. Example: 100

BaseImponibleACoste   numeric  optional  

optional Base imponible a coste.

CuotaRepercutida   numeric  optional  

optional Cuota repercutida. Example: 21

TipoRecargoEquivalencia   numeric  optional  

optional Porcentaje de recargo de equivalencia. Example: 21

CuotaRecargoEquivalencia   numeric  optional  

optional Valor del recargo de equivalencia. Example: 21

CuotaTotal   number   

Cuota total de la factura. Example: 21

ImporteTotal   number   

Importe total de la factura. Example: 121

BaseRectificada   number  optional  

optional Base rectificada.

CuotaRectificada   number  optional  

optional Cuota rectificada.

CuotaRecargoRectificada   number  optional  

optional Cuota de recargo rectificada.

FacturasRectificadas   string[]  optional  

optional Lista de facturas rectificadas.

*   object  optional  
IDEmisorFactura   string   

El NIF del emisor de la factura rectificada. Example: A39200019

NumSerieFactura   string   

El número de serie de la factura rectificada. Example: AX/202412-1

FechaExpedicionFactura   string   

La fecha de expedición de la factura rectificada. Example: 2025-1-1

FacturasSustituidas   string[]  optional  

optional Lista de facturas sustituidas.

*   object  optional  
IDEmisorFactura   string   

El NIF del emisor de la factura sustituida. Example: A39200019

NumSerieFactura   string   

El número de serie de la factura sustituida. Example: AX/202412-1

FechaExpedicionFactura   string   

La fecha de expedición de la factura sustituida. Example: 2025-1-1

webhook_id   integer  optional  

optional El ID del webhook asociado a la factura.

tag   string  optional  

optional Etiqueta personalizada para la factura. Example: test

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-facturacion/validar';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer Pg1a6dvDa8VefEbh36c45kZ',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "IDEmisorFactura": "A39200019",
    "NumSerieFactura": "AX/202412-1",
    "FechaExpedicionFactura": "2025-1-1",
    "RefExterna": "Test Ref Externa",
    "TipoFactura": "F1",
    "DescripcionOperacion": "test",
    "EmitidaPorTercODesti": null,
    "Destinatarios": [
        {
            "NombreRazon": "IVAN SOLE MARTINEZ",
            "NIF": "39707287H"
        }
    ],
    "Desglose": [
        {
            "Impuesto": 1,
            "ClaveRegimen": 1,
            "CalificacionOperacion": 1,
            "TipoImpositivo": 21,
            "BaseImponibleOImporteNoSujeto": 100,
            "BaseImponibleACoste": 100,
            "CuotaRepercutida": 21
        }
    ],
    "CuotaTotal": 21,
    "ImporteTotal": 121,
    "tag": "test"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
 "success": true,
 "message": "Registro validado correctamente",
 "code": 200,
 }
Respuesta 400
{
    "success": false,
    "message": "El campo IDEmisorFactura es obligatorio y no puede ser null.",
    "error": 400,
    "code": 400
}

Anular Registros Facturacion

Registrar una anulacion de Verifactu.

Requiere autenticación

Registra una anulacion de registro Verifactu en la base de datos para ser procesada y enviada. Si la factura a anular no existe en la API, usar el campo SinRegistroPrevio.

POSTapi/anulacion-registro-facturacion

Headers

Authorization      

Example: Bearer k5vZe31hVcEfa6ga6dD8Pb4

Content-Type      

Example: application/json

Body Parameters

IDEmisorFactura   string   

El ID del emisor de la factura. Example: A39200019

NumSerieFactura   string   

El número de serie de la factura. Example: AX/202412-1

FechaExpedicionFactura   string   

La fecha de expedición de la factura. Example: 2025-11-11

SinRegistroPrevio   boolean  optional  

Si la factura a anular no existe en la API, usar el campo SinRegistroPrevio. Example: true

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/anulacion-registro-facturacion';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer k5vZe31hVcEfa6ga6dD8Pb4',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "IDEmisorFactura": "A39200019",
    "NumSerieFactura": "AX/202412-1",
    "FechaExpedicionFactura": "2025-11-11",
    "SinRegistroPrevio": true
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 201
{
    "success": true,
    "message": "AnulacionRegistroFacturacion created successfully",
    "code": 201,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 3,
                "previous_id": null,
                "alta_o_anulacion": 2,
                "id_registro_anulado": 2,
                "modificacionOSubsanacion": null,
                "id_registro_modificadoOSubsanado": null,
                "IDEmisorFactura": "A39200019",
                "NumSerieFactura": "2025/002",
                "NumSerie": null,
                "NumFactura": null,
                "FechaExpedicionFactura": "2025-12-15",
                "HoraExpedicionFactura": null,
                "FechaOperacion": null,
                "DescripcionOperacion": null,
                "NombreRazonDestinatario": null,
                "NIFDestinatario": null,
                "RefExterna": null,
                "CuotaTotal": null,
                "ImporteTotal": null,
                "moneda": "EUR",
                "BaseRectificada": null,
                "CuotaRectificada": null,
                "CuotaRecargoRectificada": null,
                "tag": "/ANULACION",
                "webhook_id": null,
                "verifactu": true,
                "no_verifactu": false,
                "tbai": false,
                "face": 0,
                "json": "JSON recibido por la API",
                "base64_pdf": null,
                "base64_qr_pdf": null,
                "url_qr": null,
                "qr_image": null,
                "qr_x": null,
                "qr_y": null,
                "qr_page": null,
                "remitenteNacional": 1,
                "next_id": null,
                "IDVersion": 1,
                "Subsanacion": null,
                "RechazoPrevio": null,
                "TipoFactura": null,
                "TipoRectificativa": null,
                "FacturaSimplificadaArt7273": null,
                "FacturaSinIdentifDestinatarioArt61d": null,
                "Macrodato": null,
                "EmitidaPorTercODesti": null,
                "TercNombreRazon": null,
                "TercNIF": null,
                "TercOtroCodPais": null,
                "TercOtroIDType": null,
                "TercOtroID": null,
                "Cupon": null,
                "SinRegistroPrevio": 2,
                "RechazoPrevioA": 1,
                "GeneradoPor": null,
                "Generador_NombreRazon": null,
                "Generador_NIF": null,
                "Generador_OtroCodPais": null,
                "Generador_OtroIDType": null,
                "Generador_OtroID": null,
                "Huella": null,
                "Signature": null,
                "Signature2": null,
                "TipoHuella": 1,
                "NumRegistroAcuerdoFacturacion": null,
                "IdAcuerdoSistemaInformatico": null,
                "FechaHoraHusoGenRegistro": null,
                "IDEmisorFacturaAnterior": null,
                "NumSerieFacturaAnterior": null,
                "FechaExpedicionFacturaAnterior": null,
                "HuellaAnterior": null,
                "incidencia": false,
                "xml_aeat": null,
                "xml_signed": null,
                "xml_aeat_response": null,
                "estado_aeat": "No Registrado",
                "estado_registro_aeat": null,
                "codigo_error_aeat": null,
                "descripcion_error_aeat": null,
                "envios_aeat_id": null,
                "envios_aeat_lineas_id": null
            }
        ]
    }
}
Respuesta 400
{
    "success": false,
    "message": "El tipo de factura no es válido. Campo \"type\" no encontrado.",
    "error": 400,
    "code": 400
}

Anular un registro Verifactu por id.

Requiere autenticación

Anula un registro Verifactu existente en la base de datos usando el id, registra la anulacion y se procesa.

POSTapi/anulacion-registro-facturacion/{id}

Headers

Authorization      

Example: Bearer fbE6gVZ4hada1D8kPv63ce5

Content-Type      

Example: application/json

URL Parameters

id   string   

El id del registro de la factura a anular. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/anulacion-registro-facturacion/1';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer fbE6gVZ4hada1D8kPv63ce5',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 201
{
    "success": true,
    "message": "AnulacionRegistroFacturacion created successfully",
    "code": 201,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 3,
                "previous_id": null,
                "alta_o_anulacion": 2,
                "id_registro_anulado": 2,
                "modificacionOSubsanacion": null,
                "id_registro_modificadoOSubsanado": null,
                "IDEmisorFactura": "A39200019",
                "NumSerieFactura": "2025/002",
                "NumSerie": null,
                "NumFactura": null,
                "FechaExpedicionFactura": "2025-12-15",
                "HoraExpedicionFactura": null,
                "FechaOperacion": null,
                "DescripcionOperacion": null,
                "NombreRazonDestinatario": null,
                "NIFDestinatario": null,
                "RefExterna": null,
                "CuotaTotal": null,
                "ImporteTotal": null,
                "moneda": "EUR",
                "BaseRectificada": null,
                "CuotaRectificada": null,
                "CuotaRecargoRectificada": null,
                "tag": "/ANULACION",
                "webhook_id": null,
                "verifactu": true,
                "no_verifactu": false,
                "tbai": false,
                "face": 0,
                "json": "JSON recibido",
                "base64_pdf": null,
                "base64_qr_pdf": null,
                "url_qr": null,
                "qr_image": null,
                "qr_x": null,
                "qr_y": null,
                "qr_page": null,
                "remitenteNacional": 1,
                "next_id": null,
                "IDVersion": 1,
                "Subsanacion": null,
                "RechazoPrevio": null,
                "TipoFactura": null,
                "TipoRectificativa": null,
                "FacturaSimplificadaArt7273": null,
                "FacturaSinIdentifDestinatarioArt61d": null,
                "Macrodato": null,
                "EmitidaPorTercODesti": null,
                "TercNombreRazon": null,
                "TercNIF": null,
                "TercOtroCodPais": null,
                "TercOtroIDType": null,
                "TercOtroID": null,
                "Cupon": null,
                "SinRegistroPrevio": null,
                "RechazoPrevioA": 1,
                "GeneradoPor": null,
                "Generador_NombreRazon": null,
                "Generador_NIF": null,
                "Generador_OtroCodPais": null,
                "Generador_OtroIDType": null,
                "Generador_OtroID": null,
                "Huella": null,
                "Signature": null,
                "Signature2": null,
                "TipoHuella": 1,
                "NumRegistroAcuerdoFacturacion": null,
                "IdAcuerdoSistemaInformatico": null,
                "FechaHoraHusoGenRegistro": null,
                "IDEmisorFacturaAnterior": null,
                "NumSerieFacturaAnterior": null,
                "FechaExpedicionFacturaAnterior": null,
                "HuellaAnterior": null,
                "incidencia": false,
                "xml_aeat": null,
                "xml_signed": null,
                "xml_aeat_response": null,
                "estado_aeat": "No Registrado",
                "estado_registro_aeat": null,
                "codigo_error_aeat": null,
                "descripcion_error_aeat": null,
                "envios_aeat_id": null,
                "envios_aeat_lineas_id": null
            }
        ]
    }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró la factura especificada.",
    "error": 404,
    "code": 404
}

Consultar Registros Facturacion

Obtener lista de registros Verifactu

Requiere autenticación

Muestra una lista con todos los registros Verifactu del usuario. Añadiendo los campos del body se puede filtrar el listado.

GETapi/alta-registro-facturacion

Headers

Authorization      

Example: Bearer VP8f6Davbagde5hk41Z6Ec3

Content-Type      

Example: application/json

Query Parameters

IDEmisorFactura   string  optional  

El ID del emisor de la factura. Example: A39200019

NumSerieFactura   string  optional  

El número de serie de la factura. Example: AX/202412-1

FechaExpedicionFactura   string  optional  

La fecha de expedición de la factura. Example: 2025-01-01

NifDestinatario   string  optional  

El NIF del destinatario. Example: 123456789

NombreRazonDestinatario   string  optional  

El nombre o razón social del destinatario. Example: Nombre del destinatario

ImporteTotal   number  optional  

El importe total de la factura. Example: 100

tag   string  optional  

El tag de la factura. Example: 123456789

alta_o_anulacion   integer  optional  

El tipo de factura (1(alta)/2(anulación)). Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-facturacion';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer VP8f6Davbagde5hk41Z6Ec3',
            'Content-Type' => 'application/json',
        ],
        'query' => [
            'IDEmisorFactura' => 'A39200019',
            'NumSerieFactura' => 'AX/202412-1',
            'FechaExpedicionFactura' => '2025-01-01',
            'NifDestinatario' => '123456789',
            'NombreRazonDestinatario' => 'Nombre del destinatario',
            'ImporteTotal' => '100',
            'tag' => '123456789',
            'alta_o_anulacion' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
 "success": true,
 "code": 200,
 "message": "Invoices listed successfully",
 "data": {
     "items": [
         {
         "id": 2,
         "previous_id": 1,
         "alta_o_anulacion": 1,
         "id_registro_anulado": null,
         "modificacionOSubsanacion": null,
         "id_registro_modificadoOSubsanado": null,
         "IDEmisorFactura": "A39200019",
         "NumSerieFactura": "2025/002",
         "NumSerie": null,
         "NumFactura": null,
         "FechaExpedicionFactura": "2025-12-15",
         "HoraExpedicionFactura": null,
         "FechaOperacion": null,
         "DescripcionOperacion": "TEST",
         "NombreRazonDestinatario": null,
         "NIFDestinatario": null,
         "RefExterna": null,
         "CuotaTotal": 21,
         "ImporteTotal": 121,
         "moneda": "EUR",
         "BaseRectificada": null,
         "CuotaRectificada": null,
         "CuotaRecargoRectificada": null,
         "tag": null,
         "webhook_id": null,
         "verifactu": true,
         "no_verifactu": false,
         "tbai": false,
         "face": 0,
         "json": "JSON recibido por la API",
         "base64_pdf": null,
         "base64_qr_pdf": null,
         "url_qr": "https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR?nif=A39200019&numserie=2025/002&fecha=15-12-2025&importe=121",
         "qr_image": "QR en formato base64",
         "qr_x": null,
         "qr_y": null,
         "qr_page": 1,
         "remitenteNacional": 1,
         "next_id": null,
         "IDVersion": 1,
         "Subsanacion": 2,
         "RechazoPrevio": 1,
         "TipoFactura": 2,
         "TipoRectificativa": null,
         "FacturaSimplificadaArt7273": 2,
         "FacturaSinIdentifDestinatarioArt61d": 2,
         "Macrodato": 2,
         "EmitidaPorTercODesti": null,
         "TercNombreRazon": null,
         "TercNIF": null,
         "TercOtroCodPais": null,
         "TercOtroIDType": null,
         "TercOtroID": null,
         "Cupon": 2,
         "SinRegistroPrevio": null,
         "RechazoPrevioA": 1,
         "GeneradoPor": null,
         "Generador_NombreRazon": null,
         "Generador_NIF": null,
         "Generador_OtroCodPais": null,
         "Generador_OtroIDType": null,
         "Generador_OtroID": null,
         "Huella": "6FD01AD6D7CA3136A0A9CD9FD4F01B71F51E80133CC81104ABE0C4B23D04AC20",
         "Signature": null,
         "Signature2": null,
         "TipoHuella": 1,
         "NumRegistroAcuerdoFacturacion": null,
         "IdAcuerdoSistemaInformatico": null,
         "FechaHoraHusoGenRegistro": "2025-12-12T13:21:32+01:00",
         "IDEmisorFacturaAnterior": "A39200019",
         "NumSerieFacturaAnterior": "2025/001",
         "FechaExpedicionFacturaAnterior": "2025-12-15",
         "HuellaAnterior": "57B34C2738F68DC3736FF1EC2CD8C286BCF7704D3189C157754E4450731CB4EA",
         "incidencia": false,
         "xml_aeat": "XML del registro",
         "xml_signed": null,
         "xml_aeat_response": null,
         "estado_aeat": "Correcto",
         "estado_registro_aeat": "Registrado",
         "codigo_error_aeat": "",
         "descripcion_error_aeat": "",
         "envios_aeat_id": 2,
         "envios_aeat_lineas_id": 2
         }
     ],
     "count": 1,
     "pagination": {
         "total": 1,
         "perPage": 10,
         "currentPage": 1,
         "lastPage": 1
     }
 }
Respuesta 401
{
    "success": false,
    "message": "El IDEmisor no coincide con el de tu cuenta.",
    "error": 401,
    "code": 401
}

Obtener un registro Verifactu

Requiere autenticación

Muestra los datos de un registro Verifactu filtrando por el ID.

GETapi/alta-registro-facturacion/{id}

Headers

Authorization      

Example: Bearer 1a5acPfEgZkDVv6d468bhe3

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID de la factura que se desea obtener. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-facturacion/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 1a5acPfEgZkDVv6d468bhe3',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 404
{
    "success": false,
    "code": 404,
    "message": "No se encontró la factura especificada.",
    "data": null
}

Envíos

Listado de envíos

Requiere autenticación

Muestra un listado paginado de todos los envíos a Verifactu.

GETapi/envios-aeat

Headers

Authorization      

Example: Bearer bekafdga68V1vZ3DcPE54h6

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-aeat';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer bekafdga68V1vZ3DcPE54h6',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
  "success": true,
  "code": 200,
  "message": "Envíos Verifactu listed successfully",
  "data": {
     "items": [
         {
             "id": 1,
             "IDEmisor": "1234567890",
             "endpoint": "https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP",
             "xml_envio": "</xml>",
             "xml_respuesta": "</xml>",
             "csv": "A-7KC3XUSXLCNXLP",
             "estado_aeat": "Correcto",
             "codigo_error_aeat": "",
             "descripcion_error_aeat": "",
             "descripcion_error_curl": null,
             "intentos": null,
             "resend": null,
             "fecha_hora_envio": "2024-12-17 11:21:22",
             "fecha_hora_respuesta": "2024-12-17 11:21:22",
             "segundos_proximo_envio": 60,
             "created_at": "2024-12-17T10:21:22.000000Z",
             "updated_at": "2024-12-17T10:21:22.000000Z",
             "deleted_at": null
         },
     ],
     "count": 1
 },
 "pagination": {
     "total": 1,
     "perPage": 1,
     "currentPage": 1,
     "lastPage": 1
 }
}

Obtener un envío

Requiere autenticación

Muestra un envío Verifactu específico. Se filtra por el ID del envío.

GETapi/envios-aeat/{id}

Headers

Authorization      

Example: Bearer D3khEP6a81V5cvdgebfZa64

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del envío Verifactu que se desea obtener. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-aeat/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer D3khEP6a81V5cvdgebfZa64',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Envío Verifactu obtained successfully",
    "data": {
        "items": {
            "id": 1,
            "IDEmisor": "1234567890",
            "endpoint": "https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP",
            "xml_envio": "</xml>",
            "xml_respuesta": "</xml>",
            "csv": "A-7KC3XUSXLCNXLP",
            "estado_aeat": "Correcto",
            "codigo_error_aeat": "",
            "descripcion_error_aeat": "",
            "descripcion_error_curl": null,
            "intentos": null,
            "resend": null,
            "fecha_hora_envio": "2024-12-17 11:21:22",
            "fecha_hora_respuesta": "2024-12-17 11:21:22",
            "segundos_proximo_envio": 60,
            "created_at": "2024-12-17T10:21:22.000000Z",
            "updated_at": "2024-12-17T10:21:22.000000Z",
            "deleted_at": null,
            "lineas": []
        }
    }
}
Respuesta 403
{
    "success": false,
    "message": "No tienes acceso a este envío Verifactu.",
    "error": 403,
    "code": 403
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el envío AEAT especificado.",
    "error": 404,
    "code": 404
}

Obtener una línea de envío

Requiere autenticación

Muestra una línea específica de un envío Verifactu.

GETapi/envios-aeat/linea/{linea_id}

Headers

Authorization      

Example: Bearer gDb5PeEZ1d68ckhaa4f3v6V

Content-Type      

Example: application/json

URL Parameters

linea_id   integer   

El ID de la línea Verifactu que se desea obtener. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-aeat/linea/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer gDb5PeEZ1d68ckhaa4f3v6V',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
 "success": true,
 "code": 200,
 "message": "Línea Envío Verifactu obtained successfully",
 "data": {
     "items": {
         "id": 1,
         "envios_verifactu_id": 1,
         "num_serie_factura": "AX/202412-640",
         "estado_registro": "Incorrecto",
         "codigo_error": "3002",
         "descripcion_error": "No existe el registro de facturación.",
         "id_peticion_duplicado": "",
         "estado_registro_duplicado": "",
         "created_at": "2025-02-03T16:30:02.000000Z",
         "updated_at": null,
         "deleted_at": null,
         "invoices_verifactu": null,
         "envios_verifactu": {
             "id": 1,
             ...,
         }
     }
 }
}
Respuesta 403
{
    "success": false,
    "message": "No tienes acceso a esta linea Verifactu.",
    "error": 403,
    "code": 403
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró la línea Verifactu especificada.",
    "error": 404,
    "code": 404
}

Consulta AEAT

Consultar registros a AEAT

Requiere autenticación

Realizar consulta de los registros de facturación registrados en AEAT

POSTapi/consultar-registros-aeat

Headers

Authorization      

Example: Bearer f6aVdZhD83PeaEcb6kg54v1

Content-Type      

Example: application/json

Body Parameters

Entorno   string   

El entorno de la consulta. Ejemplo: PROD o TEST. Example: PROD

NombreRazonEmisor   string   

El nombre de la razón social del emisor. Example: Test

NIFEmisor   string   

El NIF del emisor. Example: 12345678Z

Ejercicio   string   

El año de emisión del registro. Example: 2024

Periodo   string   

El mes de emisión del registro. Example: 01

NumSerieFactura   string  optional  

optional El número de serie de la factura.

RefExterna   string  optional  

optional La referencia externa de la factura.

Contraparte   object  optional  

optional Datos de la contraparte de la factura.

NombreRazon   string  optional  

optional El nombre de la razón social de la contraparte.

NIF   string  optional  

optional El NIF de la contraparte.

ID   string  optional  

optional El ID de la contraparte.

IDType   string  optional  

optional El tipo de ID de la contraparte.

CodigoPais   string  optional  

optional El código de país de la contraparte.

FechaExpedicionFactura   string  optional  

optional La fecha de expedición de la factura.

RangoFechaExpedicion   object  optional  

optional Rango de fechas de expedición de la factura.

Desde   string  optional  

optional La fecha de inicio del rango.

Hasta   string  optional  

optional La fecha de fin del rango.

ClavePaginacion   object  optional  

optional Valores del ultimo registro mostrado para poder mostrar los siguientes registros.

IDEmisorFactura   string  optional  

optional El NIF del emisor.

NumSerieFactura   string  optional  

optional El número de serie de la factura.

FechaExpedicionFactura   string  optional  

optional La fecha de expedición de la factura.

MostrarNombreRazonEmisor   string  optional  

optional Indica si se muestra el nombre de la razón social del emisor. S o N.

MostrarSistemaInformatico   string  optional  

optional Indica si se muestra el sistema informático del emisor. S o N.

IndicadorRepresentante   string  optional  

optional Indica si se trata de un representante. unicamente acepta el valor S.

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/consultar-registros-aeat';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer f6aVdZhD83PeaEcb6kg54v1',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "Entorno": "PROD",
    "NombreRazonEmisor": "Test",
    "NIFEmisor": "12345678Z",
    "Ejercicio": "2024",
    "Periodo": "01"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Consulta realizada correctamente. Se han encontrado 1 registros.",
    "code": 200,
    "total": 1,
    "data": [
        {
            "NombreRazonEmisor": null,
            "IDEmisorFactura": "A39200019",
            "NumSerieFactura": "N00002",
            "FechaExpedicionFactura": "05-08-2025",
            "TipoFactura": "F1",
            "DescripcionOperacion": "FACTURA",
            "Destinatarios": {
                "NombreRazon": "Sage Spain S. L.",
                "NIF": "B58836321"
            },
            "Cupon": null,
            "Desglose": {
                "Impuesto": "01",
                "ClaveRegimen": "01",
                "CalificacionOperacion": "S1",
                "TipoImpositivo": "21",
                "BaseImponibleOimporteNoSujeto": "0",
                "CuotaRepercutida": "0"
            },
            "CuotaTotal": "0",
            "ImporteTotal": "0",
            "Encadenamiento": {
                "RegistroAnterior": {
                    "IDEmisorFactura": "A39200019",
                    "NumSerieFactura": "N00001",
                    "FechaExpedicionFactura": "2025-08-05",
                    "Huella": "57A9F6F6C9640F03A289F63570DE1166260D038F891A9E7F2FABDF8B4EB18064"
                }
            },
            "FechaHoraHusoGenRegistro": "2025-08-05T12:06:40+02:00",
            "TipoHuella": "01",
            "Huella": "FBE84F66D602EE7ADBC20A314969A8806DCB6092E94363F43FFB17E78FBD302A",
            "NIFPresentador": "A39200019",
            "TimestampPresentacion": "2025-08-05T12:07:41+02:00",
            "IdPeticion": "20250805120741050034",
            "TimestampUltimaModificacion": "2025-08-05T12:07:41+02:00",
            "EstadoRegistro": "Correcta",
            "SistemaInformatico": null
        }
    ]
}
Respuesta 400
{
    "success": false,
    "message": "El campo Entorno es obligatorio y debe ser PROD o TEST.",
    "error": 400,
    "code": 400
}

Sistema Informatico

Obtener sistema informático

Requiere autenticación

Muestra el sistema informático de un emisor filtrando por el ID del emisor.

GETapi/sistema-informatico/{id}

Headers

Authorization      

Example: Bearer 3gaE45d81ZvfaP6kbeV6Dch

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del emisor. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/sistema-informatico/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3gaE45d81ZvfaP6kbeV6Dch',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "SistemaInformatico obtained successfully",
    "data": {
        "items": {
            "id": 2,
            "nombre_razon": "NEMON INVOICE TO CASH, SL",
            "nif": "B70912613",
            "nombre_sistema_informatico": "NEMON INVOCASH VERIFACTU API",
            "id_sistema_informatico": "01",
            "version": "1.0",
            "numero_instalacion": "20251125154237_858086",
            "tipo_uso_posible_solo_verifactu": true,
            "tipo_uso_posible_multi_ot": false,
            "indicador_multiples_ot": false,
            "is_test": true,
            "created_at": "2025-11-25T14:42:37.000000Z",
            "updated_at": "2025-11-25T14:42:37.000000Z"
        }
    }
}
Respuesta 404
{
    "success": false,
    "code": 404,
    "message": "No se encontró el emisor especificado.",
    "data": null
}

TBAI

Listas

Listar listas

Requiere autenticación

Muestra un listado con los nombres de todas las listas de Tbai.

GETapi/listas-tbai

Headers

Authorization      

Example: Bearer gchb6adkEfDVv41P3a56eZ8

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas-tbai';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer gchb6adkEfDVv41P3a56eZ8',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Nombres de las listas de Tbai listed successfully",
    "data": {
        "items": [
            "l0",
            "l10",
            "l11",
            "l12",
            "l13",
            "l2",
            "l3",
            "l4",
            "l5",
            "l6",
            "l7",
            "l8",
            "l9"
        ],
        "count": 13
    },
    "pagination": {
        "total": 1,
        "perPage": 1,
        "currentPage": 1,
        "lastPage": 1
    }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontraron listas para el tipo especificado.",
    "error": 404,
    "code": 404
}

Obtener una lista

Requiere autenticación

Muestra una lista de Tbai en especifico filtrando por el nombre de la lista. Se pueden ver los valores y su descripción.

GETapi/listas-tbai/{lista}

Headers

Authorization      

Example: Bearer g8ac4a6dfVDkeZ15Pv3h6bE

Content-Type      

Example: application/json

URL Parameters

lista   string   

El nombre de la lista que se desea obtener. Example: l0

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas-tbai/l0';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer g8ac4a6dfVDkeZ15Pv3h6bE',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Lista de Tbai obtained successfully",
    "data": {
        "items": [
            {
                "id": 1,
                "valor": "1.2",
                "descripcion": "Versión actual del esquema utilizado"
            }
        ],
        "count": 1
    }
}
Respuesta 404
{
    "success": false,
    "message": "La lista solicitada no existe",
    "error": 404,
    "code": 404
}

Obtener un valor de una lista

Requiere autenticación

Muestra un valor de una lista de Tbai en especifico filtrando por el nombre de la lista y el valor.

GETapi/listas-tbai/{lista}/{valor}

Headers

Authorization      

Example: Bearer vP46kd1b8af5ZgaVEh63eDc

Content-Type      

Example: application/json

URL Parameters

lista   string   

El nombre de la lista donde se encuentra el valor. Example: l0

valor   string   

El valor de la linea de la lista que se desea obtener. Example: 1.2

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas-tbai/l0/1.2';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer vP46kd1b8af5ZgaVEh63eDc',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Valor de la lista de Tbai obtained successfully",
    "data": {
        "items": {
            "id": 1,
            "valor": "1.2",
            "descripcion": "Versión actual del esquema utilizado"
        },
        "count": 1
    }
}
Respuesta 404
{
    "success": false,
    "message": "El registro solicitado no existe en la lista",
    "error": 404,
    "code": 404
}
Respuesta 404
{
    "success": false,
    "message": "La lista solicitada no existe",
    "error": 404,
    "code": 404
}

Alta Registros Facturacion

Registrar una factura de Tbai.

Requiere autenticación

Registra una nuevo registro de factura en la base de datos para ser procesada y enviada.

POSTapi/alta-registro-tbai

Headers

Authorization      

Example: Bearer 6ke4ah6fEDvg5c3bda8P1VZ

Content-Type      

Example: application/json

Body Parameters

IDEmisorFactura   string   

El NIF del emisor. Example: A39200019

NumSerie   string  optional  

optional El número de serie de la factura. Example: AX/202412

NumFactura   string   

El número de factura. Example: 123

FechaExpedicionFactura   string   

La fecha de expedición de la factura. Example: 2025-1-1

HoraExpedicionFactura   string   

La hora de expedición de la factura. Example: 10:00:00

VariosDestinatarios   optional  optional  

Indica si se trata de una factura con varios destinatarios (lista l3).

EmitidaPorTercODesti   optional  optional  

Indica si se trata de una factura emitida por tercero o destinatario (lista l4).

FacturaSimplificada   optional  optional  

Indica si se trata de una factura simplificada (lista l5).

FacturaEmitidaSustSimp   optional  optional  

Indica si se trata de una factura emitida en sustitucion de una simplificada (lista l6).

FechaOperacion   string  optional  

optional Fecha de la operación.

DescripcionFactura   string   

Descripción de la factura. Example: test

Destinatarios   string[]   

Lista de destinatarios de la factura.

*   object  optional  
NombreRazon   string   

Nombre o razón social del destinatario. Example: "IVAN SOLE MARTINEZ"

NIF   string   

NIF del destinatario. Example: "39707287H"

CodigoPostal   string   

Código postal del destinatario. Example: 28001

Direccion   string   

Dirección del destinatario. Example: "Calle de la Princesa 1" //REVISAR OBLIGATORIEDAD DE ESTOS CAMPOS

OtroCodPais   string  optional  

optional Otro código de país. Example: ES

OtroIDType   string  optional  

optional Otro tipo de identificación (lista l7). Example: 1

OtroID   string  optional  

optional Otro número de identificación. Example: 39707287H

DetallesFactura   string[]   

Lista de detalles de la factura.

*   object  optional  
Descripcion   string   

Descripción de la línea. Example: "Producto 1"

Unidades   integer   

Unidades de la línea. Example: 1

PrecioPorUnidad   integer   

Precio por unidad. Example: 100

SubTotal   integer  optional  

optional Subtotal de la línea. Example: 100

ImporteTotal   integer   

Importe total de la línea. Example: 100

Descuento   integer   

Importe en euros del descuento.

Desglose   string[]   

Lista de desgloses de la factura.

*   object  optional  
PrestacionServicioOEntrega   optional  optional  

Indica si se trata de una prestación de servicio o entrega cuando el destinatario no es Nacional(1 Prestacion - 2 Entrega).

CausaExencion   integer  optional  

optional Causa de exención (lista l10).

BaseImponibleOImporteNoSujeto   integer  optional  

optional Base imponible o importe no sujeto.

TipoNoExenta   integer  optional  

optional Tipo de no exención (lista l11). Example: 1

TipoImpositivo   integer  optional  

optional Tipo impositivo aplicado. Example: 21

CuotaRepercutida   integer  optional  

optional Cuota repercutida. Example: 21

TipoRecargoEquivalencia   integer  optional  

optional Porcentaje de recargo de equivalencia. Example: 21

CuotaRecargoEquivalencia   integer  optional  

optional Valor del recargo de equivalencia. Example: 21

OperacionRecEquivORegSimpl   integer  optional  

optional Operación de recargo de equivalencia o registro simplificado (lista l12).

CausaNoSujeta   integer  optional  

optional Causa de no sujeción (lista l13).

ImporteTotal   number   

Importe total de la factura. Example: 121

RetencionSoportada   number  optional  

optional Retenciones soportadas. Example: 21

BaseImponibleACoste   number  optional  

optional Base imponible a coste.

Claves   string[]  optional  

optional Claves de retenciones.

CodigoRectificativa   string  optional  

optional Código de la rectificativa (lista l17).

TipoRectificativa   string  optional  

optional Tipo de rectificativa (lista l8).

BaseRectificada   number  optional  

optional Base rectificada.

CuotaRectificada   number  optional  

optional Cuota rectificada.

CuotaRecargoRectificada   number  optional  

optional Cuota de recargo rectificada.

FacturasSustituidas   string[]  optional  

optional Lista de facturas sustituidas.

*   object  optional  
NumSerie   string   

El número de serie de la factura sustituida. Example: AX/202412

NumFactura   string   

El número de factura de la factura sustituida. Example: 123

FechaExpedicionFactura   string   

La fecha de expedición de la factura sustituida. Example: 2025-1-1

ModeloLROE   string  optional  

optional (Bizkaia) Modelo de LROE (solo puede ser "140" o "240"). Example: 140

EpigrafeLROE   string  optional  

optional (Bizkaia) Epigrafe de LROE (solo para modelo 140). Example: 304300

webhook_id   integer  optional  

optional El ID del webhook asociado a la factura.

tag   string  optional  

optional Etiqueta personalizada para la factura. Example: test

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-tbai';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 6ke4ah6fEDvg5c3bda8P1VZ',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "IDEmisorFactura": "A39200019",
    "NumSerie": "AX/202412",
    "NumFactura": "123",
    "FechaExpedicionFactura": "2025-1-1",
    "HoraExpedicionFactura": "10:00:00",
    "DescripcionFactura": "test",
    "Destinatarios": [
        {
            "NombreRazon": "IVAN SOLE MARTINEZ",
            "NIF": "39707287H"
        }
    ],
    "DetallesFactura": [
        {
            "Descripcion": "Producto 1",
            "Unidades": 1,
            "PrecioPorUnidad": 100,
            "SubTotal": 100,
            "ImporteTotal": 100,
            "Descuento": 1234567890
        }
    ],
    "Desglose": [
        {
            "TipoNoExenta": 1,
            "BaseImponibleOImporteNoSujeto": 100,
            "TipoImpositivo": 21,
            "CuotaRepercutida": 21,
            "TipoRecargoEquivalencia": 21,
            "CuotaRecargoEquivalencia": 21
        }
    ],
    "ImporteTotal": 121,
    "RetencionSoportada": 21,
    "Claves": [
        1,
        2,
        3
    ],
    "ModeloLROE": "140",
    "EpigrafeLROE": "304300",
    "tag": "test"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 201
{
    "success": true,
    "message": "AltaRegistroFacturacion created successfully",
    "code": 201,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 1,
                "previous_id": null,
                "alta_o_anulacion": 1,
                "id_registro_anulado": null,
                "modificacionOSubsanacion": null,
                "id_registro_modificadoOSubsanado": null,
                "IDEmisorFactura": "47859447N",
                "NumSerieFactura": "AX/2025-102",
                "NumSerie": "AX/2025",
                "NumFactura": "102",
                "FechaExpedicionFactura": "2025-12-17",
                "HoraExpedicionFactura": "10:00:00",
                "FechaOperacion": null,
                "DescripcionOperacion": null,
                "NombreRazonDestinatario": "Ivan Sole",
                "NIFDestinatario": "39707287H",
                "RefExterna": null,
                "CuotaTotal": null,
                "ImporteTotal": "121",
                "moneda": "EUR",
                "BaseRectificada": null,
                "CuotaRectificada": null,
                "CuotaRecargoRectificada": null,
                "tag": null,
                "webhook_id": null,
                "verifactu": false,
                "no_verifactu": false,
                "tbai": true,
                "face": 0,
                "json": "JSON recibido por la API",
                "base64_pdf": null,
                "base64_qr_pdf": null,
                "url_qr": null,
                "qr_image": null,
                "qr_x": null,
                "qr_y": null,
                "qr_page": 1,
                "remitenteNacional": 1,
                "next_id": null,
                "IDVersion": 1,
                "VariosDestinatarios": 2,
                "EmitidaPorTercODesti": 2,
                "FacturaSimplificada": 2,
                "FacturaEmitidaSustSimp": 2,
                "DescripcionFactura": "Test Desc Factura",
                "CodigoRectificativa": null,
                "TipoRectificativa": null,
                "RetencionSoportada": null,
                "BaseImponibleACoste": null,
                "FechaExpedicionFacturaAnterior": null,
                "NumSerieAnterior": null,
                "NumFacturaAnterior": null,
                "SignatureValueFacturaAnterior": null,
                "xml_tbai": null,
                "xml_signed": null,
                "SignatureValue": null,
                "xml_tbai_response": null,
                "estado_tbai": null,
                "estado_registro_tbai": "No Registrado",
                "codigo_error_tbai": null,
                "descripcion_error_tbai": null,
                "envio_tbai_id": null,
                "NumSerieDispositivo": null,
                "ModeloLROE": null,
                "EpigrafeLROE": null
            }
        ]
    }
}
Respuesta 400
{
    "success": false,
    "message": "El campo IDEmisorFactura es obligatorio y no puede ser null.",
    "error": 400,
    "code": 400
}

Validar una factura de Tbai.

Requiere autenticación

Valida el formato y los datos de una factura de Tbai sin generar el registro en la base de datos.

POSTapi/alta-registro-tbai/validar

Headers

Authorization      

Example: Bearer fa1e4kEa6DZhc38Vvb6g5Pd

Content-Type      

Example: application/json

Body Parameters

IDEmisorFactura   string   

El NIF del emisor. Example: A39200019

NumSerie   string  optional  

optional El número de serie de la factura. Example: AX/202412

NumFactura   string   

El número de factura. Example: 123

FechaExpedicionFactura   string   

La fecha de expedición de la factura. Example: 2025-1-1

HoraExpedicionFactura   string   

La hora de expedición de la factura. Example: 10:00:00

VariosDestinatarios   optional  optional  

Indica si se trata de una factura con varios destinatarios (lista l3).

EmitidaPorTercODesti   optional  optional  

Indica si se trata de una factura emitida por tercero o destinatario (lista l4).

FacturaSimplificada   optional  optional  

Indica si se trata de una factura simplificada (lista l5).

FacturaEmitidaSustSimp   optional  optional  

Indica si se trata de una factura emitida en sustitucion de una simplificada (lista l6).

FechaOperacion   string  optional  

optional Fecha de la operación.

DescripcionFactura   string   

Descripción de la factura. Example: test

Destinatarios   string[]   

Lista de destinatarios de la factura.

*   object  optional  
NombreRazon   string   

Nombre o razón social del destinatario. Example: "IVAN SOLE MARTINEZ"

NIF   string   

NIF del destinatario. Example: "39707287H"

CodigoPostal   string   

Código postal del destinatario. Example: 28001

Direccion   string   

Dirección del destinatario. Example: "Calle de la Princesa 1" //REVISAR OBLIGATORIEDAD DE ESTOS CAMPOS

OtroCodPais   string  optional  

optional Otro código de país. Example: ES

OtroIDType   string  optional  

optional Otro tipo de identificación (lista l7). Example: 1

OtroID   string  optional  

optional Otro número de identificación. Example: 39707287H

DetallesFactura   string[]   

Lista de detalles de la factura.

*   object  optional  
Descripcion   string   

Descripción de la línea. Example: "Producto 1"

Unidades   integer   

Unidades de la línea. Example: 1

PrecioPorUnidad   integer   

Precio por unidad. Example: 100

SubTotal   integer  optional  

optional Subtotal de la línea. Example: 100

ImporteTotal   integer   

Importe total de la línea. Example: 100

Descuento   integer   

Importe en euros del descuento.

Desglose   string[]   

Lista de desgloses de la factura.

*   object  optional  
PrestacionServicioOEntrega   optional  optional  

Indica si se trata de una prestación de servicio o entrega cuando el destinatario no es Nacional(1 Prestacion - 2 Entrega).

CausaExencion   integer  optional  

optional Causa de exención (lista l10).

BaseImponibleOImporteNoSujeto   integer  optional  

optional Base imponible o importe no sujeto.

TipoNoExenta   integer  optional  

optional Tipo de no exención (lista l11). Example: 1

TipoImpositivo   integer  optional  

optional Tipo impositivo aplicado. Example: 21

CuotaRepercutida   integer  optional  

optional Cuota repercutida. Example: 21

TipoRecargoEquivalencia   integer  optional  

optional Porcentaje de recargo de equivalencia. Example: 21

CuotaRecargoEquivalencia   integer  optional  

optional Valor del recargo de equivalencia. Example: 21

OperacionRecEquivORegSimpl   integer  optional  

optional Operación de recargo de equivalencia o registro simplificado (lista l12).

CausaNoSujeta   integer  optional  

optional Causa de no sujeción (lista l13).

ImporteTotal   number   

Importe total de la factura. Example: 121

RetencionSoportada   number  optional  

optional Retenciones soportadas. Example: 21

BaseImponibleACoste   number  optional  

optional Base imponible a coste.

Claves   string[]  optional  

optional Claves de retenciones.

CodigoRectificativa   string  optional  

optional Código de la rectificativa (lista l17).

TipoRectificativa   string  optional  

optional Tipo de rectificativa (lista l8).

BaseRectificada   number  optional  

optional Base rectificada.

CuotaRectificada   number  optional  

optional Cuota rectificada.

CuotaRecargoRectificada   number  optional  

optional Cuota de recargo rectificada.

FacturasSustituidas   string[]  optional  

optional Lista de facturas sustituidas.

*   object  optional  
NumSerie   string   

El número de serie de la factura sustituida. Example: AX/202412

NumFactura   string   

El número de factura de la factura sustituida. Example: 123

FechaExpedicionFactura   string   

La fecha de expedición de la factura sustituida. Example: 2025-1-1

ModeloLROE   string  optional  

optional (Bizkaia) Modelo de LROE (solo puede ser "140" o "240"). Example: 140

EpigrafeLROE   string  optional  

optional (Bizkaia) Epigrafe de LROE (solo para modelo 140). Example: 304300

webhook_id   integer  optional  

optional El ID del webhook asociado a la factura.

tag   string  optional  

optional Etiqueta personalizada para la factura. Example: test

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-tbai/validar';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer fa1e4kEa6DZhc38Vvb6g5Pd',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "IDEmisorFactura": "A39200019",
    "NumSerie": "AX/202412",
    "NumFactura": "123",
    "FechaExpedicionFactura": "2025-1-1",
    "HoraExpedicionFactura": "10:00:00",
    "DescripcionFactura": "test",
    "Destinatarios": [
        {
            "NombreRazon": "IVAN SOLE MARTINEZ",
            "NIF": "39707287H"
        }
    ],
    "DetallesFactura": [
        {
            "Descripcion": "Producto 1",
            "Unidades": 1,
            "PrecioPorUnidad": 100,
            "SubTotal": 100,
            "ImporteTotal": 100,
            "Descuento": 1234567890
        }
    ],
    "Desglose": [
        {
            "TipoNoExenta": 1,
            "BaseImponibleOImporteNoSujeto": 100,
            "TipoImpositivo": 21,
            "CuotaRepercutida": 21,
            "TipoRecargoEquivalencia": 21,
            "CuotaRecargoEquivalencia": 21
        }
    ],
    "ImporteTotal": 121,
    "RetencionSoportada": 21,
    "Claves": [
        1,
        2,
        3
    ],
    "ModeloLROE": "140",
    "EpigrafeLROE": "304300",
    "tag": "test"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Registro validado correctamente",
    "code": 200
}
Respuesta 400
{
    "success": false,
    "message": "El campo IDEmisorFactura es obligatorio y no puede ser null.",
    "error": 400,
    "code": 400
}

Anular Registros Facturacion

Registrar una anulacion de Tbai.

Requiere autenticación

Registra una anulacion de registro Tbai en la base de datos para ser procesada y enviada.

POSTapi/anulacion-registro-tbai

Headers

Authorization      

Example: Bearer 8a1hk4eDEcVfaPdZ65vg63b

Content-Type      

Example: application/json

Body Parameters

IDEmisorFactura   string   

El ID del emisor de la factura. Example: A39200019

NumSerieFactura   string   

El número de serie de la factura. Example: AX/202412-1

FechaExpedicionFactura   string   

La fecha de expedición de la factura. Example: `2025-11-11

@response 201 { "success": true, "message": "AnulacionRegistroFacturacion created successfully", "code": 201, "data": { "count": 1, "items": [ { "id": 2, "previous_id": null, "alta_o_anulacion": 2, "id_registro_anulado": 1, "modificacionOSubsanacion": null, "id_registro_modificadoOSubsanado": null, "IDEmisorFactura": "47859447N", "NumSerieFactura": "AX/2025-102", "NumSerie": "AX/2025", "NumFactura": "102", "FechaExpedicionFactura": "2025-12-17", "HoraExpedicionFactura": null, "FechaOperacion": null, "DescripcionOperacion": null, "NombreRazonDestinatario": null, "NIFDestinatario": "39707287H", "RefExterna": null, "CuotaTotal": null, "ImporteTotal": null, "moneda": "EUR", "BaseRectificada": null, "CuotaRectificada": null, "CuotaRecargoRectificada": null, "tag": "/ANULACION", "webhook_id": null, "verifactu": false, "no_verifactu": false, "tbai": true, "face": 0, "json": "JSON recibido por la API", "base64_pdf": null, "base64_qr_pdf": null, "url_qr": null, "qr_image": null, "qr_x": null, "qr_y": null, "qr_page": null, "remitenteNacional": 1, "next_id": null, "IDVersion": 1, "VariosDestinatarios": null, "EmitidaPorTercODesti": null, "FacturaSimplificada": null, "FacturaEmitidaSustSimp": null, "DescripcionFactura": "RegistroAnulacion", "CodigoRectificativa": null, "TipoRectificativa": null, "RetencionSoportada": null, "BaseImponibleACoste": null, "FechaExpedicionFacturaAnterior": null, "NumSerieAnterior": null, "NumFacturaAnterior": null, "SignatureValueFacturaAnterior": null, "xml_tbai": null, "xml_signed": null, "SignatureValue": null, "xml_tbai_response": null, "estado_tbai": null, "estado_registro_tbai": "No Registrado", "codigo_error_tbai": null, "descripcion_error_tbai": null, "envio_tbai_id": null, "NumSerieDispositivo": null, "ModeloLROE": null, "EpigrafeLROE": null } ] } }`

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/anulacion-registro-tbai';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 8a1hk4eDEcVfaPdZ65vg63b',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "IDEmisorFactura": "A39200019",
    "NumSerieFactura": "AX/202412-1",
    "FechaExpedicionFactura": "2025-11-11\n\n @response 201 {\n \"success\": true,\n \"message\": \"AnulacionRegistroFacturacion created successfully\",\n \"code\": 201,\n \"data\": {\n     \"count\": 1,\n     \"items\": [\n         {\n             \"id\": 2,\n             \"previous_id\": null,\n             \"alta_o_anulacion\": 2,\n             \"id_registro_anulado\": 1,\n             \"modificacionOSubsanacion\": null,\n             \"id_registro_modificadoOSubsanado\": null,\n             \"IDEmisorFactura\": \"47859447N\",\n             \"NumSerieFactura\": \"AX/2025-102\",\n             \"NumSerie\": \"AX/2025\",\n             \"NumFactura\": \"102\",\n             \"FechaExpedicionFactura\": \"2025-12-17\",\n             \"HoraExpedicionFactura\": null,\n             \"FechaOperacion\": null,\n             \"DescripcionOperacion\": null,\n             \"NombreRazonDestinatario\": null,\n             \"NIFDestinatario\": \"39707287H\",\n             \"RefExterna\": null,\n             \"CuotaTotal\": null,\n             \"ImporteTotal\": null,\n             \"moneda\": \"EUR\",\n             \"BaseRectificada\": null,\n             \"CuotaRectificada\": null,\n             \"CuotaRecargoRectificada\": null,\n             \"tag\": \"/ANULACION\",\n             \"webhook_id\": null,\n             \"verifactu\": false,\n             \"no_verifactu\": false,\n             \"tbai\": true,\n             \"face\": 0,\n             \"json\": \"JSON recibido por la API\",\n             \"base64_pdf\": null,\n             \"base64_qr_pdf\": null,\n             \"url_qr\": null,\n             \"qr_image\": null,\n             \"qr_x\": null,\n             \"qr_y\": null,\n             \"qr_page\": null,\n             \"remitenteNacional\": 1,\n             \"next_id\": null,\n             \"IDVersion\": 1,\n             \"VariosDestinatarios\": null,\n             \"EmitidaPorTercODesti\": null,\n             \"FacturaSimplificada\": null,\n             \"FacturaEmitidaSustSimp\": null,\n             \"DescripcionFactura\": \"RegistroAnulacion\",\n             \"CodigoRectificativa\": null,\n             \"TipoRectificativa\": null,\n             \"RetencionSoportada\": null,\n             \"BaseImponibleACoste\": null,\n             \"FechaExpedicionFacturaAnterior\": null,\n             \"NumSerieAnterior\": null,\n             \"NumFacturaAnterior\": null,\n             \"SignatureValueFacturaAnterior\": null,\n             \"xml_tbai\": null,\n             \"xml_signed\": null,\n             \"SignatureValue\": null,\n             \"xml_tbai_response\": null,\n             \"estado_tbai\": null,\n             \"estado_registro_tbai\": \"No Registrado\",\n             \"codigo_error_tbai\": null,\n             \"descripcion_error_tbai\": null,\n             \"envio_tbai_id\": null,\n             \"NumSerieDispositivo\": null,\n             \"ModeloLROE\": null,\n             \"EpigrafeLROE\": null\n         }\n     ]\n  }\n}"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 400
{
    "success": false,
    "message": "El tipo de factura no es válido. Campo \"type\" no encontrado.",
    "error": 400,
    "code": 400
}

Anular registro Tbai por id.

Requiere autenticación

Anula un registro Tbai existente en la base de datos usando el id, registra la anulacion y se procesa.

POSTapi/anulacion-registro-tbai/{id}

Headers

Authorization      

Example: Bearer k84h6Z3eb5DPdEaVagfvc61

Content-Type      

Example: application/json

URL Parameters

id   string   

El id del registro de la factura a anular. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/anulacion-registro-tbai/1';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer k84h6Z3eb5DPdEaVagfvc61',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 201
{
    "success": true,
    "message": "AnulacionRegistroFacturacion created successfully",
    "code": 201,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 2,
                "previous_id": null,
                "alta_o_anulacion": 2,
                "id_registro_anulado": 1,
                "modificacionOSubsanacion": null,
                "id_registro_modificadoOSubsanado": null,
                "IDEmisorFactura": "47859447N",
                "NumSerieFactura": "AX/2025-102",
                "NumSerie": "AX/2025",
                "NumFactura": "102",
                "FechaExpedicionFactura": "2025-12-17",
                "HoraExpedicionFactura": null,
                "FechaOperacion": null,
                "DescripcionOperacion": null,
                "NombreRazonDestinatario": null,
                "NIFDestinatario": "39707287H",
                "RefExterna": null,
                "CuotaTotal": null,
                "ImporteTotal": null,
                "moneda": "EUR",
                "BaseRectificada": null,
                "CuotaRectificada": null,
                "CuotaRecargoRectificada": null,
                "tag": "/ANULACION",
                "webhook_id": null,
                "verifactu": false,
                "no_verifactu": false,
                "tbai": true,
                "face": 0,
                "json": "JSON recibido por la API",
                "base64_pdf": null,
                "base64_qr_pdf": null,
                "url_qr": null,
                "qr_image": null,
                "qr_x": null,
                "qr_y": null,
                "qr_page": null,
                "remitenteNacional": 1,
                "next_id": null,
                "IDVersion": 1,
                "VariosDestinatarios": null,
                "EmitidaPorTercODesti": null,
                "FacturaSimplificada": null,
                "FacturaEmitidaSustSimp": null,
                "DescripcionFactura": "RegistroAnulacion",
                "CodigoRectificativa": null,
                "TipoRectificativa": null,
                "RetencionSoportada": null,
                "BaseImponibleACoste": null,
                "FechaExpedicionFacturaAnterior": null,
                "NumSerieAnterior": null,
                "NumFacturaAnterior": null,
                "SignatureValueFacturaAnterior": null,
                "xml_tbai": null,
                "xml_signed": null,
                "SignatureValue": null,
                "xml_tbai_response": null,
                "estado_tbai": null,
                "estado_registro_tbai": "No Registrado",
                "codigo_error_tbai": null,
                "descripcion_error_tbai": null,
                "envio_tbai_id": null,
                "NumSerieDispositivo": null,
                "ModeloLROE": null,
                "EpigrafeLROE": null
            }
        ]
    }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró la factura especificada.",
    "error": 404,
    "code": 404
}

Consultar Registros Facturacion

Obtener lista de registros TBAI

Requiere autenticación

Muestra una lista con todos los registros TBAI del usuario. Añadiendo los campos del body se puede filtrar el listado.

GETapi/alta-registro-tbai

Headers

Authorization      

Example: Bearer h3Z85ePc6agVkv4EDdbfa61

Content-Type      

Example: application/json

Query Parameters

IDEmisorFactura   string  optional  

El ID del emisor de la factura. Example: A39200019

NumSerieFactura   string  optional  

El número de serie de la factura. Example: AX/202412-1

FechaExpedicionFactura   string  optional  

La fecha de expedición de la factura. Example: 2025-01-01

NifDestinatario   string  optional  

El NIF del destinatario. Example: 123456789

NombreRazonDestinatario   string  optional  

El nombre o razón social del destinatario. Example: Nombre del destinatario

ImporteTotal   number  optional  

El importe total de la factura. Example: 100

tag   string  optional  

El tag de la factura. Example: 123456789

alta_o_anulacion   integer  optional  

El tipo de factura (1(alta)/2(anulación)). Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-tbai';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer h3Z85ePc6agVkv4EDdbfa61',
            'Content-Type' => 'application/json',
        ],
        'query' => [
            'IDEmisorFactura' => 'A39200019',
            'NumSerieFactura' => 'AX/202412-1',
            'FechaExpedicionFactura' => '2025-01-01',
            'NifDestinatario' => '123456789',
            'NombreRazonDestinatario' => 'Nombre del destinatario',
            'ImporteTotal' => '100',
            'tag' => '123456789',
            'alta_o_anulacion' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Invoices listed successfully",
    "data": {
        "items": [
            {
                "id": 1,
                "previous_id": null,
                "alta_o_anulacion": 1,
                "id_registro_anulado": null,
                "modificacionOSubsanacion": null,
                "id_registro_modificadoOSubsanado": null,
                "IDEmisorFactura": "47859447N",
                "NumSerieFactura": "AX/2025-100",
                "NumSerie": "AX/2025",
                "NumFactura": "100",
                "FechaExpedicionFactura": "2025-12-17",
                "HoraExpedicionFactura": "10:00:00",
                "FechaOperacion": null,
                "DescripcionOperacion": null,
                "NombreRazonDestinatario": "Ivan Sole",
                "NIFDestinatario": "39707287H",
                "RefExterna": null,
                "CuotaTotal": null,
                "ImporteTotal": "121",
                "moneda": "EUR",
                "BaseRectificada": null,
                "CuotaRectificada": null,
                "CuotaRecargoRectificada": null,
                "tag": null,
                "webhook_id": null,
                "verifactu": false,
                "no_verifactu": false,
                "tbai": true,
                "face": 0,
                "json": "JSON recibido",
                "base64_pdf": null,
                "base64_qr_pdf": null,
                "url_qr": "https://tbai.prep.gipuzkoa.eus/qr/?id=TBAI-47859447N-171225-ivFyfDgmtpLqb-211&s=AX/2025&nf=100&i=121&cr=234",
                "qr_image": "QR en formato base64",
                "qr_x": null,
                "qr_y": null,
                "qr_page": 1,
                "remitenteNacional": 1,
                "next_id": 2,
                "IDVersion": 1,
                "VariosDestinatarios": 2,
                "EmitidaPorTercODesti": 2,
                "FacturaSimplificada": 2,
                "FacturaEmitidaSustSimp": 2,
                "DescripcionFactura": "Test Desc Factura",
                "CodigoRectificativa": null,
                "TipoRectificativa": null,
                "RetencionSoportada": null,
                "BaseImponibleACoste": null,
                "FechaExpedicionFacturaAnterior": null,
                "NumSerieAnterior": null,
                "NumFacturaAnterior": null,
                "SignatureValueFacturaAnterior": null,
                "xml_tbai": "XML TBAI",
                "xml_signed": "XML TBAI firmado",
                "SignatureValue": "SignatureValue de la factura",
                "xml_tbai_response": "XML respuesta de TBAI",
                "estado_tbai": "Recibido - ALTA PREP",
                "estado_registro_tbai": "Registrado",
                "codigo_error_tbai": null,
                "descripcion_error_tbai": null,
                "envio_tbai_id": 1,
                "NumSerieDispositivo": null,
                "ModeloLROE": null,
                "EpigrafeLROE": null
            }
        ],
        "count": 1
    },
    "pagination": {
        "total": 1,
        "perPage": 10,
        "currentPage": 1,
        "lastPage": 1
    }
}
Respuesta 401
{
    "success": false,
    "message": "El IDEmisor no coincide con el de tu cuenta.",
    "error": 401,
    "code": 401
}

Obtener un registro TBAI por id

Requiere autenticación

Muestra los datos de un registro TBAI filtrando por el ID.

GETapi/alta-registro-tbai/{id}

Headers

Authorization      

Example: Bearer egVhaEDb6kfPav83dcZ5164

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID de la factura que se desea obtener. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-tbai/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer egVhaEDb6kfPav83dcZ5164',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Invoice obtained successfully",
    "data": {
        "items": {
            "id": 1,
            "previous_id": null,
            "alta_o_anulacion": 1,
            "id_registro_anulado": null,
            "modificacionOSubsanacion": null,
            "id_registro_modificadoOSubsanado": null,
            "IDEmisorFactura": "47859447N",
            "NumSerieFactura": "AX/2025-100",
            "NumSerie": "AX/2025",
            "NumFactura": "100",
            "FechaExpedicionFactura": "2025-12-17",
            "HoraExpedicionFactura": "10:00:00",
            "FechaOperacion": null,
            "DescripcionOperacion": null,
            "NombreRazonDestinatario": "Ivan Sole",
            "NIFDestinatario": "39707287H",
            "RefExterna": null,
            "CuotaTotal": null,
            "ImporteTotal": "121",
            "moneda": "EUR",
            "BaseRectificada": null,
            "CuotaRectificada": null,
            "CuotaRecargoRectificada": null,
            "tag": null,
            "webhook_id": null,
            "verifactu": false,
            "no_verifactu": false,
            "tbai": true,
            "face": 0,
            "json": "JSON recibido",
            "base64_pdf": null,
            "base64_qr_pdf": null,
            "url_qr": "https://tbai.prep.gipuzkoa.eus/qr/?id=TBAI-47859447N-171225-ivFyfDgmtpLqb-211&s=AX/2025&nf=100&i=121&cr=234",
            "qr_image": "QR en formato base64",
            "qr_x": null,
            "qr_y": null,
            "qr_page": 1,
            "remitenteNacional": 1,
            "next_id": 2,
            "IDVersion": 1,
            "VariosDestinatarios": 2,
            "EmitidaPorTercODesti": 2,
            "FacturaSimplificada": 2,
            "FacturaEmitidaSustSimp": 2,
            "DescripcionFactura": "Test Desc Factura",
            "CodigoRectificativa": null,
            "TipoRectificativa": null,
            "RetencionSoportada": null,
            "BaseImponibleACoste": null,
            "FechaExpedicionFacturaAnterior": null,
            "NumSerieAnterior": null,
            "NumFacturaAnterior": null,
            "SignatureValueFacturaAnterior": null,
            "xml_tbai": "XML TBAI",
            "xml_signed": "XML TBAI firmado",
            "SignatureValue": "SignatureValue de la factura",
            "xml_tbai_response": "XML respuesta de TBAI",
            "estado_tbai": "Recibido - ALTA PREP",
            "estado_registro_tbai": "Registrado",
            "codigo_error_tbai": null,
            "descripcion_error_tbai": null,
            "envio_tbai_id": 1,
            "NumSerieDispositivo": null,
            "ModeloLROE": null,
            "EpigrafeLROE": null
        },
        "count": 1
    }
}
Respuesta 404
{
    "success": false,
    "code": 404,
    "message": "No se encontró la factura especificada.",
    "data": null
}

QR

Generar QR de TBAI

Requiere autenticación

Genera el QR de un registro TBAI. Si el PDF ya existe, añade el QR al PDF. El registro debe haber sido enviado a TBAI.

GETapi/tbai/QR/{id}

Headers

Authorization      

Example: Bearer DeaaV564dbZcgv681khE3fP

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID de la factura que se desea obtener. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/tbai/QR/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer DeaaV564dbZcgv681khE3fP',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "QR generated successfully",
    "data": {
        "url_qr": "https://qr.com/1234567890",
        "qr_image": "qrbase64",
        "base64_qr_pdf": null
    }
}
Respuesta 400
{
    "success": false,
    "code": 400,
    "message": "La factura no se ha enviado aun a TBAI, reintente en unos segundos.",
    "data": null
}

ZUZENDU

Modificar un registro de Tbai.

Requiere autenticación

Registra una modificacion de registro Tbai en la base de datos para ser procesada y enviada. Permite modificar los datos que no se pueden corregir usando rectificativas de los registros recibidos por TBAI.

POSTapi/tbai/modificar/{id}

Headers

Authorization      

Example: Bearer 6kdaf51eZgh83Vvb64PaEDc

Content-Type      

Example: application/json

URL Parameters

id   string   

The ID of the modificar. Example: est

Body Parameters

IDEmisorFactura   string   

El NIF del emisor. Example: A39200019

NumSerie   string  optional  

optional El número de serie de la factura. Example: AX/202412

NumFactura   string   

El número de factura. Example: 123

FechaExpedicionFactura   string   

La fecha de expedición de la factura. Example: 2025-1-1

HoraExpedicionFactura   string   

La hora de expedición de la factura. Example: 10:00:00

VariosDestinatarios   optional  optional  

Indica si se trata de una factura con varios destinatarios (lista l3).

EmitidaPorTercODesti   optional  optional  

Indica si se trata de una factura emitida por tercero o destinatario (lista l4).

FacturaSimplificada   optional  optional  

Indica si se trata de una factura simplificada (lista l5).

FacturaEmitidaSustSimp   optional  optional  

Indica si se trata de una factura emitida en sustitucion de una simplificada (lista l6).

FechaOperacion   string  optional  

optional Fecha de la operación.

DescripcionFactura   string   

Descripción de la factura. Example: test

Destinatarios   string[]   

Lista de destinatarios de la factura.

*   object  optional  
NombreRazon   string   

Nombre o razón social del destinatario. Example: "IVAN SOLE MARTINEZ"

NIF   string   

NIF del destinatario. Example: "39707287H"

CodigoPostal   string   

Código postal del destinatario. Example: 28001

Direccion   string   

Dirección del destinatario. Example: "Calle de la Princesa 1" //REVISAR OBLIGATORIEDAD DE ESTOS CAMPOS

OtroCodPais   string  optional  

optional Otro código de país. Example: ES

OtroIDType   string  optional  

optional Otro tipo de identificación (lista l7). Example: 1

OtroID   string  optional  

optional Otro número de identificación. Example: 39707287H

DetallesFactura   string[]   

Lista de detalles de la factura.

*   object  optional  
Descripcion   string   

Descripción de la línea. Example: "Producto 1"

Unidades   integer   

Unidades de la línea. Example: 1

PrecioPorUnidad   integer   

Precio por unidad. Example: 100

SubTotal   integer  optional  

optional Subtotal de la línea. Example: 100

ImporteTotal   integer   

Importe total de la línea. Example: 100

Descuento   integer   

Importe en euros del descuento.

Desglose   string[]   

Lista de desgloses de la factura.

*   object  optional  
PrestacionServicioOEntrega   optional  optional  

Indica si se trata de una prestación de servicio o entrega cuando el destinatario no es Nacional(1 Prestacion - 2 Entrega).

CausaExencion   integer  optional  

optional Causa de exención (lista l10).

BaseImponibleOImporteNoSujeto   integer  optional  

optional Base imponible o importe no sujeto.

TipoNoExenta   integer  optional  

optional Tipo de no exención (lista l11). Example: 1

TipoImpositivo   integer  optional  

optional Tipo impositivo aplicado. Example: 21

CuotaRepercutida   integer  optional  

optional Cuota repercutida. Example: 21

TipoRecargoEquivalencia   integer  optional  

optional Porcentaje de recargo de equivalencia. Example: 21

CuotaRecargoEquivalencia   integer  optional  

optional Valor del recargo de equivalencia. Example: 21

OperacionRecEquivORegSimpl   integer  optional  

optional Operación de recargo de equivalencia o registro simplificado (lista l12).

CausaNoSujeta   integer  optional  

optional Causa de no sujeción (lista l13).

ImporteTotal   number   

Importe total de la factura. Example: 121

RetencionSoportada   number  optional  

optional Retenciones soportadas. Example: 21

BaseImponibleACoste   number  optional  

optional Base imponible a coste.

Claves   string[]  optional  

optional Claves de retenciones.

CodigoRectificativa   string  optional  

optional Código de la rectificativa (lista l17).

TipoRectificativa   string  optional  

optional Tipo de rectificativa (lista l8).

BaseRectificada   number  optional  

optional Base rectificada.

CuotaRectificada   number  optional  

optional Cuota rectificada.

CuotaRecargoRectificada   number  optional  

optional Cuota de recargo rectificada.

FacturasSustituidas   string[]  optional  

optional Lista de facturas sustituidas.

*   object  optional  
NumSerie   string   

El número de serie de la factura sustituida. Example: AX/202412

NumFactura   string   

El número de factura de la factura sustituida. Example: 123

FechaExpedicionFactura   string   

La fecha de expedición de la factura sustituida. Example: 2025-1-1

webhook_id   integer  optional  

optional El ID del webhook asociado a la factura.

tag   string  optional  

optional Etiqueta personalizada para la factura. Example: test

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/tbai/modificar/est';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 6kdaf51eZgh83Vvb64PaEDc',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "IDEmisorFactura": "A39200019",
    "NumSerie": "AX/202412",
    "NumFactura": "123",
    "FechaExpedicionFactura": "2025-1-1",
    "HoraExpedicionFactura": "10:00:00",
    "DescripcionFactura": "test",
    "Destinatarios": [
        {
            "NombreRazon": "IVAN SOLE MARTINEZ",
            "NIF": "39707287H"
        }
    ],
    "DetallesFactura": [
        {
            "Descripcion": "Producto 1",
            "Unidades": 1,
            "PrecioPorUnidad": 100,
            "SubTotal": 100,
            "ImporteTotal": 100,
            "Descuento": 1234567890
        }
    ],
    "Desglose": [
        {
            "TipoNoExenta": 1,
            "BaseImponibleOImporteNoSujeto": 100,
            "TipoImpositivo": 21,
            "CuotaRepercutida": 21,
            "TipoRecargoEquivalencia": 21,
            "CuotaRecargoEquivalencia": 21
        }
    ],
    "ImporteTotal": 121,
    "RetencionSoportada": 21,
    "Claves": [
        1,
        2,
        3
    ],
    "tag": "test"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 201
{
    "success": true,
    "message": "AltaRegistroFacturacion created successfully",
    "code": 201,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 2,
                "previous_id": null,
                "alta_o_anulacion": 1,
                "id_registro_anulado": null,
                "modificacionOSubsanacion": "MODIFICAR",
                "id_registro_modificadoOSubsanado": 1,
                "IDEmisorFactura": "47859447N",
                "NumSerieFactura": "AX/2025-102",
                "NumSerie": "AX/2025",
                "NumFactura": "102",
                "FechaExpedicionFactura": "2025-12-17",
                "HoraExpedicionFactura": "10:00:00",
                "FechaOperacion": "2022-07-10",
                "DescripcionOperacion": null,
                "NombreRazonDestinatario": "Lluis Martinez",
                "NIFDestinatario": "47859447N",
                "RefExterna": null,
                "CuotaTotal": null,
                "ImporteTotal": "121",
                "moneda": "EUR",
                "BaseRectificada": null,
                "CuotaRectificada": null,
                "CuotaRecargoRectificada": null,
                "tag": null,
                "webhook_id": null,
                "verifactu": false,
                "no_verifactu": false,
                "tbai": true,
                "face": 0,
                "json": "JSON recibido por la API",
                "base64_pdf": null,
                "base64_qr_pdf": null,
                "url_qr": null,
                "qr_image": null,
                "qr_x": null,
                "qr_y": null,
                "qr_page": 1,
                "remitenteNacional": 1,
                "next_id": null,
                "IDVersion": 1,
                "VariosDestinatarios": 2,
                "EmitidaPorTercODesti": 2,
                "FacturaSimplificada": 2,
                "FacturaEmitidaSustSimp": 2,
                "DescripcionFactura": "Test Desc Factura",
                "CodigoRectificativa": null,
                "TipoRectificativa": null,
                "RetencionSoportada": null,
                "BaseImponibleACoste": null,
                "FechaExpedicionFacturaAnterior": "2025-12-17",
                "NumSerieAnterior": "AX/2025",
                "NumFacturaAnterior": "102",
                "SignatureValueFacturaAnterior": "SignatureValueFacturaAnterior",
                "xml_tbai": null,
                "xml_signed": "XML firmado",
                "SignatureValue": "SignatureValue",
                "xml_tbai_response": null,
                "estado_tbai": null,
                "estado_registro_tbai": "No Registrado",
                "codigo_error_tbai": null,
                "descripcion_error_tbai": null,
                "envio_tbai_id": null,
                "NumSerieDispositivo": null,
                "ModeloLROE": null,
                "EpigrafeLROE": null
            }
        ]
    }
}
Respuesta 400
{
    "success": false,
    "message": "El campo IDEmisorFactura es obligatorio y no puede ser null.",
    "error": 400,
    "code": 400
}

Subsanar un registro de Tbai.

Requiere autenticación

Registra una subsanacion de registro Tbai en la base de datos para ser procesada y enviada. Permite subsanar los datos que no se pueden corregir usando rectificativas de los registros rechazados por TBAI.

POSTapi/tbai/subsanar/{id}

Headers

Authorization      

Example: Bearer d583aaEb6PgZVec1hv6k4Df

Content-Type      

Example: application/json

URL Parameters

id   string   

The ID of the subsanar. Example: consequuntur

Body Parameters

IDEmisorFactura   string   

El NIF del emisor. Example: A39200019

NumSerie   string  optional  

optional El número de serie de la factura. Example: AX/202412

NumFactura   string   

El número de factura. Example: 123

FechaExpedicionFactura   string   

La fecha de expedición de la factura. Example: 2025-1-1

HoraExpedicionFactura   string   

La hora de expedición de la factura. Example: 10:00:00

VariosDestinatarios   optional  optional  

Indica si se trata de una factura con varios destinatarios (lista l3).

EmitidaPorTercODesti   optional  optional  

Indica si se trata de una factura emitida por tercero o destinatario (lista l4).

FacturaSimplificada   optional  optional  

Indica si se trata de una factura simplificada (lista l5).

FacturaEmitidaSustSimp   optional  optional  

Indica si se trata de una factura emitida en sustitucion de una simplificada (lista l6).

FechaOperacion   string  optional  

optional Fecha de la operación.

DescripcionFactura   string   

Descripción de la factura. Example: test

Destinatarios   string[]   

Lista de destinatarios de la factura.

*   object  optional  
NombreRazon   string   

Nombre o razón social del destinatario. Example: "IVAN SOLE MARTINEZ"

NIF   string   

NIF del destinatario. Example: "39707287H"

CodigoPostal   string   

Código postal del destinatario. Example: 28001

Direccion   string   

Dirección del destinatario. Example: "Calle de la Princesa 1" //REVISAR OBLIGATORIEDAD DE ESTOS CAMPOS

OtroCodPais   string  optional  

optional Otro código de país. Example: ES

OtroIDType   string  optional  

optional Otro tipo de identificación (lista l7). Example: 1

OtroID   string  optional  

optional Otro número de identificación. Example: 39707287H

DetallesFactura   string[]   

Lista de detalles de la factura.

*   object  optional  
Descripcion   string   

Descripción de la línea. Example: "Producto 1"

Unidades   integer   

Unidades de la línea. Example: 1

PrecioPorUnidad   integer   

Precio por unidad. Example: 100

SubTotal   integer  optional  

optional Subtotal de la línea. Example: 100

ImporteTotal   integer   

Importe total de la línea. Example: 100

Descuento   integer   

Importe en euros del descuento.

Desglose   string[]   

Lista de desgloses de la factura.

*   object  optional  
PrestacionServicioOEntrega   optional  optional  

Indica si se trata de una prestación de servicio o entrega cuando el destinatario no es Nacional(1 Prestacion - 2 Entrega).

CausaExencion   integer  optional  

optional Causa de exención (lista l10).

BaseImponibleOImporteNoSujeto   integer  optional  

optional Base imponible o importe no sujeto.

TipoNoExenta   integer  optional  

optional Tipo de no exención (lista l11). Example: 1

TipoImpositivo   integer  optional  

optional Tipo impositivo aplicado. Example: 21

CuotaRepercutida   integer  optional  

optional Cuota repercutida. Example: 21

TipoRecargoEquivalencia   integer  optional  

optional Porcentaje de recargo de equivalencia. Example: 21

CuotaRecargoEquivalencia   integer  optional  

optional Valor del recargo de equivalencia. Example: 21

OperacionRecEquivORegSimpl   integer  optional  

optional Operación de recargo de equivalencia o registro simplificado (lista l12).

CausaNoSujeta   integer  optional  

optional Causa de no sujeción (lista l13).

ImporteTotal   number   

Importe total de la factura. Example: 121

RetencionSoportada   number  optional  

optional Retenciones soportadas. Example: 21

BaseImponibleACoste   number  optional  

optional Base imponible a coste.

Claves   string[]  optional  

optional Claves de retenciones.

CodigoRectificativa   string  optional  

optional Código de la rectificativa (lista l17).

TipoRectificativa   string  optional  

optional Tipo de rectificativa (lista l8).

BaseRectificada   number  optional  

optional Base rectificada.

CuotaRectificada   number  optional  

optional Cuota rectificada.

CuotaRecargoRectificada   number  optional  

optional Cuota de recargo rectificada.

FacturasSustituidas   string[]  optional  

optional Lista de facturas sustituidas.

*   object  optional  
NumSerie   string   

El número de serie de la factura sustituida. Example: AX/202412

NumFactura   string   

El número de factura de la factura sustituida. Example: 123

FechaExpedicionFactura   string   

La fecha de expedición de la factura sustituida. Example: 2025-1-1

webhook_id   integer  optional  

optional El ID del webhook asociado a la factura.

tag   string  optional  

optional Etiqueta personalizada para la factura. Example: `test

  • @response 201 { "success": true, "message": "AltaRegistroFacturacion created successfully", "code": 201, "data": { "count": 1, "items": [ { "id": 2, "previous_id": null, "alta_o_anulacion": 1, "id_registro_anulado": null, "modificacionOSubsanacion": "SUBSANAR", "id_registro_modificadoOSubsanado": 1, "IDEmisorFactura": "47859447N", "NumSerieFactura": "AX/2025-102", "NumSerie": "AX/2025", "NumFactura": "102", "FechaExpedicionFactura": "2025-12-17", "HoraExpedicionFactura": "10:00:00", "FechaOperacion": "2022-07-10", "DescripcionOperacion": null, "NombreRazonDestinatario": "Lluis Martinez", "NIFDestinatario": "47859447N", "RefExterna": null, "CuotaTotal": null, "ImporteTotal": "121", "moneda": "EUR", "BaseRectificada": null, "CuotaRectificada": null, "CuotaRecargoRectificada": null, "tag": null, "webhook_id": null, "verifactu": false, "no_verifactu": false, "tbai": true, "face": 0, "json": "JSON recibido por la API", "base64_pdf": null, "base64_qr_pdf": null, "url_qr": null, "qr_image": null, "qr_x": null, "qr_y": null, "qr_page": 1, "remitenteNacional": 1, "next_id": null, "IDVersion": 1, "VariosDestinatarios": 2, "EmitidaPorTercODesti": 2, "FacturaSimplificada": 2, "FacturaEmitidaSustSimp": 2, "DescripcionFactura": "Test Desc Factura", "CodigoRectificativa": null, "TipoRectificativa": null, "RetencionSoportada": null, "BaseImponibleACoste": null, "FechaExpedicionFacturaAnterior": "2025-12-17", "NumSerieAnterior": "AX/2025", "NumFacturaAnterior": "102", "SignatureValueFacturaAnterior": "SignatureValueFacturaAnterior", "xml_tbai": null, "xml_signed": "XML firmado", "SignatureValue": "SignatureValue", "xml_tbai_response": null, "estado_tbai": null, "estado_registro_tbai": "No Registrado", "codigo_error_tbai": null, "descripcion_error_tbai": null, "envio_tbai_id": null, "NumSerieDispositivo": null, "ModeloLROE": null, "EpigrafeLROE": null } ] } }`
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/tbai/subsanar/consequuntur';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer d583aaEb6PgZVec1hv6k4Df',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "IDEmisorFactura": "A39200019",
    "NumSerie": "AX/202412",
    "NumFactura": "123",
    "FechaExpedicionFactura": "2025-1-1",
    "HoraExpedicionFactura": "10:00:00",
    "DescripcionFactura": "test",
    "Destinatarios": [
        {
            "NombreRazon": "IVAN SOLE MARTINEZ",
            "NIF": "39707287H"
        }
    ],
    "DetallesFactura": [
        {
            "Descripcion": "Producto 1",
            "Unidades": 1,
            "PrecioPorUnidad": 100,
            "SubTotal": 100,
            "ImporteTotal": 100,
            "Descuento": 1234567890
        }
    ],
    "Desglose": [
        {
            "TipoNoExenta": 1,
            "BaseImponibleOImporteNoSujeto": 100,
            "TipoImpositivo": 21,
            "CuotaRepercutida": 21,
            "TipoRecargoEquivalencia": 21,
            "CuotaRecargoEquivalencia": 21
        }
    ],
    "ImporteTotal": 121,
    "RetencionSoportada": 21,
    "Claves": [
        1,
        2,
        3
    ],
    "tag": "test\n\n\n* @response 201 {\n   \"success\": true,\n   \"message\": \"AltaRegistroFacturacion created successfully\",\n   \"code\": 201,\n   \"data\": {\n       \"count\": 1,\n       \"items\": [\n           {\n               \"id\": 2,\n               \"previous_id\": null,\n               \"alta_o_anulacion\": 1,\n               \"id_registro_anulado\": null,\n               \"modificacionOSubsanacion\": \"SUBSANAR\",\n               \"id_registro_modificadoOSubsanado\": 1,\n               \"IDEmisorFactura\": \"47859447N\",\n               \"NumSerieFactura\": \"AX/2025-102\",\n               \"NumSerie\": \"AX/2025\",\n               \"NumFactura\": \"102\",\n               \"FechaExpedicionFactura\": \"2025-12-17\",\n               \"HoraExpedicionFactura\": \"10:00:00\",\n               \"FechaOperacion\": \"2022-07-10\",\n               \"DescripcionOperacion\": null,\n               \"NombreRazonDestinatario\": \"Lluis Martinez\",\n               \"NIFDestinatario\": \"47859447N\",\n               \"RefExterna\": null,\n               \"CuotaTotal\": null,\n               \"ImporteTotal\": \"121\",\n               \"moneda\": \"EUR\",\n               \"BaseRectificada\": null,\n               \"CuotaRectificada\": null,\n               \"CuotaRecargoRectificada\": null,\n               \"tag\": null,\n               \"webhook_id\": null,\n               \"verifactu\": false,\n               \"no_verifactu\": false,\n               \"tbai\": true,\n               \"face\": 0,\n               \"json\": \"JSON recibido por la API\",\n               \"base64_pdf\": null,\n               \"base64_qr_pdf\": null,\n               \"url_qr\": null,\n               \"qr_image\": null,\n               \"qr_x\": null,\n               \"qr_y\": null,\n               \"qr_page\": 1,\n               \"remitenteNacional\": 1,\n               \"next_id\": null,\n               \"IDVersion\": 1,\n               \"VariosDestinatarios\": 2,\n               \"EmitidaPorTercODesti\": 2,\n               \"FacturaSimplificada\": 2,\n               \"FacturaEmitidaSustSimp\": 2,\n               \"DescripcionFactura\": \"Test Desc Factura\",\n               \"CodigoRectificativa\": null,\n               \"TipoRectificativa\": null,\n               \"RetencionSoportada\": null,\n               \"BaseImponibleACoste\": null,\n               \"FechaExpedicionFacturaAnterior\": \"2025-12-17\",\n               \"NumSerieAnterior\": \"AX/2025\",\n               \"NumFacturaAnterior\": \"102\",\n               \"SignatureValueFacturaAnterior\": \"SignatureValueFacturaAnterior\",\n               \"xml_tbai\": null,\n               \"xml_signed\": \"XML firmado\",\n               \"SignatureValue\": \"SignatureValue\",\n               \"xml_tbai_response\": null,\n               \"estado_tbai\": null,\n               \"estado_registro_tbai\": \"No Registrado\",\n               \"codigo_error_tbai\": null,\n               \"descripcion_error_tbai\": null,\n               \"envio_tbai_id\": null,\n               \"NumSerieDispositivo\": null,\n               \"ModeloLROE\": null,\n               \"EpigrafeLROE\": null\n           }\n       ]\n   }\n}"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 400
{
    "success": false,
    "message": "El campo IDEmisorFactura es obligatorio y no puede ser null.",
    "error": 400,
    "code": 400
}

Envíos

Listado de envíos

Requiere autenticación

Muestra un listado paginado de todos los envíos a Tbai.

GETapi/envios-tbai

Headers

Authorization      

Example: Bearer e6aakcDdP6VhfgZEv854b13

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-tbai';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer e6aakcDdP6VhfgZEv854b13',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
  "success": true,
  "code": 200,
  "message": "Envíos Tbai listed successfully",
  "data": {
     "items": [
         {
             "id": 1,
             "IDEmisor": "12345678A",
             "endpoint": "https://pruebas-ticketbai.araba.eus/TicketBAI/v1/facturas/",
             "xml_envio": "</xml>",
             "xml_respuesta": "</xml>",
             "tbai_id": "TBAI-97192097P-090125-K+bigfSdRLk0n-140",
             "estado_tbai": "Recibido",
             "codigo_error_tbai": null,
             "descripcion_error_tbai": null,
             "fecha_hora_envio": "2024-12-17 11:21:22",
             "fecha_hora_respuesta": "2024-12-17 11:21:22",
             "created_at": "2024-12-17T10:21:22.000000Z",
             "updated_at": "2024-12-17T10:21:22.000000Z",
             "deleted_at": null
         },
     ],
     "count": 1
 },
 "pagination": {
     "total": 1,
     "perPage": 1,
     "currentPage": 1,
     "lastPage": 1
 }
}
Respuesta 401
{
    "success": false,
    "message": "El IDEmisor no coincide con el de tu cuenta.",
    "error": 401,
    "code": 401
}

Obtener un envío

Requiere autenticación

Muestra un envío Tbai específico. Se filtra por el ID del envío.

GETapi/envios-tbai/{id}

Headers

Authorization      

Example: Bearer e5da46gDhP3cZE6abVvkf81

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del envío Tbai que se desea obtener. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-tbai/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer e5da46gDhP3cZE6abVvkf81',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Envío Tbai obtained successfully",
    "data": {
        "items": {
            "id": 1,
            "IDEmisor": "12345678A",
            "endpoint": "https://pruebas-ticketbai.araba.eus/TicketBAI/v1/facturas/",
            "xml_envio": "</xml>",
            "xml_respuesta": "</xml>",
            "tbai_id": "TBAI-97192097P-090125-K+bigfSdRLk0n-140",
            "estado_tbai": "Recibido",
            "codigo_error_tbai": null,
            "descripcion_error_tbai": null,
            "fecha_hora_envio": "2024-12-17 11:21:22",
            "fecha_hora_respuesta": "2024-12-17 11:21:22",
            "created_at": "2024-12-17T10:21:22.000000Z",
            "updated_at": "2024-12-17T10:21:22.000000Z",
            "deleted_at": null
        }
    }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el envío AEAT especificado.",
    "error": 404,
    "code": 404
}

Software TBAI

Obtener software TBAI

Requiere autenticación

Muestra el software TBAI de la provincia indicada. se indica como ultimo parametro de la url. Admite los siguientes valores: alava, araba, guipuzcoa, gipuzkoa, vizcaya, bizkaia.

GETapi/software-tbai/{type}

Headers

Authorization      

Example: Bearer Pk1aVD8ah3fgc6dEZb546ve

Content-Type      

Example: application/json

URL Parameters

type   string   

La provincia del software TBAI que se desea obtener. (alava, araba, guipuzcoa, gipuzkoa, vizcaya, bizkaia) Example: alava

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/software-tbai/alava';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer Pk1aVD8ah3fgc6dEZb546ve',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Software TBAI obtenido correctamente",
    "data": {
        "CIF": "123456789",
        "NombreRazon": "Nombre de la razón",
        "NombreSoftware": "Nombre del software",
        "Version": "1.0"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Provincia TBAI no válida",
    "error": 400,
    "code": 400
}

Webhook

Listar Webhooks

Requiere autenticación

Muestra un listado con todos los webhooks generados en la API.

GETapi/webhook

Headers

Authorization      

Example: Bearer D14P5eVZbkgEh8acfv63da6

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer D14P5eVZbkgEh8acfv63da6',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
 "success": true,
 "code": 200,
 "message": "Webhooks listed successfully",
 "data": {
     "items": [
         {
             "id": 1,
             "url": "https://webhook.site/766f4435-f4f9-414b-b26f-47dbd10339ce/{id}",
             "secret_key": "m7&A,$'(6qYjg+BZ#su_3!",
             "is_active": true,
             "retry_count": 0,
             "last_triggered_at": null,
             "headers": null,
             "http_method": "POST",
             "description": null,
             "tag": "emisor_1",
             "created_at": "2024-12-16T11:31:27.000000Z",
             "updated_at": "2024-12-16T11:31:27.000000Z",
             "deleted_at": null
         }
     ],
     "count": 1
 },
 "pagination": {
     "total": 1,
     "perPage": 10,
     "currentPage": 1,
     "lastPage": 1
 }
 }
}

Obtener los logs de un webhook

Requiere autenticación

Obtiene los logs asociados a un webhook específico.

GETapi/webhook/{id}/logs

Headers

Authorization      

Example: Bearer PbdgE6khZ68eDvca51V3a4f

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del webhook que se desea obtener los logs. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook/1/logs';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer PbdgE6khZ68eDvca51V3a4f',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Webhook logs listed successfully",
    "data": {
        "items": [
            {
                "id": 1,
                "webhook_id": 1,
                "url": "https://webhook.site/c500a769-9e2e-434c-bdeb-6333705404b6/{id}",
                "invoice_id": 1,
                "status": "success",
                "response_body": null,
                "http_status_code": 200,
                "error_message": "",
                "attempt_number": 1,
                "next_retry_at": null,
                "request_headers": [
                    "Authorization: Bearer m7&A,$'(6qYjg+BZ#su_3!"
                ],
                "request_body": {
                    "estado": "Correcto",
                    "num_serie": "AZ50/55",
                    "factura_id": 1,
                    "codigo_error": "",
                    "descripcion_error": "",
                    "fecha_notificacion": "2025-05-16 12:20:46"
                },
                "response_headers": false,
                "execution_time": "2706.142",
                "created_at": "2025-05-16T10:20:46.000000Z",
                "updated_at": "2025-05-16T10:21:12.000000Z"
            }
        ],
        "count": 1
    },
    "pagination": {
        "total": 1,
        "perPage": 10,
        "currentPage": 1,
        "lastPage": 1
    }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el webhook especificado.",
    "error": 404,
    "code": 404
}

Obtener un Webhook

Requiere autenticación

Muestra un webhook específico. Se filtra por el ID del webhook.

GETapi/webhook/{id}

Headers

Authorization      

Example: Bearer D4V86b6ac5gEPaZe1v3dhfk

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del webhook que se desea obtener. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook/1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer D4V86b6ac5gEPaZe1v3dhfk',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "code": 200,
    "message": "Webhook obtained successfully",
    "data": {
        "items": {
            "id": 1,
            "url": "https://webhook.site/766f4435-f4f9-414b-b26f-47dbd10339ce/{id}",
            "secret_key": "m7&A,$'(6qYjg+BZ#su_3!",
            "is_active": true,
            "retry_count": 0,
            "last_triggered_at": null,
            "headers": null,
            "http_method": "POST",
            "description": null,
            "tag": "emisor_1",
            "created_at": "2024-12-16T11:31:27.000000Z",
            "updated_at": "2024-12-16T11:31:27.000000Z",
            "deleted_at": null
        },
        "count": 1
    }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el webhook especificado.",
    "error": 404,
    "code": 404
}

Generar un webhook

Requiere autenticación

Genera un nuevo webhook para ser utilizado en la API.

POSTapi/webhook

Headers

Authorization      

Example: Bearer 4Vf6av5e16kag8Eb3DPZcdh

Content-Type      

Example: application/json

Body Parameters

url   string   

La URL del webhook. Example: https://webhook.site/766f4435-f4f9-414b-b26f-47dbd10339ce/{id}

http_method   string  optional  

El método HTTP del webhook. Solo puede ser POST, GET, PUT o PATCH. Example: POST

headers   object  optional  

optional Los headers del webhook.

secret_key   string   

La clave secreta del webhook. Example: m7&A,$'(6qYjg+BZ#su_3!

tag   string  optional  

optional La etiqueta del webhook. Example: emisor_1

description   string  optional  

optional La descripción del webhook. Example: Webhook para el emisor 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 4Vf6av5e16kag8Eb3DPZcdh',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "url": "https://webhook.site/766f4435-f4f9-414b-b26f-47dbd10339ce/{id}",
    "http_method": "POST",
    "headers": {
        "x-api-key": "test"
    },
    "secret_key": "m7&A,$'(6qYjg+BZ#su_3!",
    "tag": "emisor_1",
    "description": "Webhook para el emisor 1"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 201
{
    "success": true,
    "message": "Webhook creado correctamente",
    "code": 201,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 1,
                "url": "https://webhook.site/766f4435-f4f9-414b-b26f-47dbd10339ce/{id}",
                "secret_key": "m7&A,$'(6qYjg+BZ#su_3!",
                "is_active": null,
                "retry_count": null,
                "last_triggered_at": null,
                "headers": {
                    "x-api-key": "test"
                },
                "http_method": "POST",
                "description": null,
                "tag": "emisor_1"
            }
        ]
    }
}
Respuesta 400
{
    "success": false,
    "message": "Los campos url y secret_key son obligatorios.",
    "error": 400,
    "code": 400
}
Respuesta 400
{
    "success": false,
    "message": "La URL del webhook es obligatoria.",
    "error": 400,
    "code": 400
}

Actualizar un webhook

Requiere autenticación

Actualiza los datos de un webhook existente.

PUTapi/webhook/{id}

Headers

Authorization      

Example: Bearer 35vDk6EhaZfcabeg86dV14P

Content-Type      

Example: application/json

URL Parameters

id   integer   

El ID del webhook que se desea actualizar. Example: 1

Body Parameters

url   string  optional  

optional La URL del webhook. Example: https://webhook.site/766f4435-f4f9-414b-b26f-47dbd10339ce/{id}

http_method   string  optional  

optional El método HTTP del webhook. Solo puede ser POST, GET, PUT o PATCH. Example: POST

secret_key   string  optional  

optional La clave secreta del webhook. Example: m7&A,$'(6qYjg+BZ#su_3!

tag   string  optional  

optional La etiqueta del webhook. Example: emisor_2

description   string  optional  

optional La descripción del webhook. Example: Webhook para el emisor 2

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 35vDk6EhaZfcabeg86dV14P',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "url": "https://webhook.site/766f4435-f4f9-414b-b26f-47dbd10339ce/{id}",
    "http_method": "POST",
    "secret_key": "m7&A,$'(6qYjg+BZ#su_3!",
    "tag": "emisor_2",
    "description": "Webhook para el emisor 2"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Webhook updated successfully",
    "code": 200,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 1,
                "url": "https://webhook.site/766f4435-f4f9-414b-b26f-47dbd10339ce/{id}",
                "secret_key": "m7&A,$'(6qYjg+BZ#su_3!",
                "is_active": true,
                "retry_count": 0,
                "last_triggered_at": null,
                "headers": null,
                "http_method": "POST",
                "description": null,
                "tag": "emisor_2",
                "created_at": "2024-12-16T11:31:27.000000Z",
                "updated_at": "2024-12-16T11:31:27.000000Z",
                "deleted_at": null
            }
        ]
    }
}
Respuesta 404
{
    "success": false,
    "message": "No se encontró el webhook especificado.",
    "error": 404,
    "code": 404
}

Consultas Externas

Verificar destinatarios

Requiere autenticación

Endpoint antiguo, mantenido para compatibilidad. Ver documentación de censoAeat.

POSTapi/destinatarios/validar

Headers

Authorization      

Example: Bearer PeZa1hD6k86a3fVb4vcg5Ed

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/destinatarios/validar';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer PeZa1hD6k86a3fVb4vcg5Ed',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Censo AEAT

Requiere autenticación

Verificar los datos de uno o varios destinatarios en el censo de AEAT para validar su existencia.

POSTapi/censo-aeat

Headers

Authorization      

Example: Bearer vef184VD3ZEb6dacg6kPa5h

Content-Type      

Example: application/json

Body Parameters

Destinatarios   string[]   

El array de destinatarios a verificar.

*   object  optional  
NIF   string   

El NIF del destinatario. Example: dolorem

NombreRazon   string  optional  

optional El nombre del destinatario. Example: quia

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/censo-aeat';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer vef184VD3ZEb6dacg6kPa5h',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "Destinatarios": [
        {
            "NIF": "39707287H",
            "NombreRazon": "IVAN SOLE"
        },
        {
            "NIF": "B70912613"
        }
    ]
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Datos consultados correctamente",
    "code": 200,
    "data": [
        {
            "NIF": "39707287H",
            "NombreRazon": "IVAN SOLE",
            "NIF_response": "39707287H",
            "NombreRazon_response": "SOLE MARTINEZ IVAN",
            "status_response": "IDENTIFICADO"
        },
        {
            "NIF": "B70912613",
            "NombreRazon": null,
            "NIF_response": "B70912613",
            "NombreRazon_response": "NEMON INVOICE TO CASH",
            "status_response": "IDENTIFICADO"
        }
    ]
}
Respuesta 400
{
    "success": false,
    "message": "La solicitud está vacía o contiene errores de formato.",
    "code": 400,
    "data": null
}
Respuesta 404
{
    "success": false,
    "message": "Error de conexion con AEAT al consultar los datos, intente-lo mas tarde.",
    "code": 404,
    "data": null
}

Utilidades

Server Status

Devuelve el estado del servidor. Si la petición llega aquí, el servidor está funcionando.

GETapi/status

Headers

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/status';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "status": "UP",
    "message": "Server is running",
    "code": 200
}

Endpoints

GET api/emisor/import/template

Requiere autenticación

GETapi/emisor/import/template

Headers

Authorization      

Example: Bearer g6dv4ZaVDb18Pef6kha5c3E

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/import/template';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer g6dv4ZaVDb18Pef6kha5c3E',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

POST api/emisor/import

Requiere autenticación

POSTapi/emisor/import

Headers

Authorization      

Example: Bearer e638v4a5PkZVafDc1hdbgE6

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/import';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer e638v4a5PkZVafDc1hdbgE6',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Otorgamientos

Verifactu

Generar PDF otorgamiento

Requiere autenticación

Genera el PDF de otorgamiento de un emisor Verifactu.

POSTapi/otorgamiento/verifactu/generar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer dZk8aV4PhaEcv5gbe6Df613

Content-Type      

Example: application/json

Body Parameters

nif   string  optional  

optional El NIF del emisor. Obligatorio si no se informa id_emisor. Example: A39200019

id_emisor   integer  optional  

optional El ID del emisor. Obligatorio si no se informa nif. Example: 1

municipio   string   

El municipio del emisor. Example: Castellon

via_publica   string   

La vía pública del emisor. Example: C/Principal

numero   string   

El número de la vía pública del emisor. Example: 5

representante   object  optional  

conditional Datos del representante del emisor. Es obligatorio cuando el NIF del emisor corresponde a empresa/entidad (comienza por A,B,C,D,E,F,G,H,J,N,P,Q,R,S,U,V,W) y está prohibido cuando el NIF corresponde a persona física.

nombre   string  optional  

required_when:representante presente El nombre del representante del emisor.

nif   string  optional  

required_when:representante presente El NIF del representante del emisor.

municipio   string  optional  

required_when:representante presente El municipio del representante del emisor.

via_publica   string  optional  

required_when:representante presente La vía pública del representante del emisor.

numero   string  optional  

required_when:representante presente El número de la vía pública del representante del emisor.

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/otorgamiento/verifactu/generar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer dZk8aV4PhaEcv5gbe6Df613',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "A39200019",
    "id_emisor": 1,
    "municipio": "Castellon",
    "via_publica": "C/Principal",
    "numero": "5",
    "representante": []
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Otorgamiento generado correctamente",
    "code": 200,
    "data": {
        "nombre": "Empresa S.L.",
        "nif": "B33912413",
        "municipio": "Ascó",
        "via_publica": "C/test",
        "numero": "5",
        "representante": {
            "nombre": "Pedro Perez",
            "nif": "12345678A",
            "municipio": "Castellon",
            "via_publica": "C/Principal",
            "numero": "10"
        },
        "otorgamiento_base64": "pdf en base 64"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Debes informar al menos uno de los siguientes campos: nif o id_emisor",
    "error": 400,
    "code": 400
}

Importar el PDF de otorgamiento

Requiere autenticación

Importa el PDF de otorgamiento de un emisor Verifactu y sus adjuntos.

POSTapi/otorgamiento/verifactu/importar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer PaVdEcf643gk5Zve1bhD8a6

Content-Type      

Example: application/json

Body Parameters

nif   string  optional  

optional El NIF del emisor. Obligatorio si no se informa id_emisor. Example: A39200019

id_emisor   integer  optional  

optional El ID del emisor. Obligatorio si no se informa nif. Example: 1

otorgamiento_base64   string   

El otorgamiento firmado en base 64. Example: pdf en base 64

adjuntos_base64   string[]   

Array de adjuntos en base 64. Debe contener 1 o 2 elementos. Formatos soportados: pdf, png, jpg, jpeg.

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/otorgamiento/verifactu/importar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer PaVdEcf643gk5Zve1bhD8a6',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "A39200019",
    "id_emisor": 1,
    "otorgamiento_base64": "pdf en base 64",
    "adjuntos_base64": [
        "jpg en base 64",
        "png en base 64"
    ]
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Otorgamiento importado correctamente",
    "code": 200,
    "data": {
        "nif": "B33912413",
        "nombre": "Empresa S.L.",
        "otorgamiento_importado_base64": "pdf en base 64",
        "adjunto_importado_base64": "pdf adjunto en base 64"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Debes informar al menos uno de los siguientes campos: nif o id_emisor",
    "error": 400,
    "code": 400
}

Generar PDF otorgamiento (LEGACY)

Requiere autenticación

Visitar la documentacion en la nueva ruta /otorgamientos/verifactu/generar-pdf-otorgamiento Este endpoint está obsoleto, se mantiene para compatibilidad con versiones anteriores.

POSTapi/emisor/pdf-otorgamiento

Headers

Authorization      

Example: Bearer fbPhaV6k6a1354Ddve8EcZg

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer fbPhaV6k6a1354Ddve8EcZg',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Importar el PDF de otorgamiento (LEGACY)

Requiere autenticación

Visitar la documentacion en la nueva ruta /otorgamientos/verifactu/importar-pdf-otorgamiento Este endpoint está obsoleto, se mantiene para compatibilidad con versiones anteriores.

POSTapi/emisor/importar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer V6dDgEe1a5kavcPh6bZ3f48

Content-Type      

Example: application/json

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/importar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer V6dDgEe1a5kavcPh6bZ3f48',
            'Content-Type' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Araba

Generar PDF otorgamiento

Requiere autenticación

Genera el PDF de otorgamiento de un emisor TBAI de Araba.

POSTapi/otorgamiento/araba/generar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer 43aVZegha65bdE16fvD8kPc

Content-Type      

Example: application/json

Body Parameters

nif   string  optional  

optional El NIF del emisor. Obligatorio si no se informa id_emisor. Example: A39200019

id_emisor   integer  optional  

optional El ID del emisor. Obligatorio si no se informa nif. Example: 1

domicilio_fiscal   string   

El domicilio fiscal del emisor. Example: C/Principal

municipio   string   

El municipio del emisor. Example: Castellon

provincia   string   

La provincia del emisor. Example: Tarragona

representante   object  optional  

conditional Datos del representante del emisor. Es obligatorio cuando el NIF del emisor corresponde a empresa/entidad (comienza por A,B,C,D,E,F,G,H,J,N,P,Q,R,S,U,V,W) y está prohibido cuando el NIF corresponde a persona física.

nombre   string  optional  

required_when:representante presente El nombre del representante del emisor.

nif   string  optional  

required_when:representante presente El NIF del representante del emisor.

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/otorgamiento/araba/generar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 43aVZegha65bdE16fvD8kPc',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "A39200019",
    "id_emisor": 1,
    "domicilio_fiscal": "C/Principal",
    "municipio": "Castellon",
    "provincia": "Tarragona",
    "representante": []
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Otorgamiento generado correctamente",
    "code": 200,
    "data": {
        "nombre": "Empresa S.L.",
        "nif": "B33912413",
        "domicilio_fiscal": "C/Principal",
        "municipio": "Castellon",
        "cp": "12345",
        "provincia": "Tarragona",
        "representante": {
            "nombre": "Pedro Perez",
            "nif": "12345678A"
        },
        "otorgamiento_base64": "pdf en base 64"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Debes informar al menos uno de los siguientes campos: nif o id_emisor",
    "error": 400,
    "code": 400
}

Importar el PDF de otorgamiento

Requiere autenticación

Importa el PDF de otorgamiento de un emisor TBAI de Araba.

POSTapi/otorgamiento/araba/importar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer fadhga5Zc8e4v1366kDPVEb

Content-Type      

Example: application/json

Body Parameters

nif   string  optional  

optional El NIF del emisor. Obligatorio si no se informa id_emisor. Example: A39200019

id_emisor   integer  optional  

optional El ID del emisor. Obligatorio si no se informa nif. Example: 1

otorgamiento_base64   string   

El otorgamiento firmado en base 64. Example: pdf en base 64

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/otorgamiento/araba/importar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer fadhga5Zc8e4v1366kDPVEb',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "A39200019",
    "id_emisor": 1,
    "otorgamiento_base64": "pdf en base 64"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Otorgamiento importado correctamente",
    "code": 200,
    "data": {
        "nif": "B33912413",
        "nombre": "Empresa S.L.",
        "otorgamiento_importado_base64": "pdf en base 64"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Debes informar al menos uno de los siguientes campos: nif o id_emisor",
    "error": 400,
    "code": 400
}

Bizkaia

Generar PDF otorgamiento

Requiere autenticación

Genera el PDF de otorgamiento de un emisor TBAI de Bizkaia.

POSTapi/otorgamiento/bizkaia/generar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer gkfd14aDa6hePZ836vbVcE5

Content-Type      

Example: application/json

Body Parameters

nif   string  optional  

optional El NIF del emisor. Obligatorio si no se informa id_emisor. Example: A39200019

id_emisor   integer  optional  

optional El ID del emisor. Obligatorio si no se informa nif. Example: 1

domicilio_fiscal   string   

El domicilio fiscal del emisor. Example: C/Principal

municipio   string   

El municipio del emisor. Example: Castellon

provincia   string   

La provincia del emisor. Example: Tarragona

representante   object  optional  

conditional Datos del representante del emisor. Es obligatorio cuando el NIF del emisor corresponde a empresa/entidad (comienza por A,B,C,D,E,F,G,H,J,N,P,Q,R,S,U,V,W) y está prohibido cuando el NIF corresponde a persona física.

nombre   string  optional  

required_when:representante presente El nombre del representante del emisor.

nif   string  optional  

required_when:representante presente El NIF del representante del emisor.

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/otorgamiento/bizkaia/generar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer gkfd14aDa6hePZ836vbVcE5',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "A39200019",
    "id_emisor": 1,
    "domicilio_fiscal": "C/Principal",
    "municipio": "Castellon",
    "provincia": "Tarragona",
    "representante": []
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Otorgamiento generado correctamente",
    "code": 200,
    "data": {
        "nombre": "Empresa S.L.",
        "nif": "B33912413",
        "domicilio_fiscal": "C/Principal",
        "municipio": "Castellon",
        "cp": "12345",
        "provincia": "Tarragona",
        "representante": {
            "nombre": "Pedro Perez",
            "nif": "12345678A"
        },
        "otorgamiento_base64": "pdf en base 64"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Debes informar al menos uno de los siguientes campos: nif o id_emisor",
    "error": 400,
    "code": 400
}

Importar el PDF de otorgamiento

Requiere autenticación

Importa el PDF de otorgamiento de un emisor TBAI de Bizkaia.

POSTapi/otorgamiento/bizkaia/importar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer a8V6E46da1PfZ5ek3Dgcvbh

Content-Type      

Example: application/json

Body Parameters

nif   string  optional  

optional El NIF del emisor. Obligatorio si no se informa id_emisor. Example: A39200019

id_emisor   integer  optional  

optional El ID del emisor. Obligatorio si no se informa nif. Example: 1

otorgamiento_base64   string   

El otorgamiento firmado en base 64. Example: pdf en base 64

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/otorgamiento/bizkaia/importar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer a8V6E46da1PfZ5ek3Dgcvbh',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "A39200019",
    "id_emisor": 1,
    "otorgamiento_base64": "pdf en base 64"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Otorgamiento importado correctamente",
    "code": 200,
    "data": {
        "nif": "B33912413",
        "nombre": "Empresa S.L.",
        "otorgamiento_importado_base64": "pdf en base 64"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Debes informar al menos uno de los siguientes campos: nif o id_emisor",
    "error": 400,
    "code": 400
}

Gipuzkoa

Generar PDF otorgamiento

Requiere autenticación

Genera el PDF de otorgamiento de un emisor TBAI de Gipuzkoa.

POSTapi/otorgamiento/gipuzkoa/generar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer Z6VDb8v5ePcaaE4h6f3dg1k

Content-Type      

Example: application/json

Body Parameters

nif   string  optional  

optional El NIF del emisor. Obligatorio si no se informa id_emisor. Example: A39200019

id_emisor   integer  optional  

optional El ID del emisor. Obligatorio si no se informa nif. Example: 1

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/otorgamiento/gipuzkoa/generar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer Z6VDb8v5ePcaaE4h6f3dg1k',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "A39200019",
    "id_emisor": 1
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Otorgamiento generado correctamente",
    "code": 200,
    "data": {
        "otorgamiento_base64": "pdf en base 64"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Debes informar al menos uno de los siguientes campos: nif o id_emisor",
    "error": 400,
    "code": 400
}

Importar el PDF de otorgamiento

Requiere autenticación

Importa el PDF de otorgamiento de un emisor TBAI de Gipuzkoa.

POSTapi/otorgamiento/gipuzkoa/importar-pdf-otorgamiento

Headers

Authorization      

Example: Bearer 4heV8D53adb1kgaE6ZfPc6v

Content-Type      

Example: application/json

Body Parameters

nif   string  optional  

optional El NIF del emisor. Obligatorio si no se informa id_emisor. Example: A39200019

id_emisor   integer  optional  

optional El ID del emisor. Obligatorio si no se informa nif. Example: 1

otorgamiento_base64   string   

El otorgamiento firmado en base 64. Example: pdf en base 64

$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/otorgamiento/gipuzkoa/importar-pdf-otorgamiento';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 4heV8D53adb1kgaE6ZfPc6v',
            'Content-Type' => 'application/json',
        ],
        'json' => {
    "nif": "A39200019",
    "id_emisor": 1,
    "otorgamiento_base64": "pdf en base 64"
},
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
Respuesta 200
{
    "success": true,
    "message": "Otorgamiento importado correctamente",
    "code": 200,
    "data": {
        "nif": "B33912413",
        "nombre": "Empresa S.L.",
        "otorgamiento_importado_base64": "pdf en base 64"
    }
}
Respuesta 400
{
    "success": false,
    "message": "Debes informar al menos uno de los siguientes campos: nif o id_emisor",
    "error": 400,
    "code": 400
}