Árbol del API · Facturas y cobranza › paymentComplement
Complemento de pago de un cobro
paymentComplement
Devuelve el complemento de pago (REP) que incluye un cobro: el estado de su timbrado, su UUID y las ligas para descargar el XML y el PDF.
El complemento no se emite al registrar el cobro: la empresa lo genera y lo
timbra en AdvantaCloud con cobros ya conciliados con el banco, y un mismo
complemento puede amparar varios cobros del cliente en el mes.
Mientras el cobro no esté en un complemento, la respuesta es
paymentComplement: null sin error. Timbrar o reintentar el timbrado no
está disponible con Llave API.
Si la llave no tiene el permiso, la respuesta también es null sin error;
un cobro que no existe sí responde NOT_FOUND.
Estado del timbrado
stampStatus dice en qué punto está el timbrado y qué descargas llegan:
REGISTERED: el complemento existe, pero aún no se envía a timbrar. Sin descargas.PENDING: se envió a timbrar y falta la respuesta del PAC; vuelve a consultar en unos segundos. Sin descargas.STAMPED: timbrado, con UUID; es un CFDI válido. XML y PDF.FAILED: el PAC o el SAT rechazó el timbrado; el motivo está enstampErrory la empresa lo corrige y lo vuelve a enviar. Sin descargas.CANCEL_REQUESTED: se solicitó su cancelación al SAT y falta la respuesta. XML y PDF.CANCELLED: cancelado. Sólo XML.UNKNOWN: un estatus sin equivalente; revisarawStatus. Sin descargas.
Cuando se completa la cancelación de un complemento, el cobro queda libre y
la consulta vuelve a responder null hasta que la empresa emita otro. Si la
empresa lo sustituye, la consulta devuelve desde ese momento el complemento
nuevo, con otro folio y, al timbrarse, otro UUID. Guarda el UUID que
recibiste y compáralo en cada consulta.
Descargas
Las ligas están firmadas, vencen a los 10 minutos y no llevan el header
Authorization: descarga el archivo desde tu servidor en cuanto lo pidas,
sin compartir la liga. Al descargar, AdvantaCloud vuelve a revisar que la
llave exista, que conserve el permiso «Complemento de Pago» y que el
complemento siga en un estado con esa descarga: si no, o si la liga ya
venció, responde HTTP 403, y si el complemento ya no tiene su XML, HTTP 404.
Para una liga nueva, repite la consulta.
paymentComplement( collectionId: ID! ): PaymentComplement
Argumentos
1
| Argumento | Tipo | Descripción |
|---|---|---|
collectionIdID! |
ID! | Identificador del cobro ( |
Lo que devuelve
PaymentComplement
Campos principales de PaymentComplement:
| Campo | Tipo | Descripción |
|---|---|---|
idID! |
ID! | Identificador del complemento. Varios cobros del mismo cliente pueden compartirlo. |
folioString |
String | Folio del complemento con su serie, p. ej. PF2610031. |
uuidString |
String | Folio fiscal (UUID) del complemento; null mientras no se timbra. |
stampStatusString! |
String! | Estado del timbrado: REGISTERED, PENDING, STAMPED, FAILED, CANCEL_REQUESTED, CANCELLED o UNKNOWN. Sólo con STAMPED el complemento es un CFDI válido. Es texto, no un enum: trata un valor desconocido como UNKNOWN. |
stampErrorString |
String | Motivo por el que se rechazó el timbrado, cuando stampStatus es FAILED. |
stampedAtDateTime |
DateTime | Fecha y hora del timbrado que devolvió el PAC. Antes de timbrarse trae la fecha con la que el complemento se envió a timbrar. |
xmlUrlString |
String | Liga para descargar el XML timbrado. Llega con STAMPED, y con CANCEL_REQUESTED o CANCELLED si el complemento llegó a timbrarse; si no, null. Está firmada y vence a los 10 minutos. Requiere «Complemento de Pago» en la llave; sin él llega null. |
pdfUrlString |
String | Liga para descargar el PDF del complemento timbrado. Llega con STAMPED, y con CANCEL_REQUESTED si el complemento llegó a timbrarse; si no, null. Está firmada y vence a los 10 minutos. Requiere «Complemento de Pago» en la llave; sin él llega null. |
Permisos
Llave API Integraciones
La llave ve los registros de toda la empresa del subdominio.
Sin el permiso Sin error
La consulta responde sin error, pero el resultado llega null.
Así lo conserva el API para las integraciones que ya lo usan: revisa los permisos de la llave si una lista llega vacía sin razón.
Errores
| Código | Cuándo ocurre | Qué hacer |
|---|---|---|
| HTTP 401 | Falta el header Authorization o la llave no existe en la empresa del subdominio. La respuesta no trae cuerpo. | Revisa la llave y el subdominio. No reintentes. |
NOT_FOUND | No hay un cobro con ese collectionId en la empresa. | Revisa que envías el id del cobro, no el del complemento. |
| HTTP 422 | Falla interna o dato rechazado al guardar. El cuerpo es {"error": …}, sin data. | Si no cambiaste nada, reintenta con espera exponencial. |
Los errores de la consulta llegan con HTTP 200 en errors, con su código en extensions.code. Revisa siempre errors, no sólo el estatus HTTP. Errores y reintentos.