1. Home
  2. Servicios
  3. Timbrado de Retenciones
  4. Cancelación Retenciones Masivas
  1. Home
  2. Servicios
  3. Cancelaciones
  4. Cancelación Retenciones Masivas

Cancelación Retenciones Masivas

Servicio que permite cancelar de manera masiva facturas de retenciones e información de pagos con sus complementos a través de un Web Service de tipo REST. Esto se realiza enviando un archivo XML o utilizando Certificados de Sellos Digitales (CSD).

URL´s

🛠️ Pruebas:
🚀 Productivo:

💡 Para este servicio también puedes utilizar los CSD de pruebas proporcionados por el SAT.

ℹ️ Nota: Estos endpoints corresponden al servicio de cancelación masiva de retenciones (/retencion/cancel/masiva/). Son independientes a los endpoint de cancelación de retenciones convencional.


Valores válidos del campo motivo

El campo motivo es requerido en todos los métodos de cancelación. Los valores aceptados son:

Tabla con los motivos.
ClaveDescripción¿Requiere “FolioSustitución”?
01Comprobante emitido con errores con relación, obligatorio
02Comprobante emitido con errores sin relación❌ No enviarse
03No se llevó a cabo la operación❌ No enviarse
04Operación nominativa relacionada en factura global❌ No enviarse

⚠️ Importante: folioSustitucion solo es requerido cuando motivo = "01". Para cualquier otro motivo, este campo debe enviarse como null u omitirse.


Cancelación masiva por XML

Servicio para cancelar enviando un XML con la información y folios de las facturas a cancelar.

🔗 Endpoint

MétodoRuta
POST/retencion/cancel/masiva/xml

🔐 Autenticación y Headers

HeaderValue
AuthorizationBearer Token
Content-Typemultipart/form-data

📋 Parámetros Form-Data

PropiedadUsoDescripción
xmlRequeridoXML estructurado conforme al estándar anexo 20 (pág. 62, en el portal oficial del SAT), con la información de los comprobantes a cancelar

Ejemplo Request

curl --request POST \
  --url https://services.test.sw.com.mx/retencion/cancel/masiva/xml \
  --header 'Authorization: Bearer $token' \
  --form 'xml=@/ruta/cancelacion.xml'
<Cancelacion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.sat.gob.mx/esquemas/retencionpago/1" Fecha="2026-06-25T10:35:00" RfcEmisor="EKU9003173C9">
    <Folios>
        <Folio UUID="c15da76c-94a8-43ee-9a1d-ca591985d587" Motivo="02" FolioSustitucion=""/>
    </Folios>
    <Folios>
        <Folio UUID="9bac1b97-3130-4a04-b027-84747f099e10" Motivo="01" FolioSustitucion="1fae5735-ca51-4be4-9180-827c44fdb227"/>
    </Folios>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
            <Reference URI="">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                <DigestValue>Rndk9QwYQRV/rZVWv/YUzIYgSzk=</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>B63iL57kj7QBJNoc/1zNVCFIuxt0sxGrJgAHPidlfzQdMurY+BLXR3DuNYbL6hlQTbcP4OCWLi/0ATt139hrEeMrNr4R4YTlZJLNReB8bGXj0dnFhjN9/zQxEg0Sk6FRYSCrGR8P8LChRNeATYLduBGC92Sws4ORMd+EyFR0UBu4xPB/seS0M61aARYd6/Npod60cV7T9dFGV5J2/W+AlEJYOtBu1GxATeiKo9VdANHFLi8b/Ywum8HfRpqLODk601wn9u+sV6ORpvXQ9yXUZ7GvnCbf+2j6tRMqfBIk42ixGwXhJxPfiRxKmFRzvGn37Z/QfYg2CRDQYJ0L1pwGwA==</SignatureValue>
        <KeyInfo>
            <X509Data>
                <X509Certificate>MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=</X509Certificate>
                <X509IssuerSerial>
                    <X509IssuerName>CN=AC UAT, O=SERVICIO DE ADMINISTRACION TRIBUTARIA, OU=SAT-IES Authority, E=oscar.martinez@sat.gob.mx, STREET=3ra cerrada de caliz, PostalCode=06370, C=MX, ST=CIUDAD DE MEXICO, L=COYOACAN, OID.2.5.4.45=2.5.4.45, OID.1.2.840.113549.1.9.2=responsable: ACDMA-SAT</X509IssuerName>
                    <X509SerialNumber>3330303031303030303030353030303033343136</X509SerialNumber>
                </X509IssuerSerial>
            </X509Data>
        </KeyInfo>
    </Signature>
</Cancelacion>

Ejemplo Response

{
    "data": {
        "folioSeguimiento": "1C4C60BC-0BA1-40FF-8D1F-F4DC80B52E25"
    },
    "status": "success"
}
{
    "message": "CACFDI33 - Problemas con los campos.",
    "messageDetail": "La solicitud no puede ser nula.",
    "data": null,
    "status": "error"
}
AtributoTipoDescripción
messageStringCódigo regresado cuando existe un error.
messageDetailStringMensaje más descriptivo del error cuando existe uno.
dataobject/nullContiene la información del resultado de la cancelación masiva.
statusString“success” o “error”

Cancelación masiva por CSD

Cancelación masiva enviando los certificados CSD del emisor en Base64 directamente en el body del request, junto con el arreglo de folios a cancelar.

🔗 Endpoint

MétodoRuta
POST/retencion/cancel/masiva/csd

🔐 Autenticación y Headers

HeaderValue
AuthorizationBearer Token
Content-Typeapplication/json

🧾 Parámetros JSON

PropiedadUsoDescripción
rfcRequeridoRFC del emisor
b64CerRequeridoCertificado .cer del emisor en Base64
b64KeyRequeridoLlave privada .key del emisor en Base64
passwordRequeridoContraseña del certificado
foliosRequeridoArreglo de folios a cancelar
folios[].uuidRequeridoUUID de la retención a cancelar
folios[].motivoRequeridoClave del motivo de cancelación
folios[].folioSustitucionCondicionalUUID del comprobante que sustituye. Requerido solo cuando motivo = “01”

Ejemplo Request

curl --request POST \
  --url https://services.test.sw.com.mx/retencion/cancel/masiva/csd \
  --header 'Authorization: Bearer $token' \
  --header 'Content-Type: application/json' \
  --data '{
  "rfc": "EKU9003173C9",
  "b64Cer": "$cer",
  "b64Key": "$key",
  "password": "12345678a",
  "folios": [
    {
      "uuid": "286C2251-C152-4530-9D80-B7E3376B2D17",
      "motivo": "01",
      "folioSustitucion": "FE4E71B0-8959-4FB9-8091-F5AC4FB0FEF8"
    }
  ]
}'

curl --request POST \
  --url https://services.test.sw.com.mx/retencion/cancel/masiva/csd \
  --header 'Authorization: Bearer $token' \
  --header 'Content-Type: application/json' \
  --data '{
  "rfc": "EKU9003173C9",
  "b64Cer": "$cer",
  "b64Key": "$key",
  "password": "12345678a",
  "folios": [
    {
      "uuid": "286C2251-C152-4530-9D80-B7E3376B2D17",
      "motivo": "02",
      "folioSustitucion": null
    }
  ]
}'

Ejemplo Response

{
    "data": {
        "folioSeguimiento": "1C4C60BC-0BA1-40FF-8D1F-F4DC80B52E25"
    },
    "status": "success"
}
{
    "message": "CACFDI33 - Problemas con los campos.",
    "messageDetail": "La solicitud no puede ser nula.",
    "data": null,
    "status": "error"
}
AtributoTipoDescripción
messageStringCódigo regresado cuando existe un error.
messageDetailStringMensaje más descriptivo del error cuando existe uno.
dataobject/nullContiene la información del resultado de la cancelación masiva.
statusString“success” o “error”

Cancelación masiva por PFX

Cancelación masiva enviando el archivo PFX (combinación de certificado y llave privada) en Base64, junto con el arreglo de folios a cancelar.

💡 Artículo de apoyo: ¿Cómo crear un PFX?

🔗 Endpoint

MétodoRuta
POST/retencion/cancel/masiva/pfx

🔐 Autenticación y Headers

HeaderValue
AuthorizationBearer Token
Content-Typeapplication/json

🧾 Parámetros JSON

PropiedadUsoDescripción
rfcRequeridoRFC del emisor
b64PfxRequeridoArchivo PFX del emisor en Base64 (combina .cer y .key)
passwordRequeridoContraseña del archivo PFX
foliosRequeridoArreglo de folios a cancelar
folios[].uuidRequeridoUUID de la retención a cancelar
folios[].motivoRequeridoClave del motivo de cancelación
folios[].folioSustitucionCondicionalUUID del comprobante que sustituye. Requerido solo cuando motivo = “01”

Ejemplo Request

curl --request POST \
  --url https://services.test.sw.com.mx/retencion/cancel/masiva/pfx \
  --header 'Authorization: Bearer $token' \
  --header 'Content-Type: application/json' \
  --data '{
  "rfc": "EKU9003173C9",
  "b64Pfx": "$pfx",
  "password": "12345678a",
  "folios": [
    {
      "uuid": "286C2251-C152-4530-9D80-B7E3376B2D17",
      "motivo": "01",
      "folioSustitucion": "FE4E71B0-8959-4FB9-8091-F5AC4FB0FEF8"
    }
  ]
}'
curl --request POST \
  --url https://services.test.sw.com.mx/retencion/cancel/masiva/pfx \
  --header 'Authorization: Bearer $token' \
  --header 'Content-Type: application/json' \
  --data '{
  "rfc": "EKU9003173C9",
  "b64Pfx": "$pfx",
  "password": "12345678a",
  "folios": [
    {
      "uuid": "286C2251-C152-4530-9D80-B7E3376B2D17",
      "motivo": "02",
      "folioSustitucion": null
    }
  ]
}'

Ejemplo Response

{
    "data": {
        "folioSeguimiento": "1C4C60BC-0BA1-40FF-8D1F-F4DC80B52E25"
    },
    "status": "success"
}
{
    "message": "CACFDI33 - Problemas con los campos.",
    "messageDetail": "La solicitud no puede ser nula.",
    "data": null,
    "status": "error"
}
AtributoTipoDescripción
messageStringCódigo regresado cuando existe un error.
messageDetailStringMensaje más descriptivo del error cuando existe uno.
dataobject/nullContiene la información del resultado de la cancelación masiva.
statusString“success” o “error”

Cancelación masiva por UUID

Cancelación masiva utilizando el certificado del emisor previamente cargado en la cuenta. El RFC del emisor se incluye directamente en la ruta del endpoint.

⚠️ Importante: El rfc del emisor va en la ruta de la petición (/retencion/cancel/masiva/{rfc}), no en el body.

🔗 Endpoint

MétodoRuta
POST/retencion/cancel/masiva/{rfc}

🔐 Autenticación y Headers

HeaderValue
AuthorizationBearer Token
Content-Typeapplication/json

📍 Parámetros Path

PropiedadUsoDescripción
rfcRequeridoRFC del emisor

🧾 Parámetros JSON (Body)

PropiedadUsoDescripción
foliosRequeridoArreglo de folios a cancelar
folios[].uuidRequeridoUUID de la retención a cancelar
folios[].motivoRequeridoClave del motivo de cancelación
folios[].folioSustitucionCondicionalUUID del comprobante que sustituye. Requerido solo cuando motivo = “01”

Ejemplo Request

curl --request POST \
  --url https://services.test.sw.com.mx/retencion/cancel/masiva/EKU9003173C9 \
  --header 'Authorization: Bearer $token' \
  --header 'Content-Type: application/json' \
  --data '{
  "folios": [
    {
      "uuid": "286C2251-C152-4530-9D80-B7E3376B2D17",
      "motivo": "01",
      "folioSustitucion": "FE4E71B0-8959-4FB9-8091-F5AC4FB0FEF8"
    }
  ]
}'
curl --request POST \
  --url https://services.test.sw.com.mx/retencion/cancel/masiva/EKU9003173C9 \
  --header 'Authorization: Bearer $token' \
  --header 'Content-Type: application/json' \
  --data '{
  "folios": [
    {
      "uuid": "286C2251-C152-4530-9D80-B7E3376B2D17",
      "motivo": "02",
      "folioSustitucion": null
    }
  ]
}'

Ejemplo Response

{
    "data": {
        "folioSeguimiento": "1C4C60BC-0BA1-40FF-8D1F-F4DC80B52E25"
    },
    "status": "success"
}
{
    "message": "CACFDI33 - Problemas con los campos.",
    "messageDetail": "La solicitud no puede ser nula.",
    "data": null,
    "status": "error"
}
AtributoTipoDescripción
messageStringCódigo regresado cuando existe un error.
messageDetailStringMensaje más descriptivo del error cuando existe uno.
dataobject/nullContiene la información del resultado de la cancelación masiva.
statusString“success” o “error”

Consulta de acuse de cancelación

Consulta el acuse de cancelación emitido por el SAT a partir del folioSeguimiento obtenido en la respuesta de cualquier método de cancelación masiva.

ℹ️ Nota: El parámetro folioSeguimiento se envía como query param en la URL.

🔗 Endpoint

MétodoRuta
POST/retencion/cancel/acuse?folioSeguimiento={uuid}

🔐 Autenticación y Headers

HeaderValue
AuthorizationBearer Token

🔎 Query Params

ParámetroUsoDescripción
folioSeguimientoRequeridoUUID de seguimiento obtenido en la respuesta de la cancelación masiva

Ejemplo Request

curl --request POST \
  --url 'https://services.test.sw.com.mx/retencion/cancel/acuse?folioSeguimiento=1C4C60BC-0BA1-40FF-8D1F-F4DC80B52E25' \
  --header 'Authorization: Bearer $token'

Ejemplo Response

{
    "data": {
        "acuse": "<?xml version=\"1.0\"?><Acuse xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Fecha=\"2026-06-08T22:21:12.5363998\" RfcEmisor=\"XAXX010101000\" WorkProcessId=\"50a3b377-ef54-4d56-b908-b598b8d50114\" xmlns=\"http://www.sat.gob.mx/esquemas/retencionpago/1\"><Folios><UUID>286C2251-C152-4530-9D80-B7E3376B2D17</UUID><EstatusUUID>1201</EstatusUUID><Motivo>02</Motivo><Extemporaneo>false</Extemporaneo></Folios><Signature Id=\"SelloSAT\" xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /><SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#hmac-sha512\" /><Reference URI=\"\"><Transforms><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\"><XPath>not(ancestor-or-self::*[local-name()='Signature'])</XPath></Transform></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha512\" /><DigestValue>LvwvRFg1m0qMEsFucy+CTHgcpPcvMeNBgcu/Q0Bnhm9IydrvFDvYSbZcXC06AHFXt/bDPgw4WUCOX5rEfV9s+Q==</DigestValue></Reference></SignedInfo><SignatureValue>7+kgxLMbZ0Srn6EiMY7v9P5I2n7hnhROjHX2KdQwXhjxtedIAt7GQJwAGb0HARuEsA9eIdMusk2CCi6ZWJANfQ==</SignatureValue><KeyInfo><KeyName>30001000000500002554</KeyName><KeyValue><RSAKeyValue><Modulus>kaqT7gZEh0uBLPcVUR2uOFkJN7hiOmNLhpjUi+DvS1Q0dYpZv+nLQK1IZZHpfJlo54x1QQqU0UGZuXTlQpYrVNzjVmtLZQ9JhB9N4x7stjk9+RQQo6m4RrSPjcqW1oy2aQKnflKEPUypzP88/B+tvKKI2toAk+NJukbQy0cI1y35z3msCspUTYsBJ4E67UKGnbQYK9u6kUCL9Ydt9tlJsXjTLdEiKGRDi259suZCYt4qIPw91HzTQrt7a8fAYXQPdR6OgnPog0+zyvVrsL3/sCQqG2m/tTlElrqCgJp8zjLiDfdhe9Y3S7NnYmLUn0RJrENotSweqEu9f3UkUFD/eQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo></Signature></Acuse>",
        "uuid": {
            "286C2251-C152-4530-9D80-B7E3376B2D17": "1201"
        }
    },
    "status": "success"
}
{
    "message": "CR1006 - CR1006 - Mensaje SAT.",
    "messageDetail": "El folio de seguimiento no es un identificador válido.",
    "data": null,
    "status": "error"
}
AtributoTipoDescripción
messageStringCódigo regresado cuando existe un error.
messageDetailStringMensaje más descriptivo del error cuando existe uno.
dataobject/nullObjeto con el resultado del acuse de cancelación.
data.acuseStringXML del acuse de cancelación emitido por el SAT.
data.uuidObjectDiccionario donde la clave es el UUID cancelado y el valor es el código de estatus SAT (e.g. “1201”).
statusString“success” o “error”

Códigos de respuesta de folios

Códigos que el SAT puede devolver en el campo EstatusUUID del acuse, o como parte del mensaje de respuesta al procesar la cancelación de cada folio.

Tabla de códigos de respuesta.
CódigoMensaje
1201Solicitud de cancelación recibida.
1202UUID Previamente cancelado.
1203No encontrado corresponde al emisor.
1205UUID No existe.
1300Autenticación no válida.
1301XML mal formado.
1302Estructura de folio no válida.
1303Estructura de RFC no válida.
1304Estructura de fecha no válida.
1305Certificado no corresponde al emisor.
1306Certificado no vigente.
1307Uso de e.firma no permitido.
1308Certificado revocado o caduco.
1309Firma mal formada o inválida.


En SW® somos mejores para TI, es por ello que tu opinión es muy importantepor favor ayúdanos calificando este articulo y dejando tus comentarios.

How useful was this post?

Click on a star to rate it!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Updated on junio 25, 2026

Related Articles