Formatear números y moneda
1.234,56 y 1,234.56 son el mismo número con dos convenciones regionales distintas, y usar la que no corresponde hace que un precio se vea diez veces más grande o simplemente mal a los ojos del lector. La API de Formato de Números y Moneda toma un valor numérico y un locale de destino y lo devuelve formateado exactamente como ese locale lo espera: separador de miles correcto, marca decimal, posición del símbolo de moneda y redondeo apropiado. Es un problema pequeño y poco vistoso que, sin embargo, rompe páginas de pago e informes financieros todo el tiempo.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
El error que pasa desapercibido
El formato numérico es uno de esos detalles que los desarrolladores hacen bien para su propio locale y mal para todos los demás, porque rara vez se prueba fuera del mercado local. Un precio de 1000.5 mostrado como '1000.5' a un lector alemán, o como '1.000,5' a uno estadounidense, se ve como una errata más que como un problema de localización, lo cual lo hace más difícil de detectar en pruebas de calidad y más costoso cuando un cliente lo nota en la página de pago.
Qué recibe y qué devuelve el endpoint
Envía un valor numérico, opcionalmente un código de moneda y el locale de destino (como de-DE, en-US o ja-JP), y recibe de vuelta la cadena correctamente formateada, con separadores, posición del símbolo, precisión decimal y las reglas de redondeo propias de ese locale ya aplicadas. No le pedimos al sistema que adivine una moneda ni que convierta un tipo de cambio; esto es formato, no conversión, y por eso el resultado es predecible.
Por qué esto no es una simple tabla de consulta
Las convenciones de formato varían de formas que no siempre son intuitivas: Suiza usa un apóstrofo como separador de miles en ciertos contextos, algunos locales reemplazan los dígitos arábigos por numerales arábigos orientales, y la posición del símbolo de moneda (antes o después del número, con o sin espacio) difiere incluso entre locales tan cercanos como en-US y en-GB. Acertar en todo eso a mano, para decenas de mercados, es exactamente el tipo de trabajo repetitivo y preciso que le corresponde a una API y no a una hoja de reglas que alguien mantiene manualmente.
Dónde encaja en la automatización
Envía la solicitud de forma asíncrona, recibe un task_id y obtiene el valor formateado por webhook firmado o mediante un enlace firmado válido por 24 horas. Como el precio es por solicitud y no por palabra, este endpoint está pensado para uso de alto volumen y tolerante a latencia: formatear en lote un catálogo de productos o una exportación financiera, no una consulta interactiva puntual.
Dónde se usa en la práctica
Los flujos de pago, los sistemas de facturación, los tableros financieros y cualquier catálogo de producto multimercado dependen de un formato numérico consistente para verse confiables; una tienda que muestra los precios mal formateados para un país determinado se percibe poco confiable o ajena mucho antes de que el cliente lea una sola palabra del texto.
Qué puede hacer con ella
Páginas de pago multipaís
Una plataforma de comercio electrónico muestra el mismo valor de precio formateado correctamente ya sea que el comprador esté en Alemania, Estados Unidos o Japón, sin mantener lógica de formato separada por tienda.
Exportaciones de informes financieros
Un equipo de finanzas genera el mismo informe base para oficinas en distintos países, cada una con los números formateados según su convención local en lugar de un formato fijo único.
Generación de facturas a gran escala
Un sistema de facturación formatea totales, impuestos y renglones según el locale del cliente de forma automática, sin plantillas manuales por mercado.
Catálogos de producto con precios regionales
Un feed de catálogo reformatea los mismos precios base para cada locale de tienda como parte de un proceso nocturno por lotes.
Preguntas frecuentes
¿Qué formatea exactamente esta API?
Toma un número, opcionalmente un código de moneda y un locale de destino, y devuelve el valor formateado con los separadores, la precisión decimal, la posición del símbolo y el redondeo correctos para ese locale.
¿También convierte monedas?
No, formatea un valor numérico dado para un locale; no realiza conversión de tipo de cambio, así que el resultado es predecible y fiel al número que envió.
¿Existe un plan gratuito?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Cuánto cuesta una solicitud?
$0.002 por solicitud, tarifa plana, sin componente por palabra porque no hay texto que procesar, y solo se cobran las tareas que terminan con éxito.
¿Qué locales admite?
Admite códigos de locale estándar como en-US, es-MX, de-DE, fr-FR y ja-JP; indica el locale de destino en la solicitud y se aplican las reglas de formato de esa región.
¿Puedo formatear lotes grandes de una vez?
Sí, las solicitudes se envían de forma asíncrona y los resultados se recogen por webhook, lo cual funciona bien para procesos por lotes como catálogos o corridas de facturación.
¿Qué pasa si una solicitud falla?
Se reintenta automáticamente hasta tres veces; si el fallo persiste recibe un error claro y nunca se le cobra por eso.
¿Qué tan rápida es la respuesta?
Como la tarea es liviana, el resultado suele llegar rápido, y la entrega es por webhook firmado o mediante un enlace firmado válido por 24 horas.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/locale/format-number \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/locale/format-number", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/locale/format-number",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/locale/format-number", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/locale/format-number", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"items": [
"valor-1",
"valor-2"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "locale.format_number",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_tokens | 20000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |