Recuperar los datos de un gráfico
Un gráfico publicado como imagen estática encierra sus números en el instante en que se exporta el archivo, y no existe un botón de deshacer escondido dentro de un PNG. Este endpoint observa esa imagen y reconstruye la serie que hay detrás, devolviéndole etiquetas de eje, categorías y valores como datos con los que de verdad puede recalcular.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
El viaje sin retorno que hacen la mayoría de gráficos
Un gráfico suele nacer como números reales en una hoja de cálculo o herramienta de analítica, se renderiza una sola vez, y luego se comparte como imagen plana en un informe, una presentación o un archivo anual escaneado. A partir de ahí los valores originales desaparecen a menos que alguien encuentre el archivo fuente. Este endpoint revierte ese último paso leyendo el gráfico visual y recuperando los datos con los que se construyó.
Qué tipos de gráficos lee
Está construido en torno a los tipos de gráfico que dominan los informes de negocio: gráficos de barras, de líneas y de pastel, ya sea dibujados a mano en una herramienta de presentaciones o exportados desde software de analítica. Para cada uno identifica las etiquetas del eje o nombres de categoría, la leyenda si está presente, y el valor numérico ligado a cada barra, punto o porción, devolviéndolos como una serie estructurada en lugar de una imagen redibujada.
De dónde viene la precisión y dónde tiene límites
Leer valores a partir de una imagen renderizada es en el fondo un problema de estimación, no una consulta a una base de datos: el endpoint infiere el valor numérico más cercano que representa cada marca según su posición respecto al eje. Los gráficos con líneas de cuadrícula claras, etiquetas de datos impresas o una escala bien definida se extraen de forma más confiable que una captura de baja resolución de un gráfico sin eje etiquetado, así que tanto la calidad de la imagen como el diseño del gráfico influyen en el resultado.
La mecánica de la llamada
Envía la imagen del gráfico a POST /ocr/chart y recibe un task_id de inmediato, ya que la extracción corre de forma asíncrona. Los datos terminados llegan a su webhook firmado, o puede recuperarlos desde un enlace firmado que permanece válido por 24 horas, y un gráfico que no se pueda resolver tras tres intentos internos devuelve un error claro sin ningún cobro asociado.
Convertir informes antiguos en datos vivos
Los analistas lo usan para reconstruir en una hoja de cálculo comparable el gráfico de crecimiento publicado por un competidor, los investigadores extraen series numéricas de figuras en PDFs antiguos que nunca incluyeron un anexo de datos, y los flujos de herramientas internas pasan presentaciones trimestrales escaneadas por el endpoint para recuperar métricas que nadie volvió a exportar antes de archivarlas.
Qué puede hacer con ella
Comparación competitiva a partir de informes publicados
Un analista de mercado extrae las cifras anuales de ingresos detrás del gráfico de barras de un competidor en una presentación a inversionistas, en lugar de calcularlas a ojo.
Digitalización de figuras en PDFs académicos
Un investigador extrae la serie numérica de un gráfico de líneas en un artículo antiguo que nunca publicó su conjunto de datos original.
Recuperación de métricas de presentaciones archivadas
Un equipo de operaciones pasa antiguas diapositivas de revisión trimestral por el endpoint para reconstruir una hoja histórica de indicadores que nunca se guardó.
Auditoría de un desglose en gráfico de pastel
Un revisor financiero convierte un gráfico de pastel de asignación presupuestaria de un informe escaneado en porcentajes que puede recalcular y verificar.
Preguntas frecuentes
¿Qué devuelve realmente una API de extracción de datos de gráficos?
Devuelve las etiquetas del eje, las categorías y los valores numéricos detrás de un gráfico de barras, líneas o pastel como datos estructurados, no como una imagen redibujada.
¿Es gratuita?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuál es el precio?
$0.010 por solicitud más $0.0575 por imagen, y solo se cobra por tareas que se completan con éxito.
¿Qué tipos de gráfico admite?
Gráficos de barras, de líneas y de pastel son los tipos principales admitidos, cubriendo la mayoría de los gráficos que aparecen en informes de negocio y analítica.
¿Qué tan precisos son los números extraídos?
Los valores se estiman según la posición de cada marca respecto al eje, así que los gráficos con cuadrícula visible o etiquetas de datos impresas se extraen de forma más confiable que imágenes de baja resolución sin escala.
¿Cómo se entrega el resultado?
Llama a POST /ocr/chart para recibir un task_id de inmediato, y luego obtiene los datos estructurados por webhook firmado o por un enlace firmado válido durante 24 horas.
¿Qué pasa si la imagen del gráfico es muy pequeña o está borrosa?
El sistema reintenta internamente hasta tres veces, y si el gráfico sigue sin poder resolverse recibe un error claro en lugar de un cobro.
¿Puedo procesar un lote de imágenes de gráficos?
Sí, cada imagen de gráfico es su propia tarea asíncrona, así que puede enviar varias a la vez y recoger cada resultado conforme termina.
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/ocr/chart \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/ocr/chart", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ocr/chart",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ocr/chart", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ocr/chart", 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
{
"image": "https://ejemplo.com/imagen.jpg"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ocr.chart",
"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_mb | 25 |
max_pages | 10 |
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. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |