Skip to content

Crear Factura

http
POST /invoicing/lite

Crea una factura electrónica o nota de crédito. Este es el endpoint principal de facturación de Solerba — diseñado para requerir la mínima información posible para emitir un documento fiscal válido.

Autenticación

Requiere header X-SOLERBA-TOKEN. Ver .

Request Body

Campos principales

CampoTipoRequeridoDescripción
branchIdintegerCondicionalID de la sucursal desde la que se factura. Requerido si no envías branch
branchobjectCondicionalDatos de la sucursal para crearla al vuelo si aún no existe. Alternativa a branchId — envía uno de los dos, no ambos
doctypestringNoTipo de documento: "01" (factura) o "04" (nota de crédito). Default: "01"
datetimestringNoFecha y hora de emisión en formato ISO 8601. Default: fecha actual
externalIdstringNoID externo para idempotencia (máx. 100 caracteres)
clientobjectNoDatos del receptor. Si se omite, se factura como Consumidor Final
itemsarrayLíneas de la factura (mín. 1, máx. 400)
paymentsarrayFormas de pago (mín. 1)
discountsarrayNoDescuentos a nivel de documento
additionalDataobjectNoDatos adicionales (requerido para notas de crédito)
creditobjectNoGeneración automática de cuotas para facturas a crédito. Ver

Objeto branch

Si la sucursal aún no existe en Solerba, puedes enviarla completa en lugar de branchId y se creará automáticamente. Todos los campos son requeridos:

CampoTipoRequeridoDescripción
namestringNombre de la sucursal (1 a 50 caracteres)
codestringCódigo de sucursal registrado ante la DGI (exactamente 4 caracteres, ej. "0001")
addressstringDirección física (1 a 255 caracteres)
citystringCiudad (1 a 50 caracteres)
districtstringDistrito (1 a 50 caracteres)
statestringProvincia (1 a 50 caracteres)
codubistringCódigo de ubicación de la DGI (5 a 8 caracteres)
latitudenumberLatitud de la sucursal
longitudenumberLongitud de la sucursal

Objeto client

CampoTipoRequeridoDescripción
taxReceiverTypestringTipo de receptor: "01", "02", "03" o "04"
taxNamestringCondicionalRazón social (requerido para tipos 01, 03, 04 — entre 3 y 150 caracteres)
taxIdstringCondicionalRUC del receptor (requerido para tipos 01, 03, 04 — entre 3 y 50 caracteres)
taxDvintegerCondicionalDígito verificador (requerido para tipos 01, 03, 04)
taxIdTypeintegerCondicionalTipo de identificación: 1 (natural) o 2 (jurídico). Requerido para tipos 01, 03, 04
emailstringNoEmail del receptor (máx. 50 caracteres). Recomendado para que el receptor reciba su factura por correo
phonestringNoTeléfono del receptor (entre 3 y 20 caracteres para receptores con RUC)
dnistringNoCédula (solo para Consumidor Final, máx. 20 caracteres)
namestringNoNombre del cliente para el catálogo (3 a 200 caracteres)
lastnamestringNoApellido del cliente para el catálogo (hasta 200 caracteres)
addressstringNoDirección del receptor (hasta 150 caracteres)
codubistringNoCódigo de ubicación DGI del receptor (5 a 8 caracteres)
disabledbooleanNoMarca el cliente como inactivo en el catálogo

Objeto en items[]

CampoTipoRequeridoDescripción
descriptionstringDescripción del producto o servicio
qtynumberCantidad (puede ser decimal)
pricenumberPrecio unitario
taxesarrayImpuestos aplicables (mín. 1)
skustringNoCódigo del producto en tu sistema
unitMeasurestringNoUnidad de medida ("kg", "und", "m", "l", etc.)
codCpbScmpstringNoCódigo de compra gubernamental (solo para receptores tipo 03)
discountnumberNoDescuento por unidad
additionalDataobjectNoDatos adicionales del ítem

Objeto en items[].taxes[]

CampoTipoRequeridoDescripción
codestringCódigo ITBMS: "00", "01", "02" o "03"
amountnumberNoMonto del impuesto (se calcula automáticamente si se omite)
descriptionstringNoDescripción del impuesto

Objeto en payments[]

CampoTipoRequeridoDescripción
typestringCódigo de forma de pago: "01", "02", "03", "04", "08", "99" o "PLAZO". Ver
amountnumberMonto del pago
descriptionstringCondicionalDescripción. Requerida para tipo "99" (mín. 12 caracteres). Opcional para "PLAZO" (entre 15 y 1000 caracteres). No permitida para los demás tipos
datestringCondicionalFecha de vencimiento de la cuota. Requerida para tipo "PLAZO" y no permitida para los demás tipos. Formato "YYYY-MM-DD" (hora de Panamá) o ISO 8601 con offset (ej. "2026-07-15T00:00:00-05:00")

Objeto en discounts[]

CampoTipoRequeridoDescripción
amountnumberMonto del descuento
descriptionstringDescripción del descuento

Objeto additionalData

CampoTipoRequeridoDescripción
creditNoteobjectCondicionalRequerido cuando doctype es "04"
creditNote.cufestring (en nota de crédito)CUFE de la factura original a la que se hace referencia
paymentTimeintegerCondicionalTiempo de pago: 1 (contado, default), 2 (crédito) o 3 (mixto). Requerido (2 o 3) para facturas a crédito
infoInteresstringNoNota de interés del emisor que se incluye en el documento fiscal (entre 1 y 5,000 caracteres)
emailsarrayNoCorreos a los que se envía la factura (máx. 20, cada uno hasta 50 caracteres)
retentionobjectNoRetención aplicable: { "code": integer, "amount": number }. El monto es opcional

Objeto credit (cuotas automáticas)

Si prefieres que Solerba calcule las cuotas por ti, envía el objeto credit en lugar de cuotas PLAZO manuales. Ver las reglas completas en .

CampoTipoRequeridoDescripción
numeroCuotasintegerNúmero de cuotas a generar (entre 1 y 20)
scheduleobjectCalendario de vencimientos. Dos variantes según kind (ver abajo)
amountnumberNoMonto a financiar. Default: el total del documento (crédito) o el remanente después del contado (mixto)
descriptionTemplatestringNoPlantilla para la descripción de cada cuota. Acepta los placeholders {n}, {total}, {date} y {amount}. El resultado debe quedar entre 15 y 1,000 caracteres
formaPagoTypestringNoCódigo de forma de pago (2 dígitos) a usar para la forma de pago acompañante si no envías una en payments. Default: "01"

schedule por intervalo de días

CampoTipoRequeridoDescripción
kindstring"interval"
startDatestringFecha de la primera cuota, formato "YYYY-MM-DD"
intervalDaysintegerDías entre cuotas (entre 1 y 365). Ej: 30 para cuotas cada 30 días

schedule por día(s) fijo(s) del mes

CampoTipoRequeridoDescripción
kindstring"daysOfMonth"
startMonthstringMes de la primera cuota, formato "YYYY-MM"
daysOfMontharrayDía(s) del mes en que vencen las cuotas (valores entre 1 y 31). Ej: [15] para el 15 de cada mes, [15, 30] para el 15 y el 30

Días que no existen en el mes

Si un día no existe en un mes (ej. el 31 en febrero), la cuota se ajusta automáticamente al último día de ese mes. Si dos días configurados caen en la misma fecha tras el ajuste, se emite una sola cuota ese mes y el calendario continúa hasta completar numeroCuotas.

Validaciones especiales

Validación por tipo de receptor

  • Consumidor Final (02): No requiere taxName, taxId, taxDv ni taxIdType. Permite dni opcional.
  • Contribuyente (01), Gobierno (03), Extranjero (04): Requieren taxName, taxId, taxDv y taxIdType.
  • Gobierno (03): Permite el campo codCpbScmp en los ítems para código de compra gubernamental.
  • Nota de crédito (04): Requiere additionalData.creditNote.cufe con el CUFE de la factura original.

Facturas a crédito (pago a plazos)

Solerba soporta la emisión de facturas a crédito según el estándar de la DGI: el documento se emite declarando TiempoPago y el detalle de las cuotas con su fecha de vencimiento.

Hay dos formas de definir las cuotas (excluyentes entre sí):

  1. Cuotas automáticas — envía el objeto y Solerba calcula montos y fechas. El monto se reparte en partes iguales (en centavos) y los centavos sobrantes se asignan a las primeras cuotas.
  2. Cuotas manuales — envía cada cuota como un pago type: "PLAZO" con su amount y date.

Reglas de validación

ReglaDetalle
paymentTime obligatorioUsar credit o cuotas PLAZO requiere additionalData.paymentTime con valor 2 (crédito) o 3 (mixto)
Exclusión mutuaNo se puede enviar credit junto con cuotas PLAZO manuales
Crédito (paymentTime: 2)Las cuotas PLAZO deben sumar el total de la factura, y debe acompañarlas una forma de pago (ej. type: "01") por el total del documento
Mixto (paymentTime: 3)La parte de contado más las cuotas PLAZO deben sumar el total de la factura
Fechas de cuotasEn orden ascendente y ninguna anterior a la fecha de emisión (comparadas en hora de Panamá)
Notas de créditodoctype: "04" no admite credit ni cuotas PLAZO

Modo mixto (paymentTime: 3) — no disponible

El modo mixto (parte de contado + parte a crédito) aún no está disponible: el proveedor de facturación autorizado no ha implementado esta función y rechaza las facturas mixtas. Usa Contado (1) o Crédito (2) mientras tanto. Esta página se actualizará cuando el proveedor libere el soporte de mixto.

Las fechas se interpretan en hora de Panamá

Si envías "2026-07-15", la cuota vence el 15 de julio de 2026 a medianoche hora de Panamá. También puedes enviar el timestamp completo con offset: "2026-07-15T00:00:00-05:00".

Ejemplos

Factura a Consumidor Final (mínimo)

El caso más simple — sin datos de cliente:

bash
curl -X POST "https://api.solerba.com/external-api/invoicing/lite" \
  -H "X-SOLERBA-TOKEN: tu-api-token-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "branchId": 1,
    "items": [
      {
        "description": "Producto de prueba",
        "qty": 1,
        "price": 10,
        "taxes": [{ "code": "00" }]
      }
    ],
    "payments": [
      { "type": "08", "amount": 10 }
    ]
  }'

Ejemplo JS

javascript
const response = await fetch('https://api.solerba.com/external-api/invoicing/lite', {
  method: 'POST',
  headers: {
    'X-SOLERBA-TOKEN': process.env.SOLERBA_TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    branchId: 1,
    items: [
      {
        description: 'Producto de prueba',
        qty: 1,
        price: 10,
        taxes: [{ code: '00' }]
      }
    ],
    payments: [
      { type: '08', amount: 10 }
    ]
  })
});

const result = await response.json();
console.log(result.result.cufe);

Ejemplo Py

python
import requests

response = requests.post(
    'https://api.solerba.com/external-api/invoicing/lite',
    headers={
        'X-SOLERBA-TOKEN': 'tu-api-token-aqui',
        'Content-Type': 'application/json'
    },
    json={
        'branchId': 1,
        'items': [
            {
                'description': 'Producto de prueba',
                'qty': 1,
                'price': 10,
                'taxes': [{'code': '00'}]
            }
        ],
        'payments': [
            {'type': '08', 'amount': 10}
        ]
    }
)

result = response.json()
print(result['result']['cufe'])

Factura a Contribuyente

Con datos fiscales completos del receptor:

bash
curl -X POST "https://api.solerba.com/external-api/invoicing/lite" \
  -H "X-SOLERBA-TOKEN: tu-api-token-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "branchId": 1,
    "client": {
      "taxName": "Empresa ABC S.A.",
      "taxId": "6-123-3123",
      "taxDv": 1,
      "taxIdType": 2,
      "taxReceiverType": "01",
      "email": "[email protected]"
    },
    "items": [
      {
        "sku": "SRV-001",
        "description": "Servicio de consultoría",
        "qty": 1,
        "price": 500,
        "taxes": [{ "code": "01" }]
      }
    ],
    "payments": [
      { "type": "04", "amount": 535 }
    ]
  }'

Ejemplo JS

javascript
const response = await fetch('https://api.solerba.com/external-api/invoicing/lite', {
  method: 'POST',
  headers: {
    'X-SOLERBA-TOKEN': process.env.SOLERBA_TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    branchId: 1,
    client: {
      taxName: 'Empresa ABC S.A.',
      taxId: '6-123-3123',
      taxDv: 1,
      taxIdType: 2,
      taxReceiverType: '01',
      email: '[email protected]'
    },
    items: [
      {
        sku: 'SRV-001',
        description: 'Servicio de consultoría',
        qty: 1,
        price: 500,
        taxes: [{ code: '01' }]
      }
    ],
    payments: [
      { type: '04', amount: 535 }
    ]
  })
});

const result = await response.json();

Ejemplo Py

python
import requests

response = requests.post(
    'https://api.solerba.com/external-api/invoicing/lite',
    headers={
        'X-SOLERBA-TOKEN': 'tu-api-token-aqui',
        'Content-Type': 'application/json'
    },
    json={
        'branchId': 1,
        'client': {
            'taxName': 'Empresa ABC S.A.',
            'taxId': '6-123-3123',
            'taxDv': 1,
            'taxIdType': 2,
            'taxReceiverType': '01',
            'email': '[email protected]'
        },
        'items': [
            {
                'sku': 'SRV-001',
                'description': 'Servicio de consultoría',
                'qty': 1,
                'price': 500,
                'taxes': [{'code': '01'}]
            }
        ],
        'payments': [
            {'type': '04', 'amount': 535}
        ]
    }
)

result = response.json()

Factura al Gobierno

Con código de compra gubernamental (codCpbScmp):

bash
curl -X POST "https://api.solerba.com/external-api/invoicing/lite" \
  -H "X-SOLERBA-TOKEN: tu-api-token-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "branchId": 1,
    "client": {
      "taxName": "Ministerio de Educación",
      "taxId": "4-NT-2-743890",
      "taxDv": 10,
      "taxIdType": 2,
      "taxReceiverType": "03",
      "email": "[email protected]",
      "phone": "5072001234"
    },
    "items": [
      {
        "description": "Equipos de cómputo",
        "qty": 10,
        "price": 1000,
        "codCpbScmp": "1110",
        "taxes": [{ "code": "01" }]
      }
    ],
    "payments": [
      { "type": "04", "amount": 10700 }
    ]
  }'

Ejemplo JS

javascript
const response = await fetch('https://api.solerba.com/external-api/invoicing/lite', {
  method: 'POST',
  headers: {
    'X-SOLERBA-TOKEN': process.env.SOLERBA_TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    branchId: 1,
    client: {
      taxName: 'Ministerio de Educación',
      taxId: '4-NT-2-743890',
      taxDv: 10,
      taxIdType: 2,
      taxReceiverType: '03',
      email: '[email protected]',
      phone: '5072001234'
    },
    items: [
      {
        description: 'Equipos de cómputo',
        qty: 10,
        price: 1000,
        codCpbScmp: '1110',
        taxes: [{ code: '01' }]
      }
    ],
    payments: [
      { type: '04', amount: 10700 }
    ]
  })
});

Ejemplo Py

python
import requests

response = requests.post(
    'https://api.solerba.com/external-api/invoicing/lite',
    headers={
        'X-SOLERBA-TOKEN': 'tu-api-token-aqui',
        'Content-Type': 'application/json'
    },
    json={
        'branchId': 1,
        'client': {
            'taxName': 'Ministerio de Educación',
            'taxId': '4-NT-2-743890',
            'taxDv': 10,
            'taxIdType': 2,
            'taxReceiverType': '03',
            'email': '[email protected]',
            'phone': '5072001234'
        },
        'items': [
            {
                'description': 'Equipos de cómputo',
                'qty': 10,
                'price': 1000,
                'codCpbScmp': '1110',
                'taxes': [{'code': '01'}]
            }
        ],
        'payments': [
            {'type': '04', 'amount': 10700}
        ]
    }
)

Nota de Crédito

Referenciando el CUFE de la factura original:

bash
curl -X POST "https://api.solerba.com/external-api/invoicing/lite" \
  -H "X-SOLERBA-TOKEN: tu-api-token-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "doctype": "04",
    "branchId": 1,
    "items": [
      {
        "description": "Devolución de producto",
        "qty": 1,
        "price": 50,
        "taxes": [{ "code": "01" }],
        "unitMeasure": "und"
      }
    ],
    "payments": [
      { "type": "02", "amount": 53.5 }
    ],
    "additionalData": {
      "creditNote": {
        "cufe": "FE0120000155704849-2-2021-3200012026021019600000460010129600000462"
      }
    }
  }'

Ejemplo JS

javascript
const response = await fetch('https://api.solerba.com/external-api/invoicing/lite', {
  method: 'POST',
  headers: {
    'X-SOLERBA-TOKEN': process.env.SOLERBA_TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    doctype: '04',
    branchId: 1,
    items: [
      {
        description: 'Devolución de producto',
        qty: 1,
        price: 50,
        taxes: [{ code: '01' }],
        unitMeasure: 'und'
      }
    ],
    payments: [
      { type: '02', amount: 53.5 }
    ],
    additionalData: {
      creditNote: {
        cufe: 'FE0120000155704849-2-2021-3200012026021019600000460010129600000462'
      }
    }
  })
});

Ejemplo Py

python
import requests

response = requests.post(
    'https://api.solerba.com/external-api/invoicing/lite',
    headers={
        'X-SOLERBA-TOKEN': 'tu-api-token-aqui',
        'Content-Type': 'application/json'
    },
    json={
        'doctype': '04',
        'branchId': 1,
        'items': [
            {
                'description': 'Devolución de producto',
                'qty': 1,
                'price': 50,
                'taxes': [{'code': '01'}],
                'unitMeasure': 'und'
            }
        ],
        'payments': [
            {'type': '02', 'amount': 53.5}
        ],
        'additionalData': {
            'creditNote': {
                'cufe': 'FE0120000155704849-2-2021-3200012026021019600000460010129600000462'
            }
        }
    }
)

Factura a crédito — cuotas automáticas

Una factura de B/. 600.00 a 3 cuotas mensuales que vencen el 15 de cada mes. Solerba genera las cuotas de B/. 200.00:

bash
curl -X POST "https://api.solerba.com/external-api/invoicing/lite" \
  -H "X-SOLERBA-TOKEN: tu-api-token-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "branchId": 1,
    "items": [
      {
        "description": "Servicio anual de mantenimiento",
        "qty": 1,
        "price": 600,
        "taxes": [{ "code": "00" }]
      }
    ],
    "payments": [
      { "type": "01", "amount": 600 }
    ],
    "additionalData": { "paymentTime": 2 },
    "credit": {
      "numeroCuotas": 3,
      "schedule": {
        "kind": "daysOfMonth",
        "startMonth": "2026-07",
        "daysOfMonth": [15]
      }
    }
  }'

Ejemplo JS

javascript
const response = await fetch('https://api.solerba.com/external-api/invoicing/lite', {
  method: 'POST',
  headers: {
    'X-SOLERBA-TOKEN': process.env.SOLERBA_TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    branchId: 1,
    items: [
      {
        description: 'Servicio anual de mantenimiento',
        qty: 1,
        price: 600,
        taxes: [{ code: '00' }]
      }
    ],
    payments: [
      { type: '01', amount: 600 }
    ],
    additionalData: { paymentTime: 2 },
    credit: {
      numeroCuotas: 3,
      schedule: {
        kind: 'daysOfMonth',
        startMonth: '2026-07',
        daysOfMonth: [15]
      }
    }
  })
});

const result = await response.json();

Ejemplo Py

python
import requests

response = requests.post(
    'https://api.solerba.com/external-api/invoicing/lite',
    headers={
        'X-SOLERBA-TOKEN': 'tu-api-token-aqui',
        'Content-Type': 'application/json'
    },
    json={
        'branchId': 1,
        'items': [
            {
                'description': 'Servicio anual de mantenimiento',
                'qty': 1,
                'price': 600,
                'taxes': [{'code': '00'}]
            }
        ],
        'payments': [
            {'type': '01', 'amount': 600}
        ],
        'additionalData': {'paymentTime': 2},
        'credit': {
            'numeroCuotas': 3,
            'schedule': {
                'kind': 'daysOfMonth',
                'startMonth': '2026-07',
                'daysOfMonth': [15]
            }
        }
    }
)

Para cuotas cada 30 días en lugar de días fijos del mes, usa el calendario por intervalo:

json
{
  "credit": {
    "numeroCuotas": 3,
    "schedule": {
      "kind": "interval",
      "startDate": "2026-07-09",
      "intervalDays": 30
    }
  }
}

Factura a crédito — cuotas manuales

El mismo caso, definiendo cada cuota explícitamente con pagos type: "PLAZO":

bash
curl -X POST "https://api.solerba.com/external-api/invoicing/lite" \
  -H "X-SOLERBA-TOKEN: tu-api-token-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "branchId": 1,
    "items": [
      {
        "description": "Servicio anual de mantenimiento",
        "qty": 1,
        "price": 600,
        "taxes": [{ "code": "00" }]
      }
    ],
    "payments": [
      { "type": "01", "amount": 600 },
      { "type": "PLAZO", "amount": 200, "date": "2026-07-15" },
      { "type": "PLAZO", "amount": 200, "date": "2026-08-15" },
      { "type": "PLAZO", "amount": 200, "date": "2026-09-15" }
    ],
    "additionalData": { "paymentTime": 2 }
  }'

Observa que la forma de pago "01" va por el total (B/. 600.00) y las cuotas PLAZO también suman el total — así lo exige el formato de la DGI para facturas a crédito.

Nota de interés

Para incluir una nota del emisor visible en el documento fiscal, usa additionalData.infoInteres (hasta 5,000 caracteres). Funciona en cualquier tipo de factura:

json
{
  "branchId": 1,
  "items": [
    { "description": "Producto de prueba", "qty": 1, "price": 10, "taxes": [{ "code": "00" }] }
  ],
  "payments": [{ "type": "08", "amount": 10 }],
  "additionalData": {
    "infoInteres": "Garantía de 12 meses. Esta factura corresponde a la orden de compra OC-2026-0431."
  }
}

Respuesta exitosa

HTTP 201 Created

json
{
  "success": true,
  "result": {
    "id": 18874,
    "cufe": "FE0120000155704849-2-2021-3200012026021019600000460010129600000462",
    "urlPdf": "https://storage.solerba.com/invoices/18874.pdf",
    "datetime": "2026-03-20T15:30:00.000Z"
  }
}
CampoTipoDescripción
idintegerIdentificador único de la factura en Solerba
cufestringCódigo Único de Factura Electrónica asignado por la DGI
urlPdfstringURL para descargar el PDF de la factura
datetimestringFecha y hora de emisión en formato ISO 8601

Problemas comunes

ErrorCausaSolución
401 UnauthorizedToken inválido o expiradoVerifica tu API Token
400 — items requeridoNo se enviaron ítemsIncluye al menos 1 ítem en el array items
400 — payments requeridoNo se enviaron pagosIncluye al menos 1 pago en el array payments
400 — branchId o branch requeridoFalta la sucursalEnvía un branchId válido o el objeto branch completo (no ambos)
400 — CUFE requeridoNota de crédito sin CUFEPara doctype: "04", incluye additionalData.creditNote.cufe
400 — description requeridaPago tipo "99" sin descripciónAgrega description con mínimo 12 caracteres
Sin folios disponiblesEl paquete no tiene foliosContacta al administrador para asignar un nuevo paquete
400 — taxName/taxId requeridoContribuyente sin datos fiscalesIncluye taxName, taxId, taxDv y taxIdType para receptores tipo 01, 03 o 04
400 — Date is required for PLAZOCuota PLAZO sin fechaAgrega date a cada pago type: "PLAZO"
400 — paymentTime 2 o 3 requeridocredit o cuotas PLAZO sin tiempo de pagoEnvía additionalData.paymentTime con valor 2 (crédito) o 3 (mixto)
400 — credit + cuotas PLAZOSe enviaron ambos modos a la vezUsa credit o cuotas PLAZO manuales, no ambos
400 — la suma de las cuotas debe igualar el totalLas cuotas no cuadran con el totalVerifica que las cuotas PLAZO sumen exactamente el total de la factura (y en mixto, contado + cuotas)
400 — forma de pago por el totalCrédito sin forma de pago acompañanteEn paymentTime: 2, incluye una forma de pago (ej. type: "01") con el monto total del documento
400 — fecha de cuota inválidadate con formato o fecha incorrectaUsa "YYYY-MM-DD" o ISO 8601 con offset, con una fecha de calendario válida

Siguientes pasos

  • — Cancela una factura emitida
  • — Consulta una factura por ID o CUFE
  • — Guía completa sobre tipos de documento e impuestos

Documentación oficial de Zelta