## 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](https://ticketbaiws.eus/es/empresas-post/) y [Editar datos empresa](https://ticketbaiws.eus/es/empresas-put/). 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](https://ticketbaiws.eus/es/spfe-recibidas-get/), 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](https://ticketbaiws.eus/es/spfe-estados-get/), 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. Ejemplo: `pago`
- `baja` (boolean, opcional): true para anular un estado comunicado anteriormente. Ejemplo: `false`
- `serie` (string, obligatorio en cobro e impago): Serie de la factura emitida con Ticketbai WS. Ejemplo: `A`
- `numero` (string, obligatorio en cobro e impago): Número de la factura emitida con Ticketbai WS. Ejemplo: `2026000245`
- `factura` (string, obligatorio en pago y rechazo): Serie y número de la factura recibida, tal como los informó el emisor. Ejemplo: `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. Ejemplo: `03/11/2026`
- `nif_emisor` (string, obligatorio en pago y rechazo): NIF del emisor de la factura recibida. Ejemplo: `B01000012`
- `nombre_emisor` (string, obligatorio en pago y rechazo): Nombre o razón social del emisor de la factura recibida. Ejemplo: `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. Ejemplo: `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. Ejemplo: `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. Ejemplo: `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) Ejemplo: `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. Ejemplo: `04/11/2026`
- `financiacion` (boolean, opcional (cobro)): El cobro se ha realizado mediante un instrumento de financiación concertado por el emisor. Ejemplo: `false`
- `rectificada` (boolean, opcional (pago)): La factura pagada ha sido rectificada (el pago no tiene por qué coincidir con el importe original) Ejemplo: `false`
- `rectificativa_negativa` (boolean, opcional (pago)): Factura rectificativa negativa, sin pago asociado. Ejemplo: `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. Ejemplo: `true`

**RESPUESTA (return)**

- `id` (integer, Identificador del estado en Ticketbai WS) Ejemplo: `128`
- `estado / baja` (, Estado comunicado y si es una anulación) Ejemplo: `pago`
- `factura, fecha_factura, nif_emisor` (, Factura a la que se refiere) Ejemplo: `F2026-0153`
- `fecha / vencimiento` (, Fechas comunicadas (dd/mm/yyyy)) Ejemplo: `10/11/2026`
- `result` (string, **PENDING**  en cola, **OK**  aceptado por la AEAT, **ERROR**  rechazado (ver **errores** )) Ejemplo: `OK`
- `errores` (array, Lista de errores de la AEAT: codigo y descripcion)

**POST** `https://{entorno}.ticketbaiws.eus/spfe-estados/`

```bash
$ 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
}'
```

Respuesta:

```json
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
}
```

Response en cola (sin sincrono):

```json
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
}
```

Response con error de la AEAT:

```json
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"
}
```

Fuente: https://ticketbaiws.eus/es/spfe-estados-post/
