Empezá en 30 segundos
Tres pedidos alcanzan para entender el modelo: buscar en todas las tiendas, abrir un producto con su vecindario en el grafo y listar las tiendas. Las respuestas son JSON; los precios están en la moneda de cada tienda (ARS hoy).
# Buscar en todas las tiendas, sólo con stock
curl -s "https://agentplace.crossup.ai/api/v1/products?q=aceite%20de%20limpieza&in_stock=true"
# Un producto con su vecindario: complementos, sets, un paso más, alternativas
curl -s "https://agentplace.crossup.ai/api/v1/products/kosmos/196162638"
# Las tiendas, con su cobertura del grafo
curl -s "https://agentplace.crossup.ai/api/v1/stores"¿Preferís MCP? Sumá Agentplace a Claude Code con claude mcp add --transport http agentplace https://agentplace.crossup.ai/mcp y preguntale por un producto.
API REST
Base https://agentplace.crossup.ai/api/v1. Sólo lectura (GET y HEAD), JSON, CORS abierto (Access-Control-Allow-Origin: *) y sin autenticación. La descripción completa, con cada campo, está en OpenAPI 3.1; el catálogo de APIs del dominio, en /.well-known/api-catalog (RFC 9727).
| Pedido | Qué devuelve |
|---|---|
GET /api/v1/stores | Las tiendas: nombre, rubro, país, moneda, sitio, cantidad de productos y cobertura del grafo. |
GET /api/v1/stores/{store} | Una tienda con sus categorías. |
GET /api/v1/products | Búsqueda y listado en todas las tiendas, con filtros y paginación (ver abajo). |
GET /api/v1/products/{store}/{id} | Un producto (por id numérico de Tiendanube o por handle) con variantes, imágenes y su vecindario en el grafo. |
GET /api/v1/graph | El manifiesto del Storegraph: tiendas, archivos y cuántos nodos, relaciones y sets tiene cada una. |
GET /api/v1/graph/{store} | El grafo de una tienda en JSON: nodos, relaciones y sets. |
GET /api/v1/status | Estado del servicio y fecha de los datos. |
Buscar y filtrar productos
| Parámetro | Qué hace |
|---|---|
q | Texto libre; no distingue mayúsculas ni tildes (colchon encuentra colchón). |
store | Id de tienda (kosmos, ganga-home, …). |
department | Departamento del marketplace (belleza, hogar-y-deco, descanso, …). |
category | Slug de categoría de la tienda (va con store). |
min_price · max_price | Rango de precio, en la moneda de la tienda. |
on_sale · in_stock · free_shipping | true para quedarte sólo con ofertas, con stock o con envío gratis. |
sort | relevance (por defecto), price_asc, price_desc o discount. |
page · per_page | Paginación; la respuesta trae el total y los links a la página siguiente y anterior. |
El vecindario de un producto
GET /api/v1/products/{store}/{id} devuelve el producto y lo que lo rodea en el grafo. Cada vecino trae su relation y el reason en lenguaje natural, el mismo que muestra la página. Sólo aparecen relaciones que pasaron los umbrales de calidad: un bloque vacío significa que no hay una recomendación confiable, no que falten datos.
| Bloque | Qué significa |
|---|---|
complements | Se usan juntos: lo que conviene sumar. |
sets | Kits y rutinas que la tienda vende o que el grafo arma con productos que van juntos. |
step_up | Un paso más: la versión superior o el mismo producto en pack. |
alternatives | Otra opción para la misma necesidad; con el producto sin stock, primero las que sí tienen. |
other_versions | El mismo producto en otro color, talle o presentación. |
Cada producto trae además url (su página en Agentplace), markdown_url (la misma página en markdown) y buy_url, el link para comprar.
Para comprar: buy_url
buy_url apunta a /go/<tienda>/<id> y redirige a la página del producto en la tienda, con atribución utm (y ?via=api, mcp, a2a, webmcp o ucp según desde dónde lo pediste). La compra, el pago y el envío los hace la tienda en su propio checkout: la API no crea carritos ni cobra.
Servidor MCP
https://agentplace.crossup.ai/mcp es un servidor Model Context Protocol remoto: Streamable HTTP, sin estado y sin autenticación. Su tarjeta está en /.well-known/mcp/server-card.json.
| Tool | Para qué |
|---|---|
search_products | Buscar en todas las tiendas con texto y filtros (tienda, departamento, precio, ofertas, stock). |
get_product | Un producto con variantes, stock y su vecindario en el grafo, con el motivo de cada relación. |
list_stores | Las tiendas, su rubro y cuántos productos tienen. |
get_storegraph | El grafo de una tienda: tamaño, sets y el archivo completo; o las relaciones de un producto. |
get_buy_link | El link para comprar un producto en su tienda (no arma carritos). |
# Claude Code
claude mcp add --transport http agentplace https://agentplace.crossup.ai/mcp
# Probarlo con el inspector oficial (elegí "Streamable HTTP" y pegá la URL)
npx @modelcontextprotocol/inspector// Cursor: ~/.cursor/mcp.json
{
"mcpServers": {
"agentplace": { "url": "https://agentplace.crossup.ai/mcp" }
}
}En claude.ai: Settings → Connectors → Add custom connector y pegá https://agentplace.crossup.ai/mcp.
Agente A2A
Agentplace también es un agente A2A: otros agentes le hablan por JSON-RPC en https://agentplace.crossup.ai/a2a y les responde qué productos convienen, con su vecindario y el link de compra. Responde con datos del catálogo y del grafo, nunca crea carritos ni pagos. Su agent card describe las skills y la versión del protocolo.
curl -s https://agentplace.crossup.ai/a2a \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"message/send","params":{"message":{"role":"user","messageId":"m1","parts":[{"kind":"text","text":"aceite de limpieza facial con stock"}]}}}'Universal Commerce Protocol (UCP)
Para plataformas que hablan UCP (2026-08-25): el perfil declara la capacidad de catálogo (dev.ucp.shopping.catalog.search y .lookup) sobre REST en https://agentplace.crossup.ai/ucp/v1. Cada variante trae su seller (la tienda que vende), precio en unidades menores (centavos de ARS) y un url que la abre en la tienda. No hay checkout UCP: la compra es en la tienda de cada marca.
curl -s -X POST https://agentplace.crossup.ai/ucp/v1/catalog/search \
-H 'Content-Type: application/json' \
-H 'UCP-Agent: profile="https://tu-plataforma.example/.well-known/ucp"' \
-d '{"query":"sábanas 2 plazas","filters":{"price":{"max":6000000}},"pagination":{"limit":5}}'En el navegador: WebMCP
Cada página de Agentplace registra sus tools en navigator.modelContext cuando el navegador lo soporta: un agente que navega el sitio puede buscar productos, leer el producto que está viendo y pedir el link de compra sin tocar el DOM.
Descubrimiento
| Archivo | Qué es |
|---|---|
| /llms.txt | Índice para modelos: cuándo usar Agentplace, tiendas y links. |
| /openapi.json | OpenAPI 3.1 de la API. |
| /.well-known/api-catalog | Catálogo de APIs (RFC 9727). |
| /.well-known/mcp/server-card.json | Tarjeta del servidor MCP. |
| /.well-known/agent-card.json | Agent card A2A. |
| /.well-known/agent-skills/index.json | Agent Skills con su digest. |
| /.well-known/ai-catalog.json | Catálogo de recursos para agentes (ARD). |
| /.well-known/product-graph | Manifiesto del Storegraph 0.1; los grafos por tienda están en /product-graph/<tienda>.jsonl. |
| /.well-known/ucp | Perfil UCP: catálogo (búsqueda y lookup), sin checkout. |
| /auth.md | Cómo autenticarse: no hace falta. |
| /sitemap.xml | Sitemap de todas las páginas. |
Toda página tiene su versión markdown: agregá .md a la URL (la home es /index.md) o pedila con Accept: text/markdown.
Límites, caché y versiones
- Límites.
/api/v1/productsacepta 120 pedidos por minuto por IP (por instancia del servidor). Cada respuesta traeRateLimit-PolicyyRateLimit(IETF); un429sumaRetry-After. Tiendas y grafo salen de la caché del CDN y no tienen límite. - Caché. Cada respuesta dice cuánto se puede cachear en
Cache-Control. Los datos se actualizan una vez por día;GET /api/v1/statusdice de cuándo son. - Versiones. La ruta lleva la versión mayor (
/api/v1). Un cambio incompatible sale en/api/v2; antes de retirar algo lo anunciamos con los encabezadosDeprecationySunsety en esta página. - Descripción en cada respuesta. Toda respuesta de la API trae
Linka la descripción (rel="service-desc",/openapi.json) y a esta documentación (rel="service-doc").
Errores
Los errores de la API, del servidor MCP y del agente A2A usan RFC 9457 (application/problem+json): type apunta a la sección de abajo, y el cuerpo trae title, status, detail, code (por ejemplo rate_limited), hint con qué hacer y instance con la ruta del pedido.
invalid-parameter · 400
Un parámetro no tiene el formato esperado (por ejemplo min_price=barato). detail dice cuál; corregilo y repetí el pedido.
store-not-found · 404
No hay una tienda con ese id. La lista completa está en GET /api/v1/stores.
product-not-found · 404
La tienda existe pero no tiene ese producto publicado hoy. Buscalo de nuevo con GET /api/v1/products?q=…&store=….
not-found · 404
La ruta no existe en la API. Revisá la ruta contra /openapi.json.
method-not-allowed · 405
La API es de lectura: usá GET (o HEAD). El encabezado Allow dice qué métodos acepta la ruta.
rate-limited · 429
Pasaste el límite de pedidos por minuto. Esperá los segundos que indica Retry-After y seguí.
not-acceptable · 406
El encabezado Accept excluye JSON. Pedí application/json (o */*).
internal-error · 500
Algo falló de nuestro lado. Reintentá en unos segundos; si se repite, escribinos con el instance de la respuesta.
Uso y atribución
Todo es gratis y de lectura. Pedimos citar a Agentplace y a la tienda cuando muestres sus datos, y mandar a comprar con buy_url. Detalle en los términos de uso; qué medimos, en la política de privacidad. Para dudas, ideas o más volumen: hola@crossup.ai.