Complementos de retenciones
En esta seccion se listan los complementos disponibles para las retenciones y los parametros correspondientes dentro de nuestra plataforma.
Importante
Recuerda que para utilizar los complementos deben enviarse en conjunto con el CFDI de tipo retención, por lo que recomendamos consultar tambien la documentación correspondiente a la creación de retenciones.
Complemento de plataformas tecnologicas
A continuación se explica el método con el cual podremos crear una retención incluyendo el complemento de plataformas tecnologicas
Podemos crear una retención a la cual incluiremos el complemeto de plataformas tecnologicas utilizando los siguientes parametros.
Parámetro | Tipo | Requerido | Detalles |
---|---|---|---|
LugarExpedicion | String | Requerido | Se utiliza para indicar el lugar de expedicion de la retención, en este campo se ingresa el codigo postal correspondiente al domicilio fiscal |
CveRetenc | String | Requerido | Indica el tipo de retención que es. Ésta puedes consultarla en el Catálogo de Claves de Retención. Ejemplo:
|
DescRetenc | Numerico | Opcional | Se utiliza para introducir la descripcion de la retencion en caso de no pertenecer algun tipo definido |
Relacionado | Arreglo | Opcional | Contiene los datos del CFDI a el que esta relacionado la retención |
TipoRelacion | String | Opcional | Indica la clave del tipo de relación que tiene con el CFDI |
UUID | String | Opcional | Se ingresa el folio fiscal correspondiente a el CFDI que se relacionara con la retención |
Receptor | Arreglo | Requerido | Contiene los datos relacionados a el receptor de la retención |
UID | String | Requerido | Indica el identificador unico que corresponde a el cliente a el cual generaremos la retención |
NacionalidadR | String | Opcional | Indica la nacionalidad del cliente para la retención Los valores admitidos aqui son: "Nacional" y "Extranjero" |
Nacional | Arreglo | Opcional | Contiene los datos correspondientes a cuando el cliente es nacional Este valor se utiliza para modifcar algun dato del cliente, si no se envia se utiliza el valor que tiene el cliente guardado en la base de datos |
RfcR | String | Opcional | Indica el RFC del cliente a el cual se genera la retención Este valor se utiliza para modifcar algun dato del cliente, si no se envia se utiliza el valor que tiene el cliente guardado en la base de datos |
NomDenRazSocR | String | Opcional | Indica la razon social del cliente a el cual se genera la retención Este valor se utiliza para modifcar algun dato del cliente, si no se envia se utiliza el valor que tiene el cliente guardado en la base de datos |
CURPR | String | Opcional | Indica la CURP del cliente a el cual se genera la retención Este valor se utiliza para modifcar algun dato del cliente, si no se envia se utiliza el valor que tiene el cliente guardado en la base de datos |
DomicilioFiscalR | String | Opcional | Indica el domicilio fiscal del cliente a el cual se genera la retención Este valor se utiliza para modifcar algun dato del cliente, si no se envia se utiliza el valor que tiene el cliente guardado en la base de datos |
Extranjero | Arreglo | Opcional | Contiene los datos correspondientes a cuando el cliente es extranjero Este valor se utiliza para modifcar algun dato del cliente, si no se envia se utiliza el valor que tiene el cliente guardado en la base de datos |
NumRegIdTrib | String | Opcional | Indica el número de identificación o registro fiscal del cliente a el cual se genera la retención Este valor se utiliza para modifcar algun dato del cliente, si no se envia se utiliza el valor que tiene el cliente guardado en la base de datos |
NomDenRazSocR | String | Opcional | Indica la razon social del cliente el que se genera la retención Este valor se utiliza para modifcar algun dato del cliente, si no se envia se utiliza el valor que tiene el cliente guardado en la base de datos |
Periodo | Arreglo | Requerido | Contiene la informacion del periodo de tiempo que abarca la retención |
MesIni | String | Requerido | Indica el mes en el que inicia el periodo de la retención, es necesario ingresar los meses con su valor numerico ejemplo: Febrero - "02" Marzo - "03" . . |
MesFin | String | Requerido | Indica el mes en el que termina el periodo de la retención, es necesario ingresar los meses con su valor numerico ejemplo: Enero - "01" Febrero - "02" Marzo - "03" . . |
Ejercicio | String | Requerido | Indica el año en el que realiza la retención ejemplo: "2022" |
Totales | Arreglo | Requerido | Contiene la informacion correspondiente a las cantidades correspondientes a la retención |
MontoTotOperacion | Numerico | Requerido | Indica el monto total de la operacion a la cual se genera la retención |
MontoTotGrav | Numerico | Requerido | Indica el monto gravable de la retención |
MontoTotExent | Numerico | Requerido | Indica el monto exento de la retención |
MontoTotRet | Numerico | Requerido | Indica el monto total de la retención |
UtilidadBimestral | Numerico | Requerido | Indica la utilidad bimestral correpsondiente a la retención |
ISRCorrespondiente | Numerico | Opcional | Indica el monto correspondiente por ISR de la retención |
ImpRetenidos | Arreglo | Requerido | Contiene la informacion de los impuestos |
BaseRet | Numerico | Requerido | Indica la base del impuesto a aplicar en la retención |
ImpuestoRet | String | Requerido | Es el identificador del impuesto que se define en la retención ejemplo: "ImpuestoRet": "002" Admite los siguientes valores: "001" - para Retencion ISR "002" - para Retencion IVA "003" - para Retencion IEPS |
MontoRet | Numerico | Requerido | Indica el monto de retención del impuesto |
TipoPagoRet | String | Requerido | Indica el tipo de pago del impuesto ejemplo: "TipoPagoRet": "01" Admite los siguientes valores "01" - para Pago definitivo IVA "02" - para Pago definitivo IEPS "03" - para Pago definitivo ISR plataformas "04" - para Pago provisional ISR |
Construcción de la URL para crear una retención con complemento de plataformas tecnologicas
Importante
El método que se utiliza para la creación de una retención con complemento de plataformas tecnologicas es de tipo POST
Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)
Endpoint: /v4/cfdi40/retenciones
Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/retenciones
Tip
Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.
Ejemplo para crear una nueva retención cuando el receptor es nacional
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"ServiciosPlataformasTecnologicas": {
"DifIVAEntregadoPrestServ": 8,
"MonTotalContribucionGubernamental": 11,
"MonTotalporUsoPlataforma": 10,
"MonTotServSIVA": 100,
"NumServ": 1,
"Periodicidad": "03",
"Servicios": {
"DetallesDelServicio": [
{
"ComisionDelServicio": {
"Base": "100",
"Importe": "10",
"Porcentaje": "0.10"
},
"ContribucionGubernamental": {
"EntidadDondePagaLaContribucion": "14",
"ImpContrib": "11"
},
"FechaServ": "2022-09-21",
"FormaPagoServ": "06",
"ImpuestosTrasladadosdelServicio": {
"Base": "100",
"Importe": 16,
"Impuesto": "02",
"TasaCuota": "0.160000",
"TipoFactor": "Tasa"
},
"PrecioServSinIVA": "100",
"RFCTerceroAutorizado": "",
"SubTipServ": "01",
"TipoDeServ": "01"
}
]
},
"TotalISRRetenido": "0",
"TotalIVARetenido": 8,
"TotalIVATrasladado": 16
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"ServiciosPlataformasTecnologicas": {
"DifIVAEntregadoPrestServ": 8,
"MonTotalContribucionGubernamental": 11,
"MonTotalporUsoPlataforma": 10,
"MonTotServSIVA": 100,
"NumServ": 1,
"Periodicidad": "03",
"Servicios": {
"DetallesDelServicio": [
{
"ComisionDelServicio": {
"Base": "100",
"Importe": "10",
"Porcentaje": "0.10"
},
"ContribucionGubernamental": {
"EntidadDondePagaLaContribucion": "14",
"ImpContrib": "11"
},
"FechaServ": "2022-09-21",
"FormaPagoServ": "06",
"ImpuestosTrasladadosdelServicio": {
"Base": "100",
"Importe": 16,
"Impuesto": "02",
"TasaCuota": "0.160000",
"TipoFactor": "Tasa"
},
"PrecioServSinIVA": "100",
"RFCTerceroAutorizado": "",
"SubTipServ": "01",
"TipoDeServ": "01"
}
]
},
"TotalISRRetenido": "0",
"TotalIVARetenido": 8,
"TotalIVATrasladado": 16
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"ServiciosPlataformasTecnologicas": {
"DifIVAEntregadoPrestServ": 8,
"MonTotalContribucionGubernamental": 11,
"MonTotalporUsoPlataforma": 10,
"MonTotServSIVA": 100,
"NumServ": 1,
"Periodicidad": "03",
"Servicios": {
"DetallesDelServicio": [
{
"ComisionDelServicio": {
"Base": "100",
"Importe": "10",
"Porcentaje": "0.10"
},
"ContribucionGubernamental": {
"EntidadDondePagaLaContribucion": "14",
"ImpContrib": "11"
},
"FechaServ": "2022-09-21",
"FormaPagoServ": "06",
"ImpuestosTrasladadosdelServicio": {
"Base": "100",
"Importe": 16,
"Impuesto": "02",
"TasaCuota": "0.160000",
"TipoFactor": "Tasa"
},
"PrecioServSinIVA": "100",
"RFCTerceroAutorizado": "",
"SubTipServ": "01",
"TipoDeServ": "01"
}
]
},
"TotalISRRetenido": "0",
"TotalIVARetenido": 8,
"TotalIVATrasladado": 16
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"ServiciosPlataformasTecnologicas": {
"DifIVAEntregadoPrestServ": 8,
"MonTotalContribucionGubernamental": 11,
"MonTotalporUsoPlataforma": 10,
"MonTotServSIVA": 100,
"NumServ": 1,
"Periodicidad": "03",
"Servicios": {
"DetallesDelServicio": [
{
"ComisionDelServicio": {
"Base": "100",
"Importe": "10",
"Porcentaje": "0.10"
},
"ContribucionGubernamental": {
"EntidadDondePagaLaContribucion": "14",
"ImpContrib": "11"
},
"FechaServ": "2022-09-21",
"FormaPagoServ": "06",
"ImpuestosTrasladadosdelServicio": {
"Base": "100",
"Importe": 16,
"Impuesto": "02",
"TasaCuota": "0.160000",
"TipoFactor": "Tasa"
},
"PrecioServSinIVA": "100",
"RFCTerceroAutorizado": "",
"SubTipServ": "01",
"TipoDeServ": "01"
}
]
},
"TotalISRRetenido": "0",
"TotalIVARetenido": 8,
"TotalIVATrasladado": 16
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
response = https.request(request)
puts response.read_body
Ejemplo para crear una nueva retención cuando el receptor es extranjero
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NumRegIdTrib": "12-3456789",
"NomDenRazSocR": "MARIA WATEMBER TORRES"
}
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"ServiciosPlataformasTecnologicas": {
"DifIVAEntregadoPrestServ": 8,
"MonTotalContribucionGubernamental": 11,
"MonTotalporUsoPlataforma": 10,
"MonTotServSIVA": 100,
"NumServ": 1,
"Periodicidad": "03",
"Servicios": {
"DetallesDelServicio": [
{
"ComisionDelServicio": {
"Base": "100",
"Importe": "10",
"Porcentaje": "0.10"
},
"ContribucionGubernamental": {
"EntidadDondePagaLaContribucion": "14",
"ImpContrib": "11"
},
"FechaServ": "2022-09-21",
"FormaPagoServ": "06",
"ImpuestosTrasladadosdelServicio": {
"Base": "100",
"Importe": 16,
"Impuesto": "02",
"TasaCuota": "0.160000",
"TipoFactor": "Tasa"
},
"PrecioServSinIVA": "100",
"RFCTerceroAutorizado": "",
"SubTipServ": "01",
"TipoDeServ": "01"
}
]
},
"TotalISRRetenido": "0",
"TotalIVARetenido": 8,
"TotalIVATrasladado": 16
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"ServiciosPlataformasTecnologicas": {
"DifIVAEntregadoPrestServ": 8,
"MonTotalContribucionGubernamental": 11,
"MonTotalporUsoPlataforma": 10,
"MonTotServSIVA": 100,
"NumServ": 1,
"Periodicidad": "03",
"Servicios": {
"DetallesDelServicio": [
{
"ComisionDelServicio": {
"Base": "100",
"Importe": "10",
"Porcentaje": "0.10"
},
"ContribucionGubernamental": {
"EntidadDondePagaLaContribucion": "14",
"ImpContrib": "11"
},
"FechaServ": "2022-09-21",
"FormaPagoServ": "06",
"ImpuestosTrasladadosdelServicio": {
"Base": "100",
"Importe": 16,
"Impuesto": "02",
"TasaCuota": "0.160000",
"TipoFactor": "Tasa"
},
"PrecioServSinIVA": "100",
"RFCTerceroAutorizado": "",
"SubTipServ": "01",
"TipoDeServ": "01"
}
]
},
"TotalISRRetenido": "0",
"TotalIVARetenido": 8,
"TotalIVATrasladado": 16
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"ServiciosPlataformasTecnologicas": {
"DifIVAEntregadoPrestServ": 8,
"MonTotalContribucionGubernamental": 11,
"MonTotalporUsoPlataforma": 10,
"MonTotServSIVA": 100,
"NumServ": 1,
"Periodicidad": "03",
"Servicios": {
"DetallesDelServicio": [
{
"ComisionDelServicio": {
"Base": "100",
"Importe": "10",
"Porcentaje": "0.10"
},
"ContribucionGubernamental": {
"EntidadDondePagaLaContribucion": "14",
"ImpContrib": "11"
},
"FechaServ": "2022-09-21",
"FormaPagoServ": "06",
"ImpuestosTrasladadosdelServicio": {
"Base": "100",
"Importe": 16,
"Impuesto": "02",
"TasaCuota": "0.160000",
"TipoFactor": "Tasa"
},
"PrecioServSinIVA": "100",
"RFCTerceroAutorizado": "",
"SubTipServ": "01",
"TipoDeServ": "01"
}
]
},
"TotalISRRetenido": "0",
"TotalIVARetenido": 8,
"TotalIVATrasladado": 16
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"ServiciosPlataformasTecnologicas": {
"DifIVAEntregadoPrestServ": 8,
"MonTotalContribucionGubernamental": 11,
"MonTotalporUsoPlataforma": 10,
"MonTotServSIVA": 100,
"NumServ": 1,
"Periodicidad": "03",
"Servicios": {
"DetallesDelServicio": [
{
"ComisionDelServicio": {
"Base": "100",
"Importe": "10",
"Porcentaje": "0.10"
},
"ContribucionGubernamental": {
"EntidadDondePagaLaContribucion": "14",
"ImpContrib": "11"
},
"FechaServ": "2022-09-21",
"FormaPagoServ": "06",
"ImpuestosTrasladadosdelServicio": {
"Base": "100",
"Importe": 16,
"Impuesto": "02",
"TasaCuota": "0.160000",
"TipoFactor": "Tasa"
},
"PrecioServSinIVA": "100",
"RFCTerceroAutorizado": "",
"SubTipServ": "01",
"TipoDeServ": "01"
}
]
},
"TotalISRRetenido": "0",
"TotalIVARetenido": 8,
"TotalIVATrasladado": 16
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
response = https.request(request)
puts response.read_body
Respuestas de crear una nueva retención con complemento de plataformas tecnologicas
Ejemplo de respuesta exitosa.
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "1ce30fd7-ed65-4842-ad6a-44ef5d2ae2fc",
"uid": "632b884246860",
"SAT": {
"UUID": "1ce30fd7-ed65-4842-ad6a-44ef5d2ae2fc",
"FechaTimbrado": "2022-09-21T16:55:12",
"NoCertificadoSAT": "30001000000400002495",
"Version": "1.1",
"SelloSAT": "OBOtcB6gWSxqu7Uf3otpt7Wi8RL7yIb8pSR5LiSZxAsgteqf8SZHHQmmb1Ovr7ebCbWZtcF+BBOeASZeIl57Q64S52wnyOWHyx6KT/1yc8s+65rbyFnSdPmNhKBudNGNlijygJkIcLBx8rO9/N05YJp3esTl9biIQy2Qo2nJU44xOA6F895E5c3Z5v8KLOl+S2Wg/RSeRg1HXytnFDzoNpa7wivljDZQlJJwNlLqwMQdcWjdfx782REaCLp/ByMdmJhwCrDdUPIYMPqvRAxmJpKcnkVo8NLFe/l0vXBV4r1VwG67NpA9cozIP7XWZyw+44/zV6+fqHGJDKg+6atD8w==",
"SelloCFD": "Wi+CrUlaTQ3HvBGPgsCaZdyRGK0x5zHQ/wFFZv617KwT9wrBzmrOp+Vy7RH60Fv7I5rI4oPqsA2WA/Js9KdrSfNvaf9+DkuB+OEPoTGCLTPDP+A9QgaM85d/qZpDkozvvUXhycecQN84NqPXPcckVaLj79IMMX2JqVL2zrdcHzSbtmHVBcD1aOcWrMFiGcS19t9c+iC1D7mVF79OhGAaS4wh2T4zY5cS0zYy8oHFYyaYsrRm4U26M1kTZOc+EYEbi0gBk3MK+wXrT+SZOI0+RiUFnUNSSHsDJN4PvNRpnXKOlxBCWq2mI/DJknbg/0qpMN4MBY630ngWZ9bq/VGpWg=="
},
"INV": {
"Serie": "RET",
"Folio": 257
},
"invoice_uid": "632b884246860"
}
Ejemplo de respuesta erronea en los campos del complemento
{
"response": "error",
"message": "SPT131 - El valor del atributo “DifIVAEntregadoPrestServ” es diferente al valor del atributo “TotalIVATrasladado” menos la suma de los atributos “Importe” del nodo “ImpuestosTrasladadosdelServicio” si el valor registrado en el atributo “FormaPagoServ” es “01” (Efectivo) menos el valor del atributo “TotalIVARetenido”.",
"xmlerror": "<?xml version=\"1.0\" encoding=\"UTF-8\"....................
}
Ejemplo de respuesta erronea de autenticación
{
"status": "error",
"message": "La cuenta que intenta autenticarse no existe",
"Data": "$2y$10$8a9S8o8WeiRhPh1YT6bnXun6uPs1ZdiZBUHjGwSqn3X44mbYSmY4.",
"Secret": "$2y$10$c5KNUW06w8r9OhH4MVPNz.BgpQfjHVZjPPYsVbX13WPQZomnYtxq"
}
Aviso
El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.
Complemento de Intereses
A continuación se explica el método con el cual podremos crear una retención incluyendo el complemento de intereses
Podemos crear una retención a la cual incluiremos el complemeto de intereses utilizando los siguientes parametros.
Parámetro | Tipo | Requerido | Detalles |
---|---|---|---|
intereses | Arreglo | Requerido | Es el arreglo que contiene toda la informacion correspondiente a el complemento de intereses, debemos incluir este nodo con su informacion para que se genere correctamente nuestra retención con el complemento de intereses |
version | String | Requerido | Indica la version de el complemento de intereses que se utiliza en esta ocasion solo se debe enviar el valor 1.0 Ejemplo: "1.0" |
sistFinanciero | String | Requerido | Atributo requerido para expresar si los interés obtenidos en el periodo o ejercicio provienen del sistema financiero admite los siguientes valores Ejemplo: "SI" "NO" |
retiroAORESRetInt | String | Requerido | Atributo requerido para expresar si los intereses obtenidos fueron retirados en el periodo o ejercicio admite los siguientes valores Ejemplo: "SI" "NO" |
operFinancDerivad | String | Requerido | Atributo requerido para expresar si los intereses obtenidos corresponden a operaciones financieras derivadas admite los siguientes valores Ejemplo: "SI" "NO" |
montIntNominal | Numerico | Requerido | Atributo requerido para expresar el importe del interés Nóminal obtenido en un periodo o ejercicio |
montIntReal | Numerico | Requerido | Atributo requerido para expresar el monto de los intereses reales (diferencia que se obtiene restando al tipo de interés nominal y la tasa de inflación del periodo o ejercicio ) |
perdida | Numerico | Requerido | Atributo requerido para expresar la pérdida por los intereses obtenidos en el periodo o ejercicio |
Construcción de la URL para crear una retención con complemento de Intereses
Importante
El método que se utiliza para la creación de una retención con complemento de intereses es de tipo POST
Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)
Endpoint: /v4/cfdi40/retenciones
Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/retenciones
Tip
Para probar el código de ejemplo es necesario que reemplaces el texto Ingresa Tu API key por el API KEY de tu cuenta, e Ingresa Tu Secret key por el SECRET KEY correspondiente.
Ejemplo para crear una nueva retención con complemento de intereses
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"CveRetenc": "07",
"Emisor": {
"CURPE": "OORB610222MZSRCL02"
},
"Receptor": {
"UID": "62b1dcf75a60f",
"NacionalidadR": "Nacional",
"Nacional": {
"RFCRecep": "CACX7605101P8",
"NomDenRazSocR": "XOCHILT CASAS CHAVEZ",
"CURPR": ""
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "02",
"Ejercicio": "2023"
},
"Totales": {
"MontoTotOperacion": "300",
"MontoTotGrav": "100",
"MontoTotExent": "200",
"MontoTotRet": "10",
"ImpRetenidos": [
{
"BaseRet": "14",
"Impuesto": "02",
"MontoRet": "10",
"TipoPagoRet": "03"
}
]
},
"intereses": {
"version": "1.0",
"sistFinanciero": "SI",
"retiroAORESRetInt": "SI",
"operFinancDerivad": "SI",
"montIntNominal": 791.52,
"montIntReal": 1000.88,
"perdida": 500.31
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"CveRetenc": "07",
"Emisor": {
"CURPE": "OORB610222MZSRCL02"
},
"Receptor": {
"UID": "62b1dcf75a60f",
"NacionalidadR": "Nacional",
"Nacional": {
"RFCRecep": "CACX7605101P8",
"NomDenRazSocR": "XOCHILT CASAS CHAVEZ",
"CURPR": ""
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "02",
"Ejercicio": "2023"
},
"Totales": {
"MontoTotOperacion": "300",
"MontoTotGrav": "100",
"MontoTotExent": "200",
"MontoTotRet": "10",
"ImpRetenidos": [
{
"BaseRet": "14",
"Impuesto": "02",
"MontoRet": "10",
"TipoPagoRet": "03"
}
]
},
"intereses": {
"version": "1.0",
"sistFinanciero": "SI",
"retiroAORESRetInt": "SI",
"operFinancDerivad": "SI",
"montIntNominal": 791.52,
"montIntReal": 1000.88,
"perdida": 500.31
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"CveRetenc": "07",
"Emisor": {
"CURPE": "OORB610222MZSRCL02"
},
"Receptor": {
"UID": "62b1dcf75a60f",
"NacionalidadR": "Nacional",
"Nacional": {
"RFCRecep": "CACX7605101P8",
"NomDenRazSocR": "XOCHILT CASAS CHAVEZ",
"CURPR": ""
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "02",
"Ejercicio": "2023"
},
"Totales": {
"MontoTotOperacion": "300",
"MontoTotGrav": "100",
"MontoTotExent": "200",
"MontoTotRet": "10",
"ImpRetenidos": [
{
"BaseRet": "14",
"Impuesto": "02",
"MontoRet": "10",
"TipoPagoRet": "03"
}
]
},
"intereses": {
"version": "1.0",
"sistFinanciero": "SI",
"retiroAORESRetInt": "SI",
"operFinancDerivad": "SI",
"montIntNominal": 791.52,
"montIntReal": 1000.88,
"perdida": 500.31
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"CveRetenc": "07",
"Emisor": {
"CURPE": "OORB610222MZSRCL02"
},
"Receptor": {
"UID": "62b1dcf75a60f",
"NacionalidadR": "Nacional",
"Nacional": {
"RFCRecep": "CACX7605101P8",
"NomDenRazSocR": "XOCHILT CASAS CHAVEZ",
"CURPR": ""
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "02",
"Ejercicio": "2023"
},
"Totales": {
"MontoTotOperacion": "300",
"MontoTotGrav": "100",
"MontoTotExent": "200",
"MontoTotRet": "10",
"ImpRetenidos": [
{
"BaseRet": "14",
"Impuesto": "02",
"MontoRet": "10",
"TipoPagoRet": "03"
}
]
},
"intereses": {
"version": "1.0",
"sistFinanciero": "SI",
"retiroAORESRetInt": "SI",
"operFinancDerivad": "SI",
"montIntNominal": 791.52,
"montIntReal": 1000.88,
"perdida": 500.31
}
})
response = http.request(request)
puts response.read_body
Respuesta de crear una nueva retención con complemento de intereses
Ejemplo de respuesta exitosa.
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "1ce30fd7-ed65-4842-ad6a-44ef5d2ae2fc",
"uid": "632b884246860",
"SAT": {
"UUID": "1ce30fd7-ed65-4842-ad6a-44ef5d2ae2fc",
"FechaTimbrado": "2022-09-21T16:55:12",
"NoCertificadoSAT": "30001000000400002495",
"Version": "1.1",
"SelloSAT": "OBOtcB6gWSxqu7Uf3otpt7Wi8RL7yIb8pSR5LiSZxAsgteqf8SZHHQmmb1Ovr7ebCbWZtcF+BBOeASZeIl57Q64S52wnyOWHyx6KT/1yc8s+65rbyFnSdPmNhKBudNGNlijygJkIcLBx8rO9/N05YJp3esTl9biIQy2Qo2nJU44xOA6F895E5c3Z5v8KLOl+S2Wg/RSeRg1HXytnFDzoNpa7wivljDZQlJJwNlLqwMQdcWjdfx782REaCLp/ByMdmJhwCrDdUPIYMPqvRAxmJpKcnkVo8NLFe/l0vXBV4r1VwG67NpA9cozIP7XWZyw+44/zV6+fqHGJDKg+6atD8w==",
"SelloCFD": "Wi+CrUlaTQ3HvBGPgsCaZdyRGK0x5zHQ/wFFZv617KwT9wrBzmrOp+Vy7RH60Fv7I5rI4oPqsA2WA/Js9KdrSfNvaf9+DkuB+OEPoTGCLTPDP+A9QgaM85d/qZpDkozvvUXhycecQN84NqPXPcckVaLj79IMMX2JqVL2zrdcHzSbtmHVBcD1aOcWrMFiGcS19t9c+iC1D7mVF79OhGAaS4wh2T4zY5cS0zYy8oHFYyaYsrRm4U26M1kTZOc+EYEbi0gBk3MK+wXrT+SZOI0+RiUFnUNSSHsDJN4PvNRpnXKOlxBCWq2mI/DJknbg/0qpMN4MBY630ngWZ9bq/VGpWg=="
},
"INV": {
"Serie": "RET",
"Folio": 257
},
"invoice_uid": "632b884246860"
}
Ejemplo de respuesta erronea en los campos del complemento
{
"response": "error",
"message": "El campo 'sistFinanciero' es requerido. El campo 'retiroAORESRetInt' es requerido. "
}
Ejemplo de respuesta erronea de autenticación
{
"status": "error",
"message": "La cuenta que intenta autenticarse no existe",
"Data": "$2y$10$8a9S8o8WeiRhPh1YT6bnXun6uPs1ZdiZBUHjGwSqn3X44mbYSmY4.",
"Secret": "$2y$10$c5KNUW06w8r9OhH4MVPNz.BgpQfjHVZjPPYsVbX13WPQZomnYtxq"
}
Aviso
El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.
Complemento de Enajenación de acciones
A continuación se explica el método con el cual podremos crear una retención incluyendo el complemento de enajenación de acciones
Podemos crear una retención a la cual incluiremos el complemeto de enajenación de acciones utilizando los siguientes parametros.
Parámetro | Tipo | Requerido | Detalles |
---|---|---|---|
EnajenacionDeAcciones | Arreglo | Requerido | Es el arreglo que contiene toda la información relacionada a el complemento de enajenació de acciones Este debe incluirse en el cuerpo de el CFDI de retención al momento de timbrar para que incluya el complemento |
ContratoIntermediacion | String | Requerido | Atributo requerido para expresar la descripción del contrato de intermediación Ejemplo: "Contrato de prueba llevado acabo en México en 19/Julio/2023" |
Ganancia | Numerico | Requerido | Atributo requerido para expresar la ganancia obtenida por la enajenación de acciones u operación de valores Ejemplo: 1234.56 100.00 89 |
Perdida | Numerico | Requerido | Atributo requerido para expresar la pérdida en el contrato de intermediación Ejemplo: 1234.56 100.00 89 |
Construcción de la URL para crear una retención con complemento de Enajenación de acciones
Importante
El método que se utiliza para la creación de una retención con complemento de enajenación de acciones es de tipo POST
Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)
Endpoint: /v4/cfdi40/retenciones
Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/retenciones
Tip
Para probar el código de ejemplo es necesario que reemplaces el texto Ingresa Tu API key por el API KEY de tu cuenta, e Ingresa Tu Secret key por el SECRET KEY correspondiente.
Ejemplo para crear una nueva retención con complemento de enajenación de acciones
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"CveRetenc": "06",
"LugarExpedicion": "42501",
"Emisor": {
"CURPE": "OORB610222MZSRCL02"
},
"Receptor": {
"UID": "6466605c19cfb",
"NacionalidadR": "Nacional",
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "01279",
"NomDenRazSocR": "XAIME WEIR ROJO",
"RfcR": "WERX631016S30"
}
},
"Periodo": {
"Ejercicio": "2023",
"MesFin": "07",
"MesIni": "07"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": "10000",
"ImpuestoRet": "002",
"MontoRet": "1600",
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": "0",
"MontoTotGrav": "11600",
"MontoTotOperacion": 11600,
"MontoTotRet": 1600,
"UtilidadBimestral": ""
},
"DescRetenc": "0.00",
"EnajenacionDeAcciones": {
"ContratoIntermediacion": "Contrato de prueba llevado acabo en México en 19/Julio/2023",
"Ganancia": 1234.56,
"Perdida": 89
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"CveRetenc": "06",
"LugarExpedicion": "42501",
"Emisor": {
"CURPE": "OORB610222MZSRCL02"
},
"Receptor": {
"UID": "6466605c19cfb",
"NacionalidadR": "Nacional",
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "01279",
"NomDenRazSocR": "XAIME WEIR ROJO",
"RfcR": "WERX631016S30"
}
},
"Periodo": {
"Ejercicio": "2023",
"MesFin": "07",
"MesIni": "07"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": "10000",
"ImpuestoRet": "002",
"MontoRet": "1600",
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": "0",
"MontoTotGrav": "11600",
"MontoTotOperacion": 11600,
"MontoTotRet": 1600,
"UtilidadBimestral": ""
},
"DescRetenc": "0.00",
"EnajenacionDeAcciones": {
"ContratoIntermediacion": "Contrato de prueba llevado acabo en México en 19/Julio/2023",
"Ganancia": 1234.56,
"Perdida": 89
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"CveRetenc": "06",
"LugarExpedicion": "42501",
"Emisor": {
"CURPE": "OORB610222MZSRCL02"
},
"Receptor": {
"UID": "6466605c19cfb",
"NacionalidadR": "Nacional",
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "01279",
"NomDenRazSocR": "XAIME WEIR ROJO",
"RfcR": "WERX631016S30"
}
},
"Periodo": {
"Ejercicio": "2023",
"MesFin": "07",
"MesIni": "07"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": "10000",
"ImpuestoRet": "002",
"MontoRet": "1600",
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": "0",
"MontoTotGrav": "11600",
"MontoTotOperacion": 11600,
"MontoTotRet": 1600,
"UtilidadBimestral": ""
},
"DescRetenc": "0.00",
"EnajenacionDeAcciones": {
"ContratoIntermediacion": "Contrato de prueba llevado acabo en México en 19/Julio/2023",
"Ganancia": 1234.56,
"Perdida": 89
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"CveRetenc": "06",
"LugarExpedicion": "42501",
"Emisor": {
"CURPE": "OORB610222MZSRCL02"
},
"Receptor": {
"UID": "6466605c19cfb",
"NacionalidadR": "Nacional",
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "01279",
"NomDenRazSocR": "XAIME WEIR ROJO",
"RfcR": "WERX631016S30"
}
},
"Periodo": {
"Ejercicio": "2023",
"MesFin": "07",
"MesIni": "07"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": "10000",
"ImpuestoRet": "002",
"MontoRet": "1600",
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": "0",
"MontoTotGrav": "11600",
"MontoTotOperacion": 11600,
"MontoTotRet": 1600,
"UtilidadBimestral": ""
},
"DescRetenc": "0.00",
"EnajenacionDeAcciones": {
"ContratoIntermediacion": "Contrato de prueba llevado acabo en México en 19/Julio/2023",
"Ganancia": 1234.56,
"Perdida": 89
}
})
response = http.request(request)
puts response.read_body
Respuesta de crear una nueva retención con complemento de enajenación de acciones
Ejemplo de respuesta exitosa.
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "4f16a273-bd90-4233-adbd-21222631cea1",
"uid": "64b83335ab15f",
"SAT": {
"UUID": "4f16a273-bd90-4233-adbd-21222631cea1",
"FechaTimbrado": "2023-07-19T13:02:12",
"NoCertificadoSAT": "30001000000400002495",
"Version": "1.1",
"SelloSAT": "YqiUXhIngszLvVDZiwesjnnibDkBO9QV3kmcMOyWWUrb32GxAcRbAmmZTSPzj3OhES1K5EHGN+j5SAJNyG7kl+leXdK/gC5c9BcBz5Tj/zRNhJmA/6tSy5p6cCaGPWzIiMIY5K5FBgsJmGTNhJ3tQ7xtDTfglgiVunJNvtZ36QhKqrsJbAmr672GYiLaL3zep2ub3h/KAQO2btUay91mhNsWLmk5AuSlc2vZoxgWrYMHePwPQQ0I50R45gejGXz7xOHc/94xEZUjjmeaJ0VAPqQ7vUg1m1Al2f8bD03pAq23nmPeVVe/B6mFvF77vZMhyZkIyfdhsgXQVUJdEVkOCA==",
"SelloCFD": "bp1xPhtkU6lkvzxPjiy8cxFmdsMabxoHYIrbY67zXfE5HNH308Gq5xgPJQSYBimkFNrhWCwmDlOtwN/NCsldn1SJlYWvvzVspyY6f8IWOu7HXEigquQfPFVLbv54SIMS4mvFFmc4DngggGE0k3nAny/BJLpZNg0SYvMlAcuiaCU0YkbwJzir4n2rnl81dL89nTpVbshaECzGr1+myw1JQa1bbbb1eEVaYOjuKmKjbadR6uVrMqmxHW0Tfv+LADzC8VjMwvlRJ/J9h+B8xYBrGhAO8/SmMHKlw5oK2OmqZd71EkpAAPvs5vXNvUFdTgNitOq5mfVH6DiMWzGkOrtE9g=="
},
"INV": {
"Serie": "RET",
"Folio": 317
},
"invoice_uid": "64b83335ab15f"
}
Ejemplo de respuesta erronea en los campos del complemento
{
"response": "error",
"message": "El campo 'Ganancia' es requerido. "
}
Ejemplo de respuesta erronea de autenticación
{
"status": "error",
"message": "La cuenta que intenta autenticarse no existe",
"Data": "$2y$10$8a9S8o8WeiRhPh1YT6bnXun6uPs1ZdiZBUHjGwSqn3X44mbYSmY4.",
"Secret": "$2y$10$c5KNUW06w8r9OhH4MVPNz.BgpQfjHVZjPPYsVbX13WPQZomnYtxq"
}
Aviso
El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.
Complemento de intereses hipotecarios
A continuación se explica el método con el cual podremos crear una retención incluyendo el complemento de intereses hipotecarios.
Podemos crear una retención a la cual incluiremos el complemeto de intereses hipotecarios utilizando los siguientes parametros.
Párametro | Tipo | Requerido | Detalles |
---|---|---|---|
CreditoDeInstFinanc | String | Requerido | Atributo requerido para expresar si el crédito otorgado fue por institución financiera. Admnite los siguientes valores: SI |
SaldoInsoluto | Numerico | Requerido | Atributo requerido para expresar el saldo insoluto al 31 de diciembre del ejercicio inmediato anterior o fecha de contratación si se llevo a cabo en el ejercicio en curso. |
PropDeducDelCredit | Numerico | Opcional | Atributo opcional que expresa la proporción deducible del crédito aplicable sobre los intereses reales devengados y pagados. |
MontTotIntNominalesDev | Numerico | Opcional | Atributo opcional que expresa el monto total de intereses nominales devengados. |
MontTotIntNominalesDevYPag | Numerico | Opcional | Atributo opcional que expresa el monto total de intereses nominales devengados y pagados. |
MontTotIntRealPagDeduc | Numerico | Opcional | Atributo opcional que expresa el monto total de intereses reales pagados deducibles. |
NumContrato | Numerico | Opcional | Atributo opcional que expresa el número de contrato del crédito hipotecario. |
Construcción de la URL para crear una retención con complemento de intereses hipotecarios
Importante
El método que se utiliza para la creación de una retención con complemento de intereses hipotecarios es de tipo POST
Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)
Endpoint: /v4/cfdi40/retenciones
Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/retenciones
Tip
Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.
Ejemplo para crear una nueva retención cuando el receptor es nacional
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"InteresesHipotecarios": {
"CreditoDeInstFinanc": "NO",
"SaldoInsoluto": "1000",
"PropDeducDelCredit": "2000",
"MontTotIntNominalesDev": "3000",
"MontTotIntNominalesDevYPag": "4000",
"MontTotIntRealPagDeduc": "5000",
"NumContrato": "6000"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"InteresesHipotecarios": {
"CreditoDeInstFinanc": "NO",
"SaldoInsoluto": "1000",
"PropDeducDelCredit": "2000",
"MontTotIntNominalesDev": "3000",
"MontTotIntNominalesDevYPag": "4000",
"MontTotIntRealPagDeduc": "5000",
"NumContrato": "6000"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"InteresesHipotecarios": {
"CreditoDeInstFinanc": "NO",
"SaldoInsoluto": "1000",
"PropDeducDelCredit": "2000",
"MontTotIntNominalesDev": "3000",
"MontTotIntNominalesDevYPag": "4000",
"MontTotIntRealPagDeduc": "5000",
"NumContrato": "6000"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"InteresesHipotecarios": {
"CreditoDeInstFinanc": "NO",
"SaldoInsoluto": "1000",
"PropDeducDelCredit": "2000",
"MontTotIntNominalesDev": "3000",
"MontTotIntNominalesDevYPag": "4000",
"MontTotIntRealPagDeduc": "5000",
"NumContrato": "6000"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
response = https.request(request)
puts response.read_body
Ejemplo para crear una nueva retención cuando el receptor es extranjero
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NumRegIdTrib": "12-3456789",
"NomDenRazSocR": "MARIA WATEMBER TORRES"
}
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"InteresesHipotecarios": {
"CreditoDeInstFinanc": "NO",
"SaldoInsoluto": "1000",
"PropDeducDelCredit": "2000",
"MontTotIntNominalesDev": "3000",
"MontTotIntNominalesDevYPag": "4000",
"MontTotIntRealPagDeduc": "5000",
"NumContrato": "6000"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"InteresesHipotecarios": {
"CreditoDeInstFinanc": "NO",
"SaldoInsoluto": "1000",
"PropDeducDelCredit": "2000",
"MontTotIntNominalesDev": "3000",
"MontTotIntNominalesDevYPag": "4000",
"MontTotIntRealPagDeduc": "5000",
"NumContrato": "6000"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"InteresesHipotecarios": {
"CreditoDeInstFinanc": "NO",
"SaldoInsoluto": "1000",
"PropDeducDelCredit": "2000",
"MontTotIntNominalesDev": "3000",
"MontTotIntNominalesDevYPag": "4000",
"MontTotIntRealPagDeduc": "5000",
"NumContrato": "6000"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"InteresesHipotecarios": {
"CreditoDeInstFinanc": "NO",
"SaldoInsoluto": "1000",
"PropDeducDelCredit": "2000",
"MontTotIntNominalesDev": "3000",
"MontTotIntNominalesDevYPag": "4000",
"MontTotIntRealPagDeduc": "5000",
"NumContrato": "6000"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
response = https.request(request)
puts response.read_body
Respuestas de crear una nueva retención con complemento de intereses hipotecarios
Ejemplo de respuesta exitosa.
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "8e8a606c-a9e8-4dac-9d73-d090fa164854",
"uid": "657a3fa267e17",
"SAT": {
"UUID": "8e8a606c-a9e8-4dac-9d73-d090fa164854",
"FechaTimbrado": "2023-12-13T17:34:56",
"NoCertificadoSAT": "30001000000400002495",
"Version": "1.1",
"SelloSAT": "Gi13SQ2wkdQ4OeKb34K4gHl5mobPocFrkP0ZHOE49aEnpMsu9dVBOjFiRKMK/l8M4Y1lLKAlHtjxfuTfVN3sEibVzkeS4qkVqBOU6GIPymLTa0BZuG0B31IYAFeD/Z+m45G6zMe+o8hQZZQH6A3V5umWPtaJPiDqqTpVMcxpIPXhbrHEwOW3QrkPJJhdC9D3NjkGGm2tQURt3ZEyvR7WrY0L6bVNmhbNld+1Aq4f5Ue1cCw1IKE5HzhnPrL8pz0t3Xss0PWzP3tbsdCfU5o5E9QpOetHxqXwKsjZXWVdOyaNl1tlxeUzl3YwUcZTGatDtd+/Ns6ckLNRizGiLHiQrA==",
"SelloCFD": "gANrkZMnn+uXxos+kfkyu8sIkwLOql8l5in84f/VO8YKkB1+wtdsQLzKKkZoByLiZwkO6dPE6woL68c5LazjRzrOVzIBhPQEssdVO9zEvl8Mbb1BYoWKt0tMwe5Lytiq2wbxqgo3pMxEugX5luVOU++2PvJHZJcTAGOuSFdffgfQxx9qh8DbVxm+HvhrZeopi8pw2WoMFbClDgvQoXNiL+0Cgpd96pKMYqGLMZkkb3dqCy8uRIK7XeixaFMvxeZJM1rX9Lbn1qmO2i961t670bEPtPSJuvLgasGGZ3uD0kMw5KbWgx0oH6KDel0SIjbOjWh4vwJ1ZnIUYWgCqtbtFA=="
},
"INV": {
"Serie": "RT",
"Folio": 78
},
"invoice_uid": "657a3fa267e17"
}
Ejemplo de respuesta erronea en los campos del complemento
{
"response": "error",
"message": "El campo 'CreditoDeInstFinanc' solo puede tener los valores SI o NO. "
}
{
"response": "error",
"message": "El campo 'SaldoInsoluto' es requerido. "
}
Ejemplo de respuesta erronea de autenticación
{
"status": "error",
"message": "La cuenta que intenta autenticarse no existe",
"Data": "$2y$10$8a9S8o8WeiRhPh1YT6bnXun6uPs1ZdiZBUHjGwSqn3X44mbYSmY4.",
"Secret": "$2y$10$c5KNUW06w8r9OhH4MVPNz.BgpQfjHVZjPPYsVbX13WPQZomnYtxq"
}
Aviso
El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.
Complemento de dividendos
A continuación se explica el método con el cual podremos crear una retención incluyendo el complemento de dividendos
Podemos crear una retención a la cual incluiremos el complemeto de dividendos utilizando los siguientes parametros.
Párametro | Tipo | Requerido | Detalles |
---|---|---|---|
CveTIpDivOUtil | String | Requerido | Atributo requerido para expresar la clave del tipo de dividendo o utilidad distribuida de acuerdo al catálogo. Ejemplo: "01" Admite los siguientes valores 01 - Proviene de CUFIN 02 - No proviene de CUFIN 03 - Reembolso o reducción de capital 04 - Liquidación de la persona moral 05 - CUFINRE 06 - Proviene de CUFIN al 31 de diciembre 2013 |
MontISRAcredRetMexico | Numerico | Requerido | Atributo requerido para expresar el importe o retención del dividendo o utilidad en territorio nacional. |
MontISRAcredRetExtranjero | Numerico | Requerido | Atributo requerido para expresar el importe o retención del dividendo o utilidad en territorio extranjero. |
MontRetExtDivExt | Numerico | Opcional | Atributo opcional para expresar el monto de la retención en el extranjero sobre dividendos del extranjero. |
TipoSocDistrDiv | String | Requerido | Atributo requerido para expresar si el dividendo es distribuido por sociedades nacionales o extranjeras. Admite los siguientes valores: Sociedad Nacional Sociedad Extranjera |
MontISRAcredNal | Numerico | Opcional | Atributo opcional para expresar el monto del ISR acreditable nacional. |
MontDivAcumNal | Numerico | Opcional | Atributo opcional para expresar el monto del dividendo acumulable naciona. |
MontDivAcumExt | Numerico | Opcional | Atributo opcional para expresar el monto del dividendo acumulable extranjero. |
ProporcionRem | Numerico | Opcional | Atributo opcional que expresa el porcentaje de participación de sus integrantes o accionistas. |
Construcción de la URL para crear una retención con complemento de dividendos
Importante
El método que se utiliza para la creación de una retención con complemento de dividendos es de tipo POST
Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)
Endpoint: /v4/cfdi40/retenciones
Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/retenciones
Tip
Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.
Ejemplo para crear una nueva retención cuando el receptor es nacional
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"Dividendos": {
"CveTipDivOUtil": "01",
"MontISRAcredRetMexico": "1200",
"MontISRAcredRetExtranjero": "30000",
"MontRetExtDivExt": "40000",
"TipoSocDistrDiv": "Sociedad Nacional",
"MontISRAcredNal": "100",
"MontDivAcumNal": "200",
"MontDivAcumExt": "300",
"ProporcionRem": "10"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"Dividendos": {
"CveTipDivOUtil": "01",
"MontISRAcredRetMexico": "1200",
"MontISRAcredRetExtranjero": "30000",
"MontRetExtDivExt": "40000",
"TipoSocDistrDiv": "Sociedad Nacional",
"MontISRAcredNal": "100",
"MontDivAcumNal": "200",
"MontDivAcumExt": "300",
"ProporcionRem": "10"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"Dividendos": {
"CveTipDivOUtil": "01",
"MontISRAcredRetMexico": "1200",
"MontISRAcredRetExtranjero": "30000",
"MontRetExtDivExt": "40000",
"TipoSocDistrDiv": "Sociedad Nacional",
"MontISRAcredNal": "100",
"MontDivAcumNal": "200",
"MontDivAcumExt": "300",
"ProporcionRem": "10"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Nacional": {
"CURPR": "XEXX010101HNEXXXA4",
"DomicilioFiscalR": "63180",
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"RfcR": "WATM640917J45"
},
"NacionalidadR": "Nacional",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"Dividendos": {
"CveTipDivOUtil": "01",
"MontISRAcredRetMexico": "1200",
"MontISRAcredRetExtranjero": "30000",
"MontRetExtDivExt": "40000",
"TipoSocDistrDiv": "Sociedad Nacional",
"MontISRAcredNal": "100",
"MontDivAcumNal": "200",
"MontDivAcumExt": "300",
"ProporcionRem": "10"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
response = https.request(request)
puts response.read_body
Ejemplo para crear una nueva retención cuando el receptor es extranjero
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NumRegIdTrib": "12-3456789",
"NomDenRazSocR": "MARIA WATEMBER TORRES"
}
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"Dividendos": {
"CveTipDivOUtil": "01",
"MontISRAcredRetMexico": "1200",
"MontISRAcredRetExtranjero": "30000",
"MontRetExtDivExt": "40000",
"TipoSocDistrDiv": "Sociedad Nacional",
"MontISRAcredNal": "100",
"MontDivAcumNal": "200",
"MontDivAcumExt": "300",
"ProporcionRem": "10"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"Dividendos": {
"CveTipDivOUtil": "01",
"MontISRAcredRetMexico": "1200",
"MontISRAcredRetExtranjero": "30000",
"MontRetExtDivExt": "40000",
"TipoSocDistrDiv": "Sociedad Nacional",
"MontISRAcredNal": "100",
"MontDivAcumNal": "200",
"MontDivAcumExt": "300",
"ProporcionRem": "10"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"Dividendos": {
"CveTipDivOUtil": "01",
"MontISRAcredRetMexico": "1200",
"MontISRAcredRetExtranjero": "30000",
"MontRetExtDivExt": "40000",
"TipoSocDistrDiv": "Sociedad Nacional",
"MontISRAcredNal": "100",
"MontDivAcumNal": "200",
"MontDivAcumExt": "300",
"ProporcionRem": "10"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"CveRetenc": "26",
"LugarExpedicion": "26015",
"Periodo": {
"Ejercicio": "2022",
"MesFin": "09",
"MesIni": "09"
},
"Receptor": {
"Extranjero": {
"NomDenRazSocR": "MARIA WATEMBER TORRES",
"NumRegIdTrib": "12-3456789"
},
"NacionalidadR": "Extranjero",
"UID": "62b1dcf75a60f"
},
"Relacionado": {
"TipoRelacion": "05",
"UUID": "7c2ecea6-afbc-46b1-95d0-535fc8e8bba9"
},
"Dividendos": {
"CveTipDivOUtil": "01",
"MontISRAcredRetMexico": "1200",
"MontISRAcredRetExtranjero": "30000",
"MontRetExtDivExt": "40000",
"TipoSocDistrDiv": "Sociedad Nacional",
"MontISRAcredNal": "100",
"MontDivAcumNal": "200",
"MontDivAcumExt": "300",
"ProporcionRem": "10"
},
"Totales": {
"ImpRetenidos": [
{
"BaseRet": 16,
"ImpuestoRet": "002",
"MontoRet": 8,
"TipoPagoRet": "01"
}
],
"ISRCorrespondiente": "",
"MontoTotExent": 0,
"MontoTotGrav": 100,
"MontoTotOperacion": 100,
"MontoTotRet": 8
}
})
response = https.request(request)
puts response.read_body
Respuestas de crear una nueva retención con complemento de dividendos
Ejemplo de respuesta exitosa.
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "8e8a606c-a9e8-4dac-9d73-d090fa164854",
"uid": "657a3fa267e17",
"SAT": {
"UUID": "8e8a606c-a9e8-4dac-9d73-d090fa164854",
"FechaTimbrado": "2023-12-13T17:34:56",
"NoCertificadoSAT": "30001000000400002495",
"Version": "1.1",
"SelloSAT": "Gi13SQ2wkdQ4OeKb34K4gHl5mobPocFrkP0ZHOE49aEnpMsu9dVBOjFiRKMK/l8M4Y1lLKAlHtjxfuTfVN3sEibVzkeS4qkVqBOU6GIPymLTa0BZuG0B31IYAFeD/Z+m45G6zMe+o8hQZZQH6A3V5umWPtaJPiDqqTpVMcxpIPXhbrHEwOW3QrkPJJhdC9D3NjkGGm2tQURt3ZEyvR7WrY0L6bVNmhbNld+1Aq4f5Ue1cCw1IKE5HzhnPrL8pz0t3Xss0PWzP3tbsdCfU5o5E9QpOetHxqXwKsjZXWVdOyaNl1tlxeUzl3YwUcZTGatDtd+/Ns6ckLNRizGiLHiQrA==",
"SelloCFD": "gANrkZMnn+uXxos+kfkyu8sIkwLOql8l5in84f/VO8YKkB1+wtdsQLzKKkZoByLiZwkO6dPE6woL68c5LazjRzrOVzIBhPQEssdVO9zEvl8Mbb1BYoWKt0tMwe5Lytiq2wbxqgo3pMxEugX5luVOU++2PvJHZJcTAGOuSFdffgfQxx9qh8DbVxm+HvhrZeopi8pw2WoMFbClDgvQoXNiL+0Cgpd96pKMYqGLMZkkb3dqCy8uRIK7XeixaFMvxeZJM1rX9Lbn1qmO2i961t670bEPtPSJuvLgasGGZ3uD0kMw5KbWgx0oH6KDel0SIjbOjWh4vwJ1ZnIUYWgCqtbtFA=="
},
"INV": {
"Serie": "RT",
"Folio": 78
},
"invoice_uid": "657a3fa267e17"
}
Ejemplo de respuesta erronea en los campos del complemento
{
"response": "error",
"message": "El campo 'MontISRAcredRetMexico' es requerido. "
}
Ejemplo de respuesta erronea de autenticación
{
"status": "error",
"message": "La cuenta que intenta autenticarse no existe",
"Data": "$2y$10$8a9S8o8WeiRhPh1YT6bnXun6uPs1ZdiZBUHjGwSqn3X44mbYSmY4.",
"Secret": "$2y$10$c5KNUW06w8r9OhH4MVPNz.BgpQfjHVZjPPYsVbX13WPQZomnYtxq"
}
Aviso
El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.
Complemento de Arrendamiento en fideicomiso
Ahora veras como crear una retención utilizando el complemento de arrendamiento en fideicomiso.
Vamos a utilizar los siguientes parametros.
Párametro | Tipo | Requerido | Detalles |
---|---|---|---|
PagProvEfecPorFiduc | Numerico | Requerido | Atributo requerido para expresar el importe del pago efectuado por parte del fiduciario al arrendador de bienes en el periodo |
RendimFideicom | Numerico | Requerido | Atributo requerido para expresar el importe de los rendimientos obtenidos en el periodo por el arrendamiento de bienes |
DeduccCorresp | Numerico | Requerido | Atributo requerido para expresar el importe de las deducciones correspondientes al arrendamiento de los bienes durante el periodo. |
MontTotRet | Numerico | Opcional | Atributo opcional para expresar el monto total de la retención del arrendamiento de los bienes del periodo. |
MontResFiscDistFibras | Numerico | Opcional | Atributo opcional para expresar el monto del resultado fiscal distribuido por FIBRAS. |
MontOtrosConceptDistr | Numerico | Opcional | Atributo opcional para expresar el monto de otros conceptos distribuidos. |
DescrMontOtrosConceptDistr | String | Opcional | Atributo opcional para describir los conceptos distribuidos cuando se señalen otros conceptos. |
Construcción de la URL para crear una retención con complemento de arrendamiento en fideicomiso
Importante
El método que se utiliza para la creación de una retención con complemento de arrendamiento en fideicomiso es POST
Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)
Endpoint: /v4/cfdi40/retenciones
Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/retenciones
Tip
Para probar el ejemplo de código, necesitas cambiar "Tu API key" por la clave de API de tu cuenta, y "Tu Secret key" por la clave secreta correspondiente.
Ejemplo para crear una nueva retención cuando el receptor es nacional
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"LugarExpedicion": "45625",
"CveRetenc": "17",
"DescRetenc": 100,
"Receptor": {
"UID": "6661e28104f69",
"NacionalidadR": "Nacional",
"Nacional": {
"RfcR": "S&S051221SE2",
"NomDenRazSocR": "S & SOFTWARE",
"CURPR": "",
"DomicilioFiscalR": "76022"
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "03",
"Ejercicio": "2024"
},
"Totales": {
"MontoTotOperacion": 1010,
"MontoTotGrav": 1000,
"MontoTotExent": 10,
"MontoTotRet": 10,
"UtilidadBimestral": 1,
"ISRCorrespondiente": 1,
"ImpRetenidos": [
{
"BaseRet": 10,
"ImpuestoRet": "001",
"MontoRet": 10,
"TipoPagoRet": "03"
}
]
},
"ArrendamientoEnFideicomiso": {
"PagProvEfecPorFiduc": 10,
"RendimFideicom": 10,
"DeduccCorresp": 10,
"MontTotRet": 10,
"MontResFiscDistFibras": 10,
"MontOtrosConceptDistr": 10,
"DescrMontOtrosConceptDistr": "Fideicomiso de Inversión y Bienes Raíces"
}
} ',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"LugarExpedicion": "45625",
"CveRetenc": "17",
"DescRetenc": 100,
"Receptor": {
"UID": "6661e28104f69",
"NacionalidadR": "Nacional",
"Nacional": {
"RfcR": "S&S051221SE2",
"NomDenRazSocR": "S & SOFTWARE",
"CURPR": "",
"DomicilioFiscalR": "76022"
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "03",
"Ejercicio": "2024"
},
"Totales": {
"MontoTotOperacion": 1010,
"MontoTotGrav": 1000,
"MontoTotExent": 10,
"MontoTotRet": 10,
"UtilidadBimestral": 1,
"ISRCorrespondiente": 1,
"ImpRetenidos": [
{
"BaseRet": 10,
"ImpuestoRet": "001",
"MontoRet": 10,
"TipoPagoRet": "03"
}
]
},
"ArrendamientoEnFideicomiso": {
"PagProvEfecPorFiduc": 10,
"RendimFideicom": 10,
"DeduccCorresp": 10,
"MontTotRet": 10,
"MontResFiscDistFibras": 10,
"MontOtrosConceptDistr": 10,
"DescrMontOtrosConceptDistr": "Fideicomiso de Inversión y Bienes Raíces"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"LugarExpedicion": "45625",
"CveRetenc": "17",
"DescRetenc": 100,
"Receptor": {
"UID": "6661e28104f69",
"NacionalidadR": "Nacional",
"Nacional": {
"RfcR": "S&S051221SE2",
"NomDenRazSocR": "S & SOFTWARE",
"CURPR": "",
"DomicilioFiscalR": "76022"
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "03",
"Ejercicio": "2024"
},
"Totales": {
"MontoTotOperacion": 1010,
"MontoTotGrav": 1000,
"MontoTotExent": 10,
"MontoTotRet": 10,
"UtilidadBimestral": 1,
"ISRCorrespondiente": 1,
"ImpRetenidos": [
{
"BaseRet": 10,
"ImpuestoRet": "001",
"MontoRet": 10,
"TipoPagoRet": "03"
}
]
},
"ArrendamientoEnFideicomiso": {
"PagProvEfecPorFiduc": 10,
"RendimFideicom": 10,
"DeduccCorresp": 10,
"MontTotRet": 10,
"MontResFiscDistFibras": 10,
"MontOtrosConceptDistr": 10,
"DescrMontOtrosConceptDistr": "Fideicomiso de Inversión y Bienes Raíces"
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"LugarExpedicion": "45625",
"CveRetenc": "17",
"DescRetenc": 100,
"Receptor": {
"UID": "6661e28104f69",
"NacionalidadR": "Nacional",
"Nacional": {
"RfcR": "S&S051221SE2",
"NomDenRazSocR": "S & SOFTWARE",
"CURPR": "",
"DomicilioFiscalR": "76022"
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "03",
"Ejercicio": "2024"
},
"Totales": {
"MontoTotOperacion": 1010,
"MontoTotGrav": 1000,
"MontoTotExent": 10,
"MontoTotRet": 10,
"UtilidadBimestral": 1,
"ISRCorrespondiente": 1,
"ImpRetenidos": [
{
"BaseRet": 10,
"ImpuestoRet": "001",
"MontoRet": 10,
"TipoPagoRet": "03"
}
]
},
"ArrendamientoEnFideicomiso": {
"PagProvEfecPorFiduc": 10,
"RendimFideicom": 10,
"DeduccCorresp": 10,
"MontTotRet": 10,
"MontResFiscDistFibras": 10,
"MontOtrosConceptDistr": 10,
"DescrMontOtrosConceptDistr": "Fideicomiso de Inversión y Bienes Raíces"
}
})
response = https.request(request)
puts response.read_body
Ejemplo para crear una nueva retención cuando el receptor es extranjero
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/retenciones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"LugarExpedicion": "45625",
"CveRetenc": "17",
"DescRetenc": 100,
"Receptor": {
"UID": "66cdee7f059a5",
"NacionalidadR": "Extranjero",
"Nacional": {
"RfcR": "XEXX010101000",
"NomDenRazSocR": "CLIENTE EXTRANJERO",
"CURPR": "",
"DomicilioFiscalR": "00000"
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "03",
"Ejercicio": "2024"
},
"Totales": {
"MontoTotOperacion": 1010,
"MontoTotGrav": 1000,
"MontoTotExent": 10,
"MontoTotRet": 10,
"UtilidadBimestral": 1,
"ISRCorrespondiente": 1,
"ImpRetenidos": [
{
"BaseRet": 10,
"ImpuestoRet": "001",
"MontoRet": 10,
"TipoPagoRet": "03"
}
]
},
"ArrendamientoEnFideicomiso": {
"PagProvEfecPorFiduc": 10,
"RendimFideicom": 10,
"DeduccCorresp": 10,
"MontTotRet": 10,
"MontResFiscDistFibras": 10,
"MontOtrosConceptDistr": 10,
"DescrMontOtrosConceptDistr": "Fideicomiso de Inversión y Bienes Raíces"
}
} ',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'F-PLUGIN: 9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key: Tu API key',
'F-Secret-Key: Tu Secret key'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var request = require('request');
var options = {
'method': 'POST',
'url': '{ HOST }/v4/cfdi40/retenciones',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"LugarExpedicion": "45625",
"CveRetenc": "17",
"DescRetenc": 100,
"Receptor": {
"UID": "66cdee7f059a5",
"NacionalidadR": "Extranjero",
"Nacional": {
"RfcR": "XEXX010101000",
"NomDenRazSocR": "CLIENTE EXTRANJERO",
"CURPR": "",
"DomicilioFiscalR": "00000"
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "03",
"Ejercicio": "2024"
},
"Totales": {
"MontoTotOperacion": 1010,
"MontoTotGrav": 1000,
"MontoTotExent": 10,
"MontoTotRet": 10,
"UtilidadBimestral": 1,
"ISRCorrespondiente": 1,
"ImpRetenidos": [
{
"BaseRet": 10,
"ImpuestoRet": "001",
"MontoRet": 10,
"TipoPagoRet": "03"
}
]
},
"ArrendamientoEnFideicomiso": {
"PagProvEfecPorFiduc": 10,
"RendimFideicom": 10,
"DeduccCorresp": 10,
"MontTotRet": 10,
"MontResFiscDistFibras": 10,
"MontOtrosConceptDistr": 10,
"DescrMontOtrosConceptDistr": "Fideicomiso de Inversión y Bienes Raíces"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/retenciones"
payload = json.dumps({
"LugarExpedicion": "45625",
"CveRetenc": "17",
"DescRetenc": 100,
"Receptor": {
"UID": "66cdee7f059a5",
"NacionalidadR": "Extranjero",
"Nacional": {
"RfcR": "XEXX010101000",
"NomDenRazSocR": "CLIENTE EXTRANJERO",
"CURPR": "",
"DomicilioFiscalR": "00000"
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "03",
"Ejercicio": "2024"
},
"Totales": {
"MontoTotOperacion": 1010,
"MontoTotGrav": 1000,
"MontoTotExent": 10,
"MontoTotRet": 10,
"UtilidadBimestral": 1,
"ISRCorrespondiente": 1,
"ImpRetenidos": [
{
"BaseRet": 10,
"ImpuestoRet": "001",
"MontoRet": 10,
"TipoPagoRet": "03"
}
]
},
"ArrendamientoEnFideicomiso": {
"PagProvEfecPorFiduc": 10,
"RendimFideicom": 10,
"DeduccCorresp": 10,
"MontTotRet": 10,
"MontResFiscDistFibras": 10,
"MontOtrosConceptDistr": 10,
"DescrMontOtrosConceptDistr": "Fideicomiso de Inversión y Bienes Raíces"
}
})
headers = {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "json"
require "net/http"
url = URI("{ HOST }/v4/cfdi40/retenciones")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["F-PLUGIN"] = "9d4095c8f7ed5785cb14c0e3b033eeb8252416ed"
request["F-Api-Key"] = "Tu API key"
request["F-Secret-Key"] = "Tu Secret key"
request.body = JSON.dump({
"LugarExpedicion": "45625",
"CveRetenc": "17",
"DescRetenc": 100,
"Receptor": {
"UID": "66cdee7f059a5",
"NacionalidadR": "Extranjero",
"Nacional": {
"RfcR": "XEXX010101000",
"NomDenRazSocR": "CLIENTE EXTRANJERO",
"CURPR": "",
"DomicilioFiscalR": "00000"
}
},
"Periodo": {
"MesIni": "01",
"MesFin": "03",
"Ejercicio": "2024"
},
"Totales": {
"MontoTotOperacion": 1010,
"MontoTotGrav": 1000,
"MontoTotExent": 10,
"MontoTotRet": 10,
"UtilidadBimestral": 1,
"ISRCorrespondiente": 1,
"ImpRetenidos": [
{
"BaseRet": 10,
"ImpuestoRet": "001",
"MontoRet": 10,
"TipoPagoRet": "03"
}
]
},
"ArrendamientoEnFideicomiso": {
"PagProvEfecPorFiduc": 10,
"RendimFideicom": 10,
"DeduccCorresp": 10,
"MontTotRet": 10,
"MontResFiscDistFibras": 10,
"MontOtrosConceptDistr": 10,
"DescrMontOtrosConceptDistr": "Fideicomiso de Inversión y Bienes Raíces"
}
})
response = https.request(request)
puts response.read_body
Respuestas de crear una nueva retención con complemento de arrendamiento en fideicomiso
Ejemplo de respuesta exitosa.
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "ee77a5d6-4aaa-4d2a-aa01-6faa091d5ddd",
"uid": "66cdfeab8abde",
"SAT": {
"UUID": "ee77a5d6-4aaa-4d2a-aa01-6faa091d5ddd",
"FechaTimbrado": "2024-08-27T11:28:30",
"NoCertificadoSAT": "30001000000400002495",
"Version": "1.1",
"SelloSAT": "hNLmG5SICq9yE9MsnP87wRkcaDI5QJUHUZKqzZsVHeuaQxZZnT4nHnpGPxXPliwYvP4OB/OH/3ykLMiwfj219Ni4OUkQqwStgtuue9WjDvEjVOZHDAv2CHTVby4eJeEmu8S3DS7dEq7GfgRaN2Tb9EdoVYCiNaqis8EtV7s2JnX9vqz0RVewrf4QJUFhWXcJKZprrOeTABwUWlelR7g5bQoPTFhn/S43zsU+euLTp1zd1/rveMRO8Sq9kUNb8tPeawGtZIlr2cazUblZUTNClDW4RMxqY6Ws9M8x8tNGDT6RW6rvY3Nmgx01PPN5aGLd/nCcWFJNdN0Rn8bWKT0MUg==",
"SelloCFD": "FtQHn/Q2ItTs9R5npcV/i2JF0kzDFRXEqNqeiAgH2w2k5B/olTvDzVbBgsacu1TNbJtqL+dP4ZTYezVTTr4w2oVO1tBoiavVBMkfO+Y/Mr3rvoBF2oObkHG9sMGSTHkSmQJ/1Bfk9CJlQAM4P4/pcvzgD7UOWQ6U4VTPx1yjGTpfwkK2hunemV7xj+kmIQ5r/2BBHzBrolpUDBrtlPj0MilVdbZIkU5XLmA+xnvOq1jC9MeLkAhtweusCI4IQQeaQegl/6qVoJrFyRM1+k03xLj9VzmJtIVSd2ZrS0+VEgpv09Z0wUOiZKeVqzPiaG8uR97U4qAstHRVHoRY0RnMng=="
},
"INV": {
"Serie": "RT",
"Folio": 15
},
"invoice_uid": "66cdfeab8abde"
}
Ejemplo de respuesta erronea en los campos del complemento
{
"response": "error",
"message": "El campo 'PagProvEfecPorFiduc' es requerido. "
}
Ejemplo de respuesta erronea de autenticación
{
"status": "error",
"message": "La cuenta que intenta autenticarse no existe",
"Data": "$2y$10$8a9S8o8WeiRhPh1YT6bnXun6uPs1ZdiZBUHjGwSqn3X44mbYSmY4.",
"Secret": "$2y$10$c5KNUW06w8r9OhH4MVPNz.BgpQfjHVZjPPYsVbX13WPQZomnYtxq"
}
Aviso
El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta. Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.