agentplace :: Agentplace para agentes y desarrolladores
# Lo que lee un agente en esta URL: el markdown de la página, con precio, stock y el grafo de producto. Los links siguen en la vista para agentes.
- ruta ..........
- /developers
- markdown ......
- /developers.md
- pedido ........
- GET · Accept: text/markdown
- estado ........
- 200 ok
- tokens ........
- ≈ 4.164
- humanos .......
- ver la página para personas
metadatos
- title .........
- Agentplace para agentes y desarrolladores
- description ...
- Conectá tu agente a 21 tiendas argentinas: MCP con forma UCP y las recomendaciones de SalesPilot en cada respuesta. Probalo en vivo. Sin registro ni claves.
- canonical .....
- /developers
- updated .......
- 2026-10-01
- Skill: /SKILL.md · sin MCP
- API:
https://agentplace.crossup.ai/api/v1 - OpenAPI: /openapi.json (3.1)
- MCP:
https://agentplace.crossup.ai/mcp(Streamable HTTP) - A2A:
https://agentplace.crossup.ai/a2a· agent card - Auth: No hace falta (auth.md)
- Contacto: hola@crossup.ai
Tu agente compra como un buen vendedor: busca en 21 tiendas argentinas y cada respuesta trae las recomendaciones de SalesPilot (next[]), lo que combina, la rutina, un paso más y la alternativa con stock, con su porqué. La compra la confirma la persona en el checkout de cada tienda. Empezá por /SKILL.md; MCP, API, UCP y A2A, sin registro y sin claves.
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. Lectura (GET y HEAD) más POST /api/v1/checkouts (ver Crear un checkout), 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). El pago y el envío los hace la tienda en su propio checkout; para las tiendas que lo aceptan, el carrito lo podés armar vos (abajo). Agentplace nunca cobra.
Crear un checkout (carrito real)
POST /api/v1/checkouts arma un carrito real en el checkout de la tienda con las líneas que mandes y devuelve checkout_url: ahí el comprador revisa el carrito, elige el envío y paga. Una tienda por pedido, hasta 20 líneas y hasta 10 unidades por línea. Antes de crearlo leemos precio y stock en vivo. Sólo para las tiendas con el checkout oficial de Tiendanube; el resto responde unsupported_store con el buy_url de cada línea. Lo mismo está en MCP (create_checkout) y en A2A (skill create_checkout, sólo como data part).
checkout_urles un link portador. Quien lo abre ve el carrito y, después, el email y la dirección que cargue el comprador. Pasáselo sólo a esa persona: no lo publiques, no lo guardes en logs y no lo reuses para otra.- Cada pedido es un carrito nuevo en la tienda. Llamalo cuando el comprador ya eligió qué comprar; para reintentar el mismo carrito mandá
Idempotency-Key(oidempotency_key): la misma clave con las mismas líneas desde el mismo cliente devuelve el mismo checkout durante 10 minutos. - Límite: 5 checkouts por minuto por IP, compartido entre la API, MCP y A2A. Sin CORS: es para servidores y agentes, no para scripts en páginas de terceros.
- Respuestas:
201conkind: checkout;200conunsupported_store,below_minimum(lo que falta para la compra mínima y productos de la misma tienda para completarla) oline_issues(no se creó nada: corregí cada línea, por ejemplo elegívariantcon los ids que vienen envariants).
curl -s -X POST https://agentplace.crossup.ai/api/v1/checkouts \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: pedido-7f3a9c21' \
-d '{"store":"vitalis-navitas","lines":[{"product":"<id o handle>","variant":"<id de variante>","quantity":1}]}'
Servidor MCP
https://agentplace.crossup.ai/mcp es un servidor Model Context Protocol (abre en otra pestaña) remoto: Streamable HTTP, sin estado y sin autenticación. Su tarjeta está en /.well-known/mcp/server-card.json.
| Tool | Para qué |
|---|---|
search_catalog | Buscar con forma UCP ({catalog:{query, filters, pagination}}): productos con stock, messages[] y next[] con las recomendaciones de SalesPilot. |
lookup_catalog | Hasta 50 productos por GID, tienda/id o URL (de Agentplace o de la tienda), con su next[]. |
get_product | Un producto con todas sus opciones; con selected elige talle o color y dice qué hay. Trae next[]. La forma original ({store, product}) sigue andando. |
get_recommendations | SalesPilot por momento (pdp, add_to_cart, cart, search, home, out_of_stock): lo mismo que GET /api/v1/recommendations. |
search_products | La búsqueda original, con filtros (tienda, departamento, precio, ofertas, stock). |
list_stores | Las tiendas, su rubro, cuántos productos tienen y su compra mínima. |
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). |
create_checkout | Arma un carrito real en el checkout de la tienda y devuelve su checkout_url (link personal del comprador). Ver Crear un checkout. |
# 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 (abre en otra pestaña): 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; con la skill create_checkout (sólo como data part) arma el carrito en las tiendas que lo aceptan, y nunca cobra. 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 (abre en otra pestaña) (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}}'
Feeds de producto
El catálogo completo, una fila por variante, en los dos formatos que usan los asistentes de compra: OpenAI (spec de file upload, JSONL comprimido) y Google Merchant Center (RSS 2.0 con g:, comprimido), con las relaciones del Storegraph como related_product. Cada tienda tiene además los suyos, con links a su dominio, en /feeds/stores/<tienda>/. Qué campo sale de dónde y cómo se manda a cada plataforma: /feeds.
# Las primeras filas, legibles
curl -s https://agentplace.crossup.ai/feeds/openai-sample.jsonl | head -n 1
# El feed completo de Google
curl -s https://agentplace.crossup.ai/feeds/google-merchant.xml.gz | gunzip | head -n 40
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/storegraph | Manifiesto del Storegraph 0.1; los grafos por tienda están en /storegraph/<tienda>.jsonl y se exploran en /grafo/<tienda>. |
| /.well-known/ucp | Perfil UCP: catálogo (búsqueda y lookup), sin checkout. |
| /feeds | Feeds de producto para OpenAI (/feeds/openai.jsonl.gz) y Google Merchant Center (/feeds/google-merchant.xml.gz), con related_product del Storegraph. |
| /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.
forbidden-origin · 403
El pedido viene de una página web de otro origen (Origin o Sec-Fetch-Site: cross-site). Crear un checkout arma un carrito real y devuelve un link portador, así que no se puede desde el navegador: llamalo desde tu servidor o desde un agente del lado del servidor, o mandá al comprador al buy_url de cada producto.
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 (GET o HEAD) salvo /api/v1/checkouts, que sólo acepta POST. 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.