API REST (JSON v1)

Manual de Integración API REST (JSON)

Guía de referencia técnica para integrar timbrado masivo CFDI 4.0, Recepción de Pagos 2.0, Nómina 1.2 y Cancelación ante el SAT.

1. Endpoints de Servicio

Los endpoints de la API REST v1 reciben peticiones HTTP POST con cuerpo JSON y autenticación obligatoria mediante el encabezado HTTP X-API-KEY.

API REST v1 (Producción):

https://servicios.integratucfdi.net/api/v1/{metodo}

Los servicios SOAP 1.1 / 1.2 reciben peticiones XML definidas por su documento WSDL oficial con autenticación por usuario y contraseña en la llamada.

Servicio Web SOAP Principal (WSDL):

https://servicios.integratucfdi.net/wscfdi.php?wsdl

Servicio Web SOAP Afiliados:

https://afiliados.integratucfdi.net/wscfdi.php?wsdl

2. Ambiente Sandbox (Entorno de Pruebas)

Puedes realizar todas las pruebas de timbrado sin consumir timbres de tu saldo real ni emitir comprobantes fiscales reales consumiendo el ambiente de Sandbox:

Endpoint API REST v1 Sandbox:

https://sandbox.integratucfdi.net/api/v1/{metodo}
  • API Key Sandbox (Header HTTP): ak_test_sandbox_integratucfdi_2026
  • RFC Emisor Pruebas: HECF750311V64
  • ID Sucursal ($id): 1
  • ID Certificado ($idcertificado): 10494

Endpoint WSDL SOAP Sandbox:

https://sandbox.integratucfdi.net/wscfdi.php?wsdl
  • RFC Emisor Pruebas: HECF750311V64
  • ID Sucursal ($id): 1
  • ID Certificado ($idcertificado): 10494
  • Usuario (SOAP): pruebas
  • Password (SOAP): ee2ec3cc66427bb422894495068222a8

generarComprobante(...)

Método general para timbrado de comprobantes fiscales CFDI 4.0 (Ingreso, Egreso, Traslado). Permite emitir facturas estándar o adjuntar complementos fiscales especializados en la misma llamada.

Firma del Método SOAP:

generarComprobante($id, $rfcemisor, $idcertificado, $documento, $usuario, $password)

Endpoint REST HTTP POST:

POST /api/v1/generarComprobante (Header: X-API-KEY: ak_test_...)

Fecha de Emisión Opcional: El campo fecha en la propiedad documento es opcional. Si se omite o se envía vacío (''), el servidor calcula la fecha y hora exacta de emisión basada en la zona horaria del Código Postal de la sucursal.

3.1 Factura Estándar (Sin Complementos)

Ejemplo básico de facturación CFDI 4.0 tradicional para venta de bienes o servicios generales.

timbrar_rest.sh
curl -X POST "https://sandbox.integratucfdi.net/api/v1/generarComprobante" \
  -H "X-API-KEY: ak_test_sandbox_integratucfdi_2026" \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1,
    "rfcemisor": "HECF750311V64",
    "idcertificado": 10494,
    "documento": {
        "serie": "F",
        "folio": "1001",
        "formapago": "01",
        "metodopago": "PUE",
        "tipodocumento": "I",
        "moneda": "MXN",
        "subtotal": "1000.00",
        "total": "1160.00",
        "exportacion": "01",
        "receptor": {
            "rfc": "XAXX010101000",
            "nombre": "PUBLICO EN GENERAL",
            "usodelcomprobante": "S01",
            "codigopostal": "80000",
            "regimenfiscal": "616"
        },
        "conceptos": [
            {
                "clave": "84111506",
                "cantidad": "1",
                "codigounidad": "E48",
                "unidad": "Servicio",
                "descripcion": "Servicios de Software",
                "valorUnitario": "1000.00",
                "importe": "1000.00",
                "objetoimpuesto": "02"
            }
        ]
    }
}'
timbrado_factura_rest.php
<?php
$ch = curl_init('https://sandbox.integratucfdi.net/api/v1/generarComprobante');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-API-KEY: ak_test_sandbox_integratucfdi_2026',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'id' => 1, 'rfcemisor' => 'HECF750311V64', 'idcertificado' => 10494,
        'documento' => [
            'serie' => 'F', 'folio' => '1001', 'formapago' => '01', 'metodopago' => 'PUE', 'tipodocumento' => 'I', 'moneda' => 'MXN', 'subtotal' => '1000.00', 'total' => '1160.00', 'exportacion' => '01',
            'receptor' => ['rfc' => 'XAXX010101000', 'nombre' => 'PUBLICO EN GENERAL', 'usodelcomprobante' => 'S01', 'codigopostal' => '80000', 'regimenfiscal' => '616'],
            'conceptos' => [['clave' => '84111506', 'cantidad' => '1', 'codigounidad' => 'E48', 'unidad' => 'Servicio', 'descripcion' => 'Servicios de Software', 'valorUnitario' => '1000.00', 'importe' => '1000.00', 'objetoimpuesto' => '02']]
        ]
    ])
]);
$res = json_decode(curl_exec($ch), true);
if ($res['resultado']) {
    echo "UUID: " . $res['uuid'];
}
?>
timbrado_factura_soap.php
<?php
$wsdl = "https://sandbox.integratucfdi.net/wscfdi.php?wsdl";
$client = new SoapClient($wsdl, array('trace' => 1, 'encoding' => 'UTF-8'));

$documento = array(
    'serie' => 'F', 'folio' => '1001', 'formapago' => '01', 'metodopago' => 'PUE', 'tipodocumento' => 'I', 'moneda' => 'MXN', 'subtotal' => '1000.00', 'total' => '1160.00', 'exportacion' => '01',
    'receptor' => array('rfc' => 'XAXX010101000', 'nombre' => 'PUBLICO EN GENERAL', 'usodelcomprobante' => 'S01', 'codigopostal' => '80000', 'regimenfiscal' => '616'),
    'conceptos' => array(
        array('clave' => '84111506', 'cantidad' => '1', 'codigounidad' => 'E48', 'unidad' => 'Servicio', 'descripcion' => 'Servicios de Software', 'valorUnitario' => '1000.00', 'importe' => '1000.00', 'objetoimpuesto' => '02')
    )
);

$res = $client->generarComprobante(1, 'HECF750311V64', 10494, $documento, 'pruebas', 'ee2ec3cc66427bb422894495068222a8');
if ($res->resultado) {
    file_put_contents("factura_" . $res->uuid . ".xml", $res->xml);
    file_put_contents("cbb_" . $res->uuid . ".jpg", base64_decode($res->cbb));
}
?>
FacturaRestService.cs
using System.Net.Http.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", "ak_test_sandbox_integratucfdi_2026");

var payload = new {
    id = 1, rfcemisor = "HECF750311V64", idcertificado = 10494,
    documento = new {
        serie = "F", folio = "1001", formapago = "01", metodopago = "PUE", tipodocumento = "I", moneda = "MXN", subtotal = "1000.00", total = "1160.00", exportacion = "01",
        receptor = new { rfc = "XAXX010101000", nombre = "PUBLICO EN GENERAL", usodelcomprobante = "S01", codigopostal = "80000", regimenfiscal = "616" },
        conceptos = new[] { new { clave = "84111506", cantidad = "1", codigounidad = "E48", unidad = "Servicio", descripcion = "Servicios de Software", valorUnitario = "1000.00", importe = "1000.00", objetoimpuesto = "02" } }
    }
};

var response = await client.PostAsJsonAsync("https://sandbox.integratucfdi.net/api/v1/generarComprobante", payload);
var res = await response.Content.ReadFromJsonAsync<dynamic>();
Console.WriteLine("UUID REST: " + res?.uuid);
FacturaSoapService.cs
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
var endpoint = new EndpointAddress("https://sandbox.integratucfdi.net/wscfdi.php");
var client = new wscfdiPortTypeClient(binding, endpoint);

var documentoFactura = new Dictionary<string, object> {
    { "serie", "F" }, { "folio", "1001" }, { "formapago", "01" }, { "metodopago", "PUE" }, { "tipodocumento", "I" }, { "moneda", "MXN" }, { "subtotal", "1000.00" }, { "total", "1160.00" }, { "exportacion", "01" },
    { "receptor", new Dictionary<string, string> { { "rfc", "XAXX010101000" }, { "nombre", "PUBLICO EN GENERAL" }, { "usodelcomprobante", "S01" }, { "codigopostal", "80000" }, { "regimenfiscal", "616" } } },
    { "conceptos", new[] { new Dictionary<string, string> { { "clave", "84111506" }, { "cantidad", "1" }, { "codigounidad", "E48" }, { "unidad", "Servicio" }, { "descripcion", "Servicios de Software" }, { "valorUnitario", "1000.00" }, { "importe", "1000.00" }, { "objetoimpuesto", "02" } } } }
};

var res = client.generarComprobante(1, "HECF750311V64", 10494, documentoFactura, "pruebas", "ee2ec3cc66427bb422894495068222a8");
if (res.resultado) {
    Console.WriteLine("UUID SOAP: " + res.uuid);
}
timbrado_rest.py
import requests

headers = {
    'X-API-KEY': 'ak_test_sandbox_integratucfdi_2026',
    'Content-Type': 'application/json'
}

payload = {
    'id': 1, 'rfcemisor': 'HECF750311V64', 'idcertificado': 10494,
    'documento': {
        'serie': 'F', 'folio': '1001', 'formapago': '01', 'metodopago': 'PUE', 'tipodocumento': 'I', 'moneda': 'MXN', 'subtotal': '1000.00', 'total': '1160.00', 'exportacion': '01',
        'receptor': {'rfc': 'XAXX010101000', 'nombre': 'PUBLICO EN GENERAL', 'usodelcomprobante': 'S01', 'codigopostal': '80000', 'regimenfiscal': '616'},
        'conceptos': [{'clave': '84111506', 'cantidad': '1', 'codigounidad': 'E48', 'unidad': 'Servicio', 'descripcion': 'Servicios de Software', 'valorUnitario': '1000.00', 'importe': '1000.00', 'objetoimpuesto': '02'}]
    }
}

res = requests.post('https://sandbox.integratucfdi.net/api/v1/generarComprobante', headers=headers, json=payload).json()
if res.get('resultado'):
    print(f"UUID REST: {res['uuid']}")
timbrado_soap.py
import zeep, base64

client = zeep.Client('https://sandbox.integratucfdi.net/wscfdi.php?wsdl')

doc = {
    'serie': 'F', 'folio': '1001', 'formapago': '01', 'metodopago': 'PUE', 'tipodocumento': 'I', 'moneda': 'MXN', 'subtotal': '1000.00', 'total': '1160.00', 'exportacion': '01',
    'receptor': {'rfc': 'XAXX010101000', 'nombre': 'PUBLICO EN GENERAL', 'usodelcomprobante': 'S01', 'codigopostal': '80000', 'regimenfiscal': '616'},
    'conceptos': [{'clave': '84111506', 'cantidad': '1', 'codigounidad': 'E48', 'unidad': 'Servicio', 'descripcion': 'Servicios de Software', 'valorUnitario': '1000.00', 'importe': '1000.00', 'objetoimpuesto': '02'}]
}

res = client.service.generarComprobante(id=1, rfcemisor='HECF750311V64', idcertificado=10494, documento=doc, usuario='pruebas', password='ee2ec3cc66427bb422894495068222a8')
if res.resultado:
    print(f"UUID SOAP: {res.uuid}")
RespuestaTimbrado.json
{
    "resultado": true,
    "mensaje": "CFDI 4.0 Timbrado Exitosamente",
    "fechadocumento": "2026-08-23T13:30:00",
    "seriecertificado": "00001000000501234567",
    "sellodocumento": "iS7gK8M9xL2pQ5rT8yU1vW3xY5zA7bC9dE1fG3hI5jK7lM9nO1pQ3rS5tU7vW9xY1z...",
    "uuid": "4F92E391-89B2-4A73-A3B9-8F7E1B5D90A2",
    "fechatimbre": "2026-08-23T13:30:02",
    "seriecertificadosat": "00001000000504465028",
    "sellotimbre": "K7aP9mN4bV1cX8zY3wA5sD7fG9hJ1kL3mN5bP7rS9tU1vW3xY5zA7bC9dE1fG3hI...",
    "cadenaoriginal": "||1.1|4F92E391-89B2-4A73-A3B9-8F7E1B5D90A2|2026-08-23T13:30:02|SAT970701NN3|iS7gK8M9xL2pQ5rT8...||",
    "rfcpac": "SAT970701NN3",
    "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cfdi:Comprobante .../>",
    "cbb": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAP...==",
    "archivos": "UEsDBBQAAAAIAI9lXFAAAAAA... [Archivo ZIP en Base64 con XML + CBB]"
}

3.2 Complemento Carta Porte 3.1

Para emitir el complemento vigente de Carta Porte 3.1, se incluye la llave cartaporte31 en la propiedad documento.

cartaporte_rest.sh
curl -X POST "https://sandbox.integratucfdi.net/api/v1/generarComprobante" \
  -H "X-API-KEY: ak_test_sandbox_integratucfdi_2026" \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1, "rfcemisor": "HECF750311V64", "idcertificado": 10494,
    "documento": {
        "serie": "CP", "folio": "3001", "formapago": "99", "metodopago": "PPD", "tipodocumento": "I", "moneda": "MXN", "subtotal": "15000.00", "total": "17400.00", "exportacion": "01",
        "receptor": { "rfc": "XAXX010101000", "nombre": "CLIENTE LOGISTICA SA DE CV", "usodelcomprobante": "G03", "codigopostal": "80000", "regimenfiscal": "601" },
        "conceptos": [ { "clave": "78101802", "cantidad": "1", "codigounidad": "E48", "unidad": "Servicio", "descripcion": "Servicio de Flete", "valorUnitario": "15000.00", "importe": "15000.00", "objetoimpuesto": "02" } ],
        "cartaporte31": {
            "TranspInternac": "No", "TotalDistRec": "450.00",
            "Ubicaciones": [
                { "TipoUbicacion": "Origen", "RFCRemitenteDestinatario": "HECF750311V64", "FechaHoraSalidaLlegada": "2026-08-24 08:00:00", "Domicilio": { "Estado": "SIN", "Pais": "MEX", "CodigoPostal": "80000" } },
                { "TipoUbicacion": "Destino", "RFCRemitenteDestinatario": "XAXX010101000", "FechaHoraSalidaLlegada": "2026-08-24 18:00:00", "DistanciaRecorrida": "450.00", "Domicilio": { "Estado": "JAL", "Pais": "MEX", "CodigoPostal": "44100" } }
            ],
            "Mercancias": {
                "PesoBrutoTotal": "1200.00", "UnidadPeso": "KGM", "NumTotalMercancias": "1",
                "Mercancia": [ { "BienesTransp": "42142100", "Descripcion": "Equipo Electrónico", "Cantidad": "100", "ClaveUnidad": "H87", "PesoEnKg": "1200.00" } ],
                "Autotransporte": { "PermSCT": "TPAF01", "NumPermisoSCT": "123456789", "IdentificacionVehicular": { "ConfigVehicular": "C2", "PlacaVM": "12ABC34", "AnioModeloVM": "2024" }, "Seguros": { "AseguraRespCivil": "Qualitas", "PolizaRespCivil": "POL-998877" } }
            }
        }
    }
}'
cartaporte_rest.php
<?php
$ch = curl_init('https://sandbox.integratucfdi.net/api/v1/generarComprobante');
curl_setopt_array($ch, [
    CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-KEY: ak_test_sandbox_integratucfdi_2026', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode([
        'id' => 1, 'rfcemisor' => 'HECF750311V64', 'idcertificado' => 10494,
        'documento' => [
            'serie' => 'CP', 'folio' => '3001', 'formapago' => '99', 'metodopago' => 'PPD', 'tipodocumento' => 'I', 'moneda' => 'MXN', 'subtotal' => '15000.00', 'total' => '17400.00', 'exportacion' => '01',
            'receptor' => ['rfc' => 'XAXX010101000', 'nombre' => 'CLIENTE LOGISTICA SA DE CV', 'usodelcomprobante' => 'G03', 'codigopostal' => '80000', 'regimenfiscal' => '601'],
            'conceptos' => [['clave' => '78101802', 'cantidad' => '1', 'codigounidad' => 'E48', 'unidad' => 'Servicio', 'descripcion' => 'Servicio de Flete', 'valorUnitario' => '15000.00', 'importe' => '15000.00', 'objetoimpuesto' => '02']],
            'cartaporte31' => ['TranspInternac' => 'No', 'TotalDistRec' => '450.00', 'Ubicaciones' => [...], 'Mercancias' => [...]]
        ]
    ])
]);
$res = json_decode(curl_exec($ch), true);
?>
cartaporte_soap.php
<?php
$client = new SoapClient("https://sandbox.integratucfdi.net/wscfdi.php?wsdl");
$documento = array('serie' => 'CP', 'folio' => '3001', 'cartaporte31' => array(...));
$res = $client->generarComprobante(1, 'HECF750311V64', 10494, $documento, 'pruebas', 'ee2ec3cc66427bb422894495068222a8');
?>
CartaPorteRest.cs
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", "ak_test_sandbox_integratucfdi_2026");
var response = await client.PostAsJsonAsync("https://sandbox.integratucfdi.net/api/v1/generarComprobante", payload);
CartaPorteSoap.cs
var client = new wscfdiPortTypeClient(binding, endpoint);
var res = client.generarComprobante(1, "HECF750311V64", 10494, doc, "pruebas", "ee2ec3cc66427bb422894495068222a8");
cartaporte_rest.py
import requests
res = requests.post('https://sandbox.integratucfdi.net/api/v1/generarComprobante', headers={'X-API-KEY': 'ak_test_sandbox_integratucfdi_2026'}, json=payload).json()
cartaporte_soap.py
import zeep
client = zeep.Client('https://sandbox.integratucfdi.net/wscfdi.php?wsdl')
res = client.service.generarComprobante(id=1, rfcemisor='HECF750311V64', idcertificado=10494, documento=doc, usuario='pruebas', password='ee2ec3cc66427bb422894495068222a8')
RespuestaCartaPorte.json
{
    "resultado": true,
    "mensaje": "CFDI 4.0 con Complemento Carta Porte 3.1 Timbrado Exitosamente",
    "uuid": "3E92A101-89C2-4B73-A3B9-9F8E1B5D90B3",
    "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cfdi:Comprobante ...><cartaporte31:CartaPorte .../></cfdi:Comprobante>",
    "cbb": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAP...==",
    "archivos": "UEsDBBQAAAAIAI9lXFAAAAAA... [ZIP con XML + CBB]"
}

generaComprobantePago(...)

Emisión de Complementos de Recepción de Pagos 2.0 (REP) relacionando las facturas liquidadas a crédito (PPD).

Firma del Método SOAP:

generaComprobantePago($id, $rfcemisor, $idcertificado, $documento, $usuario, $password)

Endpoint REST HTTP POST:

POST /api/v1/generaComprobantePago (Header: X-API-KEY: ak_test_...)
pago20_rest.sh
curl -X POST "https://sandbox.integratucfdi.net/api/v1/generaComprobantePago" \
  -H "X-API-KEY: ak_test_sandbox_integratucfdi_2026" \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1, "rfcemisor": "HECF750311V64", "idcertificado": 10494,
    "documento": {
        "serie": "REP", "folio": "201", "tipodocumento": "P", "subtotal": "0", "total": "0", "moneda": "XXX", "exportacion": "01",
        "receptor": { "rfc": "XAXX010101000", "nombre": "PUBLICO EN GENERAL", "usodelcomprobante": "CP01", "codigopostal": "80000", "regimenfiscal": "616" },
        "pagos20": [
            {
                "fechapago": "2026-08-23 15:30:00", "formadepago": "03", "moneda": "MXN", "monto": "1160.00",
                "cfdis": [ { "uuid": "4F92E391-89B2-4A73-A3B9-8F7E1B5D90A2", "serie": "F", "folio": "1001", "moneda": "MXN", "tipocambio": "1", "numeroparcialidad": "1", "importesaldoanterior": "1160.00", "importepagado": "1160.00", "importesaldoinsoluto": "0.00", "objetoimpuestos": "02" } ]
            }
        ]
    }
}'
pago20_rest.php
<?php
$ch = curl_init('https://sandbox.integratucfdi.net/api/v1/generaComprobantePago');
curl_setopt_array($ch, [
    CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-KEY: ak_test_sandbox_integratucfdi_2026', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode(['id' => 1, 'rfcemisor' => 'HECF750311V64', 'idcertificado' => 10494, 'documento' => $docPago])
]);
$res = json_decode(curl_exec($ch), true);
?>
pago20_soap.php
<?php
$client = new SoapClient("https://sandbox.integratucfdi.net/wscfdi.php?wsdl");
$res = $client->generaComprobantePago(1, 'HECF750311V64', 10494, $documento, 'pruebas', 'ee2ec3cc66427bb422894495068222a8');
?>
PagoRest.cs
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", "ak_test_sandbox_integratucfdi_2026");
var response = await client.PostAsJsonAsync("https://sandbox.integratucfdi.net/api/v1/generaComprobantePago", payload);
PagoSoap.cs
var res = client.generaComprobantePago(1, "HECF750311V64", 10494, documentoPago, "pruebas", "ee2ec3cc66427bb422894495068222a8");
pago_rest.py
import requests
res = requests.post('https://sandbox.integratucfdi.net/api/v1/generaComprobantePago', headers={'X-API-KEY': 'ak_test_sandbox_integratucfdi_2026'}, json=payload).json()
pago_soap.py
import zeep
client = zeep.Client('https://sandbox.integratucfdi.net/wscfdi.php?wsdl')
res = client.service.generaComprobantePago(id=1, rfcemisor='HECF750311V64', idcertificado=10494, documento=doc_pago, usuario='pruebas', password='ee2ec3cc66427bb422894495068222a8')
RespuestaPago20.json
{
    "resultado": true,
    "mensaje": "Complemento de Recepción de Pagos 2.0 Timbrado Exitosamente",
    "uuid": "7B82F401-90C3-4B84-A1D8-7F6E5B4C3D2A",
    "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cfdi:Comprobante .../>",
    "cbb": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAP...==",
    "archivos": "UEsDBBQAAAAIAI9lXFAAAAAA... [ZIP con XML + CBB]"
}

GenerarRecibosNomina(...)

Timbrado de recibos de nómina 1.2. En la API REST v1 se envía un único recibo individual en "recibo" para optimizar la velocidad de respuesta.

Firma del Método SOAP (Arreglo de Recibos):

GenerarRecibosNomina($id, $rfcemisor, $idcertificado, $recibos, $usuario, $password)

Endpoint REST HTTP POST (Recibo Único):

POST /api/v1/GenerarRecibosNomina (Header: X-API-KEY: ak_test_...)
nomina_rest.sh
curl -X POST "https://sandbox.integratucfdi.net/api/v1/GenerarRecibosNomina" \
  -H "X-API-KEY: ak_test_sandbox_integratucfdi_2026" \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1, "rfcemisor": "HECF750311V64", "idcertificado": 10494,
    "recibo": {
        "serie": "NOM", "folio": "501", "tipodocumento": "N", "subtotal": "5000.00", "descuento": "500.00", "total": "4500.00", "moneda": "MXN", "exportacion": "01",
        "receptor": { "rfc": "PERJ800101AA1", "nombre": "JUAN PEREZ PEREZ", "usodelcomprobante": "CN01", "codigopostal": "80000", "regimenfiscal": "605" },
        "fechapago": "2026-08-30", "fechainicial": "2026-08-16", "fechafinal": "2026-08-31", "diaspagados": "15.000", "tiponomina": "O"
    }
}'
nomina_rest.php
<?php
$ch = curl_init('https://sandbox.integratucfdi.net/api/v1/GenerarRecibosNomina');
curl_setopt_array($ch, [
    CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-KEY: ak_test_sandbox_integratucfdi_2026', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode(['id' => 1, 'rfcemisor' => 'HECF750311V64', 'idcertificado' => 10494, 'recibo' => $reciboIndividual])
]);
$res = json_decode(curl_exec($ch), true);
?>
recibos_nomina_soap.php
<?php
$client = new SoapClient("https://sandbox.integratucfdi.net/wscfdi.php?wsdl");
$recibos = array($recibo1);
$res = $client->GenerarRecibosNomina(1, 'HECF750311V64', 10494, $recibos, 'pruebas', 'ee2ec3cc66427bb422894495068222a8');
?>
NominaRest.cs
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", "ak_test_sandbox_integratucfdi_2026");
var response = await client.PostAsJsonAsync("https://sandbox.integratucfdi.net/api/v1/GenerarRecibosNomina", payload);
NominaSoap.cs
var res = client.GenerarRecibosNomina(1, "HECF750311V64", 10494, recibosArray, "pruebas", "ee2ec3cc66427bb422894495068222a8");
nomina_rest.py
import requests
res = requests.post('https://sandbox.integratucfdi.net/api/v1/GenerarRecibosNomina', headers={'X-API-KEY': 'ak_test_sandbox_integratucfdi_2026'}, json=payload).json()
nomina_soap.py
import zeep
client = zeep.Client('https://sandbox.integratucfdi.net/wscfdi.php?wsdl')
res = client.service.GenerarRecibosNomina(id=1, rfcemisor='HECF750311V64', idcertificado=10494, recibos=lote, usuario='pruebas', password='ee2ec3cc66427bb422894495068222a8')
RespuestaNomina.json
{
    "resultado": true,
    "mensaje": "CFDI de Nómina Timbrado Exitosamente",
    "uuid": "8A91E392-12B3-4A56-B789-9F0E1B2C3D4E",
    "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cfdi:Comprobante .../>",
    "cbb": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAP...==",
    "archivos": "UEsDBBQAAAAIAI9lXFAAAAAA... [ZIP con XML + CBB]"
}

cancelarCFDISAT(...)

Cancela un CFDI ante el SAT especificando el motivo de cancelación (01, 02, 03, 04) y UUID sustituto si aplica.

Firma del Método SOAP:

cancelarCFDISAT($id, $rfcemisor, $uuid, $rfcreceptor, $importe, $motivo, $uuidsustituye, $idcertificado, $usuario, $password)

Endpoint REST HTTP POST:

POST /api/v1/cancelarCFDISAT (Header: X-API-KEY: ak_test_...)
cancelar_rest.sh
curl -X POST "https://sandbox.integratucfdi.net/api/v1/cancelarCFDISAT" \
  -H "X-API-KEY: ak_test_sandbox_integratucfdi_2026" \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1, "rfcemisor": "HECF750311V64", "idcertificado": 10494,
    "uuid": "4F92E391-89B2-4A73-A3B9-8F7E1B5D90A2", "rfcreceptor": "XAXX010101000",
    "importe": "1160.00", "motivo": "02", "uuidsustituye": ""
}'
cancelar_rest.php
<?php
$ch = curl_init('https://sandbox.integratucfdi.net/api/v1/cancelarCFDISAT');
curl_setopt_array($ch, [
    CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-KEY: ak_test_sandbox_integratucfdi_2026', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode(['id' => 1, 'rfcemisor' => 'HECF750311V64', 'idcertificado' => 10494, 'uuid' => '4F92E391-89B2-4A73-A3B9-8F7E1B5D90A2', 'rfcreceptor' => 'XAXX010101000', 'importe' => '1160.00', 'motivo' => '02'])
]);
$res = json_decode(curl_exec($ch), true);
?>
cancelar_soap.php
<?php
$client = new SoapClient("https://sandbox.integratucfdi.net/wscfdi.php?wsdl");
$res = $client->cancelarCFDISAT(1, 'HECF750311V64', $uuid, 'XAXX010101000', '1160.00', '02', '', 10494, 'pruebas', 'ee2ec3cc66427bb422894495068222a8');
?>
CancelarRest.cs
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", "ak_test_sandbox_integratucfdi_2026");
var response = await client.PostAsJsonAsync("https://sandbox.integratucfdi.net/api/v1/cancelarCFDISAT", payload);
CancelarSoap.cs
var res = client.cancelarCFDISAT(1, "HECF750311V64", uuid, "XAXX010101000", "1160.00", "02", "", 10494, "pruebas", "ee2ec3cc66427bb422894495068222a8");
cancelar_rest.py
import requests
res = requests.post('https://sandbox.integratucfdi.net/api/v1/cancelarCFDISAT', headers={'X-API-KEY': 'ak_test_sandbox_integratucfdi_2026'}, json=payload).json()
cancelar_soap.py
import zeep
client = zeep.Client('https://sandbox.integratucfdi.net/wscfdi.php?wsdl')
res = client.service.cancelarCFDISAT(id=1, rfcemisor='HECF750311V64', uuid=uuid, rfcreceptor='XAXX010101000', importe='1160.00', motivo='02', uuidsustituye='', idcertificado=10494, usuario='pruebas', password='ee2ec3cc66427bb422894495068222a8')
CancelarCfdiResponse.json
{
    "resultado": true,
    "procedio": true,
    "fecha": "2026-08-23 14:00:00",
    "sello": "SELLODIGITALDECANCELACION...==",
    "mensaje": "2026-08-23 14:00:00|SELLODIGITAL...",
    "estatuscomprobante": "Cancelado",
    "estatuscancelacion": "Cancelado sin aceptacion",
    "escancelable": "Cancelable sin aceptacion",
    "acuse": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Acuse .../>"
}

7. Estructura Completa de Objetos de Respuesta

Propiedades retornadas por los métodos para los objetos RespuestaTimbrado y CancelarCfdiResponse:

Objeto: RespuestaTimbrado (Facturación, Pagos y Nómina)

Atributo Tipo Descripción
resultadobooleantrue si el timbrado ante el PAC/SAT fue exitoso; false en caso de error.
mensajestringMensaje descriptivo de éxito o código de error detallado del SAT.
fechadocumentostringFecha y hora de emisión original del comprobante (ISO 8601).
seriecertificadostringNúmero de serie del Certificado de Sello Digital (CSD) del emisor.
sellodocumentostringFirma digital / sello criptográfico generado por el CSD emisor.
uuidstringFolio Fiscal Único Universal asignado por el SAT (UUID v4).
fechatimbrestringFecha y hora oficial de certificación del Timbre Fiscal Digital (TFD).
seriecertificadosatstringNúmero de serie del certificado del SAT utilizado para certificar.
sellotimbrestringSello digital generado por la autoridad fiscal (SAT).
cadenaoriginalstringCadena Original del complemento de certificación digital del SAT.
rfcpacstringRFC del Proveedor Autorizado de Certificación (PAC).
xmlstringContenido XML completo en texto plano del CFDI 4.0 timbrado.
cbbstring Base64Cadena Base64 de la imagen JPG del código de barras QR (CBB).
archivosstring Base64Cadena Base64 de un archivo comprimido .ZIP con el XML + CBB JPG.

Objeto: CancelarCfdiResponse (Retornado por cancelarCFDISAT)

Atributo Tipo Descripción
resultadobooleantrue si la petición fue procesada correctamente.
procediobooleantrue si la cancelación fue aceptada e inscrita ante el SAT.
fechastringFecha y hora oficial del acuse de cancelación.
sellostringSello digital de la solicitud de cancelación.
acusestring XMLContenido XML completo del Acuse Oficial de Cancelación del SAT.
mensajestringCódigo o mensaje de respuesta retornado por el SAT.
estatuscomprobantestringEstatus del CFDI ante la lista SAT (ej. "Cancelado").
estatuscancelacionstringModalidad de cancelación (ej. "Cancelado sin aceptación").
escancelablestringCondición legal fiscal (ej. "Cancelable sin aceptación").