Comercio exterior v2.0
INFORMACIÓN SOBRE COMERCIO EXTERIOR V2.0
La versión 2.0 del complemento de Comercio Exterior es de uso obligatorio para amparar operaciones de exportación definitiva de mercancías con clave de pedimento A1 en la versión 4.0 del CFDI.
Introducción
Este complemento se utiliza para incorporar información fiscal y aduanera adicional al Comprobante Fiscal Digital por Internet (CFDI) relacionada con operaciones de comercio internacional, específicamente en actos de exportación definitiva de mercancías. Este proceso permite identificar de manera precisa a los actores involucrados en la transacción (emisor/exportador, receptor y destinatario), los términos de comercio internacional, el tipo de cambio de la operación, así como la clasificación arancelaria y el valor de las mercancías.
Nodos comercio exterior 2.0
En esta sección, se muestran los nodos que conforman el complemento de comercio exterior en su versión 2.0, acompañados de una explicación sobre cómo deben ser enviados en el payload, además de ejemplos de código para facilitar tu integración.
Aviso
Cuando se incluye ComercioExterior, el atributo del comprobante Exportacion debe ser 02. Si no se envía Exportacion, el sistema asume 01 (No aplica) y la petición se rechaza.
ComercioExterior
A continuación se listan los atributos estándar del SAT que conforman el nodo ComercioExterior:
| Parámetro | Tipo | Requerido | Detalles |
|---|---|---|---|
| ComercioExterior | Object | Requerido | Objeto principal que contiene todos los nodos y atributos del complemento de Comercio Exterior 2.0 a nivel comprobante. |
| Version | String | Opcional | Indica la versión del complemento. Si se omite, la API asigna automáticamente el valor "2.0". El único valor válido permitido es "2.0". Ejemplo: "2.0" |
| MotivoTraslado | String | Opcional | Atributo opcional, aplicable cuando el CFDI es de tipo Traslado. Expresa la clave del motivo de traslado de la mercancía conforme al catálogo |
| ClaveDePedimento | String | Requerido | Clave que identifica el tipo de operación aduanera conforme al catálogo Ejemplo: "A1" |
| CertificadoOrigen | String | Requerido | Indica si existe certificado de origen. Los valores permitidos son: • 0 = No funge como certificado de origen. • 1 = Funge como certificado de origen. |
| NumCertificadoOrigen | String | Condicional | Número o folio del certificado de origen. Es requerido cuando Longitud: de 6 a 40 caracteres. |
| NumeroExportadorConfiable | String | Opcional | Número de exportador confiable, cuando aplique (habitualmente para exportaciones hacia la Unión Europea o Decisiones de la Comunidad Europea). Longitud: de 1 a 50 caracteres. Solo debe enviarse cuando el país del receptor o del destinatario pertenece a la Unión Europea (CCE119). |
| Incoterm | String | Condicional | Clave Incoterm conforme al catálogo del SAT. Requerido cuando Ejemplo: "FOB" Valores permitidos: CFR, CIF, CPT, CIP, DAF, DAP, DAT, DES, DEQ, DDU, DDP, EXW, FCA, FAS, FOB y DPU. Si se omite estando |
| Observaciones | String | Opcional | Atributo opcional para registrar cualquier aclaración o texto adicional referente a la operación de comercio exterior. Longitud: máximo 300 caracteres. |
| TipoCambioUSD | String | Requerido | Tipo de cambio en Moneda Nacional (MXN) para la equivalencia del dólar estadounidense (USD) con respecto al peso mexicano, publicado en el Diario Oficial de la Federación (DOF) de la fecha de emisión. Ejemplo: "17.4440" Nota: el valor utilizado en los ejemplos de esta documentación es ilustrativo; debes enviar el tipo de cambio publicado en el DOF de la fecha de emisión. Formato: hasta 6 decimales. |
| TotalUSD | String | Requerido | Importe total de la operación expresado en dólares estadounidenses (USD). Debe ser igual a la suma de los valores del campo Ejemplo: "400.00" |
| Emisor | Object | Opcional | Nodo condicional para especificar datos adicionales del emisor de la mercancía. Puede contener los atributos |
| Propietario | Array/Object | Condicional | Nodo condicional que aplica cuando |
| Receptor | Object | Condicional | Nodo condicional con información complementaria del comprador o receptor de la mercancía en el extranjero. Puede incorporar
Nota: si |
| Destinatario | Array/Object | Opcional | Nodo condicional para especificar la persona o empresa que recibe la mercancía en el extranjero cuando difiere del Receptor del CFDI. Puede incluir los atributos |
| Mercancias | Array | Requerido | Arreglo requerido que contiene la lista de los bienes o mercancías a exportar. Debe registrarse al menos un elemento. Importante (Estructura JSON): Debe enviarse como un array plano de objetos directamente asignado a No se permiten mercancías repetidas con el mismo |
Mercancías
Ahora vamos con los atributos de cada elemento en Mercancias:
| Parámetro | Tipo | Requerido | Detalles |
|---|---|---|---|
| NoIdentificacion | String | Requerido | Clave de identificación, número de parte, SKU o número de serie del producto. Debe coincidir exactamente con el valor del campo Ejemplo: "131494-1055" Longitud: máximo 100 caracteres. |
| FraccionArancelaria | String | Condicional | Clave de la fracción arancelaria correspondiente a la mercancía a exportar conforme al catálogo Ejemplo: "7208390199" |
| CantidadAduana | String | Condicional | Cantidad de mercancía expresada conforme a la unidad de medida aduanera aplicable a la fracción arancelaria. Ejemplo: "100.000" Formato: máximo 3 decimales; valor mínimo 0.001. Debe enviarse junto con |
| UnidadAduana | String | Condicional | Clave de la unidad de medida aduanera aplicable según la fracción arancelaria declarada, conforme al catálogo Ejemplo: "01" |
| ValorUnitarioAduana | String | Condicional | Valor unitario del bien expresado en dólares estadounidenses (USD) por unidad aduanera. Debe enviarse junto con Ejemplo: "4.00" Formato: máximo 6 decimales. |
| ValorDolares | String | Requerido | Valor comercial total del bien expresado en dólares estadounidenses (USD). Es el resultado de multiplicar Ejemplo: "400.00" Formato: máximo 4 decimales. |
| DescripcionesEspecificas | Array | Opcional | Nodo opcional para incluir un listado de características adicionales o específicas que identifiquen de forma individual la mercancía (ej. |
DescripcionesEspecificas
Atributos de cada elemento en DescripcionesEspecificas (dentro de cada mercancía):
| Parámetro | Tipo | Requerido | Detalles |
|---|---|---|---|
| Marca | String | Requerido | Marca de la mercancía. Longitud máxima: 35 caracteres. |
| Modelo | String | Opcional | Modelo de la mercancía. Longitud máxima: 80 caracteres. |
| SubModelo | String | Opcional | Submodelo de la mercancía. Longitud máxima: 50 caracteres. |
| NumeroSerie | String | Opcional | Número de serie de la mercancía. Longitud máxima: 40 caracteres. |
Propietario
Atributos del nodo Propietario. Puede enviarse como objeto o como arreglo de objetos (aplica con MotivoTraslado = 05):
| Parámetro | Tipo | Requerido | Detalles |
|---|---|---|---|
| NumRegIdTrib | String | Requerido | Número de identificación o registro fiscal del propietario de la mercancía en su país de residencia. Longitud: de 6 a 40 caracteres. |
| ResidenciaFiscal | String | Requerido | Clave del país de residencia fiscal del propietario conforme al catálogo c_Pais del SAT. Ejemplo: "USA" |
Destinatario
Atributos del nodo Destinatario. Puede enviarse como objeto o como arreglo de objetos:
| Parámetro | Tipo | Requerido | Detalles |
|---|---|---|---|
| NumRegIdTrib | String | Opcional | Número de registro de identidad fiscal del destinatario en el extranjero. Longitud: de 6 a 40 caracteres. Si se envía, el |
| Nombre | String | Opcional | Nombre o razón social del destinatario. Longitud máxima: 300 caracteres. |
| Domicilio | Array/Object | Requerido | Domicilio(s) del destinatario. Debe incluirse al menos uno (de 1 a n). Consulta la tabla de Domicilio. |
Ejemplo de nodo Destinatario dentro de ComercioExterior:
{
"Destinatario": {
"NumRegIdTrib": "987654321",
"Nombre": "Global Imports LLC",
"Domicilio": {
"Calle": "Broadway",
"NumeroExterior": "250",
"Referencia": "Entre Park Pl y Murray St",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10007"
}
}
}
Domicilio
Atributos del nodo Domicilio (Emisor / Receptor / Destinatario):
| Parámetro | Tipo | Requerido | Detalles |
|---|---|---|---|
| Calle | String | Requerido | Nombre de la calle del domicilio. Longitud máxima: 100 caracteres. |
| NumeroExterior | String | Opcional | Número exterior del domicilio. Longitud máxima: 55 caracteres. |
| NumeroInterior | String | Opcional | Número interior o departamento del domicilio, si aplica. Longitud máxima: 55 caracteres. |
| Colonia | String | Opcional | Emisor: clave de colonia conforme al catálogo |
| Localidad | String | Opcional | Emisor: clave de la localidad conforme al catálogo |
| Referencia | String | Opcional | Referencia geográfica adicional para ubicar el domicilio (por ejemplo, entre qué calles se encuentra o coordenadas GPS). Longitud máxima: 250 caracteres. |
| Municipio | String | Opcional | Emisor: clave del municipio o delegación conforme al catálogo |
| Estado | String | Requerido | Emisor: clave del catálogo |
| Pais | String | Requerido | Clave del país conforme al catálogo c_Pais del SAT. En el Emisor debe ser MEX (CCE125). En el Receptor con Ejemplo: "MEX" |
| CodigoPostal | String | Requerido | Emisor y domicilios en México: clave del catálogo |
Tip
Las claves de catálogo SAT se envían como strings válidos. La consulta de catálogos vía microservicio llegará en una fase posterior; mientras tanto el integrador es responsable de enviar claves correctas.
Aviso
Los atributos TipoOperacion y Subdivision no aplican en Comercio Exterior 2.0. Si se envían, la petición se rechaza.
Construcción de la URL
Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)
Endpoint: /v4/cfdi40/create
Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/create
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 Comercio Exterior 2.0
Tip
Reemplaza Serie por el ID de tu serie y Receptor.UID por el UID de un cliente extranjero (RFC XEXX010101000) con NumRegIdTrib y ResidenciaFiscal capturados en tu cuenta. En el ejemplo, la moneda del comprobante es USD, por lo que ValorDolares y TotalUSD coinciden con el importe del concepto (400.00). El valor de TipoCambioUSD es ilustrativo.
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/create',
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 =>'{
"TipoDocumento": "factura",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"FormaPago": "03",
"MetodoPago": "PUE",
"Exportacion": "02",
"LugarExpedicion": 69800,
"NumOrder": "",
"Draft": 0,
"EnviarCorreo": true,
"Receptor": {
"UID": "UID_DEL_CLIENTE_EXTRANJERO"
},
"Conceptos": [
{
"ClaveProdServ": "11171501",
"NoIdentificacion": "131494-1055",
"Cantidad": 100,
"ClaveUnidad": "KGM",
"Descripcion": "Acero e24-2 o a37-2",
"ValorUnitario": 4.00,
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": 400.00,
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.16",
"Importe": 64.00
}
]
}
}
],
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "FOB",
"TipoCambioUSD": "17.0245",
"TotalUSD": "400.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "CALLE DEL PAPEL",
"Colonia": "0214",
"Localidad": "01",
"Municipio": "014",
"Estado": "QUE",
"Pais": "MEX",
"CodigoPostal": "76199"
}
},
"Receptor": {
"NumRegIdTrib": "123456789",
"Domicilio": {
"Calle": "CLINTON ST",
"NumeroExterior": "10002",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10002"
}
},
"Mercancias": [
{
"NoIdentificacion": "131494-1055",
"FraccionArancelaria": "7208390199",
"CantidadAduana": "100.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "4.00",
"ValorDolares": "400.00"
}
]
}
}',
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/create',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"TipoDocumento": "factura",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"FormaPago": "03",
"MetodoPago": "PUE",
"Exportacion": "02",
"LugarExpedicion": 69800,
"NumOrder": "",
"Draft": 0,
"EnviarCorreo": true,
"Receptor": {
"UID": "UID_DEL_CLIENTE_EXTRANJERO"
},
"Conceptos": [
{
"ClaveProdServ": "11171501",
"NoIdentificacion": "131494-1055",
"Cantidad": 100,
"ClaveUnidad": "KGM",
"Descripcion": "Acero e24-2 o a37-2",
"ValorUnitario": 4.00,
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": 400,
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.16",
"Importe": 64
}
]
}
}
],
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "FOB",
"TipoCambioUSD": "17.0245",
"TotalUSD": "400.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "CALLE DEL PAPEL",
"Colonia": "0214",
"Localidad": "01",
"Municipio": "014",
"Estado": "QUE",
"Pais": "MEX",
"CodigoPostal": "76199"
}
},
"Receptor": {
"NumRegIdTrib": "123456789",
"Domicilio": {
"Calle": "CLINTON ST",
"NumeroExterior": "10002",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10002"
}
},
"Mercancias": [
{
"NoIdentificacion": "131494-1055",
"FraccionArancelaria": "7208390199",
"CantidadAduana": "100.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "4.00",
"ValorDolares": "400.00"
}
]
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/create"
payload = json.dumps({
"TipoDocumento": "factura",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"FormaPago": "03",
"MetodoPago": "PUE",
"Exportacion": "02",
"LugarExpedicion": 69800,
"NumOrder": "",
"Draft": 0,
"EnviarCorreo": True,
"Receptor": {
"UID": "UID_DEL_CLIENTE_EXTRANJERO"
},
"Conceptos": [
{
"ClaveProdServ": "11171501",
"NoIdentificacion": "131494-1055",
"Cantidad": 100,
"ClaveUnidad": "KGM",
"Descripcion": "Acero e24-2 o a37-2",
"ValorUnitario": 4.00,
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": 400,
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.16",
"Importe": 64
}
]
}
}
],
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "FOB",
"TipoCambioUSD": "17.0245",
"TotalUSD": "400.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "CALLE DEL PAPEL",
"Colonia": "0214",
"Localidad": "01",
"Municipio": "014",
"Estado": "QUE",
"Pais": "MEX",
"CodigoPostal": "76199"
}
},
"Receptor": {
"NumRegIdTrib": "123456789",
"Domicilio": {
"Calle": "CLINTON ST",
"NumeroExterior": "10002",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10002"
}
},
"Mercancias": [
{
"NoIdentificacion": "131494-1055",
"FraccionArancelaria": "7208390199",
"CantidadAduana": "100.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "4.00",
"ValorDolares": "400.00"
}
]
}
})
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/create")
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({
"TipoDocumento": "factura",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"FormaPago": "03",
"MetodoPago": "PUE",
"Exportacion": "02",
"LugarExpedicion": 69800,
"NumOrder": "",
"Draft": 0,
"EnviarCorreo": true,
"Receptor": {
"UID": "UID_DEL_CLIENTE_EXTRANJERO"
},
"Conceptos": [
{
"ClaveProdServ": "11171501",
"NoIdentificacion": "131494-1055",
"Cantidad": 100,
"ClaveUnidad": "KGM",
"Descripcion": "Acero e24-2 o a37-2",
"ValorUnitario": 4.00,
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": 400,
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.16",
"Importe": 64
}
]
}
}
],
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "FOB",
"TipoCambioUSD": "17.0245",
"TotalUSD": "400.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "CALLE DEL PAPEL",
"Colonia": "0214",
"Localidad": "01",
"Municipio": "014",
"Estado": "QUE",
"Pais": "MEX",
"CodigoPostal": "76199"
}
},
"Receptor": {
"NumRegIdTrib": "123456789",
"Domicilio": {
"Calle": "CLINTON ST",
"NumeroExterior": "10002",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10002"
}
},
"Mercancias": [
{
"NoIdentificacion": "131494-1055",
"FraccionArancelaria": "7208390199",
"CantidadAduana": "100.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "4.00",
"ValorDolares": "400.00"
}
]
}
})
response = http.request(request)
puts response.read_body
Respuestas
Ejemplo de respuesta exitosa
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "9571a9ed-a268-42a4-b610-e4dbdcf5a367",
"uid": "6a863dc76e2f1",
"SAT": {
"UUID": "9571a9ed-a268-42a4-b610-e4dbdcf5a367",
"FechaTimbrado": "2026-08-19T17:35:30",
"NoCertificadoSAT": "30001000000500003456",
"Version": "1.1",
"SelloSAT": "Qe6JBhgv...",
"SelloCFD": "b5m3nt5Q..."
},
"INV": {
"Serie": "F",
"Folio": 107
},
"invoice_uid": "6a863dc76e2f1"
}
Ejemplo de respuesta errónea por Versión inválida
{
"response": "error",
"message": "Version de ComercioExterior no disponible. Use 2.0."
}
Ejemplo de respuesta errónea por Exportacion incorrecta
{
"response": "error",
"message": "No es posible agregar el complemento ComercioExterior cuando Exportacion no se envía o es 01 (No aplica). Indique Exportacion=02."
}
Ejemplo de respuesta errónea por NoIdentificacion sin coincidencia
{
"response": "error",
"message": "CCE152: Mercancia[1].NoIdentificacion '131494-1055' no coincide con ningún Concepto.NoIdentificacion."
}
Ejemplo de respuesta errónea del SAT por totales USD (CCE157)
{
"response": "error",
"message": "CCE157 - La suma de los campos cfdi:Comprobante:Conceptos:Concepto:Importe no corresponde, se encuentra fuera de los valores mínimo y máximo calculados, o los valores registrados en cce20:ComercioExterior:Mercancias:Mercancia:ValorDolares son \"0\" o \"1\", o los atributos NoIdentificacion de Concepto y Mercancia son distintos; o el tipo de comprobante es distinto de \"I\" o \"E\"."
}
Ejemplo de respuesta errónea por TotalUSD distinto de la suma de ValorDolares (CCE122)
{
"response": "error",
"message": "CCE122: La suma de ValorDolares de mercancías no coincide con TotalUSD (tolerancia 0.01)."
}
Aviso
El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta.
Comercio Exterior 2.0 en Carta Porte 3.1 (Tipo ingreso)
Es posible emitir ambos complementos (Comercio Exterior 2.0 y Carta Porte 3.1) dentro de un mismo CFDI configurando el atributo TipoDocumento como carta_porte_ingreso.
Orden semántico del JSON/payload (Estructura recomendada):
- Cabecera del CFDI
- Receptor
- Conceptos
- CartaPorte (
Atributos→RegimenesAduaneros→Ubicaciones→Mercancias→FiguraTransporte) - ComercioExterior
Reglas de validación para la coemisión
Para emitir ambos complementos de forma exitosa, asegúrate de cumplir con los siguientes requisitos:
- Exportación obligatoria: El atributo
Exportacionen la cabecera del CFDI debe enviarse con la clave02(Definitiva). - Transporte internacional: Se debe establecer
CartaPorte.TranspInternacen"Sí". - Atributos de transporte internacional: Al indicar transporte internacional, es obligatorio incluir los campos
EntradaSalidaMerc,PaisOrigenDestino,ViaEntradaSaliday el nodoRegimenesAduaneros. - Receptor extranjero: Si el RFC del receptor es genérico extranjero (
XEXX010101000), debes incluir obligatoriamente sus atributosNumRegIdTribyResidenciaFiscal(CCE133). - Relación Conceptos vs. Comercio Exterior: El parámetro
NoIdentificacionde cada artículo registrado dentro del nodoComercioExteriordebe coincidir exactamente con elNoIdentificacionde algún concepto en el CFDI. - Cuadre de importes USD: La suma de
ValorDolaresde las mercancías con un mismoNoIdentificaciondebe corresponder alImportede los conceptos con eseNoIdentificacion, convertido a USD:Importe × TipoCambio ÷ TipoCambioUSD(CCE157, CCE158, CCE172).- Si la moneda del comprobante es USD, la relación es 1:1 cuando
TipoCambioyTipoCambioUSDson iguales. - Si la moneda es MXN,
TipoCambioes 1 (puede omitirse) y el importe se divide entreTipoCambioUSD. - Si la moneda es otra divisa, se aplica la fórmula con su
TipoCambio.
- Si la moneda del comprobante es USD, la relación es 1:1 cuando
- Excepción de Folio: No es obligatorio enviar el atributo
UUIDComercioExt.
Para conocer la estructura y atributos detallados del nodo de Carta Porte, consulta la Documentación de Carta Porte v3.1.
Construcción de la URL
Host: https://facturaonline.com.mx/api (producción) / https://sandbox.facturaonline.com.mx/api (sandbox)
Endpoint: /v4/cfdi40/create
Ejemplo: https://facturaonline.com.mx/api/v4/cfdi40/create
Ejemplo de coemisión: Carta Porte ingreso + Comercio Exterior 2.0
Tip
Reemplaza el UID del receptor por el de un cliente extranjero (XEXX010101000) con NumRegIdTrib y ResidenciaFiscal capturados en tu cuenta.
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/create',
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 =>'{
"TipoDocumento": "carta_porte_ingreso",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"Exportacion": "02",
"FormaPago": "99",
"MetodoPago": "PUE",
"EnviarCorreo": false,
"Receptor": {
"UID": "UID_DEL_CLIENTE_EXTRANJERO"
},
"Conceptos": [
{
"ClaveProdServ": "78101800",
"NoIdentificacion": "SERV02",
"Cantidad": "1",
"ClaveUnidad": "HUR",
"Unidad": "Servicio",
"Descripcion": "FLETE",
"ValorUnitario": "2300.000000",
"Importe": "2300.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "2300.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "368.000000"
}
],
"Retenidos": [
{
"Base": "2300.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.040000",
"Importe": "92.000000"
}
]
}
},
{
"ClaveProdServ": "50161509",
"NoIdentificacion": "A0001",
"Cantidad": "1",
"ClaveUnidad": "H87",
"Unidad": "Pza",
"Descripcion": "Gomitas",
"ValorUnitario": "120.000000",
"Importe": "120.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "120.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "19.200000"
}
]
}
},
{
"ClaveProdServ": "50307037",
"NoIdentificacion": "A0002",
"Cantidad": "1",
"ClaveUnidad": "H87",
"Unidad": "Pza",
"Descripcion": "Pulparindo",
"ValorUnitario": "100.000000",
"Importe": "100.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "100.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "16.000000"
}
]
}
}
],
"CartaPorte": {
"Version": "3.1",
"TranspInternac": "Sí",
"EntradaSalidaMerc": "Salida",
"PaisOrigenDestino": "USA",
"ViaEntradaSalida": "01",
"TotalDistRec": "120.00",
"RegimenesAduaneros": {
"RegimenAduaneroCCP": [
{
"RegimenAduanero": "EXD"
}
]
},
"Ubicaciones": {
"Ubicacion": [
{
"TipoUbicacion": "Origen",
"IDUbicacion": "OR000001",
"RFCRemitenteDestinatario": "XAXX010101000",
"NombreRemitenteDestinatario": "Origen Nacional",
"FechaHoraSalidaLlegada": "2026-07-30T10:00:00",
"Domicilio": {
"Calle": "xola",
"NumeroExterior": "531",
"Colonia": "0496",
"Localidad": "03",
"Municipio": "014",
"Estado": "CMX",
"Pais": "MEX",
"CodigoPostal": "03100"
}
},
{
"TipoUbicacion": "Destino",
"IDUbicacion": "DE000001",
"RFCRemitenteDestinatario": "XEXX010101000",
"NumRegIdTrib": "123456789",
"ResidenciaFiscal": "USA",
"NombreRemitenteDestinatario": "Destino Internacional",
"FechaHoraSalidaLlegada": "2026-07-30T13:50:00",
"DistanciaRecorrida": "120.00",
"Domicilio": {
"Calle": "East Vernon Avenue",
"NumeroExterior": "533",
"Colonia": "",
"Localidad": "Los Ángeles",
"Municipio": "",
"Estado": "CA",
"Pais": "USA",
"CodigoPostal": "90011"
}
}
]
},
"Mercancias": {
"NumTotalMercancias": "2",
"PesoBrutoTotal": "20.000",
"UnidadPeso": "KGM",
"Mercancia": [
{
"BienesTransp": "50433238",
"Descripcion": "Gomitas",
"Cantidad": "1",
"ClaveUnidad": "XPK",
"PesoEnKg": "10.000",
"ValorMercancia": "120.00",
"Moneda": "USD",
"FraccionArancelaria": "1704909900",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "1",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
},
{
"BienesTransp": "50433238",
"Descripcion": "Pulparindo",
"Cantidad": "1",
"ClaveUnidad": "XPK",
"PesoEnKg": "10.000",
"ValorMercancia": "100.00",
"Moneda": "USD",
"FraccionArancelaria": "1704909900",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "1",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
}
],
"Autotransporte": {
"PermSCT": "TPAF02",
"NumPermisoSCT": "123456",
"IdentificacionVehicular": {
"ConfigVehicular": "C2",
"PlacaVM": "555TTT",
"AnioModeloVM": "2023",
"PesoBrutoVehicular": "1"
},
"Seguros": {
"AseguraRespCivil": "ODISEA",
"PolizaRespCivil": "3456YUHNB234RT"
}
}
},
"FiguraTransporte": {
"TiposFigura": [
{
"TipoFigura": "01",
"RFCFigura": "KAHO641101B39",
"NumLicencia": "D0908240",
"NombreFigura": "OSCAR KALA HAAK"
}
]
}
},
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "CIF",
"TipoCambioUSD": "17.0245",
"TotalUSD": "220.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "Av Siempre viva",
"NumeroExterior": "123",
"Colonia": "0001",
"Localidad": "06",
"Municipio": "025",
"Estado": "COA",
"Pais": "MEX",
"CodigoPostal": "26015"
}
},
"Receptor": {
"NumRegIdTrib": "123456789",
"Domicilio": {
"Calle": "Clinton ST",
"NumeroExterior": "10002",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10002-0000"
}
},
"Mercancias": [
{
"NoIdentificacion": "A0001",
"FraccionArancelaria": "1704909900",
"CantidadAduana": "10.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "12.00",
"ValorDolares": "120.00"
},
{
"NoIdentificacion": "A0002",
"FraccionArancelaria": "1704909900",
"CantidadAduana": "10.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "10.00",
"ValorDolares": "100.00"
}
]
}
}',
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/create',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"TipoDocumento": "carta_porte_ingreso",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"Exportacion": "02",
"FormaPago": "99",
"MetodoPago": "PUE",
"EnviarCorreo": false,
"Receptor": {
"UID": "UID_DEL_CLIENTE_EXTRANJERO"
},
"Conceptos": [
{
"ClaveProdServ": "78101800",
"NoIdentificacion": "SERV02",
"Cantidad": "1",
"ClaveUnidad": "HUR",
"Unidad": "Servicio",
"Descripcion": "FLETE",
"ValorUnitario": "2300.000000",
"Importe": "2300.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "2300.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "368.000000"
}
],
"Retenidos": [
{
"Base": "2300.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.040000",
"Importe": "92.000000"
}
]
}
},
{
"ClaveProdServ": "50161509",
"NoIdentificacion": "A0001",
"Cantidad": "1",
"ClaveUnidad": "H87",
"Unidad": "Pza",
"Descripcion": "Gomitas",
"ValorUnitario": "120.000000",
"Importe": "120.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "120.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "19.200000"
}
]
}
},
{
"ClaveProdServ": "50307037",
"NoIdentificacion": "A0002",
"Cantidad": "1",
"ClaveUnidad": "H87",
"Unidad": "Pza",
"Descripcion": "Pulparindo",
"ValorUnitario": "100.000000",
"Importe": "100.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "100.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "16.000000"
}
]
}
}
],
"CartaPorte": {
"Version": "3.1",
"TranspInternac": "Sí",
"EntradaSalidaMerc": "Salida",
"PaisOrigenDestino": "USA",
"ViaEntradaSalida": "01",
"TotalDistRec": "120.00",
"RegimenesAduaneros": {
"RegimenAduaneroCCP": [
{
"RegimenAduanero": "EXD"
}
]
},
"Ubicaciones": {
"Ubicacion": [
{
"TipoUbicacion": "Origen",
"IDUbicacion": "OR000001",
"RFCRemitenteDestinatario": "XAXX010101000",
"NombreRemitenteDestinatario": "Origen Nacional",
"FechaHoraSalidaLlegada": "2026-07-30T10:00:00",
"Domicilio": {
"Calle": "xola",
"NumeroExterior": "531",
"Colonia": "0496",
"Localidad": "03",
"Municipio": "014",
"Estado": "CMX",
"Pais": "MEX",
"CodigoPostal": "03100"
}
},
{
"TipoUbicacion": "Destino",
"IDUbicacion": "DE000001",
"RFCRemitenteDestinatario": "XEXX010101000",
"NumRegIdTrib": "123456789",
"ResidenciaFiscal": "USA",
"NombreRemitenteDestinatario": "Destino Internacional",
"FechaHoraSalidaLlegada": "2026-07-30T13:50:00",
"DistanciaRecorrida": "120.00",
"Domicilio": {
"Calle": "East Vernon Avenue",
"NumeroExterior": "533",
"Colonia": "",
"Localidad": "Los Ángeles",
"Municipio": "",
"Estado": "CA",
"Pais": "USA",
"CodigoPostal": "90011"
}
}
]
},
"Mercancias": {
"NumTotalMercancias": "2",
"PesoBrutoTotal": "20.000",
"UnidadPeso": "KGM",
"Mercancia": [
{
"BienesTransp": "50433238",
"Descripcion": "Gomitas",
"Cantidad": "1",
"ClaveUnidad": "XPK",
"PesoEnKg": "10.000",
"ValorMercancia": "120.00",
"Moneda": "USD",
"FraccionArancelaria": "1704909900",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "1",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
},
{
"BienesTransp": "50433238",
"Descripcion": "Pulparindo",
"Cantidad": "1",
"ClaveUnidad": "XPK",
"PesoEnKg": "10.000",
"ValorMercancia": "100.00",
"Moneda": "USD",
"FraccionArancelaria": "1704909900",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "1",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
}
],
"Autotransporte": {
"PermSCT": "TPAF02",
"NumPermisoSCT": "123456",
"IdentificacionVehicular": {
"ConfigVehicular": "C2",
"PlacaVM": "555TTT",
"AnioModeloVM": "2023",
"PesoBrutoVehicular": "1"
},
"Seguros": {
"AseguraRespCivil": "ODISEA",
"PolizaRespCivil": "3456YUHNB234RT"
}
}
},
"FiguraTransporte": {
"TiposFigura": [
{
"TipoFigura": "01",
"RFCFigura": "KAHO641101B39",
"NumLicencia": "D0908240",
"NombreFigura": "OSCAR KALA HAAK"
}
]
}
},
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "CIF",
"TipoCambioUSD": "17.0245",
"TotalUSD": "220.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "Av Siempre viva",
"NumeroExterior": "123",
"Colonia": "0001",
"Localidad": "06",
"Municipio": "025",
"Estado": "COA",
"Pais": "MEX",
"CodigoPostal": "26015"
}
},
"Receptor": {
"NumRegIdTrib": "123456789",
"Domicilio": {
"Calle": "Clinton ST",
"NumeroExterior": "10002",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10002-0000"
}
},
"Mercancias": [
{
"NoIdentificacion": "A0001",
"FraccionArancelaria": "1704909900",
"CantidadAduana": "10.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "12.00",
"ValorDolares": "120.00"
},
{
"NoIdentificacion": "A0002",
"FraccionArancelaria": "1704909900",
"CantidadAduana": "10.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "10.00",
"ValorDolares": "100.00"
}
]
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/create"
payload = json.dumps({
"TipoDocumento": "carta_porte_ingreso",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"Exportacion": "02",
"FormaPago": "99",
"MetodoPago": "PUE",
"EnviarCorreo": False,
"Receptor": {
"UID": "UID_DEL_CLIENTE_EXTRANJERO"
},
"Conceptos": [
{
"ClaveProdServ": "78101800",
"NoIdentificacion": "SERV02",
"Cantidad": "1",
"ClaveUnidad": "HUR",
"Unidad": "Servicio",
"Descripcion": "FLETE",
"ValorUnitario": "2300.000000",
"Importe": "2300.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "2300.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "368.000000"
}
],
"Retenidos": [
{
"Base": "2300.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.040000",
"Importe": "92.000000"
}
]
}
},
{
"ClaveProdServ": "50161509",
"NoIdentificacion": "A0001",
"Cantidad": "1",
"ClaveUnidad": "H87",
"Unidad": "Pza",
"Descripcion": "Gomitas",
"ValorUnitario": "120.000000",
"Importe": "120.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "120.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "19.200000"
}
]
}
},
{
"ClaveProdServ": "50307037",
"NoIdentificacion": "A0002",
"Cantidad": "1",
"ClaveUnidad": "H87",
"Unidad": "Pza",
"Descripcion": "Pulparindo",
"ValorUnitario": "100.000000",
"Importe": "100.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "100.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "16.000000"
}
]
}
}
],
"CartaPorte": {
"Version": "3.1",
"TranspInternac": "Sí",
"EntradaSalidaMerc": "Salida",
"PaisOrigenDestino": "USA",
"ViaEntradaSalida": "01",
"TotalDistRec": "120.00",
"RegimenesAduaneros": {
"RegimenAduaneroCCP": [
{
"RegimenAduanero": "EXD"
}
]
},
"Ubicaciones": {
"Ubicacion": [
{
"TipoUbicacion": "Origen",
"IDUbicacion": "OR000001",
"RFCRemitenteDestinatario": "XAXX010101000",
"NombreRemitenteDestinatario": "Origen Nacional",
"FechaHoraSalidaLlegada": "2026-07-30T10:00:00",
"Domicilio": {
"Calle": "xola",
"NumeroExterior": "531",
"Colonia": "0496",
"Localidad": "03",
"Municipio": "014",
"Estado": "CMX",
"Pais": "MEX",
"CodigoPostal": "03100"
}
},
{
"TipoUbicacion": "Destino",
"IDUbicacion": "DE000001",
"RFCRemitenteDestinatario": "XEXX010101000",
"NumRegIdTrib": "123456789",
"ResidenciaFiscal": "USA",
"NombreRemitenteDestinatario": "Destino Internacional",
"FechaHoraSalidaLlegada": "2026-07-30T13:50:00",
"DistanciaRecorrida": "120.00",
"Domicilio": {
"Calle": "East Vernon Avenue",
"NumeroExterior": "533",
"Colonia": "",
"Localidad": "Los Ángeles",
"Municipio": "",
"Estado": "CA",
"Pais": "USA",
"CodigoPostal": "90011"
}
}
]
},
"Mercancias": {
"NumTotalMercancias": "2",
"PesoBrutoTotal": "20.000",
"UnidadPeso": "KGM",
"Mercancia": [
{
"BienesTransp": "50433238",
"Descripcion": "Gomitas",
"Cantidad": "1",
"ClaveUnidad": "XPK",
"PesoEnKg": "10.000",
"ValorMercancia": "120.00",
"Moneda": "USD",
"FraccionArancelaria": "1704909900",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "1",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
},
{
"BienesTransp": "50433238",
"Descripcion": "Pulparindo",
"Cantidad": "1",
"ClaveUnidad": "XPK",
"PesoEnKg": "10.000",
"ValorMercancia": "100.00",
"Moneda": "USD",
"FraccionArancelaria": "1704909900",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "1",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
}
],
"Autotransporte": {
"PermSCT": "TPAF02",
"NumPermisoSCT": "123456",
"IdentificacionVehicular": {
"ConfigVehicular": "C2",
"PlacaVM": "555TTT",
"AnioModeloVM": "2023",
"PesoBrutoVehicular": "1"
},
"Seguros": {
"AseguraRespCivil": "ODISEA",
"PolizaRespCivil": "3456YUHNB234RT"
}
}
},
"FiguraTransporte": {
"TiposFigura": [
{
"TipoFigura": "01",
"RFCFigura": "KAHO641101B39",
"NumLicencia": "D0908240",
"NombreFigura": "OSCAR KALA HAAK"
}
]
}
},
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "CIF",
"TipoCambioUSD": "17.0245",
"TotalUSD": "220.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "Av Siempre viva",
"NumeroExterior": "123",
"Colonia": "0001",
"Localidad": "06",
"Municipio": "025",
"Estado": "COA",
"Pais": "MEX",
"CodigoPostal": "26015"
}
},
"Receptor": {
"NumRegIdTrib": "123456789",
"Domicilio": {
"Calle": "Clinton ST",
"NumeroExterior": "10002",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10002-0000"
}
},
"Mercancias": [
{
"NoIdentificacion": "A0001",
"FraccionArancelaria": "1704909900",
"CantidadAduana": "10.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "12.00",
"ValorDolares": "120.00"
},
{
"NoIdentificacion": "A0002",
"FraccionArancelaria": "1704909900",
"CantidadAduana": "10.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "10.00",
"ValorDolares": "100.00"
}
]
}
})
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/create")
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({
"TipoDocumento": "carta_porte_ingreso",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"Exportacion": "02",
"FormaPago": "99",
"MetodoPago": "PUE",
"EnviarCorreo": false,
"Receptor": {
"UID": "UID_DEL_CLIENTE_EXTRANJERO"
},
"Conceptos": [
{
"ClaveProdServ": "78101800",
"NoIdentificacion": "SERV02",
"Cantidad": "1",
"ClaveUnidad": "HUR",
"Unidad": "Servicio",
"Descripcion": "FLETE",
"ValorUnitario": "2300.000000",
"Importe": "2300.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "2300.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "368.000000"
}
],
"Retenidos": [
{
"Base": "2300.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.040000",
"Importe": "92.000000"
}
]
}
},
{
"ClaveProdServ": "50161509",
"NoIdentificacion": "A0001",
"Cantidad": "1",
"ClaveUnidad": "H87",
"Unidad": "Pza",
"Descripcion": "Gomitas",
"ValorUnitario": "120.000000",
"Importe": "120.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "120.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "19.200000"
}
]
}
},
{
"ClaveProdServ": "50307037",
"NoIdentificacion": "A0002",
"Cantidad": "1",
"ClaveUnidad": "H87",
"Unidad": "Pza",
"Descripcion": "Pulparindo",
"ValorUnitario": "100.000000",
"Importe": "100.000000",
"ObjetoImp": "02",
"Impuestos": {
"Traslados": [
{
"Base": "100.000000",
"Impuesto": "002",
"TipoFactor": "Tasa",
"TasaOCuota": "0.160000",
"Importe": "16.000000"
}
]
}
}
],
"CartaPorte": {
"Version": "3.1",
"TranspInternac": "Sí",
"EntradaSalidaMerc": "Salida",
"PaisOrigenDestino": "USA",
"ViaEntradaSalida": "01",
"TotalDistRec": "120.00",
"RegimenesAduaneros": {
"RegimenAduaneroCCP": [
{
"RegimenAduanero": "EXD"
}
]
},
"Ubicaciones": {
"Ubicacion": [
{
"TipoUbicacion": "Origen",
"IDUbicacion": "OR000001",
"RFCRemitenteDestinatario": "XAXX010101000",
"NombreRemitenteDestinatario": "Origen Nacional",
"FechaHoraSalidaLlegada": "2026-07-30T10:00:00",
"Domicilio": {
"Calle": "xola",
"NumeroExterior": "531",
"Colonia": "0496",
"Localidad": "03",
"Municipio": "014",
"Estado": "CMX",
"Pais": "MEX",
"CodigoPostal": "03100"
}
},
{
"TipoUbicacion": "Destino",
"IDUbicacion": "DE000001",
"RFCRemitenteDestinatario": "XEXX010101000",
"NumRegIdTrib": "123456789",
"ResidenciaFiscal": "USA",
"NombreRemitenteDestinatario": "Destino Internacional",
"FechaHoraSalidaLlegada": "2026-07-30T13:50:00",
"DistanciaRecorrida": "120.00",
"Domicilio": {
"Calle": "East Vernon Avenue",
"NumeroExterior": "533",
"Colonia": "",
"Localidad": "Los Ángeles",
"Municipio": "",
"Estado": "CA",
"Pais": "USA",
"CodigoPostal": "90011"
}
}
]
},
"Mercancias": {
"NumTotalMercancias": "2",
"PesoBrutoTotal": "20.000",
"UnidadPeso": "KGM",
"Mercancia": [
{
"BienesTransp": "50433238",
"Descripcion": "Gomitas",
"Cantidad": "1",
"ClaveUnidad": "XPK",
"PesoEnKg": "10.000",
"ValorMercancia": "120.00",
"Moneda": "USD",
"FraccionArancelaria": "1704909900",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "1",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
},
{
"BienesTransp": "50433238",
"Descripcion": "Pulparindo",
"Cantidad": "1",
"ClaveUnidad": "XPK",
"PesoEnKg": "10.000",
"ValorMercancia": "100.00",
"Moneda": "USD",
"FraccionArancelaria": "1704909900",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "1",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
}
],
"Autotransporte": {
"PermSCT": "TPAF02",
"NumPermisoSCT": "123456",
"IdentificacionVehicular": {
"ConfigVehicular": "C2",
"PlacaVM": "555TTT",
"AnioModeloVM": "2023",
"PesoBrutoVehicular": "1"
},
"Seguros": {
"AseguraRespCivil": "ODISEA",
"PolizaRespCivil": "3456YUHNB234RT"
}
}
},
"FiguraTransporte": {
"TiposFigura": [
{
"TipoFigura": "01",
"RFCFigura": "KAHO641101B39",
"NumLicencia": "D0908240",
"NombreFigura": "OSCAR KALA HAAK"
}
]
}
},
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "CIF",
"TipoCambioUSD": "17.0245",
"TotalUSD": "220.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "Av Siempre viva",
"NumeroExterior": "123",
"Colonia": "0001",
"Localidad": "06",
"Municipio": "025",
"Estado": "COA",
"Pais": "MEX",
"CodigoPostal": "26015"
}
},
"Receptor": {
"NumRegIdTrib": "123456789",
"Domicilio": {
"Calle": "Clinton ST",
"NumeroExterior": "10002",
"Estado": "NY",
"Pais": "USA",
"CodigoPostal": "10002-0000"
}
},
"Mercancias": [
{
"NoIdentificacion": "A0001",
"FraccionArancelaria": "1704909900",
"CantidadAduana": "10.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "12.00",
"ValorDolares": "120.00"
},
{
"NoIdentificacion": "A0002",
"FraccionArancelaria": "1704909900",
"CantidadAduana": "10.000",
"UnidadAduana": "01",
"ValorUnitarioAduana": "10.00",
"ValorDolares": "100.00"
}
]
}
})
response = http.request(request)
puts response.read_body
Respuesta
Ejemplo de respuesta exitosa
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "048b33ca-c833-4ebb-b81d-2c4d3957db6c",
"uid": "6a8651e1aa9c4",
"SAT": {
"UUID": "048b33ca-c833-4ebb-b81d-2c4d3957db6c",
"FechaTimbrado": "2026-08-19T19:01:16",
"NoCertificadoSAT": "30001000000500003456",
"Version": "1.1",
"SelloSAT": "AgQ4BOkc1M...",
"SelloCFD": "UXadj98MRl..."
},
"INV": {
"Serie": "CI",
"Folio": 10
},
"invoice_uid": "6a8651e1aa9c4"
}
Ejemplo de respuesta errónea por TranspInternac inválido
{
"response": "error",
"message": "Cuando se emite CartaPorte junto con ComercioExterior, TranspInternac debe ser 'Sí'."
}
Ejemplo de respuesta errónea por receptor extranjero sin NumRegIdTrib (CCE133)
{
"response": "error",
"message": "CCE133: Receptor.NumRegIdTrib es requerido cuando el RFC del receptor es XEXX010101000."
}
Comercio Exterior 2.0 en Carta Porte 3.1 (Tipo traslado)
Para generar un CFDI de tipo traslado que incluya ambos complementos, debes configurar el atributo TipoDocumento como carta_porte. El orden semántico del JSON/payload mantiene la misma estructura que en el escenario de ingreso.
Consideraciones importantes para Traslado + CCE
Al emitir un CFDI de traslado con complemento de Comercio Exterior, toma en cuenta las siguientes reglas fiscales y de estructura:
- Moneda e importes: El ejemplo emite el traslado en
USD, por lo que se debe enviarTipoCambio(igual aTipoCambioUSD). Los importes de los conceptos se registran en0.00y el atributoObjetoImpdebe llevar la clave01(No objeto de impuesto). - Forma y método de pago: No se deben enviar los atributos
FormaPagoniMetodoPago(no aplican para comprobantes de tipo TrasladoT). - Exportación: Por ahora el atributo
Exportacionen la cabecera del CFDI debe enviarse como02(Definitiva). - Receptor del CFDI: El RFC del receptor debe ser igual al del emisor (CCE108) y su
DomicilioFiscalReceptordebe ser el código postal del domicilio fiscal registrado ante el SAT para ese RFC (CFDI40147). No se utiliza el RFC genérico extranjero en la cabecera de traslado. - Montos en CCE: En un traslado,
ValorDolaresno se compara contra los importes de los conceptos (esa validación aplica a ingreso y egreso). CadaValorDolaresesCantidadAduana×ValorUnitarioAduana(en el ejemplo, 100 piezas × 1.00 = 100.00 USD) yTotalUSDes la suma de losValorDolares(CCE122). También pueden enviarse en0.00. - Carta Porte y Comercio Exterior: las mercancías de
CartaPorte.Mercanciasdeben describir los mismos bienes que los conceptos del CFDI y que las mercancías deComercioExterior(misma descripción, cantidad, fracción arancelaria y moneda). - Transporte Internacional: Es obligatorio declarar
CartaPorte.TranspInternacen"Sí"e incluir los nodos correspondientes a transporte internacional.
Reglas por MotivoTraslado
MotivoTraslado es opcional; cuando se envía, se validan las siguientes reglas:
- Motivo 05: exige al menos un nodo
Propietario(CCE117). - Propietario con otro motivo: si se envía
Propietariocon unMotivoTrasladodistinto de05, la petición se rechaza (CCE117). - Motivo 01: exige
CfdiRelacionadosconTipoRelaciony el UUID de la factura donde previamente se realizó la enajenación (CCE116). - Destinatario: solo se permite un destinatario (CCE142).
- Receptor del CFDI: debe tener el mismo RFC que el emisor (CCE108) y un
DomicilioFiscalReceptorválido para ese RFC (CFDI40147).
Coemisión Carta Porte traslado + Comercio Exterior 2.0
Consejo de integración
Utiliza el UID de un cliente registrado con el mismo RFC que tu emisor para armar la petición correctamente.
Ejemplo de coemisión: Carta Porte traslado + Comercio Exterior 2.0
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{ HOST }/v4/cfdi40/create',
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 =>'{
"TipoDocumento": "carta_porte",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"Exportacion": "02",
"LugarExpedicion": "26015",
"EnviarCorreo": false,
"Receptor": {
"UID": "UID_DEL_CLIENTE"
},
"Conceptos": [
{
"ClaveProdServ": "78101800",
"NoIdentificacion": "TR01",
"Cantidad": "1.0",
"ClaveUnidad": "H87",
"Unidad": "Pieza",
"Descripcion": "TRANSPORTE DE CARGA",
"ValorUnitario": "0.00",
"Importe": "0.00",
"ObjetoImp": "01"
},
{
"ClaveProdServ": "32101622",
"NoIdentificacion": "UT421511",
"Cantidad": "100.00",
"ClaveUnidad": "XBX",
"Descripcion": "MEMORIA FLASH",
"ValorUnitario": "0.00",
"Importe": "0.00",
"ObjetoImp": "01"
}
],
"CartaPorte": {
"Version": "3.1",
"TranspInternac": "Sí",
"EntradaSalidaMerc": "Salida",
"PaisOrigenDestino": "USA",
"ViaEntradaSalida": "01",
"TotalDistRec": "120.00",
"RegimenesAduaneros": {
"RegimenAduaneroCCP": [
{
"RegimenAduanero": "EXD"
}
]
},
"Ubicaciones": {
"Ubicacion": [
{
"TipoUbicacion": "Origen",
"IDUbicacion": "OR000001",
"RFCRemitenteDestinatario": "XAXX010101000",
"NombreRemitenteDestinatario": "Origen Nacional",
"FechaHoraSalidaLlegada": "2026-07-30T10:00:00",
"Domicilio": {
"Calle": "xola",
"NumeroExterior": "531",
"Colonia": "0496",
"Localidad": "03",
"Municipio": "014",
"Estado": "CMX",
"Pais": "MEX",
"CodigoPostal": "03100"
}
},
{
"TipoUbicacion": "Destino",
"IDUbicacion": "DE000001",
"RFCRemitenteDestinatario": "XEXX010101000",
"NumRegIdTrib": "123456789",
"ResidenciaFiscal": "USA",
"NombreRemitenteDestinatario": "Destino Internacional",
"FechaHoraSalidaLlegada": "2026-07-30T13:50:00",
"DistanciaRecorrida": "120.00",
"Domicilio": {
"Calle": "East Vernon Avenue",
"NumeroExterior": "533",
"Colonia": "",
"Localidad": "Los Ángeles",
"Municipio": "",
"Estado": "CA",
"Pais": "USA",
"CodigoPostal": "90011"
}
}
]
},
"Mercancias": {
"NumTotalMercancias": "1",
"PesoBrutoTotal": "10.000",
"UnidadPeso": "KGM",
"Mercancia": [
{
"BienesTransp": "32101622",
"Descripcion": "MEMORIA FLASH",
"Cantidad": "100",
"ClaveUnidad": "XBX",
"PesoEnKg": "10.000",
"ValorMercancia": "100.00",
"Moneda": "USD",
"FraccionArancelaria": "8471700100",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "100",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
}
],
"Autotransporte": {
"PermSCT": "TPAF02",
"NumPermisoSCT": "123456",
"IdentificacionVehicular": {
"ConfigVehicular": "C2",
"PlacaVM": "555TTT",
"AnioModeloVM": "2023",
"PesoBrutoVehicular": "1"
},
"Seguros": {
"AseguraRespCivil": "ODISEA",
"PolizaRespCivil": "3456YUHNB234RT"
}
}
},
"FiguraTransporte": {
"TiposFigura": [
{
"TipoFigura": "01",
"RFCFigura": "KAHO641101B39",
"NumLicencia": "D0908240",
"NombreFigura": "OSCAR KALA HAAK"
}
]
}
},
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "FOB",
"TipoCambioUSD": "17.0245",
"TotalUSD": "100.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "CALLE DEL PAPEL",
"Colonia": "0214",
"Localidad": "01",
"Municipio": "014",
"Estado": "QUE",
"Pais": "MEX",
"CodigoPostal": "76199"
}
},
"Receptor": {
"Domicilio": {
"Calle": "ST. A",
"Estado": "TX",
"Pais": "USA",
"CodigoPostal": "00000"
}
},
"Mercancias": [
{
"NoIdentificacion": "UT421511",
"FraccionArancelaria": "8471700100",
"CantidadAduana": "100.000",
"UnidadAduana": "06",
"ValorUnitarioAduana": "1.00",
"ValorDolares": "100.00"
}
]
}
}',
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/create',
'headers': {
'Content-Type': 'application/json',
'F-PLUGIN': '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
'F-Api-Key': 'Tu API key',
'F-Secret-Key': 'Tu Secret key'
},
body: JSON.stringify({
"TipoDocumento": "carta_porte",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"Exportacion": "02",
"LugarExpedicion": "26015",
"EnviarCorreo": false,
"Receptor": {
"UID": "UID_DEL_CLIENTE"
},
"Conceptos": [
{
"ClaveProdServ": "78101800",
"NoIdentificacion": "TR01",
"Cantidad": "1.0",
"ClaveUnidad": "H87",
"Unidad": "Pieza",
"Descripcion": "TRANSPORTE DE CARGA",
"ValorUnitario": "0.00",
"Importe": "0.00",
"ObjetoImp": "01"
},
{
"ClaveProdServ": "32101622",
"NoIdentificacion": "UT421511",
"Cantidad": "100.00",
"ClaveUnidad": "XBX",
"Descripcion": "MEMORIA FLASH",
"ValorUnitario": "0.00",
"Importe": "0.00",
"ObjetoImp": "01"
}
],
"CartaPorte": {
"Version": "3.1",
"TranspInternac": "Sí",
"EntradaSalidaMerc": "Salida",
"PaisOrigenDestino": "USA",
"ViaEntradaSalida": "01",
"TotalDistRec": "120.00",
"RegimenesAduaneros": {
"RegimenAduaneroCCP": [
{
"RegimenAduanero": "EXD"
}
]
},
"Ubicaciones": {
"Ubicacion": [
{
"TipoUbicacion": "Origen",
"IDUbicacion": "OR000001",
"RFCRemitenteDestinatario": "XAXX010101000",
"NombreRemitenteDestinatario": "Origen Nacional",
"FechaHoraSalidaLlegada": "2026-07-30T10:00:00",
"Domicilio": {
"Calle": "xola",
"NumeroExterior": "531",
"Colonia": "0496",
"Localidad": "03",
"Municipio": "014",
"Estado": "CMX",
"Pais": "MEX",
"CodigoPostal": "03100"
}
},
{
"TipoUbicacion": "Destino",
"IDUbicacion": "DE000001",
"RFCRemitenteDestinatario": "XEXX010101000",
"NumRegIdTrib": "123456789",
"ResidenciaFiscal": "USA",
"NombreRemitenteDestinatario": "Destino Internacional",
"FechaHoraSalidaLlegada": "2026-07-30T13:50:00",
"DistanciaRecorrida": "120.00",
"Domicilio": {
"Calle": "East Vernon Avenue",
"NumeroExterior": "533",
"Colonia": "",
"Localidad": "Los Ángeles",
"Municipio": "",
"Estado": "CA",
"Pais": "USA",
"CodigoPostal": "90011"
}
}
]
},
"Mercancias": {
"NumTotalMercancias": "1",
"PesoBrutoTotal": "10.000",
"UnidadPeso": "KGM",
"Mercancia": [
{
"BienesTransp": "32101622",
"Descripcion": "MEMORIA FLASH",
"Cantidad": "100",
"ClaveUnidad": "XBX",
"PesoEnKg": "10.000",
"ValorMercancia": "100.00",
"Moneda": "USD",
"FraccionArancelaria": "8471700100",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "100",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
}
],
"Autotransporte": {
"PermSCT": "TPAF02",
"NumPermisoSCT": "123456",
"IdentificacionVehicular": {
"ConfigVehicular": "C2",
"PlacaVM": "555TTT",
"AnioModeloVM": "2023",
"PesoBrutoVehicular": "1"
},
"Seguros": {
"AseguraRespCivil": "ODISEA",
"PolizaRespCivil": "3456YUHNB234RT"
}
}
},
"FiguraTransporte": {
"TiposFigura": [
{
"TipoFigura": "01",
"RFCFigura": "KAHO641101B39",
"NumLicencia": "D0908240",
"NombreFigura": "OSCAR KALA HAAK"
}
]
}
},
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "FOB",
"TipoCambioUSD": "17.0245",
"TotalUSD": "100.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "CALLE DEL PAPEL",
"Colonia": "0214",
"Localidad": "01",
"Municipio": "014",
"Estado": "QUE",
"Pais": "MEX",
"CodigoPostal": "76199"
}
},
"Receptor": {
"Domicilio": {
"Calle": "ST. A",
"Estado": "TX",
"Pais": "USA",
"CodigoPostal": "00000"
}
},
"Mercancias": [
{
"NoIdentificacion": "UT421511",
"FraccionArancelaria": "8471700100",
"CantidadAduana": "100.000",
"UnidadAduana": "06",
"ValorUnitarioAduana": "1.00",
"ValorDolares": "100.00"
}
]
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{ HOST }/v4/cfdi40/create"
payload = json.dumps({
"TipoDocumento": "carta_porte",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"Exportacion": "02",
"LugarExpedicion": "26015",
"EnviarCorreo": False,
"Receptor": {
"UID": "UID_DEL_CLIENTE"
},
"Conceptos": [
{
"ClaveProdServ": "78101800",
"NoIdentificacion": "TR01",
"Cantidad": "1.0",
"ClaveUnidad": "H87",
"Unidad": "Pieza",
"Descripcion": "TRANSPORTE DE CARGA",
"ValorUnitario": "0.00",
"Importe": "0.00",
"ObjetoImp": "01"
},
{
"ClaveProdServ": "32101622",
"NoIdentificacion": "UT421511",
"Cantidad": "100.00",
"ClaveUnidad": "XBX",
"Descripcion": "MEMORIA FLASH",
"ValorUnitario": "0.00",
"Importe": "0.00",
"ObjetoImp": "01"
}
],
"CartaPorte": {
"Version": "3.1",
"TranspInternac": "Sí",
"EntradaSalidaMerc": "Salida",
"PaisOrigenDestino": "USA",
"ViaEntradaSalida": "01",
"TotalDistRec": "120.00",
"RegimenesAduaneros": {
"RegimenAduaneroCCP": [
{
"RegimenAduanero": "EXD"
}
]
},
"Ubicaciones": {
"Ubicacion": [
{
"TipoUbicacion": "Origen",
"IDUbicacion": "OR000001",
"RFCRemitenteDestinatario": "XAXX010101000",
"NombreRemitenteDestinatario": "Origen Nacional",
"FechaHoraSalidaLlegada": "2026-07-30T10:00:00",
"Domicilio": {
"Calle": "xola",
"NumeroExterior": "531",
"Colonia": "0496",
"Localidad": "03",
"Municipio": "014",
"Estado": "CMX",
"Pais": "MEX",
"CodigoPostal": "03100"
}
},
{
"TipoUbicacion": "Destino",
"IDUbicacion": "DE000001",
"RFCRemitenteDestinatario": "XEXX010101000",
"NumRegIdTrib": "123456789",
"ResidenciaFiscal": "USA",
"NombreRemitenteDestinatario": "Destino Internacional",
"FechaHoraSalidaLlegada": "2026-07-30T13:50:00",
"DistanciaRecorrida": "120.00",
"Domicilio": {
"Calle": "East Vernon Avenue",
"NumeroExterior": "533",
"Colonia": "",
"Localidad": "Los Ángeles",
"Municipio": "",
"Estado": "CA",
"Pais": "USA",
"CodigoPostal": "90011"
}
}
]
},
"Mercancias": {
"NumTotalMercancias": "1",
"PesoBrutoTotal": "10.000",
"UnidadPeso": "KGM",
"Mercancia": [
{
"BienesTransp": "32101622",
"Descripcion": "MEMORIA FLASH",
"Cantidad": "100",
"ClaveUnidad": "XBX",
"PesoEnKg": "10.000",
"ValorMercancia": "100.00",
"Moneda": "USD",
"FraccionArancelaria": "8471700100",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "100",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
}
],
"Autotransporte": {
"PermSCT": "TPAF02",
"NumPermisoSCT": "123456",
"IdentificacionVehicular": {
"ConfigVehicular": "C2",
"PlacaVM": "555TTT",
"AnioModeloVM": "2023",
"PesoBrutoVehicular": "1"
},
"Seguros": {
"AseguraRespCivil": "ODISEA",
"PolizaRespCivil": "3456YUHNB234RT"
}
}
},
"FiguraTransporte": {
"TiposFigura": [
{
"TipoFigura": "01",
"RFCFigura": "KAHO641101B39",
"NumLicencia": "D0908240",
"NombreFigura": "OSCAR KALA HAAK"
}
]
}
},
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "FOB",
"TipoCambioUSD": "17.0245",
"TotalUSD": "100.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "CALLE DEL PAPEL",
"Colonia": "0214",
"Localidad": "01",
"Municipio": "014",
"Estado": "QUE",
"Pais": "MEX",
"CodigoPostal": "76199"
}
},
"Receptor": {
"Domicilio": {
"Calle": "ST. A",
"Estado": "TX",
"Pais": "USA",
"CodigoPostal": "00000"
}
},
"Mercancias": [
{
"NoIdentificacion": "UT421511",
"FraccionArancelaria": "8471700100",
"CantidadAduana": "100.000",
"UnidadAduana": "06",
"ValorUnitarioAduana": "1.00",
"ValorDolares": "100.00"
}
]
}
})
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/create")
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({
"TipoDocumento": "carta_porte",
"Serie": "ID_DE_TU_SERIE",
"UsoCFDI": "S01",
"Moneda": "USD",
"TipoCambio": "17.0245",
"Exportacion": "02",
"LugarExpedicion": "26015",
"EnviarCorreo": false,
"Receptor": {
"UID": "UID_DEL_CLIENTE"
},
"Conceptos": [
{
"ClaveProdServ": "78101800",
"NoIdentificacion": "TR01",
"Cantidad": "1.0",
"ClaveUnidad": "H87",
"Unidad": "Pieza",
"Descripcion": "TRANSPORTE DE CARGA",
"ValorUnitario": "0.00",
"Importe": "0.00",
"ObjetoImp": "01"
},
{
"ClaveProdServ": "32101622",
"NoIdentificacion": "UT421511",
"Cantidad": "100.00",
"ClaveUnidad": "XBX",
"Descripcion": "MEMORIA FLASH",
"ValorUnitario": "0.00",
"Importe": "0.00",
"ObjetoImp": "01"
}
],
"CartaPorte": {
"Version": "3.1",
"TranspInternac": "Sí",
"EntradaSalidaMerc": "Salida",
"PaisOrigenDestino": "USA",
"ViaEntradaSalida": "01",
"TotalDistRec": "120.00",
"RegimenesAduaneros": {
"RegimenAduaneroCCP": [
{
"RegimenAduanero": "EXD"
}
]
},
"Ubicaciones": {
"Ubicacion": [
{
"TipoUbicacion": "Origen",
"IDUbicacion": "OR000001",
"RFCRemitenteDestinatario": "XAXX010101000",
"NombreRemitenteDestinatario": "Origen Nacional",
"FechaHoraSalidaLlegada": "2026-07-30T10:00:00",
"Domicilio": {
"Calle": "xola",
"NumeroExterior": "531",
"Colonia": "0496",
"Localidad": "03",
"Municipio": "014",
"Estado": "CMX",
"Pais": "MEX",
"CodigoPostal": "03100"
}
},
{
"TipoUbicacion": "Destino",
"IDUbicacion": "DE000001",
"RFCRemitenteDestinatario": "XEXX010101000",
"NumRegIdTrib": "123456789",
"ResidenciaFiscal": "USA",
"NombreRemitenteDestinatario": "Destino Internacional",
"FechaHoraSalidaLlegada": "2026-07-30T13:50:00",
"DistanciaRecorrida": "120.00",
"Domicilio": {
"Calle": "East Vernon Avenue",
"NumeroExterior": "533",
"Colonia": "",
"Localidad": "Los Ángeles",
"Municipio": "",
"Estado": "CA",
"Pais": "USA",
"CodigoPostal": "90011"
}
}
]
},
"Mercancias": {
"NumTotalMercancias": "1",
"PesoBrutoTotal": "10.000",
"UnidadPeso": "KGM",
"Mercancia": [
{
"BienesTransp": "32101622",
"Descripcion": "MEMORIA FLASH",
"Cantidad": "100",
"ClaveUnidad": "XBX",
"PesoEnKg": "10.000",
"ValorMercancia": "100.00",
"Moneda": "USD",
"FraccionArancelaria": "8471700100",
"TipoMateria": "04",
"CantidadTransporta": [
{
"Cantidad": "100",
"IDOrigen": "OR000001",
"IDDestino": "DE000001"
}
]
}
],
"Autotransporte": {
"PermSCT": "TPAF02",
"NumPermisoSCT": "123456",
"IdentificacionVehicular": {
"ConfigVehicular": "C2",
"PlacaVM": "555TTT",
"AnioModeloVM": "2023",
"PesoBrutoVehicular": "1"
},
"Seguros": {
"AseguraRespCivil": "ODISEA",
"PolizaRespCivil": "3456YUHNB234RT"
}
}
},
"FiguraTransporte": {
"TiposFigura": [
{
"TipoFigura": "01",
"RFCFigura": "KAHO641101B39",
"NumLicencia": "D0908240",
"NombreFigura": "OSCAR KALA HAAK"
}
]
}
},
"ComercioExterior": {
"Version": "2.0",
"ClaveDePedimento": "A1",
"CertificadoOrigen": "0",
"Incoterm": "FOB",
"TipoCambioUSD": "17.0245",
"TotalUSD": "100.00",
"Emisor": {
"Curp": "XEXX010101HNEXXXA4",
"Domicilio": {
"Calle": "CALLE DEL PAPEL",
"Colonia": "0214",
"Localidad": "01",
"Municipio": "014",
"Estado": "QUE",
"Pais": "MEX",
"CodigoPostal": "76199"
}
},
"Receptor": {
"Domicilio": {
"Calle": "ST. A",
"Estado": "TX",
"Pais": "USA",
"CodigoPostal": "00000"
}
},
"Mercancias": [
{
"NoIdentificacion": "UT421511",
"FraccionArancelaria": "8471700100",
"CantidadAduana": "100.000",
"UnidadAduana": "06",
"ValorUnitarioAduana": "1.00",
"ValorDolares": "100.00"
}
]
}
})
response = http.request(request)
puts response.read_body
Respuesta
Ejemplo de respuesta exitosa
{
"response": "success",
"message": "Factura creada y enviada satisfactoriamente",
"UUID": "5d2e7f10-3b4a-4c8e-9f21-7a6b8c9d0e1f",
"uid": "6a86f2b3c4d5e",
"SAT": {
"UUID": "5d2e7f10-3b4a-4c8e-9f21-7a6b8c9d0e1f",
"FechaTimbrado": "2026-08-19T19:01:16",
"NoCertificadoSAT": "30001000000500003456",
"Version": "1.1",
"SelloSAT": "AgQ4BOkc1M...",
"SelloCFD": "UXadj98MRl..."
},
"INV": {
"Serie": "C",
"Folio": 5
},
"invoice_uid": "6a86f2b3c4d5e"
}