Crear Carta Porte
Este endpoint permite crear y sellar un CFDI de Traslado con el complemento Carta Porte v3.1.
- Método HTTP:
POST - URL:
/invoices
Cabeceras
| Nombre | Descripción | Requerido |
|---|---|---|
x-user-id | ID del usuario validado por el servicio de autenticación. | Sí |
x-organization-id | ID de la organización del usuario. | Sí |
x-api-key | API key para autenticación. | Sí |
x-idempotency | Clave de idempotencia para evitar duplicados. | Sí |
Estructura del Request
El cuerpo de la petición es un objeto JSON que representa el CrearComprobanteDto.
Objeto Principal: CrearComprobanteDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
tipoDeComprobante | string | Obligatorio | Debe ser T para CFDI de Traslado. | c_TipoDeComprobante |
receptor | ReceptorDto | Obligatorio | Objeto con los datos del receptor. | |
conceptos | ConceptoDto[] | Obligatorio | Arreglo de conceptos. | |
moneda | string | Obligatorio | Moneda del comprobante. | c_Moneda |
exportacion | string | Obligatorio | Clave que indica si el comprobante ampara una operación de exportación. | c_Exportacion |
lugarExpedicion | string | Obligatorio | Código postal del lugar de expedición del comprobante. | c_CodigoPostal |
fecha | string (ISO 8601) | Obligatorio | Fecha y hora de expedición del comprobante. | |
complementoCartaPorte | ComplementoCartaPorteDto | Obligatorio | Nodo para el Complemento Carta Porte. |
Objeto: ReceptorDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
rfc | string | Obligatorio | RFC del receptor. | |
nombre | string | Obligatorio | Nombre o Razón Social del receptor. | |
regimenFiscal | string | Obligatorio | Régimen Fiscal del receptor. | c_RegimenFiscal |
domicilioFiscal | string | Obligatorio | Código Postal del domicilio fiscal del receptor. | c_CodigoPostal |
Objeto: ConceptoDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
descripcion | string | Obligatorio | Descripción del concepto. | |
valorUnitario | number | Obligatorio | Precio unitario del concepto. | |
cantidad | number | Obligatorio | Cantidad de bienes o servicios del concepto. | |
claveProdServ | string | Obligatorio | Clave de producto o servicio. | c_ClaveProdServ |
claveUnidad | string | Obligatorio | Clave de unidad de medida. | c_ClaveUnidad |
objetoImp | string | Obligatorio | Clave que indica si el concepto es objeto de impuesto. | c_ObjetoImp |
Objeto Principal: ComplementoCartaPorteDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
transpInternac | string | Obligatorio | Indica si es transporte internacional (Sí o No). | |
entradaSalidaMerc | string | Condicional | Indica si hay entrada o salida de mercancías. Requerido si transpInternac es Sí. | |
paisOrigenDestino | string | Condicional | País de origen o destino. Requerido si transpInternac es Sí. | c_Pais |
viaEntradaSalida | string | Condicional | Vía de entrada o salida. Requerido si transpInternac es Sí. | c_CveTransporte |
totalDistRec | number | Opcional | Distancia total recorrida en kilómetros. | |
ubicaciones | UbicacionDto[] | Obligatorio | Arreglo de ubicaciones (origen y destino). | |
mercancias | MercanciaDto[] | Obligatorio | Arreglo de mercancías transportadas. | |
permSCT | string | Obligatorio | Permiso SCT del autotransporte. | c_TipPermiso |
numPermisoSCT | string | Obligatorio | Número de permiso SCT. | |
identificacionVehicular | IdentificacionVehicularDto | Obligatorio | Identificación del vehículo. | |
seguros | SegurosDto | Obligatorio | Seguros del autotransporte. | |
remolques | RemolqueDto[] | Opcional | Remolques del autotransporte. | |
figuraTransporte | TiposFiguraDto[] | Obligatorio | Figuras que intervienen en el transporte. |
Objeto: UbicacionDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
tipoUbicacion | string | Obligatorio | Tipo de ubicación (Origen o Destino). | c_TipoUbicacion |
idUbicacion | string | Opcional | Identificador de la ubicación. | |
rfcRemitenteDestinatario | string | Obligatorio | RFC del remitente o destinatario. | |
nombreRemitenteDestinatario | string | Opcional | Nombre del remitente o destinatario. | |
fechaHoraSalidaLlegada | string (ISO 8601) | Obligatorio | Fecha y hora de salida/llegada. | |
distanciaRecorrida | number | Opcional | Distancia recorrida en kilómetros. | |
domicilio | DomicilioDto | Obligatorio | Domicilio de la ubicación. | |
tipoEstacion | string | Opcional | Tipo de estación. | c_TipoEstacion |
navegacionDeTrafico | string | Opcional | Navegación de tráfico. | c_NavegacionTrafico |
Objeto: DomicilioDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
calle | string | Opcional | Nombre de la calle. | |
numeroExterior | string | Opcional | Número exterior. | |
numeroInterior | string | Opcional | Número interior. | |
colonia | string | Opcional | Colonia o urbanización. | |
localidad | string | Opcional | Localidad. | c_Localidad |
referencia | string | Opcional | Referencia adicional. | |
municipio | string | Obligatorio | Municipio o alcaldía. | c_Municipio |
estado | string | Obligatorio | Estado. | c_Estado |
pais | string | Obligatorio | País. | c_Pais |
codigoPostal | string | Obligatorio | Código postal. | c_CodigoPostal |
Objeto: MercanciaDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
bienesTransp | string | Obligatorio | Clave del bien transportado. | c_ClaveProdServCP |
descripcion | string | Opcional | Descripción de la mercancía. | |
cantidad | number | Obligatorio | Cantidad de bienes transportados. | |
claveUnidad | string | Obligatorio | Clave de la unidad de medida. | c_ClaveUnidad |
pesoEnKg | number | Obligatorio | Peso bruto de la mercancía en kilogramos. | |
materialPeligroso | string | Opcional | Indica si la mercancía es material peligroso (Sí o No). | |
cveMaterialPeligroso | string | Condicional | Clave del material peligroso. Requerido si materialPeligroso es Sí. | c_MaterialPeligroso |
embalaje | string | Opcional | Tipo de embalaje. | c_TipoEmbalaje |
valorMercancia | number | Opcional | Valor declarado de la mercancía. | |
moneda | string | Condicional | Moneda del valor de la mercancía. Requerido si se especifica valorMercancia. | c_Moneda |
fraccionArancelaria | string | Opcional | Fracción arancelaria. | |
uuidComercioExt | string | Opcional | UUID del CFDI de comercio exterior. | |
documentacionAduanera | DocumentacionAduaneraDto[] | Opcional | Documentación aduanera de la mercancía. |
Objeto: IdentificacionVehicularDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
configVehicular | string | Obligatorio | Configuración vehicular. | c_ConfigAutotransporte |
placaVM | string | Obligatorio | Placa del vehículo. | |
anioModeloVM | number | Obligatorio | Año del modelo del vehículo. |
Objeto: SegurosDto
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
aseguraRespCivil | string | Obligatorio | Aseguradora de responsabilidad civil. |
polizaRespCivil | string | Obligatorio | Póliza de responsabilidad civil. |
aseguraCarga | string | Opcional | Aseguradora de carga. |
polizaCarga | string | Opcional | Póliza de seguro de carga. |
aseguraMedAmbiente | string | Opcional | Aseguradora de medio ambiente. |
polizaMedAmbiente | string | Opcional | Póliza de seguro de medio ambiente. |
Objeto: TiposFiguraDto
| Campo | Tipo | Requerido | Descripción | Catálogo SAT |
|---|---|---|---|---|
tipoFigura | string | Obligatorio | Tipo de figura. | c_FiguraTransporte |
rfcFigura | string | Obligatorio | RFC de la figura de transporte. | |
numLicencia | string | Condicional | Número de licencia. Requerido si tipoFigura es 01. | |
nombreFigura | string | Opcional | Nombre de la figura de transporte. | |
numRegIdTribFigura | string | Opcional | Número de registro de identificación tributaria (para figuras extranjeras). | |
residenciaFiscalFigura | string | Condicional | Residencia fiscal. Requerido si se especifica numRegIdTribFigura. | c_Pais |
partesTransporte | PartesTransporteDto[] | Opcional | Partes del transporte en las que participa la figura. |
Ejemplos de Código
- cURL
- Python
curl -X POST https://sandbox-api.lummy.com/invoices \
-H "Content-Type: application/json" \
-H "x-user-id: your-user-id" \
-H "x-organization-id: ${LUMMY_ORG_ID}" \
-H "x-api-key: ${LUMMY_API_KEY}" \
-H "x-idempotency: $(uuidgen)" \
-d '{
"tipoDeComprobante": "T",
"receptor": {
"rfc": "XAXX010101000",
"nombre": "Receptor de Prueba",
"regimenFiscal": "601",
"domicilioFiscal": "12345"
},
"conceptos": [
{
"claveProdServ": "84111506",
"cantidad": 1,
"claveUnidad": "E48",
"descripcion": "Servicio de transporte de mercancías",
"valorUnitario": 0,
"objetoImp": "01"
}
],
"moneda": "MXN",
"exportacion": "01",
"lugarExpedicion": "06500",
"fecha": "2025-01-15T12:00:00",
"complementoCartaPorte": {
"transpInternac": "No",
"totalDistRec": 150.5,
"ubicaciones": [
{
"tipoUbicacion": "Origen",
"rfcRemitenteDestinatario": "AAA010101AAA",
"fechaHoraSalidaLlegada": "2025-01-15T08:00:00",
"domicilio": {
"municipio": "015",
"estado": "CMX",
"pais": "MEX",
"codigoPostal": "03900"
}
},
{
"tipoUbicacion": "Destino",
"rfcRemitenteDestinatario": "BBB020202BBB",
"fechaHoraSalidaLlegada": "2025-01-15T12:00:00",
"distanciaRecorrida": 150.5,
"domicilio": {
"municipio": "002",
"estado": "JAL",
"pais": "MEX",
"codigoPostal": "44100"
}
}
],
"mercancias": [
{
"bienesTransp": "10101504",
"cantidad": 1000,
"claveUnidad": "KGM",
"pesoEnKg": 1500
}
],
"permSCT": "TPAF01",
"numPermisoSCT": "ABC123456",
"identificacionVehicular": {
"configVehicular": "T3S1",
"placaVM": "XYZ-789",
"anioModeloVM": 2020
},
"seguros": {
"aseguraRespCivil": "Seguros Atlas S.A.",
"polizaRespCivil": "POL-123456"
},
"figuraTransporte": [
{
"tipoFigura": "01",
"rfcFigura": "AAAA010101AAA",
"numLicencia": "A1234567"
}
]
}
}'
import os
import requests
import uuid
headers = {
'Content-Type': 'application/json',
'x-user-id': 'your-user-id',
'x-organization-id': os.environ.get('LUMMY_ORG_ID'),
'x-api-key': os.environ.get('LUMMY_API_KEY'),
'x-idempotency': str(uuid.uuid4()),
}
json_data = {
'tipoDeComprobante': 'T',
'receptor': {
'rfc': 'XAXX010101000',
'nombre': 'Receptor de Prueba',
'regimenFiscal': '601',
'domicilioFiscal': '12345',
},
'conceptos': [
{
'claveProdServ': '84111506',
'cantidad': 1,
'claveUnidad': 'E48',
'descripcion': 'Servicio de transporte de mercancías',
'valorUnitario': 0,
'objetoImp': '01',
},
],
'moneda': 'MXN',
'exportacion': '01',
'lugarExpedicion': '06500',
'fecha': '2025-01-15T12:00:00',
'complementoCartaPorte': {
'transpInternac': 'No',
'totalDistRec': 150.5,
'ubicaciones': [
{
'tipoUbicacion': 'Origen',
'rfcRemitenteDestinatario': 'AAA010101AAA',
'fechaHoraSalidaLlegada': '2025-01-15T08:00:00',
'domicilio': {
'municipio': '015',
'estado': 'CMX',
'pais': 'MEX',
'codigoPostal': '03900',
},
},
{
'tipoUbicacion': 'Destino',
'rfcRemitenteDestinatario': 'BBB020202BBB',
'fechaHoraSalidaLlegada': '2025-01-15T12:00:00',
'distanciaRecorrida': 150.5,
'domicilio': {
'municipio': '002',
'estado': 'JAL',
'pais': 'MEX',
'codigoPostal': '44100',
},
},
],
'mercancias': [
{
'bienesTransp': '10101504',
'cantidad': 1000,
'claveUnidad': 'KGM',
'pesoEnKg': 1500,
},
],
'permSCT': 'TPAF01',
'numPermisoSCT': 'ABC123456',
'identificacionVehicular': {
'configVehicular': 'T3S1',
'placaVM': 'XYZ-789',
'anioModeloVM': 2020,
},
'seguros': {
'aseguraRespCivil': 'Seguros Atlas S.A.',
'polizaRespCivil': 'POL-123456',
},
'figuraTransporte': [
{
'tipoFigura': '01',
'rfcFigura': 'AAAA010101AAA',
'numLicencia': 'A1234567',
},
],
},
}
response = requests.post('https://sandbox-api.lummy.com/invoices', headers=headers, json=json_data)
print(response.json())
Respuesta Exitosa
En caso de éxito, la respuesta será un objeto JSON con la estructura InvoiceResultDto.
{
"id": "f3a3b1e0-0b7a-4b1a-9b0a-0a0b0c0d0e0f",
"status": "STAMPED",
"cfdi": "<?xml version=..."
}
Respuestas de Error
| Código HTTP | Descripción |
|---|---|
| 400 | Datos de entrada inválidos o saldo de timbres insuficiente. |
| 409 | La clave de idempotencia ya ha sido usada. |
| 500 | Fallo al procesar el timbrado. El saldo no fue afectado. |