Categorizar productos
El feed de un proveedor casi nunca coincide con el árbol de categorías de su tienda, y ningún encargado de catálogo quiere clasificar a mano diez mil SKU contra una taxonomía anidada. Este endpoint toma el título, la descripción o los atributos de un producto y devuelve la ruta de categoría a la que pertenece, para que el inventario nuevo sea navegable y buscable desde el momento en que llega, en vez de quedar una semana en la carpeta de 'sin categorizar'.
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 problema que resuelve
Los equipos de catálogo en marketplaces, distribuidoras y tiendas heredan siempre el mismo desorden: un feed del Proveedor A llama a algo 'Zapatilla de running, trail' y el Proveedor B llama a la misma clase 'Calzado - Exterior - Trail Runner', y su vitrina necesita mapear ambos a un único nodo de su árbol de categorías. Hacerlo a mano para unas pocas docenas de artículos es viable; hacerlo para un feed de miles es un trabajo de tiempo completo, y es exactamente el vacío que cierra la categorización de productos.
Cómo se ve la solicitud
Envía un arreglo de productos —título, descripción y opcionalmente marca o atributos— junto con su taxonomía (una lista plana o un árbol anidado) a /text/product-categorize. La tarea es asíncrona: obtiene un task_id de inmediato y el arreglo categorizado llega a su webhook firmado o mediante un enlace firmado válido por 24 horas, con cada producto etiquetado en el nodo de taxonomía que mejor le corresponde y, cuando la decisión es cerrada entre dos nodos, con la opción alternativa incluida para que un encargado de catálogo resuelva en segundos y no desde cero.
Cómo interpreta un producto
Pondera el título, la descripción y los atributos estructurados en conjunto, en vez de buscar coincidencias de palabras en un solo campo, y por eso 'Trail Runner' y 'Zapato de trekking' pueden terminar en el mismo nodo aunque el texto casi no comparta palabras. Es el mismo razonamiento que hace un gerente de categoría al revisar una hoja de proveedor —reconocer la clase de producto detrás de nombres inconsistentes—, aplicado de forma pareja a todo un feed y no solo a las primeras filas antes de cansarse.
Cómo encaja en su flujo
Como su taxonomía forma parte de la solicitud y no es una lista fija incorporada, el mismo endpoint sirve al árbol de una tienda de moda y al de una distribuidora de ferretería sin reconfigurar nada de su lado: simplemente envía la estructura que ya mantiene. Los procesos de ingesta de feeds y los flujos de incorporación de vendedores en un marketplace pueden invocarlo como un paso más de una tubería mayor, con el webhook disparando la siguiente etapa automáticamente.
Límites honestos
Un producto genuinamente ambiguo —una multiherramienta que podría ir en 'Camping' o en 'Ferretería'— vuelve con su mejor coincidencia más esa opción alternativa, en lugar de una respuesta única con falsa seguridad, así su equipo mantiene una revisión liviana para el SKU que necesita un desempate humano. Es una decisión deliberada: la ubicación en categorías afecta el descubrimiento y los ingresos, así que adivinar en silencio en los casos difíciles no es aceptable.
Qué puede hacer con ella
Incorporación de vendedores en marketplace
Mapea automáticamente el feed crudo de un nuevo vendedor a la taxonomía de su marketplace antes de que sus publicaciones salgan en vivo.
Sincronización de catálogos de distribuidoras
Concilia los nombres de categoría de un proveedor con su árbol interno cada vez que se actualiza un feed de precio y existencias.
Proyectos de limpieza de PIM
Recategoriza un catálogo antiguo contra una taxonomía rediseñada en un solo lote en vez de un sprint de reetiquetado manual.
Expansión de catálogo a otros países
Encaja productos descritos en otro idioma o convención dentro de su estructura de categorías existente sin construir antes una capa de traducción.
Preguntas frecuentes
¿Cómo mapea esta api categorizar productos los artículos a mi taxonomía?
Incluye su taxonomía en la solicitud, y el título, la descripción y los atributos de cada producto se comparan contra ella para devolver el nodo de categoría que mejor encaja, con una alternativa cuando la decisión es cerrada.
¿Puedo usar un árbol de categorías anidado y no solo una lista plana?
Sí, se admiten tanto listas planas como árboles anidados, y la respuesta incluye la ruta completa de categoría para cada producto.
¿Hay una prueba 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ánto cuesta categorizar un catálogo grande?
$0.003 por solicitud más $0.0135 por ítem, así que categorizar 5,000 SKU tiene un costo fijo y calculable sin importar qué tan anidada sea su taxonomía.
¿Cómo se entregan los resultados?
La tarea corre de forma asíncrona; recibe un task_id de inmediato y los resultados categorizados llegan por su webhook firmado o por un enlace firmado válido por 24 horas.
¿Qué pasa con los productos ambiguos?
Se devuelven con su categoría de mejor coincidencia y una alternativa, en vez de una única respuesta con exceso de confianza, para que un encargado de catálogo resuelva rápido los casos límite.
¿Puedo enviar lotes grandes para importar un catálogo completo?
Sí, los feeds grandes son el caso de uso típico; envía el arreglo completo de productos en una llamada y el precio escala por ítem sin un límite arbitrario.
¿Funciona con catálogos en español u otros idiomas?
Sí, el modelo lee el título y la descripción en el idioma que envíe y los mapea a su taxonomía sin importar en qué idioma estén escritos los nombres de categoría.
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/text/product-categorize \
-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/text/product-categorize", {
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/text/product-categorize",
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/text/product-categorize", 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/text/product-categorize", 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": "text.product_categorize",
"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. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |