Unaluka Hunter API v1

Catálogo importable de Amazon US, cotizado en soles. Texto libre en español o inglés; productos publicables con precio final en PEN.

Arranque

La key la entrega Unaluka y viaja en el header X-Api-Key. Nunca en la URL: una key en el query string queda en los access logs, en los nuestros y en los tuyos.

curl -H "X-Api-Key: <tu-key>" "https://apihunter.unaluka.com/v1/me"
curl -H "X-Api-Key: <tu-key>" "https://apihunter.unaluka.com/v1/search?q=cafetera+espresso"

Empezá por /v1/me: confirma que la key anda y te dice tu comisión vigente y tu límite por minuto, sin gastar nada.

Los endpoints

RutaPara qué
GET /v1/search Buscar y cotizar. La lista liviana, para decidir qué publicar.
GET /v1/products/{asin} El detalle: galería, EAN/UPC y las variantes de la familia — lo que hace falta para crear la ficha en tu catálogo.
GET /v1/me Quién sos, tu comisión y tu consumo del mes.

El campo por campo, con tipos y ejemplos, está en el OpenAPI — sirve para generar un cliente en tu lenguaje sin escribirlo a mano.

Lo que prometemos sobre el precio

price ya incluye tu comisión

Es el precio final en PEN, con la comisión de tu contrato ya adentro y terminado en 5 o en 9. No le sumes nada encima.

price_observed_at — cuándo vimos el precio de origen

No describe el producto: describe la calidad de la respuesta. Normalmente son segundos. Si vas a publicar un lote grande, filtrá por este campo en vez de confiar a ciegas — es lo que te avisa si en algún momento nuestra fuente se degrada, sin que dependa de que nosotros nos acordemos de avisarte.

valid_until — es una promesa, no una observación

Sostenemos ese price hasta esa hora aunque el precio de origen se mueva. Es el único campo del que somos responsables.

Guardá el quote_id: es con lo que reconstruimos después qué precio te dimos y cuándo. Identifica la búsqueda, así que los ítems de una misma respuesta lo comparten — para señalar una línea, mandanos el par quote_id + asin.

Un producto que no podemos cotizar no viene con precio.

En /v1/search directamente no aparece en items, y se cuenta en meta.without_price — o sea que si ese número no es cero, encontramos más de lo que ves.

En /v1/products/{asin} sí te lo devolvemos, porque pediste ese ASIN y el producto existe, pero sin ninguno de los cinco campos del precio. Van los cinco o ninguno.

Nunca vas a recibir un precio estimado disfrazado de cotización. Preferimos no darte un número antes que darte uno que no podemos sostener.

Stock

availability es siempre "importacion": nada está en stock local, todo se importa bajo pedido.

Disponibilidad real — extensión opcional

Si Unaluka te la habilitó, GET /v1/products/{asin}?availability=1 consulta en vivo la oferta que gana el buy box y la devuelve en availability_detail.

curl -H "X-Api-Key: <tu-key>" \
  "https://apihunter.unaluka.com/v1/products/B0GV19QWX2?availability=1"

Pedila al comprometer una venta, no al armar el catálogo. Tiene un costo por consulta: confirmar cada orden es barato, recorrer 500 productos no.

Y null no significa «agotado»: significa que no pudimos preguntar. Si no lo pediste —o no lo tenés habilitado— el campo directamente no viene, y eso tampoco es un error.

Los tres valores (status, sold_by, shipping_time) son texto crudo de Amazon en inglés. No los normalizamos: cualquier traducción nuestra sería una interpretación.

Errores

Todos traen error —un código estable, apto para hacer switch— y message, cuyo texto puede cambiar.

CódigoQué pasóQué hacer
401Falta la key, es inválida, está vencida o fue revocada. El campo error dice cuál.Revisá el header. Si dice key_revocada, pedinos una nueva.
404No encontramos ese ASIN.Nada: no lo tenemos.
429Pasaste tu límite por minuto.Esperá lo que diga retry_after_s.
503source_unavailable — no pudimos consultar la fuente.Reintentá en unos minutos. No vacíes tu catálogo: es un problema nuestro, no una búsqueda sin resultados.

Esa última distinción es la que más te puede costar. Una búsqueda sin resultados devuelve 200 con items: []; un problema nuestro devuelve 503. Nunca vas a recibir una lista vacía porque algo se nos rompió.

Versionado

Agregamos campos sin avisar — tu cliente los tiene que ignorar. Sacar o renombrar un campo, o cambiar el significado de uno existente, es /v2.