Crear Factura
POST /invoicing/liteCrea 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
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
branchId | integer | Condicional | ID de la sucursal desde la que se factura. Requerido si no envías branch |
branch | object | Condicional | Datos de la sucursal para crearla al vuelo si aún no existe. Alternativa a branchId — envía uno de los dos, no ambos |
doctype | string | No | Tipo de documento: "01" (factura) o "04" (nota de crédito). Default: "01" |
datetime | string | No | Fecha y hora de emisión en formato ISO 8601. Default: fecha actual |
externalId | string | No | ID externo para idempotencia (máx. 100 caracteres) |
client | object | No | Datos del receptor. Si se omite, se factura como Consumidor Final |
items | array | Sí | Líneas de la factura (mín. 1, máx. 400) |
payments | array | Sí | Formas de pago (mín. 1) |
discounts | array | No | Descuentos a nivel de documento |
additionalData | object | No | Datos adicionales (requerido para notas de crédito) |
credit | object | No | Generació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:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre de la sucursal (1 a 50 caracteres) |
code | string | Sí | Código de sucursal registrado ante la DGI (exactamente 4 caracteres, ej. "0001") |
address | string | Sí | Dirección física (1 a 255 caracteres) |
city | string | Sí | Ciudad (1 a 50 caracteres) |
district | string | Sí | Distrito (1 a 50 caracteres) |
state | string | Sí | Provincia (1 a 50 caracteres) |
codubi | string | Sí | Código de ubicación de la DGI (5 a 8 caracteres) |
latitude | number | Sí | Latitud de la sucursal |
longitude | number | Sí | Longitud de la sucursal |
Objeto client
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
taxReceiverType | string | Sí | Tipo de receptor: "01", "02", "03" o "04" |
taxName | string | Condicional | Razón social (requerido para tipos 01, 03, 04 — entre 3 y 150 caracteres) |
taxId | string | Condicional | RUC del receptor (requerido para tipos 01, 03, 04 — entre 3 y 50 caracteres) |
taxDv | integer | Condicional | Dígito verificador (requerido para tipos 01, 03, 04) |
taxIdType | integer | Condicional | Tipo de identificación: 1 (natural) o 2 (jurídico). Requerido para tipos 01, 03, 04 |
email | string | No | Email del receptor (máx. 50 caracteres). Recomendado para que el receptor reciba su factura por correo |
phone | string | No | Teléfono del receptor (entre 3 y 20 caracteres para receptores con RUC) |
dni | string | No | Cédula (solo para Consumidor Final, máx. 20 caracteres) |
name | string | No | Nombre del cliente para el catálogo (3 a 200 caracteres) |
lastname | string | No | Apellido del cliente para el catálogo (hasta 200 caracteres) |
address | string | No | Dirección del receptor (hasta 150 caracteres) |
codubi | string | No | Código de ubicación DGI del receptor (5 a 8 caracteres) |
disabled | boolean | No | Marca el cliente como inactivo en el catálogo |
Objeto en items[]
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
description | string | Sí | Descripción del producto o servicio |
qty | number | Sí | Cantidad (puede ser decimal) |
price | number | Sí | Precio unitario |
taxes | array | Sí | Impuestos aplicables (mín. 1) |
sku | string | No | Código del producto en tu sistema |
unitMeasure | string | No | Unidad de medida ("kg", "und", "m", "l", etc.) |
codCpbScmp | string | No | Código de compra gubernamental (solo para receptores tipo 03) |
discount | number | No | Descuento por unidad |
additionalData | object | No | Datos adicionales del ítem |
Objeto en items[].taxes[]
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
code | string | Sí | Código ITBMS: "00", "01", "02" o "03" |
amount | number | No | Monto del impuesto (se calcula automáticamente si se omite) |
description | string | No | Descripción del impuesto |
Objeto en payments[]
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
type | string | Sí | Código de forma de pago: "01", "02", "03", "04", "08", "99" o "PLAZO". Ver |
amount | number | Sí | Monto del pago |
description | string | Condicional | Descripción. Requerida para tipo "99" (mín. 12 caracteres). Opcional para "PLAZO" (entre 15 y 1000 caracteres). No permitida para los demás tipos |
date | string | Condicional | Fecha 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[]
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
amount | number | Sí | Monto del descuento |
description | string | Sí | Descripción del descuento |
Objeto additionalData
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
creditNote | object | Condicional | Requerido cuando doctype es "04" |
creditNote.cufe | string | Sí (en nota de crédito) | CUFE de la factura original a la que se hace referencia |
paymentTime | integer | Condicional | Tiempo de pago: 1 (contado, default), 2 (crédito) o 3 (mixto). Requerido (2 o 3) para facturas a crédito |
infoInteres | string | No | Nota de interés del emisor que se incluye en el documento fiscal (entre 1 y 5,000 caracteres) |
emails | array | No | Correos a los que se envía la factura (máx. 20, cada uno hasta 50 caracteres) |
retention | object | No | Retenció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 .
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
numeroCuotas | integer | Sí | Número de cuotas a generar (entre 1 y 20) |
schedule | object | Sí | Calendario de vencimientos. Dos variantes según kind (ver abajo) |
amount | number | No | Monto a financiar. Default: el total del documento (crédito) o el remanente después del contado (mixto) |
descriptionTemplate | string | No | Plantilla 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 |
formaPagoType | string | No | Có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
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
kind | string | Sí | "interval" |
startDate | string | Sí | Fecha de la primera cuota, formato "YYYY-MM-DD" |
intervalDays | integer | Sí | Días entre cuotas (entre 1 y 365). Ej: 30 para cuotas cada 30 días |
schedule por día(s) fijo(s) del mes
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
kind | string | Sí | "daysOfMonth" |
startMonth | string | Sí | Mes de la primera cuota, formato "YYYY-MM" |
daysOfMonth | array | Sí | Dí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 requieretaxName,taxId,taxDvnitaxIdType. Permitedniopcional. - Contribuyente (
01), Gobierno (03), Extranjero (04): RequierentaxName,taxId,taxDvytaxIdType. - Gobierno (
03): Permite el campocodCpbScmpen los ítems para código de compra gubernamental. - Nota de crédito (
04): RequiereadditionalData.creditNote.cufecon 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í):
- 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.
- Cuotas manuales — envía cada cuota como un pago
type: "PLAZO"con suamountydate.
Reglas de validación
| Regla | Detalle |
|---|---|
paymentTime obligatorio | Usar credit o cuotas PLAZO requiere additionalData.paymentTime con valor 2 (crédito) o 3 (mixto) |
| Exclusión mutua | No 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 cuotas | En orden ascendente y ninguna anterior a la fecha de emisión (comparadas en hora de Panamá) |
| Notas de crédito | doctype: "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:
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
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
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:
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
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
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):
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
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
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:
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
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
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:
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
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
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:
{
"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":
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:
{
"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
{
"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"
}
}| Campo | Tipo | Descripción |
|---|---|---|
id | integer | Identificador único de la factura en Solerba |
cufe | string | Código Único de Factura Electrónica asignado por la DGI |
urlPdf | string | URL para descargar el PDF de la factura |
datetime | string | Fecha y hora de emisión en formato ISO 8601 |
Problemas comunes
| Error | Causa | Solución |
|---|---|---|
401 Unauthorized | Token inválido o expirado | Verifica tu API Token |
400 — items requerido | No se enviaron ítems | Incluye al menos 1 ítem en el array items |
400 — payments requerido | No se enviaron pagos | Incluye al menos 1 pago en el array payments |
400 — branchId o branch requerido | Falta la sucursal | Envía un branchId válido o el objeto branch completo (no ambos) |
400 — CUFE requerido | Nota de crédito sin CUFE | Para doctype: "04", incluye additionalData.creditNote.cufe |
400 — description requerida | Pago tipo "99" sin descripción | Agrega description con mínimo 12 caracteres |
| Sin folios disponibles | El paquete no tiene folios | Contacta al administrador para asignar un nuevo paquete |
400 — taxName/taxId requerido | Contribuyente sin datos fiscales | Incluye taxName, taxId, taxDv y taxIdType para receptores tipo 01, 03 o 04 |
400 — Date is required for PLAZO | Cuota PLAZO sin fecha | Agrega date a cada pago type: "PLAZO" |
400 — paymentTime 2 o 3 requerido | credit o cuotas PLAZO sin tiempo de pago | Envía additionalData.paymentTime con valor 2 (crédito) o 3 (mixto) |
400 — credit + cuotas PLAZO | Se enviaron ambos modos a la vez | Usa credit o cuotas PLAZO manuales, no ambos |
400 — la suma de las cuotas debe igualar el total | Las cuotas no cuadran con el total | Verifica que las cuotas PLAZO sumen exactamente el total de la factura (y en mixto, contado + cuotas) |
400 — forma de pago por el total | Crédito sin forma de pago acompañante | En paymentTime: 2, incluye una forma de pago (ej. type: "01") con el monto total del documento |
400 — fecha de cuota inválida | date con formato o fecha incorrecta | Usa "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