Formato de montos en Kushki ONE

Aprende a construir el campo amount en unidades mínimas según la moneda de tu país y evita cobros con el monto equivocado

Todos los endpoints de Kushki ONE Connect que involucran dinero comparten el mismo objeto amount. Antes de construir tu primer request, necesitas entender una sola regla: los montos se envían como números enteros, en la unidad mínima de la moneda.

Nunca envíes puntos, comas, espacios ni ningún otro separador.

Tu moneda y sus decimales

En Chile operas en pesos chilenos (CLP), que no usan decimales.

La regla de conversión

El valor se envía tal cual, sin agregar ceros.

Para cobrarEnvías
1,244 CLP1244
12,000 CLP12000
15,990 CLP15990

Cómo se compone el monto

El monto cobrado es la suma de todos los campos del objeto amount.

CampoQué representa
subtotal_ivaPorción de la venta afecta a impuesto
ivaMonto del impuesto sobre esa porción
subtotal_iva0Porción exenta. Usa solo este campo cuando la venta no tiene desglose
extra_taxesImpuestos de giros específicos: airport_tax, iac, ice, travel_agency. Envía 0 cuando no aplican
tipPropina. Requiere la funcionalidad habilitada en el DMS

Ejemplo completo

Venta de retail: 15,990 CLP, de los cuales 2,553 corresponden al IVA del 19%.

ComponenteValorUnidad mínima
subtotal_iva13,437 CLP13437
iva2,553 CLP2553
Total cobrado15,990 CLP15990
{
"amount": {
"iva": 2553,
"subtotal_iva": 13437,
"subtotal_iva0": 0,
"extra_taxes": { "airport_tax": 0, "iac": 0, "ice": 0, "travel_agency": 0 }
},
"client_transaction_id": "9a8b7c6d-2222-4000-8000-ffeeddccbbaa"
}

Venta sin desglose de impuestos

Cuando no detallas impuestos, coloca el monto completo en subtotal_iva0:

{
"amount": {
"iva": 0,
"subtotal_iva": 0,
"subtotal_iva0": 11800,
"extra_taxes": { "airport_tax": 0, "iac": 0, "ice": 0, "travel_agency": 0 }
},
"client_transaction_id": "1a2b3c4d-3333-4000-8000-112233445566"
}

Convierte sin perder centavos

Pasa el valor como cadena de texto, no como número decimal: Decimal(12.44) hereda el mismo error binario que intentas evitar.

  • Javascript
  • Python
const DECIMALES = { COP: 2, MXN: 2, PEN: 2, CLP: 0 };
function aUnidadMinima(valor, moneda) {
const [entero, frac = ""] = String(valor).split(".");
const exp = DECIMALES[moneda];
return Number(entero + frac.padEnd(exp, "0").slice(0, exp));
}
aUnidadMinima("12.44", "COP"); // 1244
aUnidadMinima("1244", "CLP"); // 1244
from decimal import Decimal
DECIMALES = {"COP": 2, "MXN": 2, "PEN": 2, "CLP": 0}
def a_unidad_minima(valor: str, moneda: str) -> int:
exp = DECIMALES[moneda]
return int(Decimal(valor).scaleb(exp).to_integral_value())
a_unidad_minima("12.44", "COP") # 1244
a_unidad_minima("1244", "CLP") # 1244

Errores frecuentes

ErrorQué pasaCómo lo evitas
Enviar el monto con decimalesEl cobro sale con el monto equivocado o el request se rechazaConvierte a unidad mínima antes de enviar
Enviar el monto como texto con separadoresError de validaciónElimina todos los separadores y envía un entero
Convertir con punto flotanteDiferencia de un centavo en algunos montosUsa enteros o un tipo decimal
Reutilizar un monto devuelto por un webhookMagnitud incorrectaLos eventos devuelven decimales (12000.0); los requests llevan enteros

Si operas en varios mercados

Esta sección aplica solo si tu sistema de caja atiende comercios en más de un país.

MonedaPaísDecimales
COPColombia2
MXNMéxico2
PENPerú2
CLPChile0
Acepta cobros con Kushki ONE

Con el monto correctamente construido, revisa los flujos de cobro: venta directa, pre-autorización, captura, propina posterior y anulación.

Catálogo de errores

Consulta los códigos de validación de monto y las acciones correctivas recomendadas.