Postman
Postman
  • Documentación

    • Información general
    • Entornos
    • Primeros pasos
    • Listar CFDI's
    • Buscar CFDI
    • Crear CFDI 4.0
    • Crear CFDI Global 4.0
    • Borradores CFDI 4.0
    • Descargar CFDI
    • Cancelar CFDI 4.0
    • Descargar acuse CFDI 4.0
    • Enviar CFDI
    • Consultar estatus de cancelación de un CFDI
    • Eventos
    • Webhooks
    • Grupos de empleados
    • Empleados
    • Nóminas
    • Complementos
    • Retenciones
    • Complementos de retenciones
    • Carta porte v3.1
    • Comercio exterior v2.0
    • Catálogos
    • Clientes
    • Empresas
    • Migraciones
    • Series
    • Productos
    • Addendas
    • Fundamentos legales del SAT

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 c_MotivoTraslado del SAT (valores permitidos: 01, 02, 03, 04, 05 y 99). Consulta las reglas por motivo en la sección de Comercio Exterior 2.0 en Carta Porte 3.1 (Tipo traslado).

 ClaveDePedimento String Requerido

 Clave que identifica el tipo de operación aduanera conforme al catálogo c_ClavePedimento del SAT. El único valor permitido es "A1".

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 CertificadoOrigen es igual a 1. No debe enviarse si CertificadoOrigen es 0 (CCE118).

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 Exportacion es 02.

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 Exportacion en 02, se rechaza (CCE120).

 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 ValorDolares de cada mercancía registrada, redondeada a dos decimales (CCE122). La API admite una tolerancia de +/- 0.01 entre TotalUSD y esa suma; es una validación de la API, no un requisito del estándar del SAT.

Ejemplo: "400.00"

 Emisor Object Opcional

 Nodo condicional para especificar datos adicionales del emisor de la mercancía. Puede contener los atributos Curp y el subnodo Domicilio. La Curp solo aplica a emisores persona física (RFC de 13 caracteres); puedes omitirla si ya está capturada en tu cuenta, ya que la API la toma de ahí (si no está en ningún lado, error CCE124). Si el emisor es persona moral (RFC de 12 caracteres), elimina Curp del payload (CCE123). Si se envía el nodo Emisor, el Domicilio es requerido y su Pais debe ser MEX.

 Propietario Array/Object Condicional

 Nodo condicional que aplica cuando MotivoTraslado es 05 (mercancía propiedad de terceros). Con cualquier otro motivo no debe enviarse (CCE117). Permite registrar la identificación fiscal del dueño de la mercancía mediante NumRegIdTrib (de 6 a 40 caracteres) y ResidenciaFiscal, ambos requeridos. Puede enviarse como objeto o como arreglo (de 1 a n). Consulta la tabla de Propietario.

 Receptor Object Condicional

 Nodo condicional con información complementaria del comprador o receptor de la mercancía en el extranjero. Puede incorporar NumRegIdTrib (de 6 a 40 caracteres) y el subnodo Domicilio.

NumRegIdTrib es requerido cuando el RFC del receptor del CFDI es XEXX010101000 (CCE133) y no debe enviarse en otro caso. Si se envía, el Pais del domicilio debe ser distinto de MEX (CCE134).

Nota: si NumRegIdTrib no viene en este nodo, se toma del cliente (Receptor.UID) del CFDI.

 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 NumRegIdTrib (de 6 a 40 caracteres), Nombre (máximo 300 caracteres) y el subnodo Domicilio. Consulta la tabla de Destinatario. Con un CFDI tipo Traslado solo se permite un destinatario (CCE142).

 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 Mercancias (ejemplo: "Mercancias": [{...}]) y no anidado como objeto padre-hijo (evitar Mercancias.Mercancia).

 No se permiten mercancías repetidas con el mismo NoIdentificacion y la misma FraccionArancelaria (CCE153).

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 NoIdentificacion de alguno de los conceptos registrados en el CFDI.

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 c_FraccionArancelaria del SAT. Es requerida en todas las mercancías, excepto en servicios (cuando UnidadAduana es 99 o la ClaveUnidad del concepto es E48), en cuyo caso no debe enviarse (CCE159, CCE160). Debe estar vigente en el catálogo (CCE161) y la UnidadAduana debe corresponder a la UMT de la fracción (CCE167).

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 y ValorUnitarioAduana; si una mercancía los incluye, todas las mercancías del comprobante deben incluir los tres (CCE165, CCE166).

 UnidadAduana String Condicional

 Clave de la unidad de medida aduanera aplicable según la fracción arancelaria declarada, conforme al catálogo c_UnidadAduana del SAT (valores 01 a 22 y 99; ej. "01" Kilos, "06" Piezas, "99" Servicios). Debe coincidir con la UMT de la FraccionArancelaria.

Ejemplo: "01"

 ValorUnitarioAduana String Condicional

 Valor unitario del bien expresado en dólares estadounidenses (USD) por unidad aduanera. Debe enviarse junto con CantidadAduana y UnidadAduana (CCE165, CCE166) y debe ser mayor que cero, salvo en servicios (UnidadAduana 99) (CCE168).

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 CantidadAduana por ValorUnitarioAduana (cuando apliquen) o el equivalente comercial en USD. Debe estar dentro de los límites que resultan de ese producto (CCE169, CCE171), o ser 0 o 1 cuando la normatividad lo permita. La suma por NoIdentificacion debe corresponder al Importe de los conceptos convertido a USD: Importe × TipoCambio ÷ TipoCambioUSD (CCE157, CCE158, CCE172).

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. Marca, Modelo, SubModelo, NumeroSerie). Consulta la tabla de DescripcionesEspecificas.

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 Pais del domicilio debe ser distinto de MEX (CCE143).

 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 c_Colonia del SAT, cuando aplique. Receptor y Destinatario: texto libre (máximo 120 caracteres).

 Localidad String Opcional

 Emisor: clave de la localidad conforme al catálogo c_Localidad del SAT, cuando aplique. Receptor y Destinatario: texto libre (máximo 120 caracteres).

 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 c_Municipio del SAT, cuando aplique. Receptor y Destinatario: texto libre (máximo 120 caracteres).

 Estado String Requerido

 Emisor: clave del catálogo c_Estado de México. Receptor y Destinatario: clave del catálogo c_Estado correspondiente al país (por ejemplo, "NY" para USA); si el país es "ZZZ" o no tiene estados en el catálogo, texto libre (máximo 30 caracteres).

 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 NumRegIdTrib debe ser distinto de MEX.

Ejemplo: "MEX"

 CodigoPostal String Requerido

 Emisor y domicilios en México: clave del catálogo c_CodigoPostal, congruente con Estado, Municipio y Localidad. Otros países: debe cumplir el patrón del catálogo c_Pais para ese país, si existe; en caso contrario, texto libre (máximo 12 caracteres).

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):

  1. Cabecera del CFDI
  2. Receptor
  3. Conceptos
  4. CartaPorte (Atributos → RegimenesAduaneros → Ubicaciones → Mercancias → FiguraTransporte)
  5. 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 Exportacion en la cabecera del CFDI debe enviarse con la clave 02 (Definitiva).
  • Transporte internacional: Se debe establecer CartaPorte.TranspInternac en "Sí".
  • Atributos de transporte internacional: Al indicar transporte internacional, es obligatorio incluir los campos EntradaSalidaMerc, PaisOrigenDestino, ViaEntradaSalida y el nodo RegimenesAduaneros.
  • Receptor extranjero: Si el RFC del receptor es genérico extranjero (XEXX010101000), debes incluir obligatoriamente sus atributos NumRegIdTrib y ResidenciaFiscal (CCE133).
  • Relación Conceptos vs. Comercio Exterior: El parámetro NoIdentificacion de cada artículo registrado dentro del nodo ComercioExterior debe coincidir exactamente con el NoIdentificacion de algún concepto en el CFDI.
  • Cuadre de importes USD: La suma de ValorDolares de las mercancías con un mismo NoIdentificacion debe corresponder al Importe de los conceptos con ese NoIdentificacion, convertido a USD: Importe × TipoCambio ÷ TipoCambioUSD (CCE157, CCE158, CCE172).
    • Si la moneda del comprobante es USD, la relación es 1:1 cuando TipoCambio y TipoCambioUSD son iguales.
    • Si la moneda es MXN, TipoCambio es 1 (puede omitirse) y el importe se divide entre TipoCambioUSD.
    • Si la moneda es otra divisa, se aplica la fórmula con su TipoCambio.
  • 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 enviar TipoCambio (igual a TipoCambioUSD). Los importes de los conceptos se registran en 0.00 y el atributo ObjetoImp debe llevar la clave 01 (No objeto de impuesto).
  • Forma y método de pago: No se deben enviar los atributos FormaPago ni MetodoPago (no aplican para comprobantes de tipo Traslado T).
  • Exportación: Por ahora el atributo Exportacion en la cabecera del CFDI debe enviarse como 02 (Definitiva).
  • Receptor del CFDI: El RFC del receptor debe ser igual al del emisor (CCE108) y su DomicilioFiscalReceptor debe 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, ValorDolares no se compara contra los importes de los conceptos (esa validación aplica a ingreso y egreso). Cada ValorDolares es CantidadAduana × ValorUnitarioAduana (en el ejemplo, 100 piezas × 1.00 = 100.00 USD) y TotalUSD es la suma de los ValorDolares (CCE122). También pueden enviarse en 0.00.
  • Carta Porte y Comercio Exterior: las mercancías de CartaPorte.Mercancias deben describir los mismos bienes que los conceptos del CFDI y que las mercancías de ComercioExterior (misma descripción, cantidad, fracción arancelaria y moneda).
  • Transporte Internacional: Es obligatorio declarar CartaPorte.TranspInternac en "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 Propietario con un MotivoTraslado distinto de 05, la petición se rechaza (CCE117).
  • Motivo 01: exige CfdiRelacionados con TipoRelacion y 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 DomicilioFiscalReceptor vá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"
}

Prev
Carta porte v3.1
Next
Catálogos