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):
{
"user_name": "VerifactuAPI",
"user_email": "ejemplo@verifatuAPI.com",
"message": "Inicio de sesión exitoso",
"token": "1234567890"
}
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):
{
"user_name": "aa.aaaaaaaaa",
"message": "Inicio de sesión exitoso",
"token": "1234567890"
}
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 6ghE4dkVfcZa6b81a3PeD5v',
'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 6ghE4dkVfcZa6b81a3PeD5v",
"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 6ghE4dkVfcZa6b81a3PeD5v" \
--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 6ghE4dkVfcZa6b81a3PeD5v',
'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": "P1716358E",
"nombre": "Nombre del emisor",
"created_at": "2024-12-16T11:01:37.000000Z",
"updated_at": "2024-12-16T11:01:37.000000Z",
"deleted_at": null,
"representante_razon_social": null,
"representante_nif": null,
"default_webhook_id": 1,
"enviar_aeat": 1,
"sistema_informatico_id": 1
"cp": "43791",
"type": "verifactu",
"id_zona_tbai": null,
"test_production": "t",
"datos_otorgamiento": "null",
"datos_otorgamiento_representante": null,
"otorgamiento_base64": "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 EZfg6c6PVd415Dvaha8bk3e',
'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 EZfg6c6PVd415Dvaha8bk3e",
"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 EZfg6c6PVd415Dvaha8bk3e" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/1'
headers = {
'Authorization': 'Bearer EZfg6c6PVd415Dvaha8bk3e',
'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": "P1716358E",
"nombre": "Nombre del emisor",
"created_at": "2024-12-16T11:01:37.000000Z",
"updated_at": "2024-12-16T11:01:37.000000Z",
"deleted_at": null,
"representante_razon_social": null,
"representante_nif": null,
"default_webhook_id": 1,
"enviar_aeat": 1,
"sistema_informatico_id": 1
"cp": "43791",
"type": "verifactu",
"id_zona_tbai": null,
"test_production": "t",
"datos_otorgamiento": "null",
"datos_otorgamiento_representante": null,
"otorgamiento_base64": "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": "20241211164012_103290",
"tipo_uso_posible_solo_verifactu": false,
"tipo_uso_posible_multi_ot": true,
"indicador_multiples_ot": true,
"created_at": "2024-12-11T15:40:12.000000Z",
"updated_at": "2024-12-11T15:40:12.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 3he51dgE46bDvaZk68VafcP',
'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 3he51dgE46bDvaZk68VafcP",
"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 3he51dgE46bDvaZk68VafcP" \
--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 3he51dgE46bDvaZk68VafcP',
'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": 14,
"nombre": "Nombre del emisor",
"nif": "P1716358E",
"representante_razon_social": null,
"representante_nif": null,
"default_webhook_id": 1,
"enviar_aeat": 1,
"cp": "43791",
"type": "verifactu",
"id_zona_tbai": null,
"test_production": "t"
}
]
}
}
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 bg1h4eZP5c3fdV6k8DaE6av',
'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 bg1h4eZP5c3fdV6k8DaE6av",
"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 bg1h4eZP5c3fdV6k8DaE6av" \
--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 bg1h4eZP5c3fdV6k8DaE6av',
'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-04-23T14:33:21.000000Z",
"updated_at": "2025-04-23T14:33:21.000000Z",
"deleted_at": null,
"representante_razon_social": null,
"representante_nif": null,
"default_webhook_id": null,
"enviar_aeat": 1,
"sistema_informatico_id": 1,
"cp": "43791",
"type": "verifactu",
"id_zona_tbai": null,
"test_production": "t",
"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 gafVZa6eE8D4khPb1dvc365',
'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 gafVZa6eE8D4khPb1dvc365",
"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 gafVZa6eE8D4khPb1dvc365" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/1/api-key'
headers = {
'Authorization': 'Bearer gafVZa6eE8D4khPb1dvc365',
'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 g164dka3ZP8aVv65fEbcehD',
'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 g164dka3ZP8aVv65fEbcehD",
"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 g164dka3ZP8aVv65fEbcehD" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/1/credentials'
headers = {
'Authorization': 'Bearer g164dka3ZP8aVv65fEbcehD',
'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.
Otorgamiento
Endpoints para la generación y subida de otorgamientos
Generar el PDF de 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 b6dcf6g8Pva4kV1EeD35Zah',
'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 b6dcf6g8Pva4kV1EeD35Zah",
"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 b6dcf6g8Pva4kV1EeD35Zah" \
--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 b6dcf6g8Pva4kV1EeD35Zah',
'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 avdZ153gf8b6D6P4VkaceEh',
'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 avdZ153gf8b6D6P4VkaceEh",
"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 avdZ153gf8b6D6P4VkaceEh" \
--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 avdZ153gf8b6D6P4VkaceEh',
'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.
Facturas
Alta-Facturas
Registrar una factura.
requires authentication
Registra una nueva factura en la base de datos para ser procesada y enviada donde corresponda.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-facturacion';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer k66VEP8ed1hacbfv5Z4g3Da',
'Content-Type' => 'application/json',
],
'json' => {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"FechaExpedicionFactura": "2025-1-1",
"NombreRazonEmisor": "EMPRESA TEST",
"RefExterna": "Test Ref Externa",
"TipoFactura": "F1",
"DescripcionOperacion": "test",
"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,
"webhook_id": 1,
"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 k66VEP8ed1hacbfv5Z4g3Da",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX\/202412-1",
"FechaExpedicionFactura": "2025-1-1",
"NombreRazonEmisor": "EMPRESA TEST",
"RefExterna": "Test Ref Externa",
"TipoFactura": "F1",
"DescripcionOperacion": "test",
"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,
"webhook_id": 1,
"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 k66VEP8ed1hacbfv5Z4g3Da" \
--header "Content-Type: application/json" \
--data "{
\"IDEmisorFactura\": \"A39200019\",
\"NumSerieFactura\": \"AX\\/202412-1\",
\"FechaExpedicionFactura\": \"2025-1-1\",
\"NombreRazonEmisor\": \"EMPRESA TEST\",
\"RefExterna\": \"Test Ref Externa\",
\"TipoFactura\": \"F1\",
\"DescripcionOperacion\": \"test\",
\"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,
\"webhook_id\": 1,
\"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",
"NombreRazonEmisor": "EMPRESA TEST",
"RefExterna": "Test Ref Externa",
"TipoFactura": "F1",
"DescripcionOperacion": "test",
"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,
"webhook_id": 1,
"tag": "test"
}
headers = {
'Authorization': 'Bearer k66VEP8ed1hacbfv5Z4g3Da',
'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,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-01-01",
"HoraExpedicionFactura": null,
"FechaOperacion": null,
"DescripcionOperacion": "test",
"NombreRazonDestinatario": "IVAN SOLE MARTINEZ",
"NIFDestinatario": "39707287H",
"RefExterna": "Test Ref Externa",
"CuotaTotal": 21,
"ImporteTotal": 121,
"moneda": "EUR",
"BaseRectificada": null,
"CuotaRectificada": null,
"CuotaRecargoRectificada": null,
"tag": test,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": 1,
"tbai": 0,
"face": 0,
"json": "{\"type\":\"verifactu\",\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"AX\\/202412-1\",\"FechaExpedicionFactura\":\"2025-1-1\",\"NombreRazonEmisor\":\"EMPRESA TEST\",\"RefExterna\":\"Test Ref Externa\",\"TipoFactura\":1,\"DescripcionOperacion\":\"test\",\"Destinatarios\":[{\"NombreRazon\":\"IVAN SOLE MARTINEZ\",\"NIF\":\"39707287H\"}],\"Desglose\":[{\"Impuesto\":1,\"ClaveRegimen\":1,\"CalificacionOperacion\":1,\"TipoImpositivo\":21,\"BaseImponibleOImporteNoSujeto\":100,\"CuotaRepercutida\":21}],\"CuotaTotal\":21,\"ImporteTotal\":121,\"Subsanacion\":2,\"RechazoPrevio\":1,\"FacturaSimplificadaArt7273\":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=AX/202412-1&fecha=01-01-2025&importe=121",
"qr_image": "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",
"qr_x": null,
"qr_y": null,
"qr_page": 1,
"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,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": null,
"IDEmisorFacturaAnterior": null,
"NumSerieFacturaAnterior": null,
"FechaExpedicionFacturaAnterior": null,
"HuellaAnterior": null,
"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 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 factura.
requires authentication
Registra una nueva factura en la base de datos para ser procesada y enviada donde corresponda.
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/alta-registro-tbai';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer 6EZca61hkeabP34D5Vvdg8f',
'Content-Type' => 'application/json',
],
'json' => {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"FechaExpedicionFactura": "2025-1-1",
"NombreRazonEmisor": "EMPRESA TEST",
"RefExterna": "Test Ref Externa",
"TipoFactura": "F1",
"DescripcionOperacion": "test",
"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,
"webhook_id": 1,
"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 6EZca61hkeabP34D5Vvdg8f",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX\/202412-1",
"FechaExpedicionFactura": "2025-1-1",
"NombreRazonEmisor": "EMPRESA TEST",
"RefExterna": "Test Ref Externa",
"TipoFactura": "F1",
"DescripcionOperacion": "test",
"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,
"webhook_id": 1,
"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 6EZca61hkeabP34D5Vvdg8f" \
--header "Content-Type: application/json" \
--data "{
\"IDEmisorFactura\": \"A39200019\",
\"NumSerieFactura\": \"AX\\/202412-1\",
\"FechaExpedicionFactura\": \"2025-1-1\",
\"NombreRazonEmisor\": \"EMPRESA TEST\",
\"RefExterna\": \"Test Ref Externa\",
\"TipoFactura\": \"F1\",
\"DescripcionOperacion\": \"test\",
\"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,
\"webhook_id\": 1,
\"tag\": \"test\"
}"
import requests
import json
url = 'https://app.verifactuapi.es/api/alta-registro-tbai'
payload = {
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX\/202412-1",
"FechaExpedicionFactura": "2025-1-1",
"NombreRazonEmisor": "EMPRESA TEST",
"RefExterna": "Test Ref Externa",
"TipoFactura": "F1",
"DescripcionOperacion": "test",
"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,
"webhook_id": 1,
"tag": "test"
}
headers = {
'Authorization': 'Bearer 6EZca61hkeabP34D5Vvdg8f',
'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,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-01-01",
"HoraExpedicionFactura": null,
"FechaOperacion": null,
"DescripcionOperacion": "test",
"NombreRazonDestinatario": "IVAN SOLE MARTINEZ",
"NIFDestinatario": "39707287H",
"RefExterna": "Test Ref Externa",
"CuotaTotal": 21,
"ImporteTotal": 121,
"moneda": "EUR",
"BaseRectificada": null,
"CuotaRectificada": null,
"CuotaRecargoRectificada": null,
"tag": test,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": 1,
"tbai": 0,
"face": 0,
"json": "{\"type\":\"verifactu\",\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"AX\\/202412-1\",\"FechaExpedicionFactura\":\"2025-1-1\",\"NombreRazonEmisor\":\"EMPRESA TEST\",\"RefExterna\":\"Test Ref Externa\",\"TipoFactura\":1,\"DescripcionOperacion\":\"test\",\"Destinatarios\":[{\"NombreRazon\":\"IVAN SOLE MARTINEZ\",\"NIF\":\"39707287H\"}],\"Desglose\":[{\"Impuesto\":1,\"ClaveRegimen\":1,\"CalificacionOperacion\":1,\"TipoImpositivo\":21,\"BaseImponibleOImporteNoSujeto\":100,\"CuotaRepercutida\":21}],\"CuotaTotal\":21,\"ImporteTotal\":121,\"Subsanacion\":2,\"RechazoPrevio\":1,\"FacturaSimplificadaArt7273\":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=AX/202412-1&fecha=01-01-2025&importe=121",
"qr_image": "iVBORw0KGgoAAAANSUhEUgAAAQkAAAExCAIAAADgI8DzAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKmElEQVR4nO3d3ZKivAIFUD31vf8rey662rJgkybmD521rmZsTMBmdwyE5P54PG7Azv9W7wBclGxAJhuQyQZksgGZbED2Sdm43+/3+/3ov5Nr5+v91/j+19Pl51bJ5gQq3z/52XjCPZZpFfE1mtqN5wm3T0V8sdGzzCXO166F+Q6t7UaL5wn0+kf9qNl5vr45QTev74t6PB6xoltNoxdr3799c1CaqY82qr/x/NtZOD+eP9r/Sd43O0flnGmgjip6/Lr91ejtaz9qM1/rOtofPsLYdqPx/Bh9epW/+bxdu1R8hw7tRjzDunc2utv84YeNDtl4/UK/ef12Oh7T+q8TKtIX/w6t/cWj7uz+33+WUHjL/lTbBzL2sOPrhS3P1377qy++L4fP0u1aihsITz6K7+A6I2SfNGYEZpINyGQDMtmATDYgkw3IZAMy2YBMNiCTDchkAzLZgKzpub9pTymcHOV+ZuMqVQdYVW95n1uOqOphxosc4DgtJ4N2AzLZgEw2IJMNyHrOwXPNTnDHnnrHDmVVUS392qpe/riflq06c8q0G5DJBmSyAZlsQDZwPtxp91zLRU3rqb+x8MjRxlVFld/b0o9fNTvjuDOninYDMtmATDYgkw3IVq5pNkfH+7Ud+7Utt9jLRVVdAyibdmXimrQbkMkGZLIBmWxA9v198ZabyuPuqXfsfLeUvNHx2sMX0G5AJhuQyQZksgHZwL74qluhq56urjKu495yvFVFjfv9XuQmunYDMtmATDYgkw3IevbFV90o7Tg3+KrJy6a995pTuV3zFrt2AzLZgEw2IJMNyJr64he5fzmuJ9fSza0yreNeVXJVvReZcK0j7QZksgGZbEAmG5Ddx83P1bGLPK7r9om3fq85+L+lqBbmUYfZZAMy2YBMNiBr6otvyxo2hLtc0ca4B8Rb9qpcb1VRH7GOe9V7y0Wt+qy0G5DJBmSyAZlsQNbzefFVPdeO773I4+MdVwEfNxvduI07rrbeQrsBmWxAJhuQyQZkV5m7bdoA72teA9gYty5ZuaKOc7CXKyoX1bLPHWk3IJMNyGQDMtmA7KJj1K85SLtFx5HzVRt3/JxXfVYb0x6F0G5AJhuQyQZksgFZz7nbNjreZO04VrysY8nTnpBeter5xrhF0Fvoi0N/sgGZbEAmG5DNm0d9Wpdx1ZrZH3GLvWzVqmXThp1X0W5AJhuQyQZksgHZsvXFV42N71hy2UVmDm/5cKYt2naRW/sb2g3IZAMy2YBMNiDrOXdbR1XdzaqJtafdvb7muPqO763S8RdaLtnz4jCcbEAmG5DJBmQDx6iXN964yHRs01YtK5s2ZnvVzexVT0ZU0W5AJhuQyQZksgHZvLnbOha16vHia04SV1VR2bSLK6sWbq+i3YBMNiCTDchkA7KBa5ptjFvUq/zeso4ld+wjTptX/CITmF9zgIV2AzLZgEw2IJMNyOaNUS+/t8WqJbRXzbI+7j7xJ15OKNdrjDr0JxuQyQZksgHZvPviZdP68dOWONuYdt1i2jWAjWkPLLSUXEW7AZlsQCYbkMkGZE3zqI/rI7ZMBl4uqmP3uuP96Y7HO07HEQYdP+dxj49rNyCTDchkAzLZgGzemmbTnvkuL5BV7slVmXbLuWO9HcfVT1tdftoydBvaDchkAzLZgEw2IBvYF2+5Xb1KVVe1ZTT4tP50i46XMVYNlfe8OPQnG5DJBmSyAVnP58VbdHz2etr6YBeZ7fwik7WNs2q9O+0GZLIBmWxAJhuQXWUe9VVjp1ctrTbuEDreNh43q3zZtEkAy7QbkMkGZLIBmWxANvC++KrbmWXTJk7vqKXjPm5+vXHDEaaNQi/TbkAmG5DJBmSyAdm8vvi4xcSqjLtrXmXcamkb4/rEZZ94zWNDuwGZbEAmG5DJBmTL+uLjilrVU5/2jPu0JeGnjfYfN67e8+LQn2xAJhuQyQZkA9cXv8ht43F7VbXxqsepx91xr6qoZa+m/X43tBuQyQZksgGZbEDWc02zcYuCVxXVUm/Lxi31Truq0bLxqiXOpo2r39BuQCYbkMkGZLIBWc+++Kq5wVf1p6t2o+Wn5d0YN6C948fe8aH2aY+Pazcgkw3IZAMy2YCs5/PiHdfb7tg5mzYJ+TjjeurjdqNs1czwVbQbkMkGZLIBmWxANnDutj8qXjRmu+wTF+ZaNZB+1QLqLUVV0W5AJhuQyQZksgHZvDHqVao6wReZQq5Kx47sqvnbxw0aqKp33CTz2g3IZAMy2YBMNiBrui++ahnsVSPYV/VNy8bt5LQ548btRgvtBmSyAZlsQCYbkC0bo95i3Pj2afeJpy1kXmXVxHZVRbWUXEW7AZlsQCYbkMkGZAPXF++oalR2x/Ht5ZJb6i3vRsdnzcfdvG8pquMhGKMOs8kGZLIBmWxANm+MeseSrzmz27T3bqwa3r/hvjj8K2QDMtmATDYg6zl328ZFelTTphjbWLVaWtUnuWo6thbj1lPf0G5AJhuQyQZksgHZwL74RXRcmOsiD2pfZJx52app7zp2zbUbkMkGZLIBmWxA9oV98Wkj2Fseeq4quWXjcXeRV63FPu33q92ATDYgkw3IZAOygX3xccPOx82SNq4HWX7vuL2aNsPauN2oqqgj7QZksgGZbEAmG5D1nLttnHHTk7XU23GvxnW+p5W8MW2Ft5aiyrQbkMkGZLIBmWxA9pHri8ME2g3IZAMy2YBMNiCTDchkAzLZgEw2IJMNyL5w7rZBfoZGHw3bfn09bvl2FUe1TDO/9rc/wL6a2o37znsltOzDQq+/wqFHsfYsWX6OrtKh3fhHPrvCYW5+9I98IF9vyHeq1z+izxNl/+Lzlf0f4M2/j544ixUd7c9R+XGXjir687wvfMs6ufMn6zp57HHL9llxW2o/8+IbFXXXoS++/0L1+HX7PbbnGbk/QV9fL9u8PVZUtduxzKOK4tv39R5teX7nzxxRYedbDvO8k598rP3Mi7WHOcKQ71RDn+g9+nv8nkIJ5f18tmZVhzNt59/esm+BP5/S/X7f//lbuPMn9f9ONa2Her6i52/o+d/XH43bw4Iun9L5ne97mFU7H78pVO3Sqt/Rgvsb8drU2gtW02ofUdH5Mud/yM8aj4J06Z1vCeXRl4r4Ffx813P/9qqKzu/tUSf1z9b/aOPylpudPDrMwnv/LDMqH2b5m+GZ2ss78HZfvPYwu/NMLGTGjEAmG5CNvfc35wvbyereuORatQO1JU/+lKg1JBv7bmWV86faR59eXT6lZ1G3ml770Za8+uxxuG/fd/t0mwtNPzfXfn4UL7JttjxzhYrWbLRcSYwvPl8pXBc/8/ajLcvXcN8+onKZ5y28ZMlG6xj1W8Oonvji69+/zclx5u1xy1s6z47e/vhVdUS1H8iRk7UX3H+98V5edfhOdf7XUNhy7QiC8v27Wr16Ee9tHD8fUXnD1Oc3rv8loTzA4aS3D7O29hFb8tTt/kbjwJjzL44woiJfbD5d65iRliuJRy/ebtt+wpnxVIWRQo3DnPZHXdjyZGe6cZzS+cMsDJ1ynarMeCrIjBmBTDYgkw3IZAMy2YBMNiCTDchkAzLZgEw2IJMNyGQDMtmATDYgkw3IZAMy2YBMNiD7PxdPMtOEG8DCAAAAAElFTkSuQmCC",
"qr_x": null,
"qr_y": null,
"qr_page": 1,
"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,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": null,
"IDEmisorFacturaAnterior": null,
"NumSerieFacturaAnterior": null,
"FechaExpedicionFacturaAnterior": null,
"HuellaAnterior": null,
"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 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.
Baja-Facturas
Registrar una anulacion.
requires authentication
Registra una anulacion de factura en la base de datos para ser procesada y enviada donde corresponda. 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 VcaZed81D5g6EPhkvf63ba4',
'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 VcaZed81D5g6EPhkvf63ba4",
"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 VcaZed81D5g6EPhkvf63ba4" \
--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 VcaZed81D5g6EPhkvf63ba4',
'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": 2,
"previous_id": null,
"alta_o_anulacion": 2,
"id_registro_anulado": 1,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-01-01",
"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": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": 1,
"tbai": 0,
"face": 0,
"json": "{\"id_registro_anulado\":28,\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"AX\\/202412-1\",\"FechaExpedicionFactura\":\"2025-01-01\",\"HoraExpedicionFactura\":null,\"verifactu\":true,\"estado_registro_verifactu\":\"No Registrado\",\"IDEmisorFacturaAnterior\":\"A39200019\",\"NumSerieFacturaAnterior\":\"CHAT-50\\/0240\",\"FechaExpedicionFacturaAnterior\":\"2025-01-20\",\"HuellaAnterior\":\"4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03\",\"FechaHoraHusoGenRegistro\":\"2025-03-21T11:23:52+01:00\",\"TipoHuella\":\"01\",\"Huella\":\"FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3\",\"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,
"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": "FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3",
"Signature": null,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": "2025-03-21T11:23:52+01:00",
"IDEmisorFacturaAnterior": "A39200019",
"NumSerieFacturaAnterior": "CHAT-50/0240",
"FechaExpedicionFacturaAnterior": "2025-01-20",
"HuellaAnterior": "4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03",
"xml_aeat": "xml_aeat",
"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 factura por id.
requires authentication
Anula una factura 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 E46kP3vhb6d5gVeaDZ8afc1',
'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 E46kP3vhb6d5gVeaDZ8afc1",
"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 E46kP3vhb6d5gVeaDZ8afc1" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/anulacion-registro-facturacion/1'
headers = {
'Authorization': 'Bearer E46kP3vhb6d5gVeaDZ8afc1',
'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": 2,
"previous_id": null,
"alta_o_anulacion": 2,
"id_registro_anulado": 1,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-01-01",
"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": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": 1,
"tbai": 0,
"face": 0,
"json": "{\"id_registro_anulado\":28,\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"AX\\/202412-1\",\"FechaExpedicionFactura\":\"2025-01-01\",\"HoraExpedicionFactura\":null,\"verifactu\":true,\"estado_registro_verifactu\":\"No Registrado\",\"IDEmisorFacturaAnterior\":\"A39200019\",\"NumSerieFacturaAnterior\":\"CHAT-50\\/0240\",\"FechaExpedicionFacturaAnterior\":\"2025-01-20\",\"HuellaAnterior\":\"4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03\",\"FechaHoraHusoGenRegistro\":\"2025-03-21T11:23:52+01:00\",\"TipoHuella\":\"01\",\"Huella\":\"FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3\",\"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,
"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": "FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3",
"Signature": null,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": "2025-03-21T11:23:52+01:00",
"IDEmisorFacturaAnterior": "A39200019",
"NumSerieFacturaAnterior": "CHAT-50/0240",
"FechaExpedicionFacturaAnterior": "2025-01-20",
"HuellaAnterior": "4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03",
"xml_aeat": "xml_aeat",
"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.
Registrar una anulacion.
requires authentication
Registra una anulacion de factura en la base de datos para ser procesada y enviada donde corresponda. 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-tbai';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer f4VPe1bc8dZEa65ah6gv3kD',
'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-tbai"
);
const headers = {
"Authorization": "Bearer f4VPe1bc8dZEa65ah6gv3kD",
"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-tbai" \
--header "Authorization: Bearer f4VPe1bc8dZEa65ah6gv3kD" \
--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-tbai'
payload = {
"type": "tbai",
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX\/202412-1",
"FechaExpedicionFactura": "2025-11-11",
"SinRegistroPrevio": true
}
headers = {
'Authorization': 'Bearer f4VPe1bc8dZEa65ah6gv3kD',
'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": 2,
"previous_id": null,
"alta_o_anulacion": 2,
"id_registro_anulado": 1,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-01-01",
"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": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": 1,
"tbai": 0,
"face": 0,
"json": "{\"id_registro_anulado\":28,\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"AX\\/202412-1\",\"FechaExpedicionFactura\":\"2025-01-01\",\"HoraExpedicionFactura\":null,\"verifactu\":true,\"estado_registro_verifactu\":\"No Registrado\",\"IDEmisorFacturaAnterior\":\"A39200019\",\"NumSerieFacturaAnterior\":\"CHAT-50\\/0240\",\"FechaExpedicionFacturaAnterior\":\"2025-01-20\",\"HuellaAnterior\":\"4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03\",\"FechaHoraHusoGenRegistro\":\"2025-03-21T11:23:52+01:00\",\"TipoHuella\":\"01\",\"Huella\":\"FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3\",\"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,
"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": "FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3",
"Signature": null,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": "2025-03-21T11:23:52+01:00",
"IDEmisorFacturaAnterior": "A39200019",
"NumSerieFacturaAnterior": "CHAT-50/0240",
"FechaExpedicionFacturaAnterior": "2025-01-20",
"HuellaAnterior": "4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03",
"xml_aeat": "xml_aeat",
"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 factura por id.
requires authentication
Anula una factura 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 5d16PeEDbaZ3vV6ahc4gfk8',
'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 5d16PeEDbaZ3vV6ahc4gfk8",
"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 5d16PeEDbaZ3vV6ahc4gfk8" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/anulacion-registro-tbai/1'
headers = {
'Authorization': 'Bearer 5d16PeEDbaZ3vV6ahc4gfk8',
'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": 2,
"previous_id": null,
"alta_o_anulacion": 2,
"id_registro_anulado": 1,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-01-01",
"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": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": 1,
"tbai": 0,
"face": 0,
"json": "{\"id_registro_anulado\":28,\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"AX\\/202412-1\",\"FechaExpedicionFactura\":\"2025-01-01\",\"HoraExpedicionFactura\":null,\"verifactu\":true,\"estado_registro_verifactu\":\"No Registrado\",\"IDEmisorFacturaAnterior\":\"A39200019\",\"NumSerieFacturaAnterior\":\"CHAT-50\\/0240\",\"FechaExpedicionFacturaAnterior\":\"2025-01-20\",\"HuellaAnterior\":\"4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03\",\"FechaHoraHusoGenRegistro\":\"2025-03-21T11:23:52+01:00\",\"TipoHuella\":\"01\",\"Huella\":\"FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3\",\"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,
"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": "FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3",
"Signature": null,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": "2025-03-21T11:23:52+01:00",
"IDEmisorFacturaAnterior": "A39200019",
"NumSerieFacturaAnterior": "CHAT-50/0240",
"FechaExpedicionFacturaAnterior": "2025-01-20",
"HuellaAnterior": "4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03",
"xml_aeat": "xml_aeat",
"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.
Listar-Facturas
Obtener lista de facturas
requires authentication
Muestra una lista con todas las facturas 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 863hcEvkeg5dZfVaa1D46bP',
'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',
'tbai' => '0',
'verifactu' => '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",
"tbai": "0",
"verifactu": "1",
"no_verifactu": "0",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer 863hcEvkeg5dZfVaa1D46bP",
"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&tbai=0&verifactu=1&no_verifactu=0" \
--header "Authorization: Bearer 863hcEvkeg5dZfVaa1D46bP" \
--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',
'tbai': '0',
'verifactu': '1',
'no_verifactu': '0',
}
headers = {
'Authorization': 'Bearer 863hcEvkeg5dZfVaa1D46bP',
'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": 2,
"id_registro_anulado": 1,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-01-01",
"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": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": 1,
"tbai": 0,
"face": 0,
"json": "{\"id_registro_anulado\":28,\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"AX\\/202412-1\",\"FechaExpedicionFactura\":\"2025-01-01\",\"HoraExpedicionFactura\":null,\"verifactu\":true,\"estado_registro_verifactu\":\"No Registrado\",\"IDEmisorFacturaAnterior\":\"A39200019\",\"NumSerieFacturaAnterior\":\"CHAT-50\\/0240\",\"FechaExpedicionFacturaAnterior\":\"2025-01-20\",\"HuellaAnterior\":\"4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03\",\"FechaHoraHusoGenRegistro\":\"2025-03-21T11:23:52+01:00\",\"TipoHuella\":\"01\",\"Huella\":\"FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3\",\"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,
"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": "FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3",
"Signature": null,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": "2025-03-21T11:23:52+01:00",
"IDEmisorFacturaAnterior": "A39200019",
"NumSerieFacturaAnterior": "CHAT-50/0240",
"FechaExpedicionFacturaAnterior": "2025-01-20",
"HuellaAnterior": "4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03",
"xml_aeat": "xml_aeat",
"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
}
],
"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 una factura por id
requires authentication
Muestra los datos de una factura 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 6aeEdP8hf1kv6Db3g4VZ5ac',
'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 6aeEdP8hf1kv6Db3g4VZ5ac",
"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 6aeEdP8hf1kv6Db3g4VZ5ac" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/alta-registro-facturacion/1'
headers = {
'Authorization': 'Bearer 6aeEdP8hf1kv6Db3g4VZ5ac',
'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": 2,
"id_registro_anulado": 1,
"IDEmisorFactura": "A39200019",
"NumSerieFactura": "AX/202412-1",
"NumSerie": null,
"NumFactura": null,
"FechaExpedicionFactura": "2025-01-01",
"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": null,
"webhook_id": null,
"webhook_log_id": null,
"verifactu": 1,
"tbai": 0,
"face": 0,
"json": "{\"id_registro_anulado\":28,\"IDEmisorFactura\":\"A39200019\",\"NumSerieFactura\":\"AX\\/202412-1\",\"FechaExpedicionFactura\":\"2025-01-01\",\"HoraExpedicionFactura\":null,\"verifactu\":true,\"estado_registro_verifactu\":\"No Registrado\",\"IDEmisorFacturaAnterior\":\"A39200019\",\"NumSerieFacturaAnterior\":\"CHAT-50\\/0240\",\"FechaExpedicionFacturaAnterior\":\"2025-01-20\",\"HuellaAnterior\":\"4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03\",\"FechaHoraHusoGenRegistro\":\"2025-03-21T11:23:52+01:00\",\"TipoHuella\":\"01\",\"Huella\":\"FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3\",\"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,
"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": "FB371EEC8C80FF93A6ED1638F33C4FEFF7879DF32E7C9C0828A8D6B24C603DE3",
"Signature": null,
"TipoHuella": 1,
"NumRegistroAcuerdoFacturacion": null,
"IdAcuerdoSistemaInformatico": null,
"FechaHoraHusoGenRegistro": "2025-03-21T11:23:52+01:00",
"IDEmisorFacturaAnterior": "A39200019",
"NumSerieFacturaAnterior": "CHAT-50/0240",
"FechaExpedicionFacturaAnterior": "2025-01-20",
"HuellaAnterior": "4B949D333C450F7B2D4C2898065182B7B1F8813AC85EC702B0850D2D251DBA03",
"xml_aeat": "xml_aeat",
"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
},
"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.
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 d6vD8EZ5bak3cVh1Pg64fea',
'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 d6vD8EZ5bak3cVh1Pg64fea",
"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 d6vD8EZ5bak3cVh1Pg64fea" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/envios-aeat'
headers = {
'Authorization': 'Bearer d6vD8EZ5bak3cVh1Pg64fea',
'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_verifactu": "Correcto",
"codigo_error_verifactu": "",
"descripcion_error_verifactu": "",
"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 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 c6E35fag6khe4Zb8a1dVPDv',
'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 c6E35fag6khe4Zb8a1dVPDv",
"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 c6E35fag6khe4Zb8a1dVPDv" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/envios-aeat/1'
headers = {
'Authorization': 'Bearer c6E35fag6khe4Zb8a1dVPDv',
'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_verifactu": "Correcto",
"codigo_error_verifactu": "",
"descripcion_error_verifactu": "",
"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,
"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 3ZkahPD5aE6vecb41d8f6gV',
'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 3ZkahPD5aE6vecb41d8f6gV",
"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 3ZkahPD5aE6vecb41d8f6gV" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/envios-aeat/linea/1'
headers = {
'Authorization': 'Bearer 3ZkahPD5aE6vecb41d8f6gV',
'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,
"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.
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 hafv4DZg5Ee38bkP166cadV',
'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 hafv4DZg5Ee38bkP166cadV",
"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 hafv4DZg5Ee38bkP166cadV" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas'
headers = {
'Authorization': 'Bearer hafv4DZg5Ee38bkP166cadV',
'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 e836bZvdafP65cD4ghVkaE1',
'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 e836bZvdafP65cD4ghVkaE1",
"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 e836bZvdafP65cD4ghVkaE1" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas/l1'
headers = {
'Authorization': 'Bearer e836bZvdafP65cD4ghVkaE1',
'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 DZb8g3a14fakh5EVe6c6dvP',
'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 DZb8g3a14fakh5EVe6c6dvP",
"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 DZb8g3a14fakh5EVe6c6dvP" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas/l1/01'
headers = {
'Authorization': 'Bearer DZb8g3a14fakh5EVe6c6dvP',
'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 a53Zcd6ED486b1hekfVvaPg',
'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 a53Zcd6ED486b1hekfVvaPg",
"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 a53Zcd6ED486b1hekfVvaPg" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas-tbai'
headers = {
'Authorization': 'Bearer a53Zcd6ED486b1hekfVvaPg',
'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 Z5VEfkvP13gbcda6h8e4D6a',
'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 Z5VEfkvP13gbcda6h8e4D6a",
"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 Z5VEfkvP13gbcda6h8e4D6a" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas-tbai/l0'
headers = {
'Authorization': 'Bearer Z5VEfkvP13gbcda6h8e4D6a',
'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 PakZbae5618vfE4h36cdVDg',
'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 PakZbae5618vfE4h36cdVDg",
"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 PakZbae5618vfE4h36cdVDg" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/listas-tbai/l0/1.2'
headers = {
'Authorization': 'Bearer PakZbae5618vfE4h36cdVDg',
'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 DPb6ae1g6chvZ34aE85dkVf',
'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 DPb6ae1g6chvZ34aE85dkVf",
"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 DPb6ae1g6chvZ34aE85dkVf" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/webhook'
headers = {
'Authorization': 'Bearer DPb6ae1g6chvZ34aE85dkVf',
'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 6ef8vab4EVPdg36DaZk1h5c',
'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 6ef8vab4EVPdg36DaZk1h5c",
"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 6ef8vab4EVPdg36DaZk1h5c" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/webhook/1'
headers = {
'Authorization': 'Bearer 6ef8vab4EVPdg36DaZk1h5c',
'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 514fk63bdgZPaeacVD6v8Eh',
'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"
},
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/webhook"
);
const headers = {
"Authorization": "Bearer 514fk63bdgZPaeacVD6v8Eh",
"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"
};
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 514fk63bdgZPaeacVD6v8Eh" \
--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\"
}"
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"
}
headers = {
'Authorization': 'Bearer 514fk63bdgZPaeacVD6v8Eh',
'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/placeat';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer fbD836e1cEd6Pv4gka5aVZh',
'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/placeat"
);
const headers = {
"Authorization": "Bearer fbD836e1cEd6Pv4gka5aVZh",
"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/placeat" \
--header "Authorization: Bearer fbD836e1cEd6Pv4gka5aVZh" \
--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/placeat'
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 fbD836e1cEd6Pv4gka5aVZh',
'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.
Endpoints
PATCH api/emisor/produccion/{id}
requires authentication
Example request:
$client = new \GuzzleHttp\Client();
$url = 'https://app.verifactuapi.es/api/emisor/produccion/eos';
$response = $client->patch(
$url,
[
'headers' => [
'Authorization' => 'Bearer V5866ka1Pga4cvhZfbDd3eE',
'Content-Type' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
"https://app.verifactuapi.es/api/emisor/produccion/eos"
);
const headers = {
"Authorization": "Bearer V5866ka1Pga4cvhZfbDd3eE",
"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/eos" \
--header "Authorization: Bearer V5866ka1Pga4cvhZfbDd3eE" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/emisor/produccion/eos'
headers = {
'Authorization': 'Bearer V5866ka1Pga4cvhZfbDd3eE',
'Content-Type': 'application/json'
}
response = requests.request('PATCH', url, headers=headers)
response.json()
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 1hPvae456Vk6ZbEafcgDd38',
'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 1hPvae456Vk6ZbEafcgDd38",
"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 1hPvae456Vk6ZbEafcgDd38" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/registro-eventos'
headers = {
'Authorization': 'Bearer 1hPvae456Vk6ZbEafcgDd38',
'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 8cbD6EZ4d1v6f3aVkga5ePh',
'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 8cbD6EZ4d1v6f3aVkga5ePh",
"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 8cbD6EZ4d1v6f3aVkga5ePh" \
--header "Content-Type: application/json"
import requests
import json
url = 'https://app.verifactuapi.es/api/registro-eventos/1'
headers = {
'Authorization': 'Bearer 8cbD6EZ4d1v6f3aVkga5ePh',
'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.