# Timbrar un lote de facturas

`POST https://api.fiscalisto.com/v1/invoice_batches`

Hasta 1,000 facturas de ingreso de un emisor, timbradas en segundo plano. Se revisan todas antes de empezar: si una no pasa, no se timbra ninguna. Responde 202; escuche invoice_batch.completed o consulte el lote.

## Parámetros

| Nombre | Dónde | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `Idempotency-Key` | encabezado | sí | Uno nuevo por comprobante (8 a 255 caracteres; su id de pedido sirve). Si la respuesta se pierde, repita la solicitud con el mismo valor: contesta lo mismo y nunca se timbra dos veces. |

## Cuerpo

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `issuer` | string (iss_…) |  | Emisor (iss_…). Si la llave tiene un solo emisor o la cuenta tiene uno solo, puede omitirse. |
| `name` | string |  | Nombre del lote, para usted. (hasta 120 caracteres) |
| `invoices` | arreglo de objeto | sí | Las facturas, como el cuerpo de POST /v1/invoices, con reference opcional. (hasta 1000) |
| `invoices[].issuer` | string (iss_…) |  | Emisor (iss_…). Si la llave tiene un solo emisor o la cuenta tiene uno solo, puede omitirse. |
| `invoices[].branch` | string (brn_…) |  | Sucursal (brn_…) desde donde se factura: su código postal va en LugarExpedicion, su dirección en el PDF y, si las tiene, sus series. Sin ella, el domicilio fiscal del emisor (la Matriz). |
| `invoices[].warehouse` | string (whs_…) |  | Almacén (whs_…) de donde salen sus productos con track_stock. Por omisión, el de su sucursal (o el de la Matriz). |
| `invoices[].customer` | string (cus_…) o objeto | sí | Cliente (Receptor): el id de uno de su catálogo (cus_…) o sus datos en un objeto. |
| `invoices[].customer.tax_id` | string | sí | RFC (Rfc), 12 caracteres una persona moral y 13 una física. |
| `invoices[].customer.legal_name` | string | sí | Nombre o razón social tal como está en la constancia de situación fiscal, sin el régimen de capital (sin «S.A. de C.V.»). (hasta 300 caracteres) |
| `invoices[].customer.tax_system` | string | sí | Régimen fiscal (RegimenFiscal), clave de c_RegimenFiscal: 601, 612, 626… |
| `invoices[].customer.zip` | string | sí | Código postal del domicilio fiscal del cliente (DomicilioFiscalReceptor), 5 dígitos. |
| `invoices[].customer.email` | string o null |  | Correo a donde se envía (varios separados por comas). Solo se usa si se pide enviarlo. |
| `invoices[].customer.foreign` | objeto |  | Si es extranjero: su país de residencia (ResidenciaFiscal, c_Pais) y su número de registro tributario (NumRegIdTrib), con el RFC genérico XEXX010101000. |
| `invoices[].customer.foreign.country` | string | sí | País de residencia fiscal, clave de 3 letras de c_Pais (USA, CAN…). (3 caracteres) |
| `invoices[].customer.foreign.tax_id` | string | sí | Número de registro de identidad fiscal en su país (NumRegIdTrib). (hasta 40 caracteres) |
| `invoices[].customer.ieps_taxpayer` | boolean |  | true si el cliente es contribuyente de IEPS: el IEPS va desglosado en vez de sumado al precio. |
| `invoices[].items` | arreglo de objeto | sí | Conceptos (Conceptos), al menos uno. (hasta 200) |
| `invoices[].items[].product` | string (prd_…) |  | Un producto de su catálogo (prd_…): toma su clave, unidad, precio e impuestos. |
| `invoices[].items[].description` | string |  | Descripción del concepto (Descripcion), hasta 1,000 caracteres. (hasta 1000 caracteres) |
| `invoices[].items[].product_key` | string |  | Clave del producto o servicio (ClaveProdServ), 8 dígitos de c_ClaveProdServ. Búsquela con GET /v1/sat_catalogs/product_keys?q=… |
| `invoices[].items[].unit_key` | string |  | Clave de unidad (ClaveUnidad) de c_ClaveUnidad: E48 unidad de servicio (por omisión), H87 pieza, ACT actividad… (hasta 5 caracteres) |
| `invoices[].items[].unit_name` | string o null |  | Nombre de la unidad (Unidad), hasta 20 caracteres. |
| `invoices[].items[].sku` | string o null |  | Número de identificación o SKU (NoIdentificacion). |
| `invoices[].items[].quantity` | number |  | Cantidad (Cantidad). Por omisión 1. (de -∞ a 1000000000) |
| `invoices[].items[].unit_price` | number |  | Precio unitario antes de impuestos (ValorUnitario). (de 0 a 1000000000000) |
| `invoices[].items[].discount` | number |  | Descuento (Descuento). (de 0 a 1000000000000) |
| `invoices[].items[].taxability` | `01`, `02`, `03`, `04`, `05`, `06`, `07`, `08` |  | Objeto de impuesto (ObjetoImp), c_ObjetoImp: 01 no objeto, 02 sí objeto (por omisión), 03 sin desglose, 04 no causa… |
| `invoices[].items[].iva` | `0`, `0.16`, `0.08`, `exento` |  | Tasa de IVA trasladado: 0.16 (por omisión), 0.08 (región fronteriza), 0 o exento. |
| `invoices[].items[].ieps` | number |  | IEPS trasladado: tasa (0.265…) o cuota en pesos por unidad, según ieps_factor. (de 0 a 72.1605) |
| `invoices[].items[].ieps_factor` | `Tasa`, `Cuota` |  | Tasa o Cuota (TipoFactor del IEPS). |
| `invoices[].items[].ieps_units` | number |  | Unidades de IEPS a cuota (litros, cigarros…), si no son la cantidad. (de -∞ a 1000000000) |
| `invoices[].items[].iva_retention` | number |  | Tasa de IVA retenido (por ejemplo 0.106667, dos terceras partes del 16%). (de 0 a 0.16) |
| `invoices[].items[].isr_retention` | number |  | Tasa de ISR retenido (por ejemplo 0.10 honorarios, 0.0125 RESICO). (de 0 a 0.35) |
| `invoices[].items[].predial` | arreglo de string |  | Números de cuenta predial (CuentaPredial) en arrendamiento. (hasta 10) |
| `invoices[].items[].pedimentos` | arreglo de string |  | Números de pedimento (InformacionAduanera) de mercancía importada. (hasta 50) |
| `invoices[].items[].third_party` | objeto |  | A cuenta de terceros (ACuentaTerceros): RFC, nombre, régimen y código postal. |
| `invoices[].items[].third_party.tax_id` | string | sí | RFC de a cuenta de quién (RfcACuentaTerceros). (hasta 13 caracteres) |
| `invoices[].items[].third_party.name` | string | sí | Nombre (NombreACuentaTerceros). (hasta 300 caracteres) |
| `invoices[].items[].third_party.tax_system` | string | sí | Régimen fiscal (RegimenFiscalACuentaTerceros), c_RegimenFiscal. |
| `invoices[].items[].third_party.zip` | string | sí | Código postal de su domicilio fiscal (DomicilioFiscalACuentaTerceros). |
| `invoices[].items[].iedu` | objeto |  | Complemento de instituciones educativas privadas (IEDU): alumno, CURP, nivel y RVOE. |
| `invoices[].items[].iedu.student_name` | string | sí | Nombre del alumno (nombreAlumno). (hasta 300 caracteres) |
| `invoices[].items[].iedu.curp` | string | sí | CURP, 18 caracteres. (18 caracteres) |
| `invoices[].items[].iedu.level` | `Preescolar`, `Primaria`, `Secundaria`, `Profesional técnico`, `Bachillerato o su equivalente` | sí | Nivel educativo (nivelEducativo). |
| `invoices[].items[].iedu.rvoe` | string | sí | Reconocimiento de validez oficial de estudios (autRVOE). (hasta 30 caracteres) |
| `invoices[].items[].iedu.payer_tax_id` | string o null |  | RFC de quien paga, si no es el receptor (rfcPago). |
| `invoices[].items[].used_vehicle` | objeto |  | Complemento de vehículo usado. |
| `invoices[].items[].used_vehicle.purchase_amount` | number | sí | Monto de adquisición (montoAdquisicion). (de -∞ a 1000000000000) |
| `invoices[].items[].used_vehicle.sale_amount` | number | sí | Monto de enajenación (montoEnajenacion). (de -∞ a 1000000000000) |
| `invoices[].items[].used_vehicle.vehicle_key` | string | sí | Clave vehicular (claveVehicular). (hasta 7 caracteres) |
| `invoices[].items[].used_vehicle.make` | string | sí | Marca (marca). (hasta 50 caracteres) |
| `invoices[].items[].used_vehicle.type` | string | sí | Tipo o versión (tipo). (hasta 50 caracteres) |
| `invoices[].items[].used_vehicle.model` | string | sí | Año del modelo (modelo), 4 dígitos. |
| `invoices[].items[].used_vehicle.engine_number` | string |  | Número de motor (numeroMotor). (hasta 17 caracteres) |
| `invoices[].items[].used_vehicle.serial_number` | string |  | Número de serie (numeroSerie). (hasta 17 caracteres) |
| `invoices[].items[].used_vehicle.niv` | string |  | Número de identificación vehicular (NIV). (hasta 17 caracteres) |
| `invoices[].items[].used_vehicle.guide_value` | number | sí | Valor según la guía EBC o Libro Azul (valor). (de -∞ a 1000000000000) |
| `invoices[].items[].used_vehicle.customs` | arreglo de objeto |  | Información aduanera de la importación del vehículo (InformacionAduanera). (hasta 10) |
| `invoices[].items[].used_vehicle.customs[].number` | string | sí | Número del documento de importación (numero). (hasta 100 caracteres) |
| `invoices[].items[].used_vehicle.customs[].date` | string | sí | Fecha del documento (fecha), AAAA-MM-DD. |
| `invoices[].items[].used_vehicle.customs[].office` | string |  | Aduana (aduana). (hasta 100 caracteres) |
| `invoices[].items[].addenda` | objeto |  | Addenda del receptor (Walmart, Soriana…), con sus propios campos. |
| `invoices[].type` | `I`, `T` |  | I ingreso (por omisión; con global, factura global) o T traslado. Notas de crédito: POST /v1/credit_notes. Pagos: POST /v1/payments. (por omisión "I") |
| `invoices[].carta_porte` | objeto |  | Complemento Carta Porte 3.1 (traslado de mercancías). |
| `invoices[].carta_porte.modes` | arreglo de `01`, `02`, `03`, `04` |  | Cómo viajan las mercancías (c_CveTransporte): 01 autotransporte, 02 marítimo, 03 aéreo, 04 ferroviario; varios si es intermodal. Por omisión 01. (hasta 4) |
| `invoices[].carta_porte.international` | objeto |  | Transporte internacional (TranspInternac Sí): entrada o salida, país, vía y regímenes aduaneros. |
| `invoices[].carta_porte.international.direction` | `Entrada`, `Salida` | sí | EntradaSalidaMerc: Entrada o Salida. |
| `invoices[].carta_porte.international.country` | string | sí | País de origen o destino (PaisOrigenDestino), c_Pais. (3 caracteres) |
| `invoices[].carta_porte.international.via` | string | sí | Vía de entrada o salida (ViaEntradaSalida), c_CveTransporte (05 ducto incluido). (hasta 2 caracteres) |
| `invoices[].carta_porte.international.regimes` | arreglo de string | sí | Regímenes aduaneros (RegimenAduanero), c_RegimenAduanero. (hasta 10) |
| `invoices[].carta_porte.istmo` | objeto |  | Corredor Interoceánico del Istmo de Tehuantepec: polos de origen y destino (c_RegistroISTMO). |
| `invoices[].carta_porte.istmo.origin` | string | sí | Polo de origen (UbicacionPoloOrigen). (hasta 2 caracteres) |
| `invoices[].carta_porte.istmo.destination` | string | sí | Polo de destino (UbicacionPoloDestino). (hasta 2 caracteres) |
| `invoices[].carta_porte.reverse_logistics` | boolean |  | Autotransporte: true si es logística inversa, recolección o devolución. |
| `invoices[].carta_porte.origin` | objeto | sí | Ubicación de origen (Ubicacion TipoUbicacion Origen): remitente, fecha y hora de salida y domicilio. |
| `invoices[].carta_porte.origin.tax_id` | string | sí | RFC del remitente (RFCRemitenteDestinatario); XEXX010101000 si es extranjero. |
| `invoices[].carta_porte.origin.name` | string |  | Nombre del remitente (NombreRemitenteDestinatario). (hasta 254 caracteres) |
| `invoices[].carta_porte.origin.foreign` | objeto |  | Si es extranjero: su país de residencia (ResidenciaFiscal, c_Pais) y su número de registro tributario (NumRegIdTrib), con el RFC genérico XEXX010101000. |
| `invoices[].carta_porte.origin.foreign.tax_id` | string | sí | Número de registro de identidad fiscal en su país (NumRegIdTrib). (hasta 40 caracteres) |
| `invoices[].carta_porte.origin.foreign.country` | string | sí | País de residencia fiscal, clave de 3 letras de c_Pais (USA, CAN…). (3 caracteres) |
| `invoices[].carta_porte.origin.date_time` | string | sí | Fecha y hora de salida (origen) o llegada (destino), AAAA-MM-DDTHH:MM, hora local. |
| `invoices[].carta_porte.origin.distance_km` | number |  | Distancia recorrida desde la ubicación anterior, en km (DistanciaRecorrida). Autotransporte y ferroviario. (de -∞ a 99999) |
| `invoices[].carta_porte.origin.station` | objeto |  | Estación, puerto o aeropuerto (TipoEstacion y NumEstacion de c_Estaciones). Solo sin autotransporte. |
| `invoices[].carta_porte.origin.station.type` | string |  | Tipo de estación (TipoEstacion): 01 origen, 02 intermedia, 03 destino final. (hasta 2 caracteres) |
| `invoices[].carta_porte.origin.station.number` | string |  | Clave de la estación, puerto o aeropuerto (NumEstacion), c_Estaciones. (hasta 12 caracteres) |
| `invoices[].carta_porte.origin.station.name` | string |  | Nombre de la estación (NombreEstacion). (hasta 50 caracteres) |
| `invoices[].carta_porte.origin.station.foreign` | boolean |  | true si la estación está en el extranjero (va sin TipoEstacion). |
| `invoices[].carta_porte.origin.navigation` | `Altura`, `Cabotaje` |  | Marítimo: tipo de tráfico (NavegacionTrafico), Altura o Cabotaje. |
| `invoices[].carta_porte.origin.address` | objeto | sí | Domicilio (Domicilio). En México basta el código postal: estado, municipio y localidad se toman de c_CodigoPostal. |
| `invoices[].carta_porte.origin.address.street` | string |  | Calle (Calle). (hasta 100 caracteres) |
| `invoices[].carta_porte.origin.address.exterior` | string |  | Número exterior (NumeroExterior). (hasta 55 caracteres) |
| `invoices[].carta_porte.origin.address.interior` | string |  | Número interior (NumeroInterior). (hasta 55 caracteres) |
| `invoices[].carta_porte.origin.address.zip` | string | sí | Código postal (CodigoPostal). En México se deducen de él estado, municipio y localidad. (hasta 12 caracteres) |
| `invoices[].carta_porte.origin.address.country` | string |  | País (Pais), c_Pais. Por omisión MEX. (3 caracteres) |
| `invoices[].carta_porte.origin.address.state` | string |  | Estado (Estado): en el extranjero c_Estado para USA y CAN, o texto. (hasta 30 caracteres) |
| `invoices[].carta_porte.origin.address.municipality` | string |  | Municipio (Municipio), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].carta_porte.origin.address.locality` | string |  | Localidad (Localidad), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].carta_porte.origin.address.colony` | string |  | Colonia (Colonia), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].carta_porte.destinations` | arreglo de objeto | sí | Ubicaciones de destino (TipoUbicacion Destino), en orden: destinatario, llegada, distancia y domicilio. (hasta 20) |
| `invoices[].carta_porte.destinations[].tax_id` | string | sí | RFC del destinatario (RFCRemitenteDestinatario); XEXX010101000 si es extranjero. |
| `invoices[].carta_porte.destinations[].name` | string |  | Nombre del destinatario (NombreRemitenteDestinatario). (hasta 254 caracteres) |
| `invoices[].carta_porte.destinations[].foreign` | objeto |  | Si es extranjero: su país de residencia (ResidenciaFiscal, c_Pais) y su número de registro tributario (NumRegIdTrib), con el RFC genérico XEXX010101000. |
| `invoices[].carta_porte.destinations[].foreign.tax_id` | string | sí | Número de registro de identidad fiscal en su país (NumRegIdTrib). (hasta 40 caracteres) |
| `invoices[].carta_porte.destinations[].foreign.country` | string | sí | País de residencia fiscal, clave de 3 letras de c_Pais (USA, CAN…). (3 caracteres) |
| `invoices[].carta_porte.destinations[].date_time` | string | sí | Fecha y hora de salida (origen) o llegada (destino), AAAA-MM-DDTHH:MM, hora local. |
| `invoices[].carta_porte.destinations[].distance_km` | number |  | Distancia recorrida desde la ubicación anterior, en km (DistanciaRecorrida). Autotransporte y ferroviario. (de -∞ a 99999) |
| `invoices[].carta_porte.destinations[].station` | objeto |  | Estación, puerto o aeropuerto (TipoEstacion y NumEstacion de c_Estaciones). Solo sin autotransporte. |
| `invoices[].carta_porte.destinations[].station.type` | string |  | Tipo de estación (TipoEstacion): 01 origen, 02 intermedia, 03 destino final. (hasta 2 caracteres) |
| `invoices[].carta_porte.destinations[].station.number` | string |  | Clave de la estación, puerto o aeropuerto (NumEstacion), c_Estaciones. (hasta 12 caracteres) |
| `invoices[].carta_porte.destinations[].station.name` | string |  | Nombre de la estación (NombreEstacion). (hasta 50 caracteres) |
| `invoices[].carta_porte.destinations[].station.foreign` | boolean |  | true si la estación está en el extranjero (va sin TipoEstacion). |
| `invoices[].carta_porte.destinations[].navigation` | `Altura`, `Cabotaje` |  | Marítimo: tipo de tráfico (NavegacionTrafico), Altura o Cabotaje. |
| `invoices[].carta_porte.destinations[].address` | objeto | sí | Domicilio (Domicilio). En México basta el código postal: estado, municipio y localidad se toman de c_CodigoPostal. |
| `invoices[].carta_porte.destinations[].address.street` | string |  | Calle (Calle). (hasta 100 caracteres) |
| `invoices[].carta_porte.destinations[].address.exterior` | string |  | Número exterior (NumeroExterior). (hasta 55 caracteres) |
| `invoices[].carta_porte.destinations[].address.interior` | string |  | Número interior (NumeroInterior). (hasta 55 caracteres) |
| `invoices[].carta_porte.destinations[].address.zip` | string | sí | Código postal (CodigoPostal). En México se deducen de él estado, municipio y localidad. (hasta 12 caracteres) |
| `invoices[].carta_porte.destinations[].address.country` | string |  | País (Pais), c_Pais. Por omisión MEX. (3 caracteres) |
| `invoices[].carta_porte.destinations[].address.state` | string |  | Estado (Estado): en el extranjero c_Estado para USA y CAN, o texto. (hasta 30 caracteres) |
| `invoices[].carta_porte.destinations[].address.municipality` | string |  | Municipio (Municipio), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].carta_porte.destinations[].address.locality` | string |  | Localidad (Localidad), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].carta_porte.destinations[].address.colony` | string |  | Colonia (Colonia), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].carta_porte.goods` | arreglo de objeto | sí | Mercancías (Mercancia) que se transportan. (hasta 200) |
| `invoices[].carta_porte.goods[].product_key` | string | sí | Clave del bien transportado (BienesTransp), c_ClaveProdServCP. |
| `invoices[].carta_porte.goods[].description` | string | sí | Descripción de la mercancía (Descripcion). (hasta 1000 caracteres) |
| `invoices[].carta_porte.goods[].quantity` | number | sí | Cantidad (Cantidad). (de -∞ a 1000000000) |
| `invoices[].carta_porte.goods[].unit_key` | string | sí | Clave de unidad (ClaveUnidad), c_ClaveUnidad. (hasta 5 caracteres) |
| `invoices[].carta_porte.goods[].weight_kg` | number | sí | Peso en kilogramos (PesoEnKg). (de 0.001 a 100000000) |
| `invoices[].carta_porte.goods[].dimensions` | string |  | Dimensiones (Dimensiones), como 30/40/30cm o en plg. (hasta 20 caracteres) |
| `invoices[].carta_porte.goods[].hazmat` | objeto |  | Material peligroso (MaterialPeligroso Sí): clave UN y embalaje. |
| `invoices[].carta_porte.goods[].hazmat.key` | string | sí | Clave del material peligroso (CveMaterialPeligroso), c_MaterialPeligroso (número UN). (hasta 4 caracteres) |
| `invoices[].carta_porte.goods[].hazmat.packaging` | string | sí | Tipo de embalaje (Embalaje), c_TipoEmbalaje. (hasta 4 caracteres) |
| `invoices[].carta_porte.goods[].hazmat.packaging_description` | string |  | Descripción del embalaje (DescripEmbalaje). (hasta 100 caracteres) |
| `invoices[].carta_porte.goods[].cofepris` | objeto |  | Datos COFEPRIS de la mercancía: sector y lo que pide cada uno (medicamentos, precursores, psicotrópicos, sustancias tóxicas, plaguicidas). |
| `invoices[].carta_porte.goods[].cofepris.sector` | string | sí | Sector COFEPRIS (SectorCOFEPRIS): 01 medicamento, 02 precursores y químicos de uso dual, 03 psicotrópicos y estupefacientes, 04 sustancias tóxicas, 05 plaguicidas y fertilizantes. (hasta 2 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.active_ingredient` | string |  | Nombre del ingrediente activo (NombreIngredienteActivo). (hasta 1000 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.chemical_name` | string |  | Nombre químico (NomQuimico). (hasta 150 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.generic_name` | string |  | Denominación genérica del producto (DenominacionGenericaProd). (hasta 50 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.brand_name` | string |  | Denominación distintiva o marca (DenominacionDistintivaProd). (hasta 50 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.manufacturer` | string |  | Fabricante (Fabricante). (hasta 240 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.expiry` | string |  | Fecha de caducidad (FechaCaducidad), AAAA-MM-DD. (hasta 10 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.lot` | string |  | Lote del medicamento (LoteMedicamento). (hasta 10 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.form` | string |  | Forma farmacéutica (FormaFarmaceutica), c_FormaFarmaceutica. (hasta 2 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.conditions` | string |  | Condiciones especiales de transporte (CondicionesEspTransp), c_CondicionesEspeciales. (hasta 2 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.sanitary_registry` | string |  | Registro sanitario o folio de autorización (RegistroSanitarioFolioAutorizacion). (hasta 15 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.import_permit` | string |  | Permiso de importación (PermisoImportacion). (hasta 6 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.vucem_folio` | string |  | Folio de importación VUCEM (FolioImpoVUCEM). (hasta 25 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.cas` | string |  | Número CAS de la sustancia (NumCAS). (hasta 15 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.importer` | string |  | Razón social de la empresa importadora (RazonSocialEmpImp). (hasta 80 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.pesticide_registry` | string |  | Registro sanitario de plaguicidas COFEPRIS (NumRegSanPlagCOFEPRIS). (hasta 60 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.manufacturer_data` | string |  | Datos del fabricante (DatosFabricante). (hasta 600 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.formulator_data` | string |  | Datos del formulador (DatosFormulador). (hasta 600 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.maquilador_data` | string |  | Datos del maquilador (DatosMaquilador). (hasta 600 caracteres) |
| `invoices[].carta_porte.goods[].cofepris.authorized_use` | string |  | Uso autorizado (UsoAutorizado). (hasta 1000 caracteres) |
| `invoices[].carta_porte.goods[].value` | number |  | Valor de la mercancía (ValorMercancia); obligatorio en transporte aéreo. (de 0 a 1000000000000000) |
| `invoices[].carta_porte.goods[].currency` | string |  | Moneda del valor de la mercancía (Moneda), c_Moneda. (3 caracteres) |
| `invoices[].carta_porte.goods[].tariff` | string |  | Fracción arancelaria (FraccionArancelaria), 10 dígitos. Transporte internacional. (hasta 10 caracteres) |
| `invoices[].carta_porte.goods[].cce_uuid` | string |  | UUID del CFDI con complemento de comercio exterior (UUIDComercioExt). (hasta 36 caracteres) |
| `invoices[].carta_porte.goods[].material` | objeto |  | Tipo de materia (TipoMateria, c_TipoMateria) y su descripción si es «otra». |
| `invoices[].carta_porte.goods[].material.type` | string | sí | Tipo de materia (TipoMateria), c_TipoMateria. (hasta 2 caracteres) |
| `invoices[].carta_porte.goods[].material.description` | string |  | Descripción de la materia (DescripcionMateria), con el tipo 05 otra. (hasta 50 caracteres) |
| `invoices[].carta_porte.goods[].customs_docs` | arreglo de objeto |  | Documentación aduanera (DocumentacionAduanera) de la mercancía en transporte internacional. (hasta 20) |
| `invoices[].carta_porte.goods[].customs_docs[].type` | string | sí | Tipo de documento (TipoDocumento), c_DocumentoAduanero: 01 pedimento… (hasta 2 caracteres) |
| `invoices[].carta_porte.goods[].customs_docs[].pedimento` | string |  | Número de pedimento (NumPedimento), con el formato «NN  NN  NNNN  NNNNNNN». Solo con el tipo 01. (hasta 21 caracteres) |
| `invoices[].carta_porte.goods[].customs_docs[].doc_id` | string |  | Identificador del documento aduanero (IdentDocAduanero), con un tipo distinto de 01. (hasta 150 caracteres) |
| `invoices[].carta_porte.goods[].customs_docs[].importer_tax_id` | string |  | RFC del importador (RFCImpo), con un pedimento. (hasta 13 caracteres) |
| `invoices[].carta_porte.goods[].guides` | arreglo de objeto |  | Paquetería: guías de los paquetes o tarimas (GuiasIdentificacion). (hasta 100) |
| `invoices[].carta_porte.goods[].guides[].number` | string | sí | Número de guía (NumeroGuiaIdentificacion). (hasta 30 caracteres) |
| `invoices[].carta_porte.goods[].guides[].description` | string | sí | Descripción del contenido (DescripGuiaIdentificacion). (hasta 1000 caracteres) |
| `invoices[].carta_porte.goods[].guides[].weight_kg` | number | sí | Peso en kilogramos (PesoEnKg). (de 0 a 100000000) |
| `invoices[].carta_porte.goods[].quantities` | arreglo de objeto |  | Cuánto va a cada destino (CantidadTransporta), por destino. (hasta 40) |
| `invoices[].carta_porte.goods[].quantities[].quantity` | number | sí | Cantidad que va a ese destino. (de -∞ a 1000000000) |
| `invoices[].carta_porte.goods[].quantities[].destination` | integer | sí | El destino, por su posición en destinations (desde 0). (de 0 a 19) |
| `invoices[].carta_porte.goods[].quantities[].mode` | `01`, `02`, `03`, `04` |  | Medio en que va esa cantidad (CvesTransporte), c_CveTransporte. |
| `invoices[].carta_porte.goods[].detail` | objeto |  | Marítimo: detalle de la mercancía (DetalleMercancia): kilos netos, tara y piezas. |
| `invoices[].carta_porte.goods[].detail.net_kg` | number | sí | Peso neto en kg (PesoNeto). (de 0 a 100000000) |
| `invoices[].carta_porte.goods[].detail.tare_kg` | number | sí | Tara en kg (PesoTara). (de 0 a 100000000) |
| `invoices[].carta_porte.goods[].detail.pieces` | integer |  | Número de piezas (NumPiezas). (de 0 a 1000000000) |
| `invoices[].carta_porte.goods[].stcc` | string |  | Ferroviario: clave STCC (ClaveSTCC). (hasta 7 caracteres) |
| `invoices[].carta_porte.vehicle` | objeto |  | Autotransporte (Autotransporte): vehículo, permiso SCT, seguros y remolques. |
| `invoices[].carta_porte.vehicle.config` | string | sí | Configuración vehicular (ConfigVehicular), c_ConfigAutotransporte: C2, T3S2… (hasta 10 caracteres) |
| `invoices[].carta_porte.vehicle.plate` | string | sí | Placa (PlacaVM), sin guiones ni espacios. (hasta 10 caracteres) |
| `invoices[].carta_porte.vehicle.year` | integer | sí | Año del modelo (AnioModeloVM). (de 0 a 2100) |
| `invoices[].carta_porte.vehicle.gross_weight` | number | sí | Peso bruto vehicular en toneladas (PesoBrutoVehicular). (de 0 a 999) |
| `invoices[].carta_porte.vehicle.permit_type` | string | sí | Tipo de permiso SCT (PermSCT), c_TipoPermiso. (hasta 50 caracteres) |
| `invoices[].carta_porte.vehicle.permit_number` | string | sí | Número de permiso SCT (NumPermisoSCT). (hasta 50 caracteres) |
| `invoices[].carta_porte.vehicle.insurer` | string | sí | Aseguradora de responsabilidad civil (AseguraRespCivil). (hasta 50 caracteres) |
| `invoices[].carta_porte.vehicle.policy` | string | sí | Póliza de responsabilidad civil (PolizaRespCivil). (hasta 30 caracteres) |
| `invoices[].carta_porte.vehicle.env_insurer` | string |  | Aseguradora de daños al medio ambiente (AseguraMedAmbiente); obligatoria con material peligroso. (hasta 50 caracteres) |
| `invoices[].carta_porte.vehicle.env_policy` | string |  | Póliza de daños al medio ambiente (PolizaMedAmbiente). (hasta 30 caracteres) |
| `invoices[].carta_porte.vehicle.cargo_insurer` | string |  | Aseguradora de la carga (AseguraCarga). (hasta 50 caracteres) |
| `invoices[].carta_porte.vehicle.cargo_policy` | string |  | Póliza de la carga (PolizaCarga). (hasta 30 caracteres) |
| `invoices[].carta_porte.vehicle.premium` | number |  | Prima del seguro (PrimaSeguro). (de 0 a 1000000000000) |
| `invoices[].carta_porte.vehicle.trailers` | arreglo de objeto |  | Remolques o semirremolques (Remolque): tipo (c_SubTipoRem) y placa. (hasta 2) |
| `invoices[].carta_porte.vehicle.trailers[].type` | string | sí | Subtipo de remolque (SubTipoRem), c_SubTipoRem. (hasta 10 caracteres) |
| `invoices[].carta_porte.vehicle.trailers[].plate` | string | sí | Placa del remolque (Placa). (hasta 10 caracteres) |
| `invoices[].carta_porte.sea` | objeto |  | Transporte marítimo (TransporteMaritimo): embarcación, naviero y contenedores. |
| `invoices[].carta_porte.sea.permit_type` | string |  | Tipo de permiso SCT (PermSCT), c_TipoPermiso. (hasta 10 caracteres) |
| `invoices[].carta_porte.sea.permit_number` | string |  | Número de permiso SCT (NumPermisoSCT). (hasta 30 caracteres) |
| `invoices[].carta_porte.sea.insurer` | string |  | Aseguradora de responsabilidad civil (AseguraRespCivil). (hasta 50 caracteres) |
| `invoices[].carta_porte.sea.policy` | string |  | Póliza de responsabilidad civil (PolizaRespCivil). (hasta 30 caracteres) |
| `invoices[].carta_porte.sea.vessel_type` | string | sí | Tipo de embarcación (TipoEmbarcacion), c_ConfigMaritima. (hasta 4 caracteres) |
| `invoices[].carta_porte.sea.registration` | string | sí | Matrícula (Matricula). (hasta 30 caracteres) |
| `invoices[].carta_porte.sea.imo` | string | sí | Número IMO (NumeroOMI): IMO y 7 dígitos. (hasta 10 caracteres) |
| `invoices[].carta_porte.sea.year` | integer |  | Año de la embarcación (AnioEmbarcacion). (de 0 a 2100) |
| `invoices[].carta_porte.sea.vessel_name` | string |  | Nombre de la embarcación (NombreEmbarc). (hasta 50 caracteres) |
| `invoices[].carta_porte.sea.flag` | string | sí | Nacionalidad de la embarcación (NacionalidadEmbarc), c_Pais. (3 caracteres) |
| `invoices[].carta_porte.sea.gross_tonnage` | number | sí | Unidades de arqueo bruto (UnidadesDeArqBruto). (de 0 a 1000000000) |
| `invoices[].carta_porte.sea.cargo_type` | string | sí | Tipo de carga (TipoCarga), c_ClaveTipoCarga. (hasta 4 caracteres) |
| `invoices[].carta_porte.sea.length` | number |  | Eslora en metros (Eslora). (de 0 a 100000) |
| `invoices[].carta_porte.sea.beam` | number |  | Manga en metros (Manga). (de 0 a 100000) |
| `invoices[].carta_porte.sea.draft` | number |  | Calado en metros (Calado). (de 0 a 100000) |
| `invoices[].carta_porte.sea.depth` | number |  | Puntal en metros (Puntal). (de 0 a 100000) |
| `invoices[].carta_porte.sea.line` | string |  | Línea naviera (LineaNaviera). (hasta 50 caracteres) |
| `invoices[].carta_porte.sea.agent_name` | string | sí | Nombre del agente naviero consignatario (NombreAgenteNaviero). (hasta 100 caracteres) |
| `invoices[].carta_porte.sea.agent_authorization` | string | sí | Autorización del agente naviero (NumAutorizacionNaviero), c_NumAutorizacionNaviero. (hasta 20 caracteres) |
| `invoices[].carta_porte.sea.voyage` | string |  | Número de viaje (NumViaje). (hasta 30 caracteres) |
| `invoices[].carta_porte.sea.bill_of_lading` | string |  | Número de conocimiento de embarque (NumConocEmbarc). (hasta 30 caracteres) |
| `invoices[].carta_porte.sea.temp_permit` | string |  | Permiso temporal de navegación (PermisoTempNavegacion), para una embarcación extranjera. (hasta 19 caracteres) |
| `invoices[].carta_porte.sea.containers` | arreglo de objeto |  | Contenedores (Contenedor). (hasta 100) |
| `invoices[].carta_porte.sea.containers[].type` | string | sí | Tipo de contenedor (TipoContenedor), c_ContenedorMaritimo o c_Contenedor en ferroviario. (hasta 6 caracteres) |
| `invoices[].carta_porte.sea.containers[].registration` | string |  | Matrícula (Matricula). (hasta 15 caracteres) |
| `invoices[].carta_porte.sea.containers[].seal` | string |  | Número de precinto (NumPrecinto). (hasta 20 caracteres) |
| `invoices[].carta_porte.sea.containers[].related_id_ccp` | string |  | Ferri: el IdCCP de la Carta Porte del autotransporte a bordo (IdCCPRelacionado). (hasta 36 caracteres) |
| `invoices[].carta_porte.sea.containers[].truck_plate` | string |  | Ferri: placa del vehículo a bordo (PlacaVMCCP). (hasta 10 caracteres) |
| `invoices[].carta_porte.sea.containers[].certified_at` | string |  | Ferri: fecha de certificación de la Carta Porte del vehículo (FechaCertificacionCCP). (hasta 19 caracteres) |
| `invoices[].carta_porte.sea.containers[].trailers` | arreglo de objeto |  | Remolques o semirremolques (Remolque): tipo (c_SubTipoRem) y placa. (hasta 2) |
| `invoices[].carta_porte.sea.containers[].trailers[].type` | string | sí | Subtipo de remolque (SubTipoRem), c_SubTipoRem. (hasta 10 caracteres) |
| `invoices[].carta_porte.sea.containers[].trailers[].plate` | string | sí | Placa del remolque (Placa). (hasta 10 caracteres) |
| `invoices[].carta_porte.air` | objeto |  | Transporte aéreo (TransporteAereo): permiso, guía y transportista. |
| `invoices[].carta_porte.air.permit_type` | string | sí | Tipo de permiso SCT (PermSCT), c_TipoPermiso. (hasta 10 caracteres) |
| `invoices[].carta_porte.air.permit_number` | string | sí | Número de permiso SCT (NumPermisoSCT). (hasta 50 caracteres) |
| `invoices[].carta_porte.air.aircraft` | string |  | Matrícula de la aeronave (MatriculaAeronave). (hasta 11 caracteres) |
| `invoices[].carta_porte.air.insurer` | string |  | Aseguradora de responsabilidad civil (AseguraRespCivil). (hasta 50 caracteres) |
| `invoices[].carta_porte.air.policy` | string |  | Póliza de responsabilidad civil (PolizaRespCivil). (hasta 30 caracteres) |
| `invoices[].carta_porte.air.waybill` | string | sí | Número de guía aérea (NumeroGuia), de 12 a 15 caracteres. (hasta 15 caracteres) |
| `invoices[].carta_porte.air.contract_place` | string |  | Lugar del contrato (LugarContrato). (hasta 120 caracteres) |
| `invoices[].carta_porte.air.carrier` | string | sí | Código del transportista (CodigoTransportista), c_CodigoTransporteAereo. (hasta 6 caracteres) |
| `invoices[].carta_porte.air.shipper` | objeto |  | Embarcador (RFCEmbarcador o NumRegIdTribEmbarc y ResidenciaFiscalEmbarc, NombreEmbarcador). |
| `invoices[].carta_porte.air.shipper.tax_id` | string |  | RFC del embarcador (RFCEmbarcador). (hasta 13 caracteres) |
| `invoices[].carta_porte.air.shipper.foreign` | objeto |  | Si es extranjero: su país de residencia (ResidenciaFiscal, c_Pais) y su número de registro tributario (NumRegIdTrib), con el RFC genérico XEXX010101000. |
| `invoices[].carta_porte.air.shipper.foreign.tax_id` | string | sí | Número de registro de identidad fiscal en su país (NumRegIdTrib). (hasta 40 caracteres) |
| `invoices[].carta_porte.air.shipper.foreign.country` | string | sí | País de residencia fiscal, clave de 3 letras de c_Pais (USA, CAN…). (3 caracteres) |
| `invoices[].carta_porte.air.shipper.name` | string |  | Nombre del embarcador (NombreEmbarcador). (hasta 254 caracteres) |
| `invoices[].carta_porte.air.rate_charge` | number |  | Cargo por tasación (CargoPorTasacion). (de 0 a 1000000000000000) |
| `invoices[].carta_porte.rail` | objeto |  | Transporte ferroviario (TransporteFerroviario): servicio, tráfico, derechos de paso y carros. |
| `invoices[].carta_porte.rail.service` | string | sí | Tipo de servicio (TipoDeServicio), c_TipoDeServicio. (hasta 4 caracteres) |
| `invoices[].carta_porte.rail.traffic` | string | sí | Tipo de tráfico (TipoDeTrafico), c_TipoDeTrafico. (hasta 4 caracteres) |
| `invoices[].carta_porte.rail.insurer` | string |  | Aseguradora de responsabilidad civil (AseguraRespCivil). (hasta 50 caracteres) |
| `invoices[].carta_porte.rail.policy` | string |  | Póliza de responsabilidad civil (PolizaRespCivil). (hasta 30 caracteres) |
| `invoices[].carta_porte.rail.rights` | arreglo de objeto |  | Derechos de paso (DerechosDePaso): tipo y kilómetros. (hasta 50) |
| `invoices[].carta_porte.rail.rights[].type` | string | sí | Tipo de derecho de paso (TipoDerechoDePaso), c_DerechosDePaso. (hasta 6 caracteres) |
| `invoices[].carta_porte.rail.rights[].km` | number | sí | Kilometraje pagado (KilometrajePagado). (de 0 a 100000) |
| `invoices[].carta_porte.rail.cars` | arreglo de objeto | sí | Carros (Carro). (hasta 200) |
| `invoices[].carta_porte.rail.cars[].type` | string | sí | Tipo de carro (TipoCarro), c_TipoCarro. (hasta 4 caracteres) |
| `invoices[].carta_porte.rail.cars[].registration` | string | sí | Matrícula (Matricula). (hasta 15 caracteres) |
| `invoices[].carta_porte.rail.cars[].guide` | string | sí | Guía del carro (GuiaCarro). (hasta 15 caracteres) |
| `invoices[].carta_porte.rail.cars[].net_tons` | number | sí | Toneladas netas del carro (ToneladasNetasCarro). (de 0 a 1000000) |
| `invoices[].carta_porte.rail.cars[].containers` | arreglo de objeto |  | Contenedores (Contenedor). (hasta 10) |
| `invoices[].carta_porte.rail.cars[].containers[].type` | string | sí | Tipo de contenedor (TipoContenedor), c_ContenedorMaritimo o c_Contenedor en ferroviario. (hasta 4 caracteres) |
| `invoices[].carta_porte.rail.cars[].containers[].empty_kg` | number | sí | Peso del contenedor vacío en kg (PesoContenedorVacio). (de 0 a 100000000) |
| `invoices[].carta_porte.rail.cars[].containers[].net_kg` | number | sí | Peso neto en kg (PesoNeto). (de 0 a 100000000) |
| `invoices[].carta_porte.drivers` | arreglo de objeto | sí | Operadores (FiguraTransporte tipo 01): RFC, licencia y nombre. (hasta 5) |
| `invoices[].carta_porte.drivers[].tax_id` | string o `""` | sí | RFC del operador (RFCFigura); vacío si es extranjero (con foreign). |
| `invoices[].carta_porte.drivers[].license` | string | sí | Número de licencia (NumLicencia). (hasta 16 caracteres) |
| `invoices[].carta_porte.drivers[].name` | string | sí | Nombre del operador (NombreFigura). (hasta 254 caracteres) |
| `invoices[].carta_porte.drivers[].foreign` | objeto |  | Si es extranjero: su país de residencia (ResidenciaFiscal, c_Pais) y su número de registro tributario (NumRegIdTrib), con el RFC genérico XEXX010101000. |
| `invoices[].carta_porte.drivers[].foreign.tax_id` | string | sí | Número de registro de identidad fiscal en su país (NumRegIdTrib). (hasta 40 caracteres) |
| `invoices[].carta_porte.drivers[].foreign.country` | string | sí | País de residencia fiscal, clave de 3 letras de c_Pais (USA, CAN…). (3 caracteres) |
| `invoices[].carta_porte.figures` | arreglo de objeto |  | Otras figuras de transporte: 02 propietario, 03 arrendador, 04 notificado, 05 integrante de coordinados. (hasta 10) |
| `invoices[].carta_porte.figures[].type` | `02`, `03`, `04`, `05` | sí | Tipo de figura (TipoFigura): 02 propietario, 03 arrendador, 04 notificado, 05 integrante. |
| `invoices[].carta_porte.figures[].tax_id` | string |  | RFC de la figura (RFCFigura). |
| `invoices[].carta_porte.figures[].foreign` | objeto |  | Si es extranjero: su país de residencia (ResidenciaFiscal, c_Pais) y su número de registro tributario (NumRegIdTrib), con el RFC genérico XEXX010101000. |
| `invoices[].carta_porte.figures[].foreign.tax_id` | string | sí | Número de registro de identidad fiscal en su país (NumRegIdTrib). (hasta 40 caracteres) |
| `invoices[].carta_porte.figures[].foreign.country` | string | sí | País de residencia fiscal, clave de 3 letras de c_Pais (USA, CAN…). (3 caracteres) |
| `invoices[].carta_porte.figures[].name` | string | sí | Nombre de la figura (NombreFigura). (hasta 254 caracteres) |
| `invoices[].carta_porte.figures[].parts` | arreglo de string |  | Partes del transporte que posee o arrienda (ParteTransporte), c_ParteTransporte. (hasta 20) |
| `invoices[].carta_porte.figures[].address` | objeto |  | Domicilio (Domicilio). En México basta el código postal: estado, municipio y localidad se toman de c_CodigoPostal. |
| `invoices[].carta_porte.figures[].address.street` | string |  | Calle (Calle). (hasta 100 caracteres) |
| `invoices[].carta_porte.figures[].address.exterior` | string |  | Número exterior (NumeroExterior). (hasta 55 caracteres) |
| `invoices[].carta_porte.figures[].address.interior` | string |  | Número interior (NumeroInterior). (hasta 55 caracteres) |
| `invoices[].carta_porte.figures[].address.zip` | string | sí | Código postal (CodigoPostal). En México se deducen de él estado, municipio y localidad. (hasta 12 caracteres) |
| `invoices[].carta_porte.figures[].address.country` | string |  | País (Pais), c_Pais. Por omisión MEX. (3 caracteres) |
| `invoices[].carta_porte.figures[].address.state` | string |  | Estado (Estado): en el extranjero c_Estado para USA y CAN, o texto. (hasta 30 caracteres) |
| `invoices[].carta_porte.figures[].address.municipality` | string |  | Municipio (Municipio), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].carta_porte.figures[].address.locality` | string |  | Localidad (Localidad), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].carta_porte.figures[].address.colony` | string |  | Colonia (Colonia), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].ine` | objeto |  | Complemento INE (procesos electorales). |
| `invoices[].ine.process` | `Ordinario`, `Precampaña`, `Campaña` | sí | Tipo de proceso (TipoProceso): Ordinario, Precampaña o Campaña. |
| `invoices[].ine.committee` | `Ejecutivo Nacional`, `Ejecutivo Estatal`, `Directivo Estatal` |  | Tipo de comité (TipoComite), con el proceso Ordinario. |
| `invoices[].ine.accounting_id` | string |  | Clave de contabilidad (IdContabilidad), hasta 6 dígitos. |
| `invoices[].ine.entities` | arreglo de objeto |  | Entidades (Entidad): clave del estado, ámbito y claves de contabilidad. (hasta 64) |
| `invoices[].ine.entities[].key` | string | sí | Clave de la entidad (ClaveEntidad), 3 letras. (3 caracteres) |
| `invoices[].ine.entities[].scope` | `Local`, `Federal` |  | Ámbito (Ambito): Local o Federal. |
| `invoices[].ine.entities[].accounting_ids` | arreglo de string |  | Claves de contabilidad (IdContabilidad). (hasta 50) |
| `invoices[].leyendas` | arreglo de objeto |  | Complemento de leyendas fiscales. (hasta 10) |
| `invoices[].leyendas[].text` | string | sí | Texto de la leyenda (textoLeyenda). (hasta 1000 caracteres) |
| `invoices[].leyendas[].disposition` | string |  | Disposición fiscal (disposicionFiscal), por ejemplo LISR. (hasta 30 caracteres) |
| `invoices[].leyendas[].norm` | string |  | Norma o artículo (norma). (hasta 100 caracteres) |
| `invoices[].donation` | objeto |  | Complemento de donatarias. |
| `invoices[].donation.in_kind` | boolean |  | true si el donativo es en especie (va sin forma de pago en efectivo). |
| `invoices[].donation.deducted` | boolean |  | true si el donativo es deducible para quien lo da. |
| `invoices[].local_taxes` | arreglo de objeto |  | Impuestos locales (complemento implocal): traslados y retenciones estatales. (hasta 20) |
| `invoices[].local_taxes[].retention` | boolean | sí | true si es una retención local; false si es un traslado. |
| `invoices[].local_taxes[].name` | string | sí | Nombre del impuesto local (ImpLocTrasladado o ImpLocRetenido), como ISH. (hasta 100 caracteres) |
| `invoices[].local_taxes[].rate` | number | sí | Tasa en por ciento (TasadeTraslado o TasadeRetencion). (de 0 a 100) |
| `invoices[].local_taxes[].amount` | number | sí | Importe del impuesto local. (de 0 a 1000000000000) |
| `invoices[].export` | `01`, `02`, `03`, `04` |  | Exportación (Exportacion), c_Exportacion: 01 no aplica (por omisión), 02 definitiva… |
| `invoices[].comercio_exterior` | objeto |  | Complemento de comercio exterior 2.0. |
| `invoices[].comercio_exterior.motive` | `"05"` |  | Motivo de traslado (MotivoTraslado): 05 envío de mercancías propias. |
| `invoices[].comercio_exterior.owners` | arreglo de objeto |  | Propietarios de la mercancía si no es el emisor (Propietario), con motive 05. (hasta 10) |
| `invoices[].comercio_exterior.owners[].tax_id` | string | sí | Número de registro tributario del propietario (NumRegIdTrib). (hasta 40 caracteres) |
| `invoices[].comercio_exterior.owners[].country` | string | sí | País de residencia del propietario (ResidenciaFiscal), c_Pais. (3 caracteres) |
| `invoices[].comercio_exterior.incoterm` | string |  | Incoterm (Incoterm), c_INCOTERM: EXW, FOB, CIF, DAP, DDP… (3 caracteres) |
| `invoices[].comercio_exterior.certificate` | string |  | Número de certificado de origen (NumCertificadoOrigen). (hasta 40 caracteres) |
| `invoices[].comercio_exterior.usd_rate` | number | sí | Tipo de cambio a dólares (TipoCambioUSD). (de -∞ a 1000000) |
| `invoices[].comercio_exterior.issuer_curp` | string |  | CURP del emisor persona física (Emisor Curp). (18 caracteres) |
| `invoices[].comercio_exterior.issuer_address` | objeto |  | Domicilio del emisor (Emisor Domicilio): calle y números; lo demás sale de su código postal. |
| `invoices[].comercio_exterior.issuer_address.street` | string | sí | Calle (Calle). (hasta 100 caracteres) |
| `invoices[].comercio_exterior.issuer_address.exterior` | string |  | Número exterior (NumeroExterior). (hasta 55 caracteres) |
| `invoices[].comercio_exterior.issuer_address.interior` | string |  | Número interior (NumeroInterior). (hasta 55 caracteres) |
| `invoices[].comercio_exterior.issuer_address.zip` | string |  | Código postal del emisor (CodigoPostal). |
| `invoices[].comercio_exterior.receiver_address` | objeto |  | Domicilio del receptor en el extranjero (Receptor Domicilio). |
| `invoices[].comercio_exterior.receiver_address.street` | string | sí | Calle (Calle). (hasta 100 caracteres) |
| `invoices[].comercio_exterior.receiver_address.exterior` | string |  | Número exterior (NumeroExterior). (hasta 55 caracteres) |
| `invoices[].comercio_exterior.receiver_address.interior` | string |  | Número interior (NumeroInterior). (hasta 55 caracteres) |
| `invoices[].comercio_exterior.receiver_address.colony` | string |  | Colonia (Colonia), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].comercio_exterior.receiver_address.locality` | string |  | Localidad (Localidad), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].comercio_exterior.receiver_address.municipality` | string |  | Municipio (Municipio), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].comercio_exterior.receiver_address.state` | string |  | Estado (Estado), c_Estado para USA y CAN. (hasta 30 caracteres) |
| `invoices[].comercio_exterior.receiver_address.country` | string | sí | País (Pais), c_Pais. (3 caracteres) |
| `invoices[].comercio_exterior.receiver_address.zip` | string | sí | Código postal en su país (CodigoPostal). (hasta 12 caracteres) |
| `invoices[].comercio_exterior.recipient` | objeto |  | Destinatario, si no es el receptor (Destinatario). |
| `invoices[].comercio_exterior.recipient.name` | string |  | Nombre del destinatario (Nombre). (hasta 300 caracteres) |
| `invoices[].comercio_exterior.recipient.tax_id` | string |  | Número de registro tributario del destinatario (NumRegIdTrib). (hasta 40 caracteres) |
| `invoices[].comercio_exterior.recipient.address` | objeto | sí | Domicilio del destinatario (Domicilio). |
| `invoices[].comercio_exterior.recipient.address.street` | string | sí | Calle (Calle). (hasta 100 caracteres) |
| `invoices[].comercio_exterior.recipient.address.exterior` | string |  | Número exterior (NumeroExterior). (hasta 55 caracteres) |
| `invoices[].comercio_exterior.recipient.address.interior` | string |  | Número interior (NumeroInterior). (hasta 55 caracteres) |
| `invoices[].comercio_exterior.recipient.address.colony` | string |  | Colonia (Colonia), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].comercio_exterior.recipient.address.locality` | string |  | Localidad (Localidad), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].comercio_exterior.recipient.address.municipality` | string |  | Municipio (Municipio), en el extranjero como texto. (hasta 120 caracteres) |
| `invoices[].comercio_exterior.recipient.address.state` | string |  | Estado (Estado): en el extranjero c_Estado para USA y CAN, o texto. (hasta 30 caracteres) |
| `invoices[].comercio_exterior.recipient.address.country` | string | sí | País (Pais), c_Pais. Por omisión MEX. (3 caracteres) |
| `invoices[].comercio_exterior.recipient.address.zip` | string | sí | Código postal (CodigoPostal). En México se deducen de él estado, municipio y localidad. (hasta 12 caracteres) |
| `invoices[].comercio_exterior.goods` | arreglo de objeto | sí | Mercancías (Mercancia), una por concepto exportado. (hasta 200) |
| `invoices[].comercio_exterior.goods[].id` | string |  | Número de identificación de la mercancía (NoIdentificacion): el sku de su concepto. (hasta 100 caracteres) |
| `invoices[].comercio_exterior.goods[].tariff` | string |  | Fracción arancelaria (FraccionArancelaria), 10 dígitos. Transporte internacional. |
| `invoices[].comercio_exterior.goods[].unit` | string | sí | Unidad aduana (UnidadAduana), c_UnidadAduana. |
| `invoices[].comercio_exterior.goods[].quantity` | number |  | Cantidad en la unidad aduana (CantidadAduana). (de -∞ a 100000000000000) |
| `invoices[].comercio_exterior.goods[].unit_value_usd` | number |  | Valor unitario en dólares (ValorUnitarioAduana). (de 0 a 10000000000000000) |
| `invoices[].comercio_exterior.notes` | string |  | Observaciones del complemento (Observaciones). (hasta 300 caracteres) |
| `invoices[].global` | objeto |  | Factura global a público en general (InformacionGlobal): periodicidad, meses y año. |
| `invoices[].global.periodicity` | string | sí | Periodicidad (Periodicidad), c_Periodicidad: 01 diario, 02 semanal, 03 quincenal, 04 mensual, 05 bimestral. |
| `invoices[].global.months` | string | sí | Meses (Meses), c_Meses: 01 a 12, o 13 a 18 bimestres. |
| `invoices[].global.year` | integer | sí | Año (Año). (de 2022 a 2100) |
| `invoices[].use` | string |  | Uso del CFDI (UsoCFDI), clave de c_UsoCFDI. Por omisión G03, o S01 con régimen 616. |
| `invoices[].payment_form` | string |  | Forma de pago (FormaPago), clave de c_FormaPago: 01 efectivo, 03 transferencia, 04 tarjeta de crédito, 28 débito, 99 por definir… Obligatoria con PUE; con PPD es 99. |
| `invoices[].payment_method` | `PUE`, `PPD` |  | Método de pago (MetodoPago): PUE (una sola exhibición, por omisión) o PPD (en parcialidades o diferido, se cobra con complementos de pago). |
| `invoices[].paid_later` | boolean |  | Con PUE: true si aún no le pagan («Por cobrar» en la app) aunque se pagará este mes. |
| `invoices[].currency` | string |  | Moneda, clave ISO 4217 de c_Moneda (MXN, USD, EUR…). Por omisión MXN. (3 caracteres) |
| `invoices[].series` | string |  | Serie (Serie), hasta 25 caracteres. Cada serie lleva sus propios folios. (hasta 25 caracteres) |
| `invoices[].notes` | string |  | Observaciones que aparecen en el PDF (no van en el XML). (hasta 1000 caracteres) |
| `invoices[].pdf_language` | `es`, `en`, `bi` |  | Idioma del PDF: es (por omisión) o en. |
| `invoices[].addenda` | objeto |  | Addenda del receptor (Walmart, Soriana…), con sus propios campos. |
| `invoices[].related` | objeto |  | CFDI relacionados (CfdiRelacionados): tipo de relación de c_TipoRelacion y los UUID. |
| `invoices[].related.relationship` | string | sí | Tipo de relación (TipoRelacion): 01 nota de crédito, 03 devolución, 04 sustitución, 07 anticipo… |
| `invoices[].related.uuids` | arreglo de string | sí | Folios fiscales relacionados. (hasta 20) |
| `invoices[].exchange_rate` | number |  | Tipo de cambio a pesos (TipoCambio). Obligatorio si la moneda no es MXN; use el del DOF del día anterior. (de -∞ a 1000000) |
| `invoices[].folio` | integer |  | Folio (Folio). Fiscalisto asigna el siguiente de la serie; mande uno solo si debe ser ese. (de 1 a 2000000000) |
| `invoices[].continue_sequence` | boolean |  | Con un folio elegido: true para que los siguientes sigan desde ese número. |
| `invoices[].date` | string |  | Fecha de emisión (Fecha) si no es ahora, AAAA-MM-DDTHH:MM:SS hora de la Ciudad de México: hasta 72 horas antes. |
| `invoices[].send_email` | boolean |  | true para mandar el PDF y el XML por correo al timbrar, con el diseño de Fiscalisto. Por omisión no se envía. (por omisión false) |
| `invoices[].email_cc` | string o null |  | Correos con copia, separados por comas. |
| `invoices[].metadata` | objeto |  | Sus propios datos: hasta 50 llaves de 40 caracteres con valores de texto de hasta 500. No van al CFDI; vuelven en el objeto y en los webhooks. |
| `invoices[].reference` | string |  | Su identificador de esta factura (su número de pedido), hasta 100 caracteres. (hasta 100 caracteres) |

Ejemplo:

```json
{
  "name": "Cuotas de octubre",
  "invoices": [
    {
      "reference": "depto-101",
      "customer": "cus_OufpKqnrvx9p1",
      "payment_form": "03",
      "items": [
        {
          "product": "prd_OufpKqnrvx9p1"
        }
      ]
    },
    {
      "reference": "depto-102",
      "customer": {
        "tax_id": "ICV060329BY0",
        "legal_name": "INMOBILIARIA CVA",
        "tax_system": "601",
        "zip": "33826",
        "email": "pagos@cva.example"
      },
      "payment_form": "03",
      "items": [
        {
          "description": "Cuota de mantenimiento",
          "product_key": "80131500",
          "unit_price": 1500
        }
      ]
    }
  ]
}
```

## Con el SDK de TypeScript

```ts
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const invoiceBatch = await fiscalisto.invoiceBatches.create({
  name: "Cuotas de octubre",
  invoices: [
    {
      reference: "depto-101",
      customer: "cus_OufpKqnrvx9p1",
      payment_form: "03",
      items: [{ product: "prd_OufpKqnrvx9p1" }],
    },
    {
      reference: "depto-102",
      customer: {
        tax_id: "ICV060329BY0",
        legal_name: "INMOBILIARIA CVA",
        tax_system: "601",
        zip: "33826",
        email: "pagos@cva.example",
      },
      payment_form: "03",
      items: [
        {
          description: "Cuota de mantenimiento",
          product_key: "80131500",
          unit_price: 1500,
        },
      ],
    },
  ],
}, { idempotencyKey: "pedido-A-1042" });
```

## Con el SDK de Python

```python
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

invoice_batch = fiscalisto.invoice_batches.create({
    "name": "Cuotas de octubre",
    "invoices": [
        {
            "reference": "depto-101",
            "customer": "cus_OufpKqnrvx9p1",
            "payment_form": "03",
            "items": [{"product": "prd_OufpKqnrvx9p1"}],
        },
        {
            "reference": "depto-102",
            "customer": {
                "tax_id": "ICV060329BY0",
                "legal_name": "INMOBILIARIA CVA",
                "tax_system": "601",
                "zip": "33826",
                "email": "pagos@cva.example",
            },
            "payment_form": "03",
            "items": [
                {
                    "description": "Cuota de mantenimiento",
                    "product_key": "80131500",
                    "unit_price": 1500,
                },
            ],
        },
    ],
}, idempotency_key="pedido-A-1042")
```

## Con el SDK de PHP

```php
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$invoiceBatch = $fiscalisto->invoiceBatches->create([
    'name' => 'Cuotas de octubre',
    'invoices' => [
        [
            'reference' => 'depto-101',
            'customer' => 'cus_OufpKqnrvx9p1',
            'payment_form' => '03',
            'items' => [['product' => 'prd_OufpKqnrvx9p1']],
        ],
        [
            'reference' => 'depto-102',
            'customer' => [
                'tax_id' => 'ICV060329BY0',
                'legal_name' => 'INMOBILIARIA CVA',
                'tax_system' => '601',
                'zip' => '33826',
                'email' => 'pagos@cva.example',
            ],
            'payment_form' => '03',
            'items' => [
                [
                    'description' => 'Cuota de mantenimiento',
                    'product_key' => '80131500',
                    'unit_price' => 1500,
                ],
            ],
        ],
    ],
], ['idempotency_key' => 'pedido-A-1042']);
```

## Con el SDK de .NET

```csharp
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var invoiceBatch = await fiscalisto.InvoiceBatches.CreateAsync(new CreateInvoiceBatchParams
{
    Name = "Cuotas de octubre",
    Invoices = new()
    {
        new()
        {
            Reference = "depto-101",
            Customer = "cus_OufpKqnrvx9p1",
            PaymentForm = "03",
            Items = new()
            {
                new() { Product = "prd_OufpKqnrvx9p1" },
            },
        },
        new()
        {
            Reference = "depto-102",
            Customer = new InvoiceCreateCustomer
            {
                TaxId = "ICV060329BY0",
                LegalName = "INMOBILIARIA CVA",
                TaxSystem = "601",
                Zip = "33826",
                Email = "pagos@cva.example",
            },
            PaymentForm = "03",
            Items = new()
            {
                new()
                {
                    Description = "Cuota de mantenimiento",
                    ProductKey = "80131500",
                    UnitPrice = 1500,
                },
            },
        },
    },
}, new RequestOptions { IdempotencyKey = "pedido-A-1042" });
```

## Con el SDK de Go

```go
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	invoiceBatch, err := client.InvoiceBatches.Create(ctx, &fiscalisto.CreateInvoiceBatchParams{
		Name: fiscalisto.String("Cuotas de octubre"),
		Invoices: []fiscalisto.CreateInvoiceBatchParamsInvoice{
			{
				Reference:   fiscalisto.String("depto-101"),
				Customer:    fiscalisto.IDOf[fiscalisto.InvoiceCreateCustomer]("cus_OufpKqnrvx9p1"),
				PaymentForm: fiscalisto.String("03"),
				Items: []fiscalisto.InvoiceCreateItem{
					{Product: fiscalisto.String("prd_OufpKqnrvx9p1")},
				},
			},
			{
				Reference: fiscalisto.String("depto-102"),
				Customer: fiscalisto.ObjectOf(fiscalisto.InvoiceCreateCustomer{
					TaxID:     "ICV060329BY0",
					LegalName: "INMOBILIARIA CVA",
					TaxSystem: "601",
					Zip:       "33826",
					Email:     fiscalisto.String("pagos@cva.example"),
				}),
				PaymentForm: fiscalisto.String("03"),
				Items: []fiscalisto.InvoiceCreateItem{
					{
						Description: fiscalisto.String("Cuota de mantenimiento"),
						ProductKey:  fiscalisto.String("80131500"),
						UnitPrice:   fiscalisto.Float64(1500),
					},
				},
			},
		},
	}, fiscalisto.WithIdempotencyKey("pedido-A-1042"))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(invoiceBatch.ID)
}
```

## Con el SDK de Java

```java
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.RequestOptions;
import com.fiscalisto.model.CreateInvoiceBatchParams;
import com.fiscalisto.model.CreateInvoiceBatchParamsInvoice;
import com.fiscalisto.model.InvoiceCreateCustomer;
import com.fiscalisto.model.InvoiceCreateItem;
import java.util.List;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var invoiceBatch = fiscalisto.invoiceBatches().create(new CreateInvoiceBatchParams()
        .setName("Cuotas de octubre")
        .setInvoices(List.of(
                new CreateInvoiceBatchParamsInvoice()
                        .setReference("depto-101")
                        .setCustomer("cus_OufpKqnrvx9p1")
                        .setPaymentForm("03")
                        .setItems(List.of(
                                new InvoiceCreateItem()
                                        .setProduct("prd_OufpKqnrvx9p1")
                        )),
                new CreateInvoiceBatchParamsInvoice()
                        .setReference("depto-102")
                        .setCustomer(new InvoiceCreateCustomer()
                                .setTaxId("ICV060329BY0")
                                .setLegalName("INMOBILIARIA CVA")
                                .setTaxSystem("601")
                                .setZip("33826")
                                .setEmail("pagos@cva.example"))
                        .setPaymentForm("03")
                        .setItems(List.of(
                                new InvoiceCreateItem()
                                        .setDescription("Cuota de mantenimiento")
                                        .setProductKey("80131500")
                                        .setUnitPrice(1500)
                        ))
        )), RequestOptions.idempotencyKey("pedido-A-1042"));
System.out.println(invoiceBatch.getId());
```

## Respuesta 202

Correcto. Repetir la solicitud con la misma Idempotency-Key contesta lo mismo, con el mismo status y el encabezado idempotent-replayed: true.

Un objeto `InvoiceBatch`:

| Campo | Tipo | Siempre viene | Descripción |
| --- | --- | --- | --- |
| `id` | string | sí | Identificador del objeto, con su prefijo (iss_, inv_, ret_, cus_, prd_, emp_, bat_, brn_, whs_, stm_, adj_, evt_, whe_). |
| `livemode` | boolean | sí | true en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT. |
| `object` | `"invoice_batch"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `issuer` | string | sí | El emisor (iss_…). |
| `name` | string | sí | Nombre del lote, para usted. |
| `status` | `processing`, `completed` | sí | processing: timbrando. completed: ya no queda ninguna por timbrar. |
| `total` | integer | sí | Cuántas facturas tiene el lote. (de -9007199254740991 a 9007199254740991) |
| `stamped` | integer | sí | Cuántas se timbraron. (de -9007199254740991 a 9007199254740991) |
| `failed` | integer | sí | Cuántas no se timbraron (quedan con su motivo). (de -9007199254740991 a 9007199254740991) |
| `processing` | integer |  | Cuántas siguen en proceso. (de -9007199254740991 a 9007199254740991) |
| `created_at` | string (date-time) o null | sí | Cuándo se creó, ISO 8601 con la hora de la Ciudad de México (-06:00). |
| `completed_at` | string (date-time) o null | sí | Cuándo terminó. |
| `invoices` | arreglo de objeto |  | Cada factura del lote (no viene en listas ni en eventos). |
| `invoices[].index` | integer | sí | Su posición en invoices, desde 0. (de -9007199254740991 a 9007199254740991) |
| `invoices[].reference` | string o null | sí | Su identificador de esta factura (su número de pedido), hasta 100 caracteres. |
| `invoices[].status` | `processing`, `valid`, `failed` | sí | processing, valid (timbrada) o failed (no se timbró; ver error). |
| `invoices[].invoice` | string o null | sí | La factura timbrada (inv_…). |
| `invoices[].uuid` | string o null | sí | Folio fiscal que asigna el SAT (UUID del Timbre Fiscal Digital), en mayúsculas. |
| `invoices[].total` | number | sí | Total en la moneda del comprobante (Total). |
| `invoices[].error` | string o null | sí | Por qué no se timbró. |

```json
{
  "id": "bat_OufpKqnrvx9p4hMdcoapAo5aaGJEme7mXj",
  "object": "invoice_batch",
  "livemode": false,
  "issuer": "iss_OufpKqnrvx9p",
  "name": "Cuotas de octubre",
  "status": "completed",
  "total": 2,
  "stamped": 1,
  "failed": 1,
  "created_at": "2026-10-24T10:15:42-06:00",
  "completed_at": "2026-10-24T10:15:42-06:00",
  "processing": 0,
  "invoices": [
    {
      "index": 0,
      "reference": "depto-101",
      "status": "valid",
      "invoice": "inv_OufpKqnrvx9p0mn7VjQ6JlfipKAkHWstOK",
      "uuid": "DB494B07-D6DE-4F70-8ED0-C8B864FF8717",
      "total": 1740,
      "error": null
    },
    {
      "index": 1,
      "reference": "depto-102",
      "status": "failed",
      "invoice": null,
      "uuid": null,
      "total": 1740,
      "error": "El SAT no reconoce el nombre del cliente. Escríbalo exactamente como en su constancia de situación fiscal, en mayúsculas y sin «S.A. de C.V.» ni otro régimen de capital."
    }
  ]
}
```

## Errores

Puede responder 400, 401, 402, 403, 404, 409, 422, 429, 500 con el cuerpo de error de siempre; cada código está en https://fiscalisto.com/docs/api/errores.md.
