# Cancelar un complemento de pago > `POST https://api.cfdi.express/v1/payments/{id}/cancel` — Cancela ante el SAT un complemento de pago timbrado y restaura el saldo pendiente de la factura. URL de esta página: https://cfdi.express/docs/api/cancelar-complemento-de-pago Autenticación: requiere API key (`Authorization: Bearer sk_test_…` o `sk_live_…`) Idempotencia: requiere el header `Idempotency-Key`. Mismos motivos que en facturas (01–04). Cancelar un REP devuelve su importe al `saldoPendiente` de la factura PPD, de modo que puedes volver a timbrar el pago corregido. ### Parámetros de ruta | Campo | Tipo | Requerido | Descripción | |---|---|---|---| | `id` | string | sí | Id del complemento de pago. | ### Headers | Campo | Tipo | Requerido | Descripción | |---|---|---|---| | `Idempotency-Key` | string | sí | Llave única de la operación de cancelación. | ### Cuerpo (JSON) | Campo | Tipo | Requerido | Descripción | |---|---|---|---| | `motivo` | string | sí | 01, 02, 03 o 04 del catálogo c_MotivoCancelacion. | | `folioSustitucion` | string | no | UUID del REP que lo sustituye. Obligatorio con motivo 01. | ## Ejemplos ### cURL ```bash curl -X POST https://api.cfdi.express/v1/payments/pay9x2m6q4k1v3p8d7n5c0bt/cancel \ -H "Authorization: Bearer sk_test_..." \ -H "Idempotency-Key: cancel_payment_88231" \ -H "Content-Type: application/json" \ -d '{ "motivo": "02" }' ``` ## Respuesta ### 202 Accepted ```json { "id": "pay9x2m6q4k1v3p8d7n5c0bt", "object": "payment", "status": "cancelled", "uuid": "5c9e7f22-1a3b-4d8e-9f01-2b3c4d5e6f70", "cancellation": { "motivo": "02", "folioSustitucion": null, "status": "cancelled", "chargedCentavos": 100, "acuseUrl": "https://files.cfdi.express/acuse-5c9e7f22.xml?X-Amz-Expires=900&...", "requestedAt": "2026-08-18T18:48:01.220Z", "resolvedAt": "2026-08-18T18:48:03.994Z" } } ``` ## Errores | Status | code | Cuándo aparece | |---|---|---| | 400 | `validation_error` | Motivo inválido o falta folioSustitucion con motivo 01. | | 401 | `unauthorized` | Falta el header Authorization o la llave es inválida. | | 402 | `insufficient_credits` | No hay saldo para el timbre de cancelación. | | 404 | `not_found` | El complemento no existe en tu cuenta. | | 422 | `sat_rejected` | El SAT rechazó la cancelación. | | 503 | `pac_unavailable` | El PAC no está disponible. | ## Notas - Para cancelar una factura PPD tienes que cancelar antes todos sus REPs vigentes. ## Relacionados - [POST /v1/invoices/{id}/payments](https://cfdi.express/docs/api/timbrar-complemento-de-pago) — Timbrar REP - [POST /v1/invoices/{id}/cancel](https://cfdi.express/docs/api/cancelar-factura) — Cancelar factura --- Referencia completa: https://cfdi.express/docs/api · OpenAPI: https://api.cfdi.express/openapi.json · Llaves: https://dash.cfdi.express