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.
Endpoints con 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.
Example request:
$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));
const url = new URL(
"https://app.verifactuapi.es/api/login"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "ejemplo@verifatuAPI.com",
"password": "123456789"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/login" \
--header "Content-Type: application/json" \
--data "{
\"email\": \"ejemplo@verifatuAPI.com\",
\"password\": \"123456789\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/login'
payload = {
"email": "ejemplo@verifatuAPI.com",
"password": "123456789"
}
headers = {
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (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",
}
Example response (401):
{
"success": false,
"message": "Credenciales incorrectas",
"error": 401,
"code": 401
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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.
Example request:
$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));
const url = new URL(
"https://app.verifactuapi.es/api/loginEmisor"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"username": "aa.aaaaaaaaa",
"api_key": "5d4f3d3bb1284e7cb3f5b7e7881d55d22ef5c1b35d693e6e4b9e5d2293ff1c16"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/loginEmisor" \
--header "Content-Type: application/json" \
--data "{
\"username\": \"aa.aaaaaaaaa\",
\"api_key\": \"5d4f3d3bb1284e7cb3f5b7e7881d55d22ef5c1b35d693e6e4b9e5d2293ff1c16\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/loginEmisor'
payload = {
"username": "aa.aaaaaaaaa",
"api_key": "5d4f3d3bb1284e7cb3f5b7e7881d55d22ef5c1b35d693e6e4b9e5d2293ff1c16"
}
headers = {
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"success": true,
"user_name": "aa.aaaaaaaaa",
"message": "Inicio de sesión exitoso",
"token": "1234567890",
"expires_at": "2025-06-17 12:00:00"
}
Example response (404):
{
"success": false,
"message": "No se encontró el emisor especificado.",
"error": 401,
"code": 401
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Emisores
Listado de emisores
requires authentication
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.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Eha5k4g63D8c6aVdv1ZfbPe',
'Content-Type' => 'application/json',
],
'query' => [
'nif' => 'P1716358E',
'nombre' => 'Nombre del emisor',
'type' => 'verifactu',
'id_zona_tbai' => '1',
'enviar_aeat' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor"
);
const params = {
"nif": "P1716358E",
"nombre": "Nombre del emisor",
"type": "verifactu",
"id_zona_tbai": "1",
"enviar_aeat": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Eha5k4g63D8c6aVdv1ZfbPe",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/emisor?nif=P1716358E&nombre=Nombre+del+emisor&type=verifactu&id_zona_tbai=1&enviar_aeat=1" \
--header "Authorization: Bearer Eha5k4g63D8c6aVdv1ZfbPe" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor'
params = {
'nif': 'P1716358E',
'nombre': 'Nombre del emisor',
'type': 'verifactu',
'id_zona_tbai': '1',
'enviar_aeat': '1',
}
headers = {
'Authorization': 'Bearer Eha5k4g63D8c6aVdv1ZfbPe',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un emisor
requires authentication
Obtener los datos de un emisor en concreto filtrando por el ID del emisor
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer 51vdcP6bEfaVgZkheaD6348',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor/1"
);
const headers = {
"Authorization": "Bearer 51vdcP6bEfaVgZkheaD6348",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/emisor/1" \
--header "Authorization: Bearer 51vdcP6bEfaVgZkheaD6348" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/1'
headers = {
'Authorization': 'Bearer 51vdcP6bEfaVgZkheaD6348',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Example response (404):
{
"success": false,
"message": "No se encontró el emisor especificado.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Crear un nuevo emisor
requires authentication
Crea un nuevo emisor en la base de datos.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer 664faeDcbEvVa8kZP3dh1g5',
'Content-Type' => 'application/json',
],
'json' => {
"nif": "P1716358E",
"nombre": "Nombre del emisor",
"cp": "43791",
"default_webhook_id": 1,
"enviar_aeat": true
},
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor"
);
const headers = {
"Authorization": "Bearer 664faeDcbEvVa8kZP3dh1g5",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"nif": "P1716358E",
"nombre": "Nombre del emisor",
"cp": "43791",
"default_webhook_id": 1,
"enviar_aeat": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/emisor" \
--header "Authorization: Bearer 664faeDcbEvVa8kZP3dh1g5" \
--header "Content-Type: application/json" \
--data "{
\"nif\": \"P1716358E\",
\"nombre\": \"Nombre del emisor\",
\"cp\": \"43791\",
\"default_webhook_id\": 1,
\"enviar_aeat\": true
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor'
payload = {
"nif": "P1716358E",
"nombre": "Nombre del emisor",
"cp": "43791",
"default_webhook_id": 1,
"enviar_aeat": true
}
headers = {
'Authorization': 'Bearer 664faeDcbEvVa8kZP3dh1g5',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (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
}
]
}
}
Example response (409):
{
"success": false,
"message": "El NIF proporcionado ya está registrado para otro emisor.",
"error": 409,
"code": 409
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Actualizar un emisor
requires authentication
Permite actualizar el nombre y el cp de un emisor
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer bc5gE4fZ6V6PaD18e3vadkh',
'Content-Type' => 'application/json',
],
'json' => {
"nombre": "Nombre del emisor",
"cp": "12345"
},
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor/1"
);
const headers = {
"Authorization": "Bearer bc5gE4fZ6V6PaD18e3vadkh",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"nombre": "Nombre del emisor",
"cp": "12345"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request PUT \
"https://app.verifactuapi.es/api/emisor/1" \
--header "Authorization: Bearer bc5gE4fZ6V6PaD18e3vadkh" \
--header "Content-Type: application/json" \
--data "{
\"nombre\": \"Nombre del emisor\",
\"cp\": \"12345\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/1'
payload = {
"nombre": "Nombre del emisor",
"cp": "12345"
}
headers = {
'Authorization': 'Bearer bc5gE4fZ6V6PaD18e3vadkh',
'Content-Type': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (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
}
]
}
Example response (400):
{
"success": false,
"message": "Solo se permiten actualizar los campos nombre y cp. Campos no permitidos: nif",
"error": 400,
"code": 400
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Credenciales
Estos enpoints te permiten generar las credenciales de acceso para el emisor. El "username" se genera automaticamente con cualquiera de los dos metodos, no se regenera si ya existe, se mantiene el mismo.
Generar ApiKey
requires authentication
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.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1/api-key';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer fEeD6dka4cbavZ516Vg38hP',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor/1/api-key"
);
const headers = {
"Authorization": "Bearer fEeD6dka4cbavZ516Vg38hP",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/emisor/1/api-key" \
--header "Authorization: Bearer fEeD6dka4cbavZ516Vg38hP" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/1/api-key'
headers = {
'Authorization': 'Bearer fEeD6dka4cbavZ516Vg38hP',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"success": true,
"code": 200,
"message": "ApiKey generated successfully",
"username": "em.p1716358e",
"api_key": "5d4f3d3bb1284e7cb3f5b7e7881d55d22ef5c1b35d693e6e4b9e5d2293ff1c16"
}
Example response (404):
{
"success": false,
"message": "No se encontró el emisor especificado.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Generar Contraseña
requires authentication
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.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/1/credentials';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer 6Ed6fVcb4Z1ga3kha5DP8ve',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor/1/credentials"
);
const headers = {
"Authorization": "Bearer 6Ed6fVcb4Z1ga3kha5DP8ve",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/emisor/1/credentials" \
--header "Authorization: Bearer 6Ed6fVcb4Z1ga3kha5DP8ve" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/1/credentials'
headers = {
'Authorization': 'Bearer 6Ed6fVcb4Z1ga3kha5DP8ve',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"success": true,
"code": 200,
"message": "Credentials generated successfully",
"username": "em.p1716358e",
"password": "****************",
"expiration_date": "2025-07-28"
}
Example response (404):
{
"success": false,
"message": "No se encontró el emisor especificado.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Pasar a produccion
Endpoints para generar el otorgamiento, importar-lo y pasar un emisor a produccion.
Generar PDF otorgamiento
requires authentication
Generar el PDF de otorgamiento de un emisor
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/pdf-otorgamiento';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer h8kabgPE6d54Z1f3ac6vDeV',
'Content-Type' => 'application/json',
],
'json' => {
"nif": "A39200019",
"municipio": "Castellon",
"via_publica": "C/Principal",
"numero": "5",
"representante": []
},
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor/pdf-otorgamiento"
);
const headers = {
"Authorization": "Bearer h8kabgPE6d54Z1f3ac6vDeV",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"nif": "A39200019",
"municipio": "Castellon",
"via_publica": "C\/Principal",
"numero": "5",
"representante": []
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/emisor/pdf-otorgamiento" \
--header "Authorization: Bearer h8kabgPE6d54Z1f3ac6vDeV" \
--header "Content-Type: application/json" \
--data "{
\"nif\": \"A39200019\",
\"municipio\": \"Castellon\",
\"via_publica\": \"C\\/Principal\",
\"numero\": \"5\",
\"representante\": []
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/pdf-otorgamiento'
payload = {
"nif": "A39200019",
"municipio": "Castellon",
"via_publica": "C\/Principal",
"numero": "5",
"representante": []
}
headers = {
'Authorization': 'Bearer h8kabgPE6d54Z1f3ac6vDeV',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"success": true,
"message": "Otorgamiento generado correctamente",
"code": 200,
"data": {
"nombre": "Lluis Martinez Borrell",
"nif": "47859447N",
"municipio": "Ascó",
"via_publica": "C/test",
"numero": "5",
"representante": null,
"otorgamiento_base64": "pdf en base 64"
}
Example response (400):
{
"success": false,
"message": "El NIF es obligatorio.",
"error": 400,
"code": 400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Importar el PDF de otorgamiento
requires authentication
Importar el PDF de otorgamiento de un emisor y sus adjuntos
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/importar-pdf-otorgamiento';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer gfa1eP5abh36vEZ4kV6c8Dd',
'Content-Type' => 'application/json',
],
'json' => {
"nif": "A39200019",
"otorgamiento_base64": "pdf en base 64",
"adjuntos_base64": null
},
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor/importar-pdf-otorgamiento"
);
const headers = {
"Authorization": "Bearer gfa1eP5abh36vEZ4kV6c8Dd",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"nif": "A39200019",
"otorgamiento_base64": "pdf en base 64",
"adjuntos_base64": null
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/emisor/importar-pdf-otorgamiento" \
--header "Authorization: Bearer gfa1eP5abh36vEZ4kV6c8Dd" \
--header "Content-Type: application/json" \
--data "{
\"nif\": \"A39200019\",
\"otorgamiento_base64\": \"pdf en base 64\",
\"adjuntos_base64\": null
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/importar-pdf-otorgamiento'
payload = {
"nif": "A39200019",
"otorgamiento_base64": "pdf en base 64",
"adjuntos_base64": null
}
headers = {
'Authorization': 'Bearer gfa1eP5abh36vEZ4kV6c8Dd',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"success": true,
"message": "Otorgamiento importado correctamente",
"code": 200,
"data": {
"nif": "47859447N",
"nombre": "Lluis Martinez",
"otorgamiento_importado_base64": "pdf en base 64"
}
}
Example response (400):
{
"success": false,
"message": "El otorgamiento_base64 es obligatorio.",
"error": 400,
"code": 400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Pasar a produccion
requires authentication
Pasar un emisor a produccion
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/produccion/1';
$response = $client->patch(
$url,
[
'headers' => [
'Authorization' => 'Bearer cZ1v68fg34daaPb5VEe6hkD',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor/produccion/1"
);
const headers = {
"Authorization": "Bearer cZ1v68fg34daaPb5VEe6hkD",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PATCH",
headers,
}).then(response => response.json());
curl --request PATCH \
"https://app.verifactuapi.es/api/emisor/produccion/1" \
--header "Authorization: Bearer cZ1v68fg34daaPb5VEe6hkD" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/produccion/1'
headers = {
'Authorization': 'Bearer cZ1v68fg34daaPb5VEe6hkD',
'Content-Type': 'application/json'
}
response = requests.request('PATCH', url, headers=headers)
response.json()
Example response (200):
{
"success": true,
"message": "Emisor pasado a produccion correctamente",
"data": null
}
Example response (400):
{
"success": false,
"message": "No tienes nifs disponibles. Nifs comprados: 100 Nifs activos: 100",
"error": 400,
"code": 400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Registros
Verifactu
Registrar una factura de Verifactu.
requires authentication
Registra una nuevo registro de factura en la base de datos para ser procesada y enviada.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-facturacion';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer gcPa6ZEk458hVadvD3b6e1f',
'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));
const url = new URL(
"https://app.verifactuapi.es/api/alta-registro-facturacion"
);
const headers = {
"Authorization": "Bearer gcPa6ZEk458hVadvD3b6e1f",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"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"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/alta-registro-facturacion" \
--header "Authorization: Bearer gcPa6ZEk458hVadvD3b6e1f" \
--header "Content-Type: application/json" \
--data "{
\"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\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/alta-registro-facturacion'
payload = {
"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"
}
headers = {
'Authorization': 'Bearer gcPa6ZEk458hVadvD3b6e1f',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (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": "A39200019",
"NumSerieFactura": "JFER-111",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-06-07",
"HoraExpedicionFactura": null,
"FechaOperacion": null,
"DescripcionOperacion": "FACTURA",
"NombreRazonDestinatario": "Javier Aguilera Collar",
"NIFDestinatario": "50748484L",
"RefExterna": null,
"CuotaTotal": 5.5,
"ImporteTotal": 77.5,
"moneda": "EUR",
"BaseRectificada": null,
"CuotaRectificada": null,
"CuotaRecargoRectificada": null,
"tag": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": true,
"no_verifactu": false,
"tbai": false,
"face": 0,
"json": "{\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"JFER-111\",\"FechaExpedicionFactura\":\"2025-06-07\",\"NombreRazonEmisor\":\"Empresa TEST\",\"RefExterna\":null,\"TipoFactura\":1,\"DescripcionOperacion\":\"FACTURA\",\"Destinatarios\":[{\"NombreRazon\":\"Javier Aguilera Collar\",\"NIF\":\"50748484L\"}],\"Desglose\":[{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":2.1,\"TipoImpositivo\":\"21.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":10,\"PrecioUnitario\":10,\"Cantidad\":1,\"Importe\":\"10.00\"},{\"Impuesto\":1,\"ClaveRegimen\":1,\"OperacionExenta\":1,\"BaseImponibleOImporteNoSujeto\":10,\"PrecioUnitario\":10,\"Cantidad\":1},{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":2.2,\"TipoImpositivo\":\"10.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":22,\"PrecioUnitario\":22,\"Cantidad\":1,\"Importe\":\"22.00\"},{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":1.2,\"TipoImpositivo\":\"4.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":30,\"PrecioUnitario\":30,\"Cantidad\":1,\"Importe\":\"30.00\"}],\"CuotaTotal\":\"5.50\",\"ImporteTotal\":\"77.50\",\"type\":\"verifactu\",\"software_tbai_id\":null,\"id_zona_tbai\":null,\"no_verifactu\":false,\"Subsanacion\":2,\"RechazoPrevio\":1,\"FacturaSimplificada7273\":2,\"Art61d\":2,\"Macrodato\":2,\"Cupon\":2,\"verifactu\":true}",
"base64_pdf": null,
"base64_qr_pdf": null,
"url_qr": "https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR?nif=A39200019&numserie=JFER-111&fecha=07-06-2025&importe=77.5",
"qr_image": "base64 qr",
"qr_x": null,
"qr_y": null,
"qr_page": 1,
"remitenteNacional": 1,
"next_id": 2,
"IDVersion": 1,
"Subsanacion": 2,
"RechazoPrevio": 1,
"TipoFactura": 1,
"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": nul,
"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": nul,
"codigo_error_aeat": nul,
"descripcion_error_aeat": nul,
"envios_aeat_id": nul,
"envios_aeat_lineas_id": nul
}
]
}
Example response (400):
{
"success": false,
"message": "El campo IDEmisorFactura es obligatorio y no puede ser null.",
"error": 400,
"code": 400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Registrar una anulacion de Verifactu.
requires authentication
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.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/anulacion-registro-facturacion';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer 1a5vhb64gVZ6kDcdE8fe3aP',
'Content-Type' => 'application/json',
],
'json' => {
"type": "tbai",
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"FechaExpedicionFactura": "2025-11-11",
"SinRegistroPrevio": true
},
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/anulacion-registro-facturacion"
);
const headers = {
"Authorization": "Bearer 1a5vhb64gVZ6kDcdE8fe3aP",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"type": "tbai",
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX\/202412-1",
"FechaExpedicionFactura": "2025-11-11",
"SinRegistroPrevio": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/anulacion-registro-facturacion" \
--header "Authorization: Bearer 1a5vhb64gVZ6kDcdE8fe3aP" \
--header "Content-Type: application/json" \
--data "{
\"type\": \"tbai\",
\"IDEmisorFactura\": \"A39200019\",
\"NumSerieFactura\": \"AX\\/202412-1\",
\"FechaExpedicionFactura\": \"2025-11-11\",
\"SinRegistroPrevio\": true
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/anulacion-registro-facturacion'
payload = {
"type": "tbai",
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX\/202412-1",
"FechaExpedicionFactura": "2025-11-11",
"SinRegistroPrevio": true
}
headers = {
'Authorization': 'Bearer 1a5vhb64gVZ6kDcdE8fe3aP',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (201):
{
"success": true,
"message": "Anulacion creada correctamente",
"code": 201,
"data": {
"count": 1,
"items": [
{
"id": 14,
"previous_id": null,
"alta_o_anulacion": 2,
"id_registro_anulado": 1,
"modificacionOSubsanacion": null,
"id_registro_modificadoOSubsanado": null,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "JFER-111",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-06-07",
"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,
"webhook_log_id": null,
"verifactu": true,
"no_verifactu": false,
"tbai": false,
"face": 0,
"json": "{\"id_registro_anulado\":1,\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"JFER-111\",\"FechaExpedicionFactura\":\"2025-06-07\",\"HoraExpedicionFactura\":null,\"NumSerie\":null,\"NumFactura\":null,\"software_tbai_id\":null,\"id_zona_tbai\":null,\"no_verifactu\":false,\"tag\":\"-ANULACION\",\"verifactu\":true,\"estado_registro_verifactu\":\"No Registrado\",\"alta_o_anulacion\":2}",
"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
}
]
}
Example response (400):
{
"success": false,
"message": "El tipo de factura no es válido. Campo \"type\" no encontrado.",
"error": 400,
"code": 400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Anular registro Verifactu por id.
requires authentication
Anula un registro Verifactu existente en la base de datos usando el id, registra la anulacion y se procesa.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/anulacion-registro-facturacion/1';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer 1aZDPh4e658EgVac6d3bfvk',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/anulacion-registro-facturacion/1"
);
const headers = {
"Authorization": "Bearer 1aZDPh4e658EgVac6d3bfvk",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/anulacion-registro-facturacion/1" \
--header "Authorization: Bearer 1aZDPh4e658EgVac6d3bfvk" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/anulacion-registro-facturacion/1'
headers = {
'Authorization': 'Bearer 1aZDPh4e658EgVac6d3bfvk',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Example response (201):
{
"success": true,
"message": "Anulacion creada correctamente",
"code": 201,
"data": {
"count": 1,
"items": [
{
"id": 14,
"previous_id": null,
"alta_o_anulacion": 2,
"id_registro_anulado": 1,
"modificacionOSubsanacion": null,
"id_registro_modificadoOSubsanado": null,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "JFER-111",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-06-07",
"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,
"webhook_log_id": null,
"verifactu": true,
"no_verifactu": false,
"tbai": false,
"face": 0,
"json": "{\"id_registro_anulado\":1,\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"JFER-111\",\"FechaExpedicionFactura\":\"2025-06-07\",\"HoraExpedicionFactura\":null,\"NumSerie\":null,\"NumFactura\":null,\"software_tbai_id\":null,\"id_zona_tbai\":null,\"no_verifactu\":false,\"tag\":\"-ANULACION\",\"verifactu\":true,\"estado_registro_verifactu\":\"No Registrado\",\"alta_o_anulacion\":2}",
"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
}
]
}
Example response (404):
{
"success": false,
"message": "No se encontró la factura especificada.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener lista de registros Verifactu
requires authentication
Muestra una lista con todos los registros Verifactu del usuario. Añadiendo los campos del body se puede filtrar el listado.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-facturacion';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer 6h1Zd4vEkaV6P5ab3cf8egD',
'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',
'no_verifactu' => '0',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/alta-registro-facturacion"
);
const params = {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"FechaExpedicionFactura": "2025-01-01",
"NifDestinatario": "123456789",
"NombreRazonDestinatario": "Nombre del destinatario",
"ImporteTotal": "100",
"tag": "123456789",
"alta_o_anulacion": "1",
"no_verifactu": "0",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer 6h1Zd4vEkaV6P5ab3cf8egD",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/alta-registro-facturacion?IDEmisorFactura=A39200019&NumSerieFactura=AX%2F202412-1&FechaExpedicionFactura=2025-01-01&NifDestinatario=123456789&NombreRazonDestinatario=Nombre+del+destinatario&ImporteTotal=100&tag=123456789&alta_o_anulacion=1&no_verifactu=0" \
--header "Authorization: Bearer 6h1Zd4vEkaV6P5ab3cf8egD" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/alta-registro-facturacion'
params = {
'IDEmisorFactura': 'A39200019',
'NumSerieFactura': 'AX/202412-1',
'FechaExpedicionFactura': '2025-01-01',
'NifDestinatario': '123456789',
'NombreRazonDestinatario': 'Nombre del destinatario',
'ImporteTotal': '100',
'tag': '123456789',
'alta_o_anulacion': '1',
'no_verifactu': '0',
}
headers = {
'Authorization': 'Bearer 6h1Zd4vEkaV6P5ab3cf8egD',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (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": "A39200019",
"NumSerieFactura": "JFER-111",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-06-07",
"HoraExpedicionFactura": null,
"FechaOperacion": null,
"DescripcionOperacion": "FACTURA",
"NombreRazonDestinatario": "Javier Aguilera Collar",
"NIFDestinatario": "50748484L",
"RefExterna": null,
"CuotaTotal": 5.5,
"ImporteTotal": 77.5,
"moneda": "EUR",
"BaseRectificada": null,
"CuotaRectificada": null,
"CuotaRecargoRectificada": null,
"tag": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": true,
"no_verifactu": false,
"tbai": false,
"face": 0,
"json": "{\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"JFER-111\",\"FechaExpedicionFactura\":\"2025-06-07\",\"NombreRazonEmisor\":\"Empresa TEST\",\"RefExterna\":null,\"TipoFactura\":1,\"DescripcionOperacion\":\"FACTURA\",\"Destinatarios\":[{\"NombreRazon\":\"Javier Aguilera Collar\",\"NIF\":\"50748484L\"}],\"Desglose\":[{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":2.1,\"TipoImpositivo\":\"21.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":10,\"PrecioUnitario\":10,\"Cantidad\":1,\"Importe\":\"10.00\"},{\"Impuesto\":1,\"ClaveRegimen\":1,\"OperacionExenta\":1,\"BaseImponibleOImporteNoSujeto\":10,\"PrecioUnitario\":10,\"Cantidad\":1},{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":2.2,\"TipoImpositivo\":\"10.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":22,\"PrecioUnitario\":22,\"Cantidad\":1,\"Importe\":\"22.00\"},{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":1.2,\"TipoImpositivo\":\"4.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":30,\"PrecioUnitario\":30,\"Cantidad\":1,\"Importe\":\"30.00\"}],\"CuotaTotal\":\"5.50\",\"ImporteTotal\":\"77.50\",\"type\":\"verifactu\",\"software_tbai_id\":null,\"id_zona_tbai\":null,\"no_verifactu\":false,\"Subsanacion\":2,\"RechazoPrevio\":1,\"FacturaSimplificada7273\":2,\"Art61d\":2,\"Macrodato\":2,\"Cupon\":2,\"verifactu\":true}",
"base64_pdf": null,
"base64_qr_pdf": null,
"url_qr": "https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR?nif=A39200019&numserie=JFER-111&fecha=07-06-2025&importe=77.5",
"qr_image": "base64 qr",
"qr_x": null,
"qr_y": null,
"qr_page": 1,
"remitenteNacional": 1,
"next_id": 2,
"IDVersion": 1,
"Subsanacion": 2,
"RechazoPrevio": 1,
"TipoFactura": 1,
"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": "0660B66CD777BBEA44938293BEA91A35040F6284A98F90FBCA82675E87543B4E",
"Signature": null,
"Signature2": null,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": "2025-06-09T10:50:57+02:00",
"IDEmisorFacturaAnterior": null,
"NumSerieFacturaAnterior": null,
"FechaExpedicionFacturaAnterior": null,
"HuellaAnterior": null,
"incidencia": false,
"xml_aeat": "<sfLR:RegistroFactura>\n <sf:RegistroAlta>\n <sf:IDVersion>1.0</sf:IDVersion>\n <sf:IDFactura>\n <sf:IDEmisorFactura>A39200019</sf:IDEmisorFactura>\n <sf:NumSerieFactura>JFER-111</sf:NumSerieFactura>\n <sf:FechaExpedicionFactura>07-06-2025</sf:FechaExpedicionFactura>\n </sf:IDFactura>\n <sf:RefExterna></sf:RefExterna>\n <sf:NombreRazonEmisor>EMPRESA TEST</sf:NombreRazonEmisor>\n <sf:Subsanacion>N</sf:Subsanacion>\n <sf:RechazoPrevio>N</sf:RechazoPrevio>\n <sf:TipoFactura>F1</sf:TipoFactura>\n <sf:DescripcionOperacion>FACTURA</sf:DescripcionOperacion>\n <sf:FacturaSimplificadaArt7273>N</sf:FacturaSimplificadaArt7273>\n <sf:FacturaSinIdentifDestinatarioArt61d></sf:FacturaSinIdentifDestinatarioArt61d>\n <sf:Macrodato>N</sf:Macrodato>\n <sf:Destinatarios>\n <sf:IDDestinatario>\n <sf:NombreRazon>Javier Aguilera Collar</sf:NombreRazon>\n <sf:NIF>50748484L</sf:NIF>\n </sf:IDDestinatario>\n </sf:Destinatarios>\n <sf:Desglose>\n <sf:DetalleDesglose>\n <sf:Impuesto>01</sf:Impuesto>\n <sf:ClaveRegimen>01</sf:ClaveRegimen>\n <sf:CalificacionOperacion>S1</sf:CalificacionOperacion>\n <sf:TipoImpositivo>21</sf:TipoImpositivo>\n <sf:BaseImponibleOimporteNoSujeto>10</sf:BaseImponibleOimporteNoSujeto>\n <sf:CuotaRepercutida>2.1</sf:CuotaRepercutida>\n </sf:DetalleDesglose>\n <sf:DetalleDesglose>\n <sf:Impuesto>01</sf:Impuesto>\n <sf:ClaveRegimen>01</sf:ClaveRegimen>\n <sf:OperacionExenta>E1</sf:OperacionExenta>\n <sf:BaseImponibleOimporteNoSujeto>10</sf:BaseImponibleOimporteNoSujeto>\n </sf:DetalleDesglose>\n <sf:DetalleDesglose>\n <sf:Impuesto>01</sf:Impuesto>\n <sf:ClaveRegimen>01</sf:ClaveRegimen>\n <sf:CalificacionOperacion>S1</sf:CalificacionOperacion>\n <sf:TipoImpositivo>10</sf:TipoImpositivo>\n <sf:BaseImponibleOimporteNoSujeto>22</sf:BaseImponibleOimporteNoSujeto>\n <sf:CuotaRepercutida>2.2</sf:CuotaRepercutida>\n </sf:DetalleDesglose>\n <sf:DetalleDesglose>\n <sf:Impuesto>01</sf:Impuesto>\n <sf:ClaveRegimen>01</sf:ClaveRegimen>\n <sf:CalificacionOperacion>S1</sf:CalificacionOperacion>\n <sf:TipoImpositivo>4</sf:TipoImpositivo>\n <sf:BaseImponibleOimporteNoSujeto>30</sf:BaseImponibleOimporteNoSujeto>\n <sf:CuotaRepercutida>1.2</sf:CuotaRepercutida>\n </sf:DetalleDesglose>\n </sf:Desglose>\n <sf:CuotaTotal>5.5</sf:CuotaTotal>\n <sf:ImporteTotal>77.5</sf:ImporteTotal>\n <sf:Encadenamiento>\n <sf:PrimerRegistro>S</sf:PrimerRegistro>\n </sf:Encadenamiento>\n <sf:SistemaInformatico>\n <sf:NombreRazon>NEMON INVOICE TO CASH, SL</sf:NombreRazon>\n <sf:NIF>B70912613</sf:NIF>\n <sf:NombreSistemaInformatico>NEMON INVOCASH VERIFACTU API</sf:NombreSistemaInformatico>\n <sf:IdSistemaInformatico>01</sf:IdSistemaInformatico>\n <sf:Version>1.0</sf:Version>\n <sf:NumeroInstalacion>20250609104953_772645</sf:NumeroInstalacion>\n <sf:TipoUsoPosibleSoloVerifactu>S</sf:TipoUsoPosibleSoloVerifactu>\n <sf:TipoUsoPosibleMultiOT>N</sf:TipoUsoPosibleMultiOT>\n <sf:IndicadorMultiplesOT>N</sf:IndicadorMultiplesOT>\n </sf:SistemaInformatico>\n <sf:FechaHoraHusoGenRegistro>2025-06-09T10:50:57+02:00</sf:FechaHoraHusoGenRegistro>\n <sf:TipoHuella>01</sf:TipoHuella>\n <sf:Huella>0660B66CD777BBEA44938293BEA91A35040F6284A98F90FBCA82675E87543B4E</sf:Huella>\n </sf:RegistroAlta>\n</sfLR:RegistroFactura>\n",
"xml_signed": null,
"xml_aeat_response": null,
"estado_aeat": "Correcto",
"estado_registro_aeat": "Registrado",
"codigo_error_aeat": "",
"descripcion_error_aeat": "",
"envios_aeat_id": 1,
"envios_aeat_lineas_id": 1
}
],
"count": 1
},
"pagination": {
"total": 1,
"perPage": 10,
"currentPage": 1,
"lastPage": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un registro Verifactu por id
requires authentication
Muestra los datos de un registro Verifactu filtrando por el ID.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-facturacion/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Eavc36bghe18DdZVfPka546',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/alta-registro-facturacion/1"
);
const headers = {
"Authorization": "Bearer Eavc36bghe18DdZVfPka546",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/alta-registro-facturacion/1" \
--header "Authorization: Bearer Eavc36bghe18DdZVfPka546" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/alta-registro-facturacion/1'
headers = {
'Authorization': 'Bearer Eavc36bghe18DdZVfPka546',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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": "A39200019",
"NumSerieFactura": "JFER-111",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-06-07",
"HoraExpedicionFactura": null,
"FechaOperacion": null,
"DescripcionOperacion": "FACTURA",
"NombreRazonDestinatario": "Javier Aguilera Collar",
"NIFDestinatario": "50748484L",
"RefExterna": null,
"CuotaTotal": 5.5,
"ImporteTotal": 77.5,
"moneda": "EUR",
"BaseRectificada": null,
"CuotaRectificada": null,
"CuotaRecargoRectificada": null,
"tag": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": true,
"no_verifactu": false,
"tbai": false,
"face": 0,
"json": "{\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"JFER-111\",\"FechaExpedicionFactura\":\"2025-06-07\",\"NombreRazonEmisor\":\"Empresa TEST\",\"RefExterna\":null,\"TipoFactura\":1,\"DescripcionOperacion\":\"FACTURA\",\"Destinatarios\":[{\"NombreRazon\":\"Javier Aguilera Collar\",\"NIF\":\"50748484L\"}],\"Desglose\":[{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":2.1,\"TipoImpositivo\":\"21.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":10,\"PrecioUnitario\":10,\"Cantidad\":1,\"Importe\":\"10.00\"},{\"Impuesto\":1,\"ClaveRegimen\":1,\"OperacionExenta\":1,\"BaseImponibleOImporteNoSujeto\":10,\"PrecioUnitario\":10,\"Cantidad\":1},{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":2.2,\"TipoImpositivo\":\"10.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":22,\"PrecioUnitario\":22,\"Cantidad\":1,\"Importe\":\"22.00\"},{\"Impuesto\":1,\"ClaveRegimen\":1,\"CuotaRepercutida\":1.2,\"TipoImpositivo\":\"4.00\",\"CalificacionOperacion\":1,\"BaseImponibleACoste\":null,\"BaseImponibleOImporteNoSujeto\":30,\"PrecioUnitario\":30,\"Cantidad\":1,\"Importe\":\"30.00\"}],\"CuotaTotal\":\"5.50\",\"ImporteTotal\":\"77.50\",\"type\":\"verifactu\",\"software_tbai_id\":null,\"id_zona_tbai\":null,\"no_verifactu\":false,\"Subsanacion\":2,\"RechazoPrevio\":1,\"FacturaSimplificada7273\":2,\"Art61d\":2,\"Macrodato\":2,\"Cupon\":2,\"verifactu\":true}",
"base64_pdf": null,
"base64_qr_pdf": null,
"url_qr": "https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR?nif=A39200019&numserie=JFER-111&fecha=07-06-2025&importe=77.5",
"qr_image": "base64 qr",
"qr_x": null,
"qr_y": null,
"qr_page": 1,
"remitenteNacional": 1,
"next_id": 2,
"IDVersion": 1,
"Subsanacion": 2,
"RechazoPrevio": 1,
"TipoFactura": 1,
"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": "0660B66CD777BBEA44938293BEA91A35040F6284A98F90FBCA82675E87543B4E",
"Signature": null,
"Signature2": null,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": "2025-06-09T10:50:57+02:00",
"IDEmisorFacturaAnterior": null,
"NumSerieFacturaAnterior": null,
"FechaExpedicionFacturaAnterior": null,
"HuellaAnterior": null,
"incidencia": false,
"xml_aeat": "<sfLR:RegistroFactura>\n <sf:RegistroAlta>\n <sf:IDVersion>1.0</sf:IDVersion>\n <sf:IDFactura>\n <sf:IDEmisorFactura>A39200019</sf:IDEmisorFactura>\n <sf:NumSerieFactura>JFER-111</sf:NumSerieFactura>\n <sf:FechaExpedicionFactura>07-06-2025</sf:FechaExpedicionFactura>\n </sf:IDFactura>\n <sf:RefExterna></sf:RefExterna>\n <sf:NombreRazonEmisor>EMPRESA TEST</sf:NombreRazonEmisor>\n <sf:Subsanacion>N</sf:Subsanacion>\n <sf:RechazoPrevio>N</sf:RechazoPrevio>\n <sf:TipoFactura>F1</sf:TipoFactura>\n <sf:DescripcionOperacion>FACTURA</sf:DescripcionOperacion>\n <sf:FacturaSimplificadaArt7273>N</sf:FacturaSimplificadaArt7273>\n <sf:FacturaSinIdentifDestinatarioArt61d></sf:FacturaSinIdentifDestinatarioArt61d>\n <sf:Macrodato>N</sf:Macrodato>\n <sf:Destinatarios>\n <sf:IDDestinatario>\n <sf:NombreRazon>Javier Aguilera Collar</sf:NombreRazon>\n <sf:NIF>50748484L</sf:NIF>\n </sf:IDDestinatario>\n </sf:Destinatarios>\n <sf:Desglose>\n <sf:DetalleDesglose>\n <sf:Impuesto>01</sf:Impuesto>\n <sf:ClaveRegimen>01</sf:ClaveRegimen>\n <sf:CalificacionOperacion>S1</sf:CalificacionOperacion>\n <sf:TipoImpositivo>21</sf:TipoImpositivo>\n <sf:BaseImponibleOimporteNoSujeto>10</sf:BaseImponibleOimporteNoSujeto>\n <sf:CuotaRepercutida>2.1</sf:CuotaRepercutida>\n </sf:DetalleDesglose>\n <sf:DetalleDesglose>\n <sf:Impuesto>01</sf:Impuesto>\n <sf:ClaveRegimen>01</sf:ClaveRegimen>\n <sf:OperacionExenta>E1</sf:OperacionExenta>\n <sf:BaseImponibleOimporteNoSujeto>10</sf:BaseImponibleOimporteNoSujeto>\n </sf:DetalleDesglose>\n <sf:DetalleDesglose>\n <sf:Impuesto>01</sf:Impuesto>\n <sf:ClaveRegimen>01</sf:ClaveRegimen>\n <sf:CalificacionOperacion>S1</sf:CalificacionOperacion>\n <sf:TipoImpositivo>10</sf:TipoImpositivo>\n <sf:BaseImponibleOimporteNoSujeto>22</sf:BaseImponibleOimporteNoSujeto>\n <sf:CuotaRepercutida>2.2</sf:CuotaRepercutida>\n </sf:DetalleDesglose>\n <sf:DetalleDesglose>\n <sf:Impuesto>01</sf:Impuesto>\n <sf:ClaveRegimen>01</sf:ClaveRegimen>\n <sf:CalificacionOperacion>S1</sf:CalificacionOperacion>\n <sf:TipoImpositivo>4</sf:TipoImpositivo>\n <sf:BaseImponibleOimporteNoSujeto>30</sf:BaseImponibleOimporteNoSujeto>\n <sf:CuotaRepercutida>1.2</sf:CuotaRepercutida>\n </sf:DetalleDesglose>\n </sf:Desglose>\n <sf:CuotaTotal>5.5</sf:CuotaTotal>\n <sf:ImporteTotal>77.5</sf:ImporteTotal>\n <sf:Encadenamiento>\n <sf:PrimerRegistro>S</sf:PrimerRegistro>\n </sf:Encadenamiento>\n <sf:SistemaInformatico>\n <sf:NombreRazon>NEMON INVOICE TO CASH, SL</sf:NombreRazon>\n <sf:NIF>B70912613</sf:NIF>\n <sf:NombreSistemaInformatico>NEMON INVOCASH VERIFACTU API</sf:NombreSistemaInformatico>\n <sf:IdSistemaInformatico>01</sf:IdSistemaInformatico>\n <sf:Version>1.0</sf:Version>\n <sf:NumeroInstalacion>20250609104953_772645</sf:NumeroInstalacion>\n <sf:TipoUsoPosibleSoloVerifactu>S</sf:TipoUsoPosibleSoloVerifactu>\n <sf:TipoUsoPosibleMultiOT>N</sf:TipoUsoPosibleMultiOT>\n <sf:IndicadorMultiplesOT>N</sf:IndicadorMultiplesOT>\n </sf:SistemaInformatico>\n <sf:FechaHoraHusoGenRegistro>2025-06-09T10:50:57+02:00</sf:FechaHoraHusoGenRegistro>\n <sf:TipoHuella>01</sf:TipoHuella>\n <sf:Huella>0660B66CD777BBEA44938293BEA91A35040F6284A98F90FBCA82675E87543B4E</sf:Huella>\n </sf:RegistroAlta>\n</sfLR:RegistroFactura>\n",
"xml_signed": null,
"xml_aeat_response": null,
"estado_aeat": "Correcto",
"estado_registro_aeat": "Registrado",
"codigo_error_aeat": "",
"descripcion_error_aeat": "",
"envios_aeat_id": 1,
"envios_aeat_lineas_id": 1
},
"count": 1
}
}
Example response (404):
{
"success": false,
"code": 404,
"message": "No se encontró la factura especificada.",
"data": null
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
TBAI
Registrar una factura de Tbai.
requires authentication
Registra una nuevo registro de factura en la base de datos para ser procesada y enviada.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-tbai';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer 6vPhk1cd4feVbagZ85E6a3D',
'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));
const url = new URL(
"https://app.verifactuapi.es/api/alta-registro-tbai"
);
const headers = {
"Authorization": "Bearer 6vPhk1cd4feVbagZ85E6a3D",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"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"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/alta-registro-tbai" \
--header "Authorization: Bearer 6vPhk1cd4feVbagZ85E6a3D" \
--header "Content-Type: application/json" \
--data "{
\"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\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/alta-registro-tbai'
payload = {
"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"
}
headers = {
'Authorization': 'Bearer 6vPhk1cd4feVbagZ85E6a3D',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (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": "97192097P",
"NumSerieFactura": "AX/202413-131",
"NumSerie": "AX/202413",
"NumFactura": "131",
"FechaExpedicionFactura": "2025-01-09",
"HoraExpedicionFactura": "10:00:00",
"FechaOperacion": null,
"DescripcionOperacion": null,
"NombreRazonDestinatario": "IVAN SOLE MARTINEZ",
"NIFDestinatario": "39707287H",
"RefExterna": null,
"CuotaTotal": 21,
"ImporteTotal": "121",
"moneda": "EUR",
"BaseRectificada": null,
"CuotaRectificada": null,
"CuotaRecargoRectificada": null,
"tag": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": false,
"no_verifactu": false,
"tbai": true,
"face": 0,
"json": "{\"IDEmisorFactura\":\"97192097P\",\"VariosDestinatarios\":2,\"EmitidaPorTercODest\":1,\"FacturaSimplificada\":2,\"NumSerie\":\"AX\\/202413\",\"NumFactura\":\"131\",\"FechaExpedicionFactura\":\"2025-1-9\",\"HoraExpedicionFactura\":\"10:00:00\",\"NombreRazonEmisor\":\"EMPRESA TEST\",\"DescripcionFactura\":\"Test Desc Factura\",\"Destinatarios\":[{\"NombreRazon\":\"IVAN SOLE MARTINEZ\",\"NIF\":\"39707287H\",\"CodigoPostal\":\"43791\",\"Direccion\":\"C\\/Mirador, 3\"}],\"DetallesFactura\":[{\"Descripcion\":\"Test\",\"Unidades\":10,\"PrecioPorUnidad\":10,\"SubTotal\":100,\"ImporteTotal\":121}],\"Desglose\":[{\"TipoNoExenta\":1,\"TipoImpositivo\":\"21\",\"BaseImponibleOImporteNoSujeto\":\"100\",\"CuotaRepercutida\":\"21\"}],\"Claves\":[1,null,null],\"CuotaTotal\":21,\"ImporteTotal\":121,\"type\":\"tbai\",\"NumSerieFactura\":\"AX\\/202413-131\",\"software_tbai_id\":1,\"id_zona_tbai\":1,\"no_verifactu\":false,\"FacturaEmitidaSustSimp\":2,\"remitenteNacional\":true,\"tbai\":true}",
"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": 4,
"IDVersion": 1,
"VariosDestinatarios": 2,
"EmitidaPorTercODest": 1,
"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": "No Registrado",
"estado_registro_tbai": null,
"codigo_error_tbai": null,
"descripcion_error_tbai": null,
"envio_tbai_id": null,
"NumSerieDispositivo": null
}
]
}
Example response (400):
{
"success": false,
"message": "El campo IDEmisorFactura es obligatorio y no puede ser null.",
"error": 400,
"code": 400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Registrar una anulacion de Tbai.
requires authentication
Registra una anulacion de registro Tbai en la base de datos para ser procesada y enviada.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/anulacion-registro-tbai';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer a8h3a654PbEkf6Vc1DgedvZ',
'Content-Type' => 'application/json',
],
'json' => {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"FechaExpedicionFactura": "2025-11-11"
},
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/anulacion-registro-tbai"
);
const headers = {
"Authorization": "Bearer a8h3a654PbEkf6Vc1DgedvZ",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX\/202412-1",
"FechaExpedicionFactura": "2025-11-11"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/anulacion-registro-tbai" \
--header "Authorization: Bearer a8h3a654PbEkf6Vc1DgedvZ" \
--header "Content-Type: application/json" \
--data "{
\"IDEmisorFactura\": \"A39200019\",
\"NumSerieFactura\": \"AX\\/202412-1\",
\"FechaExpedicionFactura\": \"2025-11-11\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/anulacion-registro-tbai'
payload = {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX\/202412-1",
"FechaExpedicionFactura": "2025-11-11"
}
headers = {
'Authorization': 'Bearer a8h3a654PbEkf6Vc1DgedvZ',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (201):
{
"success": true,
"message": "Anulacion creada correctamente",
"code": 201,
"data": {
"count": 1,
"items": [
{
"id": 13,
"previous_id": null,
"alta_o_anulacion": 2,
"id_registro_anulado": 4,
"modificacionOSubsanacion": null,
"id_registro_modificadoOSubsanado": null,
"IDEmisorFactura": "97192097P",
"NumSerieFactura": "AX/202413-132",
"NumSerie": "AX/202413",
"NumFactura": "132",
"FechaExpedicionFactura": "2025-01-09",
"HoraExpedicionFactura": "10:00:00",
"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,
"webhook_log_id": null,
"verifactu": false,
"no_verifactu": false,
"tbai": true,
"face": 0,
"json": "{\"id_registro_anulado\":4,\"IDEmisorFactura\":\"97192097P\",\"NumSerieFactura\":\"AX\\/202413-132\",\"FechaExpedicionFactura\":\"2025-01-09\",\"HoraExpedicionFactura\":\"10:00:00\",\"NumSerie\":\"AX\\/202413\",\"NumFactura\":\"132\",\"software_tbai_id\":1,\"id_zona_tbai\":1,\"no_verifactu\":false,\"tag\":\"-ANULACION\",\"tbai\":true,\"estado_registro_tbai\":\"No Registrado\",\"alta_o_anulacion\":2}",
"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,
"EmitidaPorTercODest": 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
}
]
}
Example response (400):
{
"success": false,
"message": "El tipo de factura no es válido. Campo \"type\" no encontrado.",
"error": 400,
"code": 400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Anular registro Tbai por id.
requires authentication
Anula un registro Tbai existente en la base de datos usando el id, registra la anulacion y se procesa.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/anulacion-registro-tbai/1';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Z4ekV386aDhc6f5bEPdgav1',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/anulacion-registro-tbai/1"
);
const headers = {
"Authorization": "Bearer Z4ekV386aDhc6f5bEPdgav1",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/anulacion-registro-tbai/1" \
--header "Authorization: Bearer Z4ekV386aDhc6f5bEPdgav1" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/anulacion-registro-tbai/1'
headers = {
'Authorization': 'Bearer Z4ekV386aDhc6f5bEPdgav1',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Example response (201):
{
"success": true,
"message": "Anulacion creada correctamente",
"code": 201,
"data": {
"count": 1,
"items": [
{
"id": 13,
"previous_id": null,
"alta_o_anulacion": 2,
"id_registro_anulado": 4,
"modificacionOSubsanacion": null,
"id_registro_modificadoOSubsanado": null,
"IDEmisorFactura": "97192097P",
"NumSerieFactura": "AX/202413-132",
"NumSerie": "AX/202413",
"NumFactura": "132",
"FechaExpedicionFactura": "2025-01-09",
"HoraExpedicionFactura": "10:00:00",
"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,
"webhook_log_id": null,
"verifactu": false,
"no_verifactu": false,
"tbai": true,
"face": 0,
"json": "{\"id_registro_anulado\":4,\"IDEmisorFactura\":\"97192097P\",\"NumSerieFactura\":\"AX\\/202413-132\",\"FechaExpedicionFactura\":\"2025-01-09\",\"HoraExpedicionFactura\":\"10:00:00\",\"NumSerie\":\"AX\\/202413\",\"NumFactura\":\"132\",\"software_tbai_id\":1,\"id_zona_tbai\":1,\"no_verifactu\":false,\"tag\":\"-ANULACION\",\"tbai\":true,\"estado_registro_tbai\":\"No Registrado\",\"alta_o_anulacion\":2}",
"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,
"EmitidaPorTercODest": 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
}
]
}
Example response (404):
{
"success": false,
"message": "No se encontró la factura especificada.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener lista de registros TBAI
requires authentication
Muestra una lista con todos los registros TBAI del usuario. Añadiendo los campos del body se puede filtrar el listado.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-tbai';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer vVdb6PgE18haakfcDe5643Z',
'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));
const url = new URL(
"https://app.verifactuapi.es/api/alta-registro-tbai"
);
const params = {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"FechaExpedicionFactura": "2025-01-01",
"NifDestinatario": "123456789",
"NombreRazonDestinatario": "Nombre del destinatario",
"ImporteTotal": "100",
"tag": "123456789",
"alta_o_anulacion": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer vVdb6PgE18haakfcDe5643Z",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/alta-registro-tbai?IDEmisorFactura=A39200019&NumSerieFactura=AX%2F202412-1&FechaExpedicionFactura=2025-01-01&NifDestinatario=123456789&NombreRazonDestinatario=Nombre+del+destinatario&ImporteTotal=100&tag=123456789&alta_o_anulacion=1" \
--header "Authorization: Bearer vVdb6PgE18haakfcDe5643Z" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/alta-registro-tbai'
params = {
'IDEmisorFactura': 'A39200019',
'NumSerieFactura': 'AX/202412-1',
'FechaExpedicionFactura': '2025-01-01',
'NifDestinatario': '123456789',
'NombreRazonDestinatario': 'Nombre del destinatario',
'ImporteTotal': '100',
'tag': '123456789',
'alta_o_anulacion': '1',
}
headers = {
'Authorization': 'Bearer vVdb6PgE18haakfcDe5643Z',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (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": "97192097P",
"NumSerieFactura": "AX/202413-131",
"NumSerie": "AX/202413",
"NumFactura": "131",
"FechaExpedicionFactura": "2025-01-09",
"HoraExpedicionFactura": "10:00:00",
"FechaOperacion": null,
"DescripcionOperacion": null,
"NombreRazonDestinatario": "IVAN SOLE MARTINEZ",
"NIFDestinatario": "39707287H",
"RefExterna": null,
"CuotaTotal": 21,
"ImporteTotal": "121",
"moneda": "EUR",
"BaseRectificada": null,
"CuotaRectificada": null,
"CuotaRecargoRectificada": null,
"tag": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": false,
"no_verifactu": false,
"tbai": true,
"face": 0,
"json": "{\"IDEmisorFactura\":\"97192097P\",\"VariosDestinatarios\":2,\"EmitidaPorTercODest\":1,\"FacturaSimplificada\":2,\"NumSerie\":\"AX\\/202413\",\"NumFactura\":\"131\",\"FechaExpedicionFactura\":\"2025-1-9\",\"HoraExpedicionFactura\":\"10:00:00\",\"NombreRazonEmisor\":\"EMPRESA TEST\",\"DescripcionFactura\":\"Test Desc Factura\",\"Destinatarios\":[{\"NombreRazon\":\"IVAN SOLE MARTINEZ\",\"NIF\":\"39707287H\",\"CodigoPostal\":\"43791\",\"Direccion\":\"C\\/Mirador, 3\"}],\"DetallesFactura\":[{\"Descripcion\":\"Test\",\"Unidades\":10,\"PrecioPorUnidad\":10,\"SubTotal\":100,\"ImporteTotal\":121}],\"Desglose\":[{\"TipoNoExenta\":1,\"TipoImpositivo\":\"21\",\"BaseImponibleOImporteNoSujeto\":\"100\",\"CuotaRepercutida\":\"21\"}],\"Claves\":[1,null,null],\"CuotaTotal\":21,\"ImporteTotal\":121,\"type\":\"tbai\",\"NumSerieFactura\":\"AX\\/202413-131\",\"software_tbai_id\":1,\"id_zona_tbai\":1,\"no_verifactu\":false,\"FacturaEmitidaSustSimp\":2,\"remitenteNacional\":true,\"tbai\":true}",
"base64_pdf": null,
"base64_qr_pdf": null,
"url_qr": "https://pruebas-ticketbai.araba.eus/tbai/qrtbai/?id=TBAI-97192097P-090125-hDQ7o5Clx+GDc-009&s=AX/202413&nf=131&i=121&cr=254",
"qr_image": "base64 qr",
"qr_x": null,
"qr_y": null,
"qr_page": 1,
"remitenteNacional": 1,
"next_id": 4,
"IDVersion": 1,
"VariosDestinatarios": 2,
"EmitidaPorTercODest": 1,
"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 version=\"1.0\" encoding=\"UTF-8\"?>\n<T:TicketBai xmlns:T=\"urn:ticketbai:emision\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.w3.org/2001/XMLSchema ticketbai.xsd\">\n<Cabecera>\n <IDVersionTBAI>1.2</IDVersionTBAI>\n</Cabecera>\n<Sujetos>\n <Emisor>\n <NIF>97192097P</NIF>\n <ApellidosNombreRazonSocial>TBAI TEST</ApellidosNombreRazonSocial>\n </Emisor>\n <Destinatarios>\n <IDDestinatario>\n <NIF>39707287H</NIF>\n <ApellidosNombreRazonSocial>IVAN SOLE MARTINEZ</ApellidosNombreRazonSocial>\n <CodigoPostal>43791</CodigoPostal>\n <Direccion>C/Mirador, 3</Direccion>\n </IDDestinatario>\n </Destinatarios>\n <VariosDestinatarios>N</VariosDestinatarios>\n <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>\n</Sujetos>\n<Factura>\n <CabeceraFactura>\n <SerieFactura>AX/202413</SerieFactura>\n <NumFactura>131</NumFactura>\n <FechaExpedicionFactura>09-01-2025</FechaExpedicionFactura>\n <HoraExpedicionFactura>10:00:00</HoraExpedicionFactura>\n <FacturaSimplificada>N</FacturaSimplificada>\n </CabeceraFactura>\n <DatosFactura>\n <DescripcionFactura>Test Desc Factura</DescripcionFactura>\n <DetallesFactura>\n <IDDetalleFactura>\n <DescripcionDetalle>Test</DescripcionDetalle>\n <Cantidad>10</Cantidad>\n <ImporteUnitario>10</ImporteUnitario>\n <ImporteTotal>121</ImporteTotal>\n </IDDetalleFactura>\n </DetallesFactura>\n <ImporteTotalFactura>121</ImporteTotalFactura>\n <Claves>\n <IDClave>\n <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>\n </IDClave>\n </Claves>\n </DatosFactura>\n <TipoDesglose>\n <DesgloseFactura>\n <Sujeta>\n <NoExenta>\n <DetalleNoExenta>\n <TipoNoExenta>S1</TipoNoExenta>\n <DesgloseIVA>\n <DetalleIVA>\n <BaseImponible>100</BaseImponible>\n <TipoImpositivo>21</TipoImpositivo>\n <CuotaImpuesto>21</CuotaImpuesto>\n </DetalleIVA>\n </DesgloseIVA>\n </DetalleNoExenta>\n </NoExenta>\n </Sujeta>\n </DesgloseFactura>\n </TipoDesglose>\n</Factura>\n<HuellaTBAI>\n <Software>\n <LicenciaTBAI>TBAIARCFKHKMdKM00968</LicenciaTBAI>\n <EntidadDesarrolladora>\n <NIF>B70912613</NIF>\n </EntidadDesarrolladora>\n <Nombre>NEMON INVOCASH</Nombre>\n <Version>1.0</Version>\n </Software>\n</HuellaTBAI>\n</T:TicketBai>",
"xml_signed": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<T:TicketBai xmlns:T=\"urn:ticketbai:emision\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.w3.org/2001/XMLSchema ticketbai.xsd\">\n<Cabecera>\n <IDVersionTBAI>1.2</IDVersionTBAI>\n</Cabecera>\n<Sujetos>\n <Emisor>\n <NIF>97192097P</NIF>\n <ApellidosNombreRazonSocial>TBAI TEST</ApellidosNombreRazonSocial>\n </Emisor>\n <Destinatarios>\n <IDDestinatario>\n <NIF>39707287H</NIF>\n <ApellidosNombreRazonSocial>IVAN SOLE MARTINEZ</ApellidosNombreRazonSocial>\n <CodigoPostal>43791</CodigoPostal>\n <Direccion>C/Mirador, 3</Direccion>\n </IDDestinatario>\n </Destinatarios>\n <VariosDestinatarios>N</VariosDestinatarios>\n <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>\n</Sujetos>\n<Factura>\n <CabeceraFactura>\n <SerieFactura>AX/202413</SerieFactura>\n <NumFactura>131</NumFactura>\n <FechaExpedicionFactura>09-01-2025</FechaExpedicionFactura>\n <HoraExpedicionFactura>10:00:00</HoraExpedicionFactura>\n <FacturaSimplificada>N</FacturaSimplificada>\n </CabeceraFactura>\n <DatosFactura>\n <DescripcionFactura>Test Desc Factura</DescripcionFactura>\n <DetallesFactura>\n <IDDetalleFactura>\n <DescripcionDetalle>Test</DescripcionDetalle>\n <Cantidad>10</Cantidad>\n <ImporteUnitario>10</ImporteUnitario>\n <ImporteTotal>121</ImporteTotal>\n </IDDetalleFactura>\n </DetallesFactura>\n <ImporteTotalFactura>121</ImporteTotalFactura>\n <Claves>\n <IDClave>\n <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>\n </IDClave>\n </Claves>\n </DatosFactura>\n <TipoDesglose>\n <DesgloseFactura>\n <Sujeta>\n <NoExenta>\n <DetalleNoExenta>\n <TipoNoExenta>S1</TipoNoExenta>\n <DesgloseIVA>\n <DetalleIVA>\n <BaseImponible>100</BaseImponible>\n <TipoImpositivo>21</TipoImpositivo>\n <CuotaImpuesto>21</CuotaImpuesto>\n </DetalleIVA>\n </DesgloseIVA>\n </DetalleNoExenta>\n </NoExenta>\n </Sujeta>\n </DesgloseFactura>\n </TipoDesglose>\n</Factura>\n<HuellaTBAI>\n <Software>\n <LicenciaTBAI>TBAIARCFKHKMdKM00968</LicenciaTBAI>\n <EntidadDesarrolladora>\n <NIF>B70912613</NIF>\n </EntidadDesarrolladora>\n <Nombre>NEMON INVOCASH</Nombre>\n <Version>1.0</Version>\n </Software>\n</HuellaTBAI>\n<ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Id=\"id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\">\n <ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n <ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/>\n <ds:Reference Id=\"ref-ebcb58e7-52a2-56ca-1bb1-c885502e2d4f\" Type=\"http://www.w3.org/2000/09/xmldsig#Object\" URI=\"\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>26o7LtPw8CSOxfOkTNcqUw/2AN+WgkHH/nryMV5ko28=</ds:DigestValue></ds:Reference><ds:Reference URI=\"#xades-id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\" Type=\"http://uri.etsi.org/01903#SignedProperties\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>ncZ/xzLUxswfsPAJ3OiV+7ElPC7u6ZGzhYqN0v4nj5o=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue Id=\"value-id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\">hDQ7o5Clx+GDcxyDmVVCjYROGlXmQsU6DmDKtQA+7nM2eGDC2patNgzxu537vXwbr6EyNhgKWoPwVDvskISmBJJhdgZzVew6dNKdCAp+TtFbKKDerV/iQdt6jMuXYe9twgIEnQt05PUdoSDH0CKGKLO0MerZy25Mskrr98C1iYQSev3zOvLuC4T5zoe7gxvoCXF9P7csVOn0oUHF1XFrSXxCdsgHab/TDmDnsxUsg8ZkfMUzrzhpRbKWI9E2ttmy6ZRiLB3y4GRW0Dn8+D40UbUlZVsL8LPg+w2QiQLN5i0QpyQ4VjU93HvRgXn8bW+hvqphZygdnlE69O5CWxWkZg==</ds:SignatureValue>\n<ds:KeyInfo><ds:X509Data><ds:X509Certificate>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</ds:X509Certificate></ds:X509Data></ds:KeyInfo><ds:Object xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\"><xades:QualifyingProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Target=\"#id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\"/><xades:SignedProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Id=\"xades-id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\"><xades:SignedSignatureProperties xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:SigningTime>2025-06-09T14:06:19Z</xades:SigningTime><xades:SigningCertificate xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:Cert xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:CertDigest xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:DigestMethod xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">p1TLBCwrGRil/Bh1ZwPzfRAr0U0=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509IssuerName xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">CN=AC Representación,OU=CERES,O=FNMT-RCM,C=ES</ds:X509IssuerName><ds:X509SerialNumber xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">1A5E66764645C24C666FF7B0D5103A45</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate><xades:SignaturePolicyIdentifier xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:SignaturePolicyId xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:SigPolicyId><xades:Identifier>https://ticketbai.araba.eus/tbai/sinadura/</xades:Identifier></xades:SigPolicyId><xades:SigPolicyHash xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:DigestMethod xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">4Vk3uExj7tGn9DyUCPDsV9HRmK6KZfYdRiW3StOjcQA=</ds:DigestValue></xades:SigPolicyHash></xades:SignaturePolicyId></xades:SignaturePolicyIdentifier></xades:SignedSignatureProperties></xades:SignedProperties></ds:Object></ds:Signature></T:TicketBai>\n",
"SignatureValue": "hDQ7o5Clx+GDcxyDmVVCjYROGlXmQsU6DmDKtQA+7nM2eGDC2patNgzxu537vXwbr6EyNhgKWoPwVDvskISmBJJhdgZzVew6dNKdCAp+TtFbKKDerV/iQdt6jMuXYe9twgIEnQt05PUdoSDH0CKGKLO0MerZy25Mskrr98C1iYQSev3zOvLuC4T5zoe7gxvoCXF9P7csVOn0oUHF1XFrSXxCdsgHab/TDmDnsxUsg8ZkfMUzrzhpRbKWI9E2ttmy6ZRiLB3y4GRW0Dn8+D40UbUlZVsL8LPg+w2QiQLN5i0QpyQ4VjU93HvRgXn8bW+hvqphZygdnlE69O5CWxWkZg==",
"xml_tbai_response": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns2:TicketBaiResponse xmlns:ns2=\"urn:ticketbai:emision\"><Salida><IdentificadorTBAI>TBAI-97192097P-090125-hDQ7o5Clx+GDc-009</IdentificadorTBAI><FechaRecepcion>09-06-2025 16:06:21</FechaRecepcion><Estado>00</Estado><Descripcion>Recibido</Descripcion><Azalpena>Jasota</Azalpena><ResultadosValidacion><Codigo>016</Codigo><Descripcion>AVISO: Fecha de recepción muy posterior a Fecha de expedición </Descripcion><Azalpena>OHARRA: Jasotze data bidaltze data baino askoz geroagokoa</Azalpena></ResultadosValidacion><ResultadosValidacion><Codigo>007</Codigo><Descripcion>AVISO: Certificado remitente no válido para emisor factura</Descripcion><Azalpena>OHARRA: Igorlearen ziurtagiria ez da baliozkoa fakturaren jaulkitzailearentzat</Azalpena></ResultadosValidacion></Salida></ns2:TicketBaiResponse>",
"estado_tbai": "Recibido",
"estado_registro_tbai": "Registrado",
"codigo_error_tbai": "016, 007",
"descripcion_error_tbai": "AVISO: Fecha de recepción muy posterior a Fecha de expedición , AVISO: Certificado remitente no válido para emisor factura",
"envio_tbai_id": 1,
"NumSerieDispositivo": null
}
],
"count": 1
},
"pagination": {
"total": 1,
"perPage": 10,
"currentPage": 1,
"lastPage": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un registro TBAI por id
requires authentication
Muestra los datos de un registro TBAI filtrando por el ID.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-tbai/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Z5Eb8vDVa6dcP1ka4gf6h3e',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/alta-registro-tbai/1"
);
const headers = {
"Authorization": "Bearer Z5Eb8vDVa6dcP1ka4gf6h3e",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/alta-registro-tbai/1" \
--header "Authorization: Bearer Z5Eb8vDVa6dcP1ka4gf6h3e" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/alta-registro-tbai/1'
headers = {
'Authorization': 'Bearer Z5Eb8vDVa6dcP1ka4gf6h3e',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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": "97192097P",
"NumSerieFactura": "AX/202413-131",
"NumSerie": "AX/202413",
"NumFactura": "131",
"FechaExpedicionFactura": "2025-01-09",
"HoraExpedicionFactura": "10:00:00",
"FechaOperacion": null,
"DescripcionOperacion": null,
"NombreRazonDestinatario": "IVAN SOLE MARTINEZ",
"NIFDestinatario": "39707287H",
"RefExterna": null,
"CuotaTotal": 21,
"ImporteTotal": "121",
"moneda": "EUR",
"BaseRectificada": null,
"CuotaRectificada": null,
"CuotaRecargoRectificada": null,
"tag": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": false,
"no_verifactu": false,
"tbai": true,
"face": 0,
"json": "{\"IDEmisorFactura\":\"97192097P\",\"VariosDestinatarios\":2,\"EmitidaPorTercODest\":1,\"FacturaSimplificada\":2,\"NumSerie\":\"AX\\/202413\",\"NumFactura\":\"131\",\"FechaExpedicionFactura\":\"2025-1-9\",\"HoraExpedicionFactura\":\"10:00:00\",\"NombreRazonEmisor\":\"EMPRESA TEST\",\"DescripcionFactura\":\"Test Desc Factura\",\"Destinatarios\":[{\"NombreRazon\":\"IVAN SOLE MARTINEZ\",\"NIF\":\"39707287H\",\"CodigoPostal\":\"43791\",\"Direccion\":\"C\\/Mirador, 3\"}],\"DetallesFactura\":[{\"Descripcion\":\"Test\",\"Unidades\":10,\"PrecioPorUnidad\":10,\"SubTotal\":100,\"ImporteTotal\":121}],\"Desglose\":[{\"TipoNoExenta\":1,\"TipoImpositivo\":\"21\",\"BaseImponibleOImporteNoSujeto\":\"100\",\"CuotaRepercutida\":\"21\"}],\"Claves\":[1,null,null],\"CuotaTotal\":21,\"ImporteTotal\":121,\"type\":\"tbai\",\"NumSerieFactura\":\"AX\\/202413-131\",\"software_tbai_id\":1,\"id_zona_tbai\":1,\"no_verifactu\":false,\"FacturaEmitidaSustSimp\":2,\"remitenteNacional\":true,\"tbai\":true}",
"base64_pdf": null,
"base64_qr_pdf": null,
"url_qr": "https://pruebas-ticketbai.araba.eus/tbai/qrtbai/?id=TBAI-97192097P-090125-hDQ7o5Clx+GDc-009&s=AX/202413&nf=131&i=121&cr=254",
"qr_image": "base64 qr",
"qr_x": null,
"qr_y": null,
"qr_page": 1,
"remitenteNacional": 1,
"next_id": 4,
"IDVersion": 1,
"VariosDestinatarios": 2,
"EmitidaPorTercODest": 1,
"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 version=\"1.0\" encoding=\"UTF-8\"?>\n<T:TicketBai xmlns:T=\"urn:ticketbai:emision\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.w3.org/2001/XMLSchema ticketbai.xsd\">\n<Cabecera>\n <IDVersionTBAI>1.2</IDVersionTBAI>\n</Cabecera>\n<Sujetos>\n <Emisor>\n <NIF>97192097P</NIF>\n <ApellidosNombreRazonSocial>TBAI TEST</ApellidosNombreRazonSocial>\n </Emisor>\n <Destinatarios>\n <IDDestinatario>\n <NIF>39707287H</NIF>\n <ApellidosNombreRazonSocial>IVAN SOLE MARTINEZ</ApellidosNombreRazonSocial>\n <CodigoPostal>43791</CodigoPostal>\n <Direccion>C/Mirador, 3</Direccion>\n </IDDestinatario>\n </Destinatarios>\n <VariosDestinatarios>N</VariosDestinatarios>\n <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>\n</Sujetos>\n<Factura>\n <CabeceraFactura>\n <SerieFactura>AX/202413</SerieFactura>\n <NumFactura>131</NumFactura>\n <FechaExpedicionFactura>09-01-2025</FechaExpedicionFactura>\n <HoraExpedicionFactura>10:00:00</HoraExpedicionFactura>\n <FacturaSimplificada>N</FacturaSimplificada>\n </CabeceraFactura>\n <DatosFactura>\n <DescripcionFactura>Test Desc Factura</DescripcionFactura>\n <DetallesFactura>\n <IDDetalleFactura>\n <DescripcionDetalle>Test</DescripcionDetalle>\n <Cantidad>10</Cantidad>\n <ImporteUnitario>10</ImporteUnitario>\n <ImporteTotal>121</ImporteTotal>\n </IDDetalleFactura>\n </DetallesFactura>\n <ImporteTotalFactura>121</ImporteTotalFactura>\n <Claves>\n <IDClave>\n <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>\n </IDClave>\n </Claves>\n </DatosFactura>\n <TipoDesglose>\n <DesgloseFactura>\n <Sujeta>\n <NoExenta>\n <DetalleNoExenta>\n <TipoNoExenta>S1</TipoNoExenta>\n <DesgloseIVA>\n <DetalleIVA>\n <BaseImponible>100</BaseImponible>\n <TipoImpositivo>21</TipoImpositivo>\n <CuotaImpuesto>21</CuotaImpuesto>\n </DetalleIVA>\n </DesgloseIVA>\n </DetalleNoExenta>\n </NoExenta>\n </Sujeta>\n </DesgloseFactura>\n </TipoDesglose>\n</Factura>\n<HuellaTBAI>\n <Software>\n <LicenciaTBAI>TBAIARCFKHKMdKM00968</LicenciaTBAI>\n <EntidadDesarrolladora>\n <NIF>B70912613</NIF>\n </EntidadDesarrolladora>\n <Nombre>NEMON INVOCASH</Nombre>\n <Version>1.0</Version>\n </Software>\n</HuellaTBAI>\n</T:TicketBai>",
"xml_signed": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<T:TicketBai xmlns:T=\"urn:ticketbai:emision\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.w3.org/2001/XMLSchema ticketbai.xsd\">\n<Cabecera>\n <IDVersionTBAI>1.2</IDVersionTBAI>\n</Cabecera>\n<Sujetos>\n <Emisor>\n <NIF>97192097P</NIF>\n <ApellidosNombreRazonSocial>TBAI TEST</ApellidosNombreRazonSocial>\n </Emisor>\n <Destinatarios>\n <IDDestinatario>\n <NIF>39707287H</NIF>\n <ApellidosNombreRazonSocial>IVAN SOLE MARTINEZ</ApellidosNombreRazonSocial>\n <CodigoPostal>43791</CodigoPostal>\n <Direccion>C/Mirador, 3</Direccion>\n </IDDestinatario>\n </Destinatarios>\n <VariosDestinatarios>N</VariosDestinatarios>\n <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>\n</Sujetos>\n<Factura>\n <CabeceraFactura>\n <SerieFactura>AX/202413</SerieFactura>\n <NumFactura>131</NumFactura>\n <FechaExpedicionFactura>09-01-2025</FechaExpedicionFactura>\n <HoraExpedicionFactura>10:00:00</HoraExpedicionFactura>\n <FacturaSimplificada>N</FacturaSimplificada>\n </CabeceraFactura>\n <DatosFactura>\n <DescripcionFactura>Test Desc Factura</DescripcionFactura>\n <DetallesFactura>\n <IDDetalleFactura>\n <DescripcionDetalle>Test</DescripcionDetalle>\n <Cantidad>10</Cantidad>\n <ImporteUnitario>10</ImporteUnitario>\n <ImporteTotal>121</ImporteTotal>\n </IDDetalleFactura>\n </DetallesFactura>\n <ImporteTotalFactura>121</ImporteTotalFactura>\n <Claves>\n <IDClave>\n <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>\n </IDClave>\n </Claves>\n </DatosFactura>\n <TipoDesglose>\n <DesgloseFactura>\n <Sujeta>\n <NoExenta>\n <DetalleNoExenta>\n <TipoNoExenta>S1</TipoNoExenta>\n <DesgloseIVA>\n <DetalleIVA>\n <BaseImponible>100</BaseImponible>\n <TipoImpositivo>21</TipoImpositivo>\n <CuotaImpuesto>21</CuotaImpuesto>\n </DetalleIVA>\n </DesgloseIVA>\n </DetalleNoExenta>\n </NoExenta>\n </Sujeta>\n </DesgloseFactura>\n </TipoDesglose>\n</Factura>\n<HuellaTBAI>\n <Software>\n <LicenciaTBAI>TBAIARCFKHKMdKM00968</LicenciaTBAI>\n <EntidadDesarrolladora>\n <NIF>B70912613</NIF>\n </EntidadDesarrolladora>\n <Nombre>NEMON INVOCASH</Nombre>\n <Version>1.0</Version>\n </Software>\n</HuellaTBAI>\n<ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Id=\"id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\">\n <ds:SignedInfo><ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n <ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/>\n <ds:Reference Id=\"ref-ebcb58e7-52a2-56ca-1bb1-c885502e2d4f\" Type=\"http://www.w3.org/2000/09/xmldsig#Object\" URI=\"\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>26o7LtPw8CSOxfOkTNcqUw/2AN+WgkHH/nryMV5ko28=</ds:DigestValue></ds:Reference><ds:Reference URI=\"#xades-id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\" Type=\"http://uri.etsi.org/01903#SignedProperties\"><ds:Transforms><ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/></ds:Transforms><ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue>ncZ/xzLUxswfsPAJ3OiV+7ElPC7u6ZGzhYqN0v4nj5o=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue Id=\"value-id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\">hDQ7o5Clx+GDcxyDmVVCjYROGlXmQsU6DmDKtQA+7nM2eGDC2patNgzxu537vXwbr6EyNhgKWoPwVDvskISmBJJhdgZzVew6dNKdCAp+TtFbKKDerV/iQdt6jMuXYe9twgIEnQt05PUdoSDH0CKGKLO0MerZy25Mskrr98C1iYQSev3zOvLuC4T5zoe7gxvoCXF9P7csVOn0oUHF1XFrSXxCdsgHab/TDmDnsxUsg8ZkfMUzrzhpRbKWI9E2ttmy6ZRiLB3y4GRW0Dn8+D40UbUlZVsL8LPg+w2QiQLN5i0QpyQ4VjU93HvRgXn8bW+hvqphZygdnlE69O5CWxWkZg==</ds:SignatureValue>\n<ds:KeyInfo><ds:X509Data><ds:X509Certificate>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</ds:X509Certificate></ds:X509Data></ds:KeyInfo><ds:Object xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\"><xades:QualifyingProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Target=\"#id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\"/><xades:SignedProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\" Id=\"xades-id-095b23d5-f0cf-6d34-a7a9-a559aa37e644\"><xades:SignedSignatureProperties xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:SigningTime>2025-06-09T14:06:19Z</xades:SigningTime><xades:SigningCertificate xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:Cert xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:CertDigest xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:DigestMethod xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><ds:DigestValue xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">p1TLBCwrGRil/Bh1ZwPzfRAr0U0=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509IssuerName xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">CN=AC Representación,OU=CERES,O=FNMT-RCM,C=ES</ds:X509IssuerName><ds:X509SerialNumber xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">1A5E66764645C24C666FF7B0D5103A45</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate><xades:SignaturePolicyIdentifier xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:SignaturePolicyId xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><xades:SigPolicyId><xades:Identifier>https://ticketbai.araba.eus/tbai/sinadura/</xades:Identifier></xades:SigPolicyId><xades:SigPolicyHash xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:DigestMethod xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/><ds:DigestValue xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">4Vk3uExj7tGn9DyUCPDsV9HRmK6KZfYdRiW3StOjcQA=</ds:DigestValue></xades:SigPolicyHash></xades:SignaturePolicyId></xades:SignaturePolicyIdentifier></xades:SignedSignatureProperties></xades:SignedProperties></ds:Object></ds:Signature></T:TicketBai>\n",
"SignatureValue": "hDQ7o5Clx+GDcxyDmVVCjYROGlXmQsU6DmDKtQA+7nM2eGDC2patNgzxu537vXwbr6EyNhgKWoPwVDvskISmBJJhdgZzVew6dNKdCAp+TtFbKKDerV/iQdt6jMuXYe9twgIEnQt05PUdoSDH0CKGKLO0MerZy25Mskrr98C1iYQSev3zOvLuC4T5zoe7gxvoCXF9P7csVOn0oUHF1XFrSXxCdsgHab/TDmDnsxUsg8ZkfMUzrzhpRbKWI9E2ttmy6ZRiLB3y4GRW0Dn8+D40UbUlZVsL8LPg+w2QiQLN5i0QpyQ4VjU93HvRgXn8bW+hvqphZygdnlE69O5CWxWkZg==",
"xml_tbai_response": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns2:TicketBaiResponse xmlns:ns2=\"urn:ticketbai:emision\"><Salida><IdentificadorTBAI>TBAI-97192097P-090125-hDQ7o5Clx+GDc-009</IdentificadorTBAI><FechaRecepcion>09-06-2025 16:06:21</FechaRecepcion><Estado>00</Estado><Descripcion>Recibido</Descripcion><Azalpena>Jasota</Azalpena><ResultadosValidacion><Codigo>016</Codigo><Descripcion>AVISO: Fecha de recepción muy posterior a Fecha de expedición </Descripcion><Azalpena>OHARRA: Jasotze data bidaltze data baino askoz geroagokoa</Azalpena></ResultadosValidacion><ResultadosValidacion><Codigo>007</Codigo><Descripcion>AVISO: Certificado remitente no válido para emisor factura</Descripcion><Azalpena>OHARRA: Igorlearen ziurtagiria ez da baliozkoa fakturaren jaulkitzailearentzat</Azalpena></ResultadosValidacion></Salida></ns2:TicketBaiResponse>",
"estado_tbai": "Recibido",
"estado_registro_tbai": "Registrado",
"codigo_error_tbai": "016, 007",
"descripcion_error_tbai": "AVISO: Fecha de recepción muy posterior a Fecha de expedición , AVISO: Certificado remitente no válido para emisor factura",
"envio_tbai_id": 1,
"NumSerieDispositivo": null
},
"count": 1
}
}
Example response (404):
{
"success": false,
"code": 404,
"message": "No se encontró la factura especificada.",
"data": null
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Generar QR de TBAI
requires authentication
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.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/tbai/QR/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Ehdv6geka3bP56ZcD148faV',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/tbai/QR/1"
);
const headers = {
"Authorization": "Bearer Ehdv6geka3bP56ZcD148faV",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/tbai/QR/1" \
--header "Authorization: Bearer Ehdv6geka3bP56ZcD148faV" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/tbai/QR/1'
headers = {
'Authorization': 'Bearer Ehdv6geka3bP56ZcD148faV',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"success": true,
"code": 200,
"message": "QR generated successfully",
"data": {
"url_qr": "https://qr.com/1234567890",
"qr_image": "qrbase64",
"base64_qr_pdf": null
}
}
Example response (400):
{
"success": false,
"code": 400,
"message": "La factura no se ha enviado aun a TBAI, reintente en unos segundos.",
"data": null
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Envíos
Verifactu
Endpoints especificos para consultar el estado de los envíos a Verifactu. En verifactu se pueden enviar facturas agrupadas en un mismo envío por este motivo, si quieres consultar facturas en especifico tienes que mirar las lineas de envío.
Listado de envíos Verifactu
requires authentication
Muestra un listado paginado de todos los envíos a Verifactu.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-aeat';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer a6kcgev5DVh3fa46PZE8bd1',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/envios-aeat"
);
const headers = {
"Authorization": "Bearer a6kcgev5DVh3fa46PZE8bd1",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/envios-aeat" \
--header "Authorization: Bearer a6kcgev5DVh3fa46PZE8bd1" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/envios-aeat'
headers = {
'Authorization': 'Bearer a6kcgev5DVh3fa46PZE8bd1',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un envío Verifactu
requires authentication
Muestra un envío Verifactu específico. Se filtra por el ID del envío.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-aeat/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer kgdh6ae1D6V3fE45c8vPabZ',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/envios-aeat/1"
);
const headers = {
"Authorization": "Bearer kgdh6ae1D6V3fE45c8vPabZ",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/envios-aeat/1" \
--header "Authorization: Bearer kgdh6ae1D6V3fE45c8vPabZ" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/envios-aeat/1'
headers = {
'Authorization': 'Bearer kgdh6ae1D6V3fE45c8vPabZ',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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": []
}
}
}
Example response (403):
{
"success": false,
"message": "No tienes acceso a este envío Verifactu.",
"error": 403,
"code": 403
}
Example response (404):
{
"success": false,
"message": "No se encontró el envío AEAT especificado.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener una línea de envío Verifactu
requires authentication
Muestra una línea específica de un envío Verifactu.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-aeat/linea/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Z46EPhba8v5dgceDf613Vak',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/envios-aeat/linea/1"
);
const headers = {
"Authorization": "Bearer Z46EPhba8v5dgceDf613Vak",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/envios-aeat/linea/1" \
--header "Authorization: Bearer Z46EPhba8v5dgceDf613Vak" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/envios-aeat/linea/1'
headers = {
'Authorization': 'Bearer Z46EPhba8v5dgceDf613Vak',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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,
...,
}
}
}
}
Example response (403):
{
"success": false,
"message": "No tienes acceso a esta linea Verifactu.",
"error": 403,
"code": 403
}
Example response (404):
{
"success": false,
"message": "No se encontró la línea Verifactu especificada.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Tbai
Endpoints especificos para consultar el estado de los envíos a Tbai. En tbai se envían facturas individuales por cada envío.
Listado de envíos Tbai
requires authentication
Muestra un listado paginado de todos los envíos a Tbai.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-tbai';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Pe1Vhd3vZEgbafac6kD5648',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/envios-tbai"
);
const headers = {
"Authorization": "Bearer Pe1Vhd3vZEgbafac6kD5648",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/envios-tbai" \
--header "Authorization: Bearer Pe1Vhd3vZEgbafac6kD5648" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/envios-tbai'
headers = {
'Authorization': 'Bearer Pe1Vhd3vZEgbafac6kD5648',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un envío Tbai
requires authentication
Muestra un envío Tbai específico. Se filtra por el ID del envío.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/envios-tbai/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer 8d3PDagE5b1cVv4fhka6eZ6',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/envios-tbai/1"
);
const headers = {
"Authorization": "Bearer 8d3PDagE5b1cVv4fhka6eZ6",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/envios-tbai/1" \
--header "Authorization: Bearer 8d3PDagE5b1cVv4fhka6eZ6" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/envios-tbai/1'
headers = {
'Authorization': 'Bearer 8d3PDagE5b1cVv4fhka6eZ6',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
}
Example response (403):
{
"success": false,
"message": "No tienes acceso a este envío Tbai.",
"error": 403,
"code": 403
}
Example response (404):
{
"success": false,
"message": "No se encontró el envío AEAT especificado.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
RegistroEventos
Obtener listado de eventos
requires authentication
Muestra una lista con todos los eventos del usuario.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/registro-eventos';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer 1k8fgDacedbh6Z354EaVP6v',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/registro-eventos"
);
const headers = {
"Authorization": "Bearer 1k8fgDacedbh6Z354EaVP6v",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/registro-eventos" \
--header "Authorization: Bearer 1k8fgDacedbh6Z354EaVP6v" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/registro-eventos'
headers = {
'Authorization': 'Bearer 1k8fgDacedbh6Z354EaVP6v',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"success": true,
"code": 200,
"message": "RegistroEventos listed successfully",
"data": {
"items": [
{
"id": 1,
"previous_id": null,
"IDVersion": 1,
"SistemaInformatico_id": 1,
"ObEmisNombreRazon": "EMPRESA TEST",
"ObEmisNIF": "A39200019",
"EmitidaTercODest": null,
"TercODestNombreRazon": null,
"TercODestNIF": null,
"TercODestIDOtroCodigoPais": null,
"TercODestIDOtroType": null,
"TercODestIDOtroID": null,
"FechaHoraHusoGenEvento": "2025-04-24T15:40:10+02:00",
"TipoEvento": 1,
"OtrosDatosEvento": null,
"TipoEventoAnterior": null,
"FechaHoraHusoGenEventoAnterior": null,
"HuellaEventoAnterior": null,
"TipoHuella": 1,
"HuellaEvento": "38A81273C421F8BDBA5979BC74EDF9015C6F32AE309949DACC913343DB26B653",
"xml": "<RegistroEventos xmlns:sf=\"http://www.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd\">\n <IDVersion>1.0</IDVersion>\n <Evento>\n <sf:SistemaInformatico>\n <sf:NombreRazon>NEMON INVOICE TO CASH, SL</sf:NombreRazon>\n <sf:NIF>B70912613</sf:NIF>\n <sf:NombreSistemaInformatico>NEMON INVOCASH VERIFACTU API</sf:NombreSistemaInformatico>\n <sf:IdSistemaInformatico>01</sf:IdSistemaInformatico>\n <sf:Version>1.0</sf:Version>\n <sf:NumeroInstalacion>20250424154010_357522</sf:NumeroInstalacion>\n <sf:TipoUsoPosibleSoloVerifactu>N</sf:TipoUsoPosibleSoloVerifactu>\n <sf:TipoUsoPosibleMultiOT>S</sf:TipoUsoPosibleMultiOT>\n <sf:IndicadorMultiplesOT>S</sf:IndicadorMultiplesOT>\n </sf:SistemaInformatico>\n <ObligadoEmisor>\n <NombreRazon>EMPRESA TEST</NombreRazon>\n <NIF>47859447N</NIF>\n </ObligadoEmisor>\n <FechaHoraHusoGenEvento>2025-04-24T15:40:10+02:00</FechaHoraHusoGenEvento>\n <TipoEvento>01</TipoEvento>\n <OtrosDatosEvento></OtrosDatosEvento>\n <Encadenamiento>\n <PrimerEvento>S</PrimerEvento>\n </Encadenamiento>\n <TipoHuella>01</TipoHuella>\n <HuellaEvento>38A81273C421F8BDBA5979BC74EDF9015C6F32AE309949DACC913343DB26B653</HuellaEvento>\n </Evento>\n</RegistroEventos>",
"xml_signed": "<?xml version=\"1.0\"?>\n<RegistroEventos xmlns:sf=\"http://www.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd\">\n <IDVersion>1.0</IDVersion>\n <Evento>\n <sf:SistemaInformatico>\n <sf:NombreRazon>NEMON INVOICE TO CASH, SL</sf:NombreRazon>\n <sf:NIF>B70912613</sf:NIF>\n <sf:NombreSistemaInformatico>NEMON INVOCASH VERIFACTU API</sf:NombreSistemaInformatico>\n <sf:IdSistemaInformatico>01</sf:IdSistemaInformatico>\n <sf:Version>1.0</sf:Version>\n <sf:NumeroInstalacion>20250424154010_357522</sf:NumeroInstalacion>\n <sf:TipoUsoPosibleSoloVerifactu>N</sf:TipoUsoPosibleSoloVerifactu>\n <sf:TipoUsoPosibleMultiOT>S</sf:TipoUsoPosibleMultiOT>\n <sf:IndicadorMultiplesOT>S</sf:IndicadorMultiplesOT>\n </sf:SistemaInformatico>\n <ObligadoEmisor>\n <NombreRazon>EMPRESA TEST</NombreRazon>\n <NIF>47859447N</NIF>\n </ObligadoEmisor>\n <FechaHoraHusoGenEvento>2025-04-24T15:40:10+02:00</FechaHoraHusoGenEvento>\n <TipoEvento>01</TipoEvento>\n <OtrosDatosEvento/>\n <Encadenamiento>\n <PrimerEvento>S</PrimerEvento>\n </Encadenamiento>\n <TipoHuella>01</TipoHuella>\n <HuellaEvento>38A81273C421F8BDBA5979BC74EDF9015C6F32AE309949DACC913343DB26B653</HuellaEvento>\n <ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:SignedInfo>\n <ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>\n <ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/>\n <ds:Reference URI=\"\">\n <ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/>\n <ds:DigestValue>+T0nm0R3hy4/EwnzXTPN5pdUjSEH6GP+dgjFsrnqMJw=</ds:DigestValue>\n </ds:Reference>\n </ds:SignedInfo>\n <ds:SignatureValue>TPLqf09G0z3OMBc8p/i206wA57JSASrr0k3DxiTd9dJ2B4LAlLq7s+56CM5LIoNVWCGNZt3rA3cb5ar1pSTut/uas2JcrGiZ6C7lC5jR1RRPWEtn9zGtADTmWeZOnlBqKQ3UUYwIH37B0BUcZN5rzQ3c1OJxZYYl1tYmR03yOj3a6yZKvTz6lYDMYGFkTJ1AHoYiLCh4UNgCW8E7jQIxjuxROvwc+HMl0kPU5W1SdoMuBU/wVfASA1DJxQIZAhEcAIcQK2khUu4/6ujvdpnW8Po51U7kmfZrQo42fxYUWYT6Y8Z8Ul8JPZKk8TEonl1HTv+U1pLHof5VYDFKn4vaHw==</ds:SignatureValue>\n <ds:KeyInfo>\n <ds:X509Data>\n <ds:X509Certificate>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</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </ds:Signature>\n </Evento>\n</RegistroEventos>\n",
"Signature": "TPLqf09G0z3OMBc8p/i206wA57JSASrr0k3DxiTd9dJ2B4LAlLq7s+56CM5LIoNVWCGNZt3rA3cb5ar1pSTut/uas2JcrGiZ6C7lC5jR1RRPWEtn9zGtADTmWeZOnlBqKQ3UUYwIH37B0BUcZN5rzQ3c1OJxZYYl1tYmR03yOj3a6yZKvTz6lYDMYGFkTJ1AHoYiLCh4UNgCW8E7jQIxjuxROvwc+HMl0kPU5W1SdoMuBU/wVfASA1DJxQIZAhEcAIcQK2khUu4/6ujvdpnW8Po51U7kmfZrQo42fxYUWYT6Y8Z8Ul8JPZKk8TEonl1HTv+U1pLHof5VYDFKn4vaHw==",
"Signature2": "TPLqf09G0z3OMBc8p/i206wA57JSASrr0k3DxiTd9dJ2B4LAlLq7s+56CM5LIoNVWCGNZt3rA3cb5ar1pSTut/uas2JcrGiZ6C7lC5jR1RRPWEtn9zGtADTmWeZOnlBqKQ3UUYwIH37B0BUcZN5rzQ3c1OJxZYYl1tYmR03yOj3a6yZKvTz6lYDMYGFkTJ1AHoYiLCh4UNgCW8E7jQIxjuxROvwc+HMl0kPU5W1SdoMuBU/wVfASA1DJxQIZAhEcAIcQK2khUu4/6ujvdpnW8Po51U7kmfZrQo42fxYUWYT6Y8Z8Ul8JPZKk8TEonl1HTv+U1pLHof5VYDFKn4vaHw==",
"created_at": "2025-04-24T13:40:10.000000Z",
"updated_at": "2025-04-24T13:40:10.000000Z",
"deleted_at": null
}
],
"count": 6
},
"pagination": {
"total": 6,
"perPage": 10,
"currentPage": 1,
"lastPage": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un evento por id
requires authentication
Muestra los datos de un evento filtrando por el ID.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/registro-eventos/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer 3ak4ED6PedV5ag1fZbc8vh6',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/registro-eventos/1"
);
const headers = {
"Authorization": "Bearer 3ak4ED6PedV5ag1fZbc8vh6",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/registro-eventos/1" \
--header "Authorization: Bearer 3ak4ED6PedV5ag1fZbc8vh6" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/registro-eventos/1'
headers = {
'Authorization': 'Bearer 3ak4ED6PedV5ag1fZbc8vh6',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"success": true,
"code": 200,
"message": "RegistroEventos obtained successfully",
"data": {
"items": {
"id": 2,
"previous_id": 1,
"IDVersion": 1,
"SistemaInformatico_id": 2,
"ObEmisNombreRazon": "EMPRESA TEST",
"ObEmisNIF": "A39200019",
"EmitidaTercODest": null,
"TercODestNombreRazon": null,
"TercODestNIF": null,
"TercODestIDOtroCodigoPais": null,
"TercODestIDOtroType": null,
"TercODestIDOtroID": null,
"FechaHoraHusoGenEvento": "2025-04-24T15:42:06+02:00",
"TipoEvento": 3,
"OtrosDatosEvento": null,
"TipoEventoAnterior": 1,
"FechaHoraHusoGenEventoAnterior": "2025-04-24T15:40:10+02:00",
"HuellaEventoAnterior": "38A81273C421F8BDBA5979BC74EDF9015C6F32AE309949DACC913343DB26B653",
"TipoHuella": 1,
"HuellaEvento": "FE6A231664CF92DE7BBB666DE5D48E33565769654A785B542DE99CD1FA131E95",
"xml": "<RegistroEventos xmlns:sf=\"http://www.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd\">\n <IDVersion>1.0</IDVersion>\n <Evento>\n <sf:SistemaInformatico>\n <sf:NombreRazon>NEMON INVOICE TO CASH, SL</sf:NombreRazon>\n <sf:NIF>B70912613</sf:NIF>\n <sf:NombreSistemaInformatico>NEMON INVOCASH VERIFACTU API</sf:NombreSistemaInformatico>\n <sf:IdSistemaInformatico>01</sf:IdSistemaInformatico>\n <sf:Version>1.0</sf:Version>\n <sf:NumeroInstalacion>20250424154010_357522</sf:NumeroInstalacion>\n <sf:TipoUsoPosibleSoloVerifactu>N</sf:TipoUsoPosibleSoloVerifactu>\n <sf:TipoUsoPosibleMultiOT>S</sf:TipoUsoPosibleMultiOT>\n <sf:IndicadorMultiplesOT>S</sf:IndicadorMultiplesOT>\n </sf:SistemaInformatico>\n <ObligadoEmisor>\n <NombreRazon>EMPRESA TEST</NombreRazon>\n <NIF>47859447N</NIF>\n </ObligadoEmisor>\n <FechaHoraHusoGenEvento>2025-04-24T15:42:06+02:00</FechaHoraHusoGenEvento>\n <TipoEvento>03</TipoEvento>\n <DatopsPropiosEvento>\n <LanzamientoProcesoDeteccionAnomaliasRegFacturacion>\n <RealizadoProcesoSobreIntegridadHuellasRegFacturacion>N</RealizadoProcesoSobreIntegridadHuellasRegFacturacion>\n <RealizadoProcesoSobreIntegridadFirmasRegFacturacion>N</RealizadoProcesoSobreIntegridadFirmasRegFacturacion>\n <RealizadoProcesoSobreTrazabilidadCadenaRegFacturacion>S</RealizadoProcesoSobreTrazabilidadCadenaRegFacturacion>\n <NumeroDeRegistrosFacturacionProcesadosSobreTrazabilidadCadena>1</NumeroDeRegistrosFacturacionProcesadosSobreTrazabilidadCadena>\n <RealizadoProcesoSobreTrazabilidadFechasRegFacturacion>N</RealizadoProcesoSobreTrazabilidadFechasRegFacturacion>\n </LanzamientoProcesoDeteccionAnomaliasRegFacturacion>\n </DatopsPropiosEvento>\n <OtrosDatosEvento></OtrosDatosEvento>\n <Encadenamiento>\n <EventoAnterior>\n <TipoEvento>01</TipoEvento>\n <FechaHoraHusoGenEvento>2025-04-24T15:40:10+02:00</FechaHoraHusoGenEvento>\n <HuellaEvento>38A81273C421F8BDBA5979BC74EDF9015C6F32AE309949DACC913343DB26B653</HuellaEvento>\n </EventoAnterior>\n </Encadenamiento>\n <TipoHuella>01</TipoHuella>\n <HuellaEvento>FE6A231664CF92DE7BBB666DE5D48E33565769654A785B542DE99CD1FA131E95</HuellaEvento>\n </Evento>\n</RegistroEventos>",
"xml_signed": "<?xml version=\"1.0\"?>\n<RegistroEventos xmlns:sf=\"http://www.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd\">\n <IDVersion>1.0</IDVersion>\n <Evento>\n <sf:SistemaInformatico>\n <sf:NombreRazon>NEMON INVOICE TO CASH, SL</sf:NombreRazon>\n <sf:NIF>B70912613</sf:NIF>\n <sf:NombreSistemaInformatico>NEMON INVOCASH VERIFACTU API</sf:NombreSistemaInformatico>\n <sf:IdSistemaInformatico>01</sf:IdSistemaInformatico>\n <sf:Version>1.0</sf:Version>\n <sf:NumeroInstalacion>20250424154010_357522</sf:NumeroInstalacion>\n <sf:TipoUsoPosibleSoloVerifactu>N</sf:TipoUsoPosibleSoloVerifactu>\n <sf:TipoUsoPosibleMultiOT>S</sf:TipoUsoPosibleMultiOT>\n <sf:IndicadorMultiplesOT>S</sf:IndicadorMultiplesOT>\n </sf:SistemaInformatico>\n <ObligadoEmisor>\n <NombreRazon>EMPRESA TEST</NombreRazon>\n <NIF>47859447N</NIF>\n </ObligadoEmisor>\n <FechaHoraHusoGenEvento>2025-04-24T15:42:06+02:00</FechaHoraHusoGenEvento>\n <TipoEvento>03</TipoEvento>\n <DatopsPropiosEvento>\n <LanzamientoProcesoDeteccionAnomaliasRegFacturacion>\n <RealizadoProcesoSobreIntegridadHuellasRegFacturacion>N</RealizadoProcesoSobreIntegridadHuellasRegFacturacion>\n <RealizadoProcesoSobreIntegridadFirmasRegFacturacion>N</RealizadoProcesoSobreIntegridadFirmasRegFacturacion>\n <RealizadoProcesoSobreTrazabilidadCadenaRegFacturacion>S</RealizadoProcesoSobreTrazabilidadCadenaRegFacturacion>\n <NumeroDeRegistrosFacturacionProcesadosSobreTrazabilidadCadena>1</NumeroDeRegistrosFacturacionProcesadosSobreTrazabilidadCadena>\n <RealizadoProcesoSobreTrazabilidadFechasRegFacturacion>N</RealizadoProcesoSobreTrazabilidadFechasRegFacturacion>\n </LanzamientoProcesoDeteccionAnomaliasRegFacturacion>\n </DatopsPropiosEvento>\n <OtrosDatosEvento/>\n <Encadenamiento>\n <EventoAnterior>\n <TipoEvento>01</TipoEvento>\n <FechaHoraHusoGenEvento>2025-04-24T15:40:10+02:00</FechaHoraHusoGenEvento>\n <HuellaEvento>38A81273C421F8BDBA5979BC74EDF9015C6F32AE309949DACC913343DB26B653</HuellaEvento>\n </EventoAnterior>\n </Encadenamiento>\n <TipoHuella>01</TipoHuella>\n <HuellaEvento>FE6A231664CF92DE7BBB666DE5D48E33565769654A785B542DE99CD1FA131E95</HuellaEvento>\n <ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\n <ds:SignedInfo>\n <ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/>\n <ds:SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/>\n <ds:Reference URI=\"\">\n <ds:DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha256\"/>\n <ds:DigestValue>CePuedoTyzVXJOU5A46R1NyznUPx7wUtnUVEDL9Z3nM=</ds:DigestValue>\n </ds:Reference>\n </ds:SignedInfo>\n <ds:SignatureValue>o0HLX/eLHYOGjXbPnhK4BrolGcv3FbSB1kQokaxTroQNIOzOEDzgakeK4Yo2b31twTQiRCl4SXj2ZgsQJEkFZP/FkKdLBQs3ip+qJXm41K9FCgMx9a7uMa0zgjzpOyLLbQUQj0dfCPgkjvoLWFhNhRn4u3rl6GpTzBbuGlo8Bs5gcF1LG1478xQ8D5AizyJp3I3M4hcIL6QEYJC46VWqlHx9qR0qPrN/+q8arUaSZQNBqlj33/JOwGBU/iv5w3ucBR3/HAeJevX9aZYbUck2qYuCSeJJdx3mzwZmz7+udlCcNAK8wNcu3vaJ+nXq2DOgs1uT9sfQQ3XldlZmo+MskQ==</ds:SignatureValue>\n <ds:KeyInfo>\n <ds:X509Data>\n <ds:X509Certificate>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</ds:X509Certificate>\n </ds:X509Data>\n </ds:KeyInfo>\n </ds:Signature>\n </Evento>\n</RegistroEventos>\n",
"Signature": "o0HLX/eLHYOGjXbPnhK4BrolGcv3FbSB1kQokaxTroQNIOzOEDzgakeK4Yo2b31twTQiRCl4SXj2ZgsQJEkFZP/FkKdLBQs3ip+qJXm41K9FCgMx9a7uMa0zgjzpOyLLbQUQj0dfCPgkjvoLWFhNhRn4u3rl6GpTzBbuGlo8Bs5gcF1LG1478xQ8D5AizyJp3I3M4hcIL6QEYJC46VWqlHx9qR0qPrN/+q8arUaSZQNBqlj33/JOwGBU/iv5w3ucBR3/HAeJevX9aZYbUck2qYuCSeJJdx3mzwZmz7+udlCcNAK8wNcu3vaJ+nXq2DOgs1uT9sfQQ3XldlZmo+MskQ==",
"Signature2": "o0HLX/eLHYOGjXbPnhK4BrolGcv3FbSB1kQokaxTroQNIOzOEDzgakeK4Yo2b31twTQiRCl4SXj2ZgsQJEkFZP/FkKdLBQs3ip+qJXm41K9FCgMx9a7uMa0zgjzpOyLLbQUQj0dfCPgkjvoLWFhNhRn4u3rl6GpTzBbuGlo8Bs5gcF1LG1478xQ8D5AizyJp3I3M4hcIL6QEYJC46VWqlHx9qR0qPrN/+q8arUaSZQNBqlj33/JOwGBU/iv5w3ucBR3/HAeJevX9aZYbUck2qYuCSeJJdx3mzwZmz7+udlCcNAK8wNcu3vaJ+nXq2DOgs1uT9sfQQ3XldlZmo+MskQ==",
"created_at": "2025-04-24T13:42:06.000000Z",
"updated_at": "2025-04-24T13:42:06.000000Z",
"deleted_at": null,
"anomalias": {
"id": 1,
"registro_eventos_id": 2,
"ProcesoIntegridadHuellas": 2,
"NumeroDeProcesadosHuellas": null,
"ProcesoIntegridadFirmas": 2,
"NumeroDeProcesadosFirmas": null,
"ProcesoTrazabilidadCadena": 1,
"NumeroDeProcesadosCadena": 1,
"ProcesoTrazabilidadFechas": 2,
"NumeroDeProcesadosFechas": null,
"TipoAnomalia": null,
"OtrosDatosAnomalia": null,
"IDEmisorFactura": null,
"NumeroFactura": null,
"FechaExpedicionFactura": null,
"TipoEvento": 3,
"FechaHoraHusoGenEvento": null,
"HuellaEvento": null,
"created_at": "2025-04-24T13:42:06.000000Z",
"updated_at": "2025-04-24T13:42:06.000000Z",
"deleted_at": null
},
"exp_res": null
},
"count": 1
}
}
Example response (404):
{
"success": false,
"code": 404,
"message": "No se encontró el evento especificado.",
"data": null
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Listas
Verifactu
Listas especificas de Verifactu.
Listar listas
requires authentication
Muestra un listado con los nombres de todas las listas de Verifactu.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer c6DP5k4V8gdvabe6ahfZE31',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/listas"
);
const headers = {
"Authorization": "Bearer c6DP5k4V8gdvabe6ahfZE31",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/listas" \
--header "Authorization: Bearer c6DP5k4V8gdvabe6ahfZE31" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas'
headers = {
'Authorization': 'Bearer c6DP5k4V8gdvabe6ahfZE31',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener una lista
requires authentication
Muestra una lista verifactu en especifico filtrando por el nombre de la lista. Se pueden ver los valores y su descripción.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas/l1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer V83Z1cgfev54bdaP6hEDak6',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/listas/l1"
);
const headers = {
"Authorization": "Bearer V83Z1cgfev54bdaP6hEDak6",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/listas/l1" \
--header "Authorization: Bearer V83Z1cgfev54bdaP6hEDak6" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas/l1'
headers = {
'Authorization': 'Bearer V83Z1cgfev54bdaP6hEDak6',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Example response (404):
{
"success": false,
"message": "La lista solicitada no existe",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un valor de una lista
requires authentication
Muestra un valor de una lista verifactu en especifico filtrando por el nombre de la lista y el valor.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas/l1/01';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer gZ6a5dfkhvcb3E641eVaDP8',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/listas/l1/01"
);
const headers = {
"Authorization": "Bearer gZ6a5dfkhvcb3E641eVaDP8",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/listas/l1/01" \
--header "Authorization: Bearer gZ6a5dfkhvcb3E641eVaDP8" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas/l1/01'
headers = {
'Authorization': 'Bearer gZ6a5dfkhvcb3E641eVaDP8',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Example response (404):
{
"success": false,
"message": "El registro solicitado no existe en la lista",
"error": 404,
"code": 404
}
Example response (404):
{
"success": false,
"message": "La lista solicitada no existe",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Tbai
Listas especificas de Tbai.
Listar listas
requires authentication
Muestra un listado con los nombres de todas las listas de Tbai.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas-tbai';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer 3af8gkZ1eva5V6hcEP4d6Db',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/listas-tbai"
);
const headers = {
"Authorization": "Bearer 3af8gkZ1eva5V6hcEP4d6Db",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/listas-tbai" \
--header "Authorization: Bearer 3af8gkZ1eva5V6hcEP4d6Db" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas-tbai'
headers = {
'Authorization': 'Bearer 3af8gkZ1eva5V6hcEP4d6Db',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener una lista
requires authentication
Muestra una lista de Tbai en especifico filtrando por el nombre de la lista. Se pueden ver los valores y su descripción.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas-tbai/l0';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer b6gv1hf4aPce58Vad6kEZD3',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/listas-tbai/l0"
);
const headers = {
"Authorization": "Bearer b6gv1hf4aPce58Vad6kEZD3",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/listas-tbai/l0" \
--header "Authorization: Bearer b6gv1hf4aPce58Vad6kEZD3" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas-tbai/l0'
headers = {
'Authorization': 'Bearer b6gv1hf4aPce58Vad6kEZD3',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Example response (404):
{
"success": false,
"message": "La lista solicitada no existe",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un valor de una lista
requires authentication
Muestra un valor de una lista de Tbai en especifico filtrando por el nombre de la lista y el valor.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/listas-tbai/l0/1.2';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer h8bc4ZEgv51kea6da3PDfV6',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/listas-tbai/l0/1.2"
);
const headers = {
"Authorization": "Bearer h8bc4ZEgv51kea6da3PDfV6",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/listas-tbai/l0/1.2" \
--header "Authorization: Bearer h8bc4ZEgv51kea6da3PDfV6" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas-tbai/l0/1.2'
headers = {
'Authorization': 'Bearer h8bc4ZEgv51kea6da3PDfV6',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Example response (404):
{
"success": false,
"message": "El registro solicitado no existe en la lista",
"error": 404,
"code": 404
}
Example response (404):
{
"success": false,
"message": "La lista solicitada no existe",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Webhook
Listado de Webhooks
requires authentication
Muestra un listado con todos los webhooks vinculados al usuario actual.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer egabZh86Va14vcDk56dPEf3',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/webhook"
);
const headers = {
"Authorization": "Bearer egabZh86Va14vcDk56dPEf3",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/webhook" \
--header "Authorization: Bearer egabZh86Va14vcDk56dPEf3" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/webhook'
headers = {
'Authorization': 'Bearer egabZh86Va14vcDk56dPEf3',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Obtener un Webhook
requires authentication
Muestra un webhook específico. Se filtra por el ID del webhook.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer 3D4dEbhc6av1g685afePVkZ',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/webhook/1"
);
const headers = {
"Authorization": "Bearer 3D4dEbhc6av1g685afePVkZ",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/webhook/1" \
--header "Authorization: Bearer 3D4dEbhc6av1g685afePVkZ" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/webhook/1'
headers = {
'Authorization': 'Bearer 3D4dEbhc6av1g685afePVkZ',
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (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
}
}
Example response (404):
{
"success": false,
"message": "No se encontró el webhook especificado.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Crear un webhook
requires authentication
Crea un nuevo webhook vinculado al usuario actual.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer aZb14f6Eeka36cvPghd5D8V',
'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));
const url = new URL(
"https://app.verifactuapi.es/api/webhook"
);
const headers = {
"Authorization": "Bearer aZb14f6Eeka36cvPghd5D8V",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"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"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
"https://app.verifactuapi.es/api/webhook" \
--header "Authorization: Bearer aZb14f6Eeka36cvPghd5D8V" \
--header "Content-Type: application/json" \
--data "{
\"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\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/webhook'
payload = {
"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"
}
headers = {
'Authorization': 'Bearer aZb14f6Eeka36cvPghd5D8V',
'Content-Type': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (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"
}
]
}
}
Example response (400):
{
"success": false,
"message": "Los campos url y secret_key son obligatorios.",
"error": 400,
"code": 400
}
Example response (400):
{
"success": false,
"message": "La URL del webhook es obligatoria.",
"error": 400,
"code": 400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Actualizar un webhook
requires authentication
Actualiza un webhook existente.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/webhook/accusantium';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer e1hk6gZDv4aEPVa36fb8d5c',
'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"
},
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/webhook/accusantium"
);
const headers = {
"Authorization": "Bearer e1hk6gZDv4aEPVa36fb8d5c",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"url": "https:\/\/webhook.site\/766f4435-f4f9-414b-b26f-47dbd10339ce\/{id}",
"http_method": "POST",
"secret_key": "m7&A,$'(6qYjg+BZ#su_3!",
"tag": "emisor_2"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
curl --request PUT \
"https://app.verifactuapi.es/api/webhook/accusantium" \
--header "Authorization: Bearer e1hk6gZDv4aEPVa36fb8d5c" \
--header "Content-Type: application/json" \
--data "{
\"url\": \"https:\\/\\/webhook.site\\/766f4435-f4f9-414b-b26f-47dbd10339ce\\/{id}\",
\"http_method\": \"POST\",
\"secret_key\": \"m7&A,$\'(6qYjg+BZ#su_3!\",
\"tag\": \"emisor_2\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/webhook/accusantium'
payload = {
"url": "https:\/\/webhook.site\/766f4435-f4f9-414b-b26f-47dbd10339ce\/{id}",
"http_method": "POST",
"secret_key": "m7&A,$'(6qYjg+BZ#su_3!",
"tag": "emisor_2"
}
headers = {
'Authorization': 'Bearer e1hk6gZDv4aEPVa36fb8d5c',
'Content-Type': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (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
}
]
}
}
Example response (404):
{
"success": false,
"message": "No se encontró el webhook especificado.",
"error": 404,
"code": 404
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Status
Server Status
Devuelve el estado del servidor.
Example request:
$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));
const url = new URL(
"https://app.verifactuapi.es/api/status"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
curl --request GET \
--get "https://app.verifactuapi.es/api/status" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/status'
headers = {
'Content-Type': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"status": "UP",
"message": "Server is running normally",
"timestamp": "2025-01-16 12:00:00",
"code": "200"
}
Example response (500):
{
"success": false,
"status": "DOWN",
"message": "Server is down",
"code": 500
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.