SPFE - Comunicar pago, cobro, rechazo o impago
POST https://{entorno}.ticketbaiws.eus/spfe-estados/
La Ley 18/2022 «Crea y Crece» (desarrollada por el RD 238/2026 y la Orden HAC/1028/2026) obliga a expedir las facturas entre empresas y profesionales en formato electrónico y a informar de su estado: pago, cobro, rechazo o impago. Ticketbai WS envía automáticamente a la Solución Pública de Facturación Electrónica (SPFE) de la AEAT las facturas completas a clientes españoles con NIF que emites con el API, en formato UBL, y descarga las facturas que recibes de tus proveedores.
Estos métodos solo están disponibles para las empresas que tienen activado el envío a la SPFE. Se activa en los datos de la empresa del área privada (Factura electrónica B2B) o con el parámetro spfe de los métodos Nueva empresa y Editar datos empresa. Al activarlo se envían las facturas desde ese día.
Este método comunica a la SPFE el estado de una factura:
- cobro o impago de una factura que has emitido con Ticketbai WS. Se identifica con serie y numero.
- pago o rechazo de una factura que has recibido. Se identifica con factura, fecha_factura, nif_emisor y nombre_emisor: son los mismos campos que devuelve GET spfe-recibidas, así que puedes reenviarlos tal cual.
Por defecto el estado queda en cola y se envía a la AEAT en los próximos minutos (result: PENDING). Consulta después el resultado con GET spfe-estados, o envía sincrono: true para comunicarlo en el momento y recibir ya la respuesta de la AEAT (OK o ERROR, con el detalle en msg). Si la factura emitida aún no ha llegado a la SPFE, el estado espera a que llegue.
Para anular un estado comunicado por error, envía la misma petición con baja: true.
PARÁMETROS
| estado string obligatorio Estado a comunicar: cobro → factura emitida cobrada impago → factura emitida impagada al vencimiento pago → factura recibida pagada rechazo → factura recibida rechazada | pago |
| baja boolean opcional true para anular un estado comunicado anteriormente | false |
| serie string obligatorio en cobro e impago Serie de la factura emitida con Ticketbai WS | A |
| numero string obligatorio en cobro e impago Número de la factura emitida con Ticketbai WS | 2026000245 |
| factura string obligatorio en pago y rechazo Serie y número de la factura recibida, tal como los informó el emisor | F2026-0153 |
| fecha_factura string obligatorio en pago y rechazo Fecha de expedición de la factura en formato dd/mm/yyyy. En cobro e impago es opcional y solo sirve para distinguir facturas con la misma serie y número | 03/11/2026 |
| nif_emisor string obligatorio en pago y rechazo NIF del emisor de la factura recibida | B01000012 |
| nombre_emisor string obligatorio en pago y rechazo Nombre o razón social del emisor de la factura recibida | Empresa de ejemplo S.L. |
| fecha string opcional Fecha del pago, cobro o rechazo en formato dd/mm/yyyy. No puede ser futura. Por defecto, hoy | 10/11/2026 |
| vencimiento string obligatorio en pago e impago Fecha de vencimiento de la factura en formato dd/mm/yyyy (en impago es la fecha en la que debía pagarse). Opcional en cobro | 03/12/2026 |
| motivo_rechazo string opcional (rechazo) Motivo del rechazo: 01 → Rechazo comercial (por defecto) 02 → Consumo particular o no afecto a la actividad | 01 |
| fecha_recepcion_mercancia string opcional Fecha de recepción de las mercancías o de los servicios prestados (dd/mm/yyyy), si es relevante para el cómputo del plazo de pago (Ley 3/2004 de morosidad) | 05/11/2026 |
| fecha_recepcion_factura string opcional Fecha de recepción de la factura (dd/mm/yyyy). Si no se informa, el plazo de pago cuenta desde la fecha de expedición | 04/11/2026 |
| financiacion boolean opcional (cobro) El cobro se ha realizado mediante un instrumento de financiación concertado por el emisor | false |
| rectificada boolean opcional (pago) La factura pagada ha sido rectificada (el pago no tiene por qué coincidir con el importe original) | false |
| rectificativa_negativa boolean opcional (pago) Factura rectificativa negativa, sin pago asociado | false |
| sincrono boolean opcional true para enviar el estado a la AEAT en el momento y devolver su respuesta. Por defecto se envía en cola | true |
RESPUESTA (return)
| id integer Identificador del estado en Ticketbai WS | 128 |
| estado / baja Estado comunicado y si es una anulación | pago |
| factura, fecha_factura, nif_emisor Factura a la que se refiere | F2026-0153 |
| fecha / vencimiento Fechas comunicadas (dd/mm/yyyy) | 10/11/2026 |
| result string PENDING en cola, OK aceptado por la AEAT, ERROR rechazado (ver errores) | OK |
| errores array Lista de errores de la AEAT: codigo y descripcion |
$ curl --request POST \
--url https://api-test.ticketbaiws.eus/spfe-estados/ \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Token: xxx' \
--header 'Nif: 00000014Z' \
--data '
{
"estado": "pago",
"factura": "F2026-0153",
"fecha_factura": "03/11/2026",
"nif_emisor": "B01000012",
"nombre_emisor": "Empresa de ejemplo S.L.",
"fecha": "10/11/2026",
"vencimiento": "03/12/2026",
"sincrono": true
}'
$ composer require guzzlehttp/guzzle
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api-test.ticketbaiws.eus/spfe-estados/', [
'body' => '{"estado": "pago", "factura": "F2026-0153", "fecha_factura": "03/11/2026", "nif_emisor": "B01000012", "nombre_emisor": "Empresa de ejemplo S.L.", "fecha": "10/11/2026", "vencimiento": "03/12/2026", "sincrono": true}',
'headers' => [
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Token' => 'xxx',
'Nif' => '00000014Z'
],
]);
echo $response->getBody();
$ python -m pip install requests
import requests
url = "https://api-test.ticketbaiws.eus/spfe-estados/"
payload = {
"estado": "pago",
"factura": "F2026-0153",
"fecha_factura": "03/11/2026",
"nif_emisor": "B01000012",
"nombre_emisor": "Empresa de ejemplo S.L.",
"fecha": "10/11/2026",
"vencimiento": "03/12/2026",
"sincrono": True
}
headers = {"Accept": "application/json", "Content-Type": "application/json", "Token": "xxx", "Nif": "00000014Z"}
response = requests.request("POST", url, json=payload, headers=headers)
print(response.text)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-test.ticketbaiws.eus/spfe-estados/");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "Token: xxx");
headers = curl_slist_append(headers, "Nif: 00000014Z");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\"estado\": \"pago\", \"factura\": \"F2026-0153\", \"fecha_factura\": \"03/11/2026\", \"nif_emisor\": \"B01000012\", \"nombre_emisor\": \"Empresa de ejemplo S.L.\", \"fecha\": \"10/11/2026\", \"vencimiento\": \"03/12/2026\", \"sincrono\": true}");
CURLcode ret = curl_easy_perform(hnd);
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"estado\": \"pago\", \"factura\": \"F2026-0153\", \"fecha_factura\": \"03/11/2026\", \"nif_emisor\": \"B01000012\", \"nombre_emisor\": \"Empresa de ejemplo S.L.\", \"fecha\": \"10/11/2026\", \"vencimiento\": \"03/12/2026\", \"sincrono\": true}");
Request request = new Request.Builder()
.url("https://api-test.ticketbaiws.eus/spfe-estados/")
.post(body)
.addHeader("Accept", "application/json")
.addHeader("Content-Type", "application/json")
.addHeader("Token", "xxx")
.addHeader("Nif", "00000014Z")
.build();
Response response = client.newCall(request).execute();
HTTP/1.1 200 OK
{
"result": "OK",
"return": {
"id": 128,
"estado": "pago",
"baja": false,
"factura": "F2026-0153",
"fecha_factura": "03\/11\/2026",
"nif_emisor": "B01000012",
"fecha": "10\/11\/2026",
"vencimiento": "03\/12\/2026",
"result": "OK",
"errores": []
},
"msg": null
}
HTTP/1.1 200 OK
{
"result": "PENDING",
"return": {
"id": 129,
"estado": "pago",
"baja": false,
"factura": "F2026-0153",
"fecha_factura": "03\/11\/2026",
"nif_emisor": "B01000012",
"fecha": "10\/11\/2026",
"vencimiento": "03\/12\/2026",
"result": "PENDING",
"errores": []
},
"msg": null
}
HTTP/1.1 200 OK
{
"result": "ERROR",
"return": {
"id": 130,
"estado": "pago",
"baja": false,
"factura": "F2026-0153",
"fecha_factura": "03\/11\/2026",
"nif_emisor": "B01000012",
"fecha": "10\/11\/2026",
"vencimiento": "03\/12\/2026",
"result": "ERROR",
"errores": [
{
"codigo": "SPFE-ACTION-01",
"descripcion": "No existe factura sobre la que actuar"
}
]
},
"msg": "SPFE-ACTION-01: No existe factura sobre la que actuar"
}
Métodos TicketBAI / Verifactu
- POST Nueva factura / subsanación (zuzendu) TicketBAI / Verifactu
- POST Completar factura simplificada
- GET Consulta factura TicketBAI / Verifactu
- GET Listado facturas TicketBAI / Verifactu
- GET Descarga XML TicketBAI / Verifactu
- GET Descarga factura en formato FacturaE
- GET Descarga factura en PDF
- GET Estado sistema
- DEL Anular factura TicketBAI / Verifactu
- PUT Forzar reenvío TicketBAI / Verifactu
- POST Validar NIF en la AEAT
- POST Validar NIF en el VIES
Documento representación
- GET Documento Representación - Descargar modelo
- POST Documento Representación - Enviar documento
- GET Documento Representación - Descargar documento cargado
- DELETE Documento Representación - Revocar documento cargado
Métodos específicos para BATUZ BIZKAIA
- GET Listado de epígrafes
- POST LROE - Facturas recibidas - Envío (BATUZ)
- PUT LROE - Facturas recibidas - Modificar (BATUZ)
- GET LROE - Facturas recibidas - Consulta (BATUZ)
- DEL LROE - Facturas recibidas - Anular (BATUZ)
- POST LROE - Criterio Caja COBROS - Envío (BATUZ)
- PUT LROE - Criterio Caja COBROS - Modificar (BATUZ)
- GET LROE - Criterio Caja COBROS - Consulta (BATUZ)
- DEL LROE - Criterio Caja COBROS - Anular (BATUZ)
- POST LROE - Criterio Caja PAGOS - Envío (BATUZ)
- PUT LROE - Criterio Caja PAGOS - Modificar (BATUZ)
- GET LROE - Criterio Caja PAGOS - Consulta (BATUZ)
- DEL LROE - Criterio Caja PAGOS - Anular (BATUZ)
Factura electrónica B2B - SPFE (Ley Crea y Crece)
- POST SPFE - Comunicar pago, cobro, rechazo o impago
- GET SPFE - Consulta de pagos, cobros, rechazos e impagos
- GET SPFE - Facturas recibidas
