Plexa
Capa de descubrimiento agentivo para negocios locales en México y LATAM
Documentación
¿Nuevo en Plexa? Lee qué es Plexa primero, luego comienza abajo.
Inicio rápido
- Crea una cuenta gratuita
Regístrate en joinplexa.com/register (enlace de correo o Google). Al iniciar sesión se emite tu token de acceso a la cuenta — ese es el <your-account-token> que se usa para generar una clave API en el siguiente paso. ¿Necesitas ayuda? hola@joinplexa.com.
- Genera una clave API (gratuita)
curl -X POST https://api.joinplexa.com/v1/builders/register \
-H "Authorization: Bearer <your-account-token>" \
-H "Content-Type: application/json" \
-d '{"name": "my-agent"}'
Devuelve una clave permanente plx_live_… — se muestra una sola vez, así que guárdala:
{
"api_key": "plx_live_9f3c...e21a",
"name": "my-agent",
"tier": "free",
"credits_limit": 5000,
"rate_limit_per_min": 60
}
- Busca negocios
curl "https://api.joinplexa.com/v1/search?vertical=dental&city=Tijuana&limit=20" \
-H "Authorization: Bearer plx_live_..."
- O conéctate vía MCP — un solo comando
claude mcp add --transport http plexa https://api.joinplexa.com/mcp/
Transporte SSE (clientes heredados):
claude mcp add --transport sse plexa https://api.joinplexa.com/mcp/sse
O agrégalo manualmente a tu configuración de MCP:
{
"mcpServers": {
"plexa": {
"type": "http",
"url": "https://api.joinplexa.com/mcp/"
}
}
}
- O instala la habilidad (un enrutador de Plexa para tu agente)
npx skills add incrematica/plexa-mcp
Instala la habilidad use-plexa: cuándo recurrir a Plexa, las 7 herramientas y el patrón búsqueda → get_business → contacto.
Endpoints
URL base: https://api.joinplexa.com
GET/v1/search Busca negocios por vertical, ciudad y geo
GET/v1/businesses/{slug} Detalle del negocio por slug
GET/v1/businesses/{id}/queries Feed de actividad del agente — requiere autenticación
GET/v1/verticals Lista todas las verticales disponibles
GET/v1/stats/public Estadísticas de la plataforma (sin autenticación)
POST/v1/builders/register Registra un agente y obtén una clave API
GET /v1/search — parámetros de consulta
Param Type Default Description
q string — Consulta de texto libre sobre nombre y descripción
vertical string — Slug de vertical (dental, restaurant, medical…)
city string — Nombre de la ciudad
state string — Estado / provincia
country string all — Código de país ISO (MX, CO, AR…). Omítelo para buscar en todos los países del registro.
lat, lng float — Centro geográfico; combinar con radius_km
radius_km float 15 — Radio de búsqueda desde lat/lng, en km
lang string — Filtro de idioma (es, en)
capabilities string — Nombres de capacidades separados por comas
min_trust_score int 0 — Puntuación de confianza mínima (0–100)
claimed bool — Solo reclamados (true) o no reclamados (false)
limit int 20 — Resultados por página (1–100)
offset int 0 — Desplazamiento de paginación
Ejemplo — búsqueda
curl "https://api.joinplexa.com/v1/search?vertical=dental&city=Tijuana&limit=20" \
-H "Authorization: Bearer plx_live_..."
{
"results": [
{
"id": "b1a2c3d4-5e6f-7890-abcd-ef1234567890",
"slug": "clinica-dental-norte-tijuana",
"name": "Clínica Dental Norte",
"vertical": "dental",
"city": "Tijuana",
"state": "B.C.",
"country": "MX",
"description_short": "Dentist en Tijuana, B.C.",
"phone_e164": "+525500000000",
"languages": ["es"],
"capabilities": [
{
"name": "book_appointment",
"label": "Agendar cita",
"action_type": "whatsapp",
"action_url": "https://wa.me/525500000000?text=Hola...",
"description": "Envía WhatsApp para agendar cita"
}
],
"trust_score": 8,
"claimed": false,
"tier": "free",
"aggregate_rating_human": null,
"review_count_human": 0,
"specialties": [],
"distance_km": null
}
],
"total": 42,
"limit": 20,
"offset": 0,
"filters_applied": { "vertical": "dental", "city": "Tijuana", "country": "MX" }
}
Ejemplo — detalle de negocio
curl "https://api.joinplexa.com/v1/businesses/clinica-dental-norte-tijuana" \
-H "Authorization: Bearer plx_live_..."
{
"slug": "clinica-dental-norte-tijuana",
"name": "Clínica Dental Norte",
"vertical": "dental",
"city": "Tijuana",
"state": "B.C.",
"country": "MX",
"phone_e164": "+525500000000",
"website": "https://example.com",
"languages": ["es"],
"opening_hours": [
{ "days": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "09:00", "closes": "19:00" },
{ "days": ["Saturday"], "opens": "09:00", "closes": "14:00" }
],
"services": [
{ "name": "Limpieza dental", "price_amount": 600, "price_currency": "MXN", "duration_minutes": 45 }
],
"faqs": [
{ "question": "¿Atienden urgencias?", "answer": "Sí, con cita el mismo día." }
],
"capabilities": [
{ "name": "book_appointment", "action_type": "whatsapp", "action_url": "https://wa.me/525500000000?text=Hola..." }
],
"trust_score": 8,
"tier": "free",
"claimed": false,
"profile_completeness": 62
}
Herramientas MCP
Conecta Plexa como servidor MCP y llama a las herramientas directamente desde cualquier agente.
claude mcp add --transport http plexa https://api.joinplexa.com/mcp/
O dale a tu agente la habilidad de enrutador:
npx skills add incrematica/plexa-mcp
MCPRESTllms.txtschema.org
search_businesses Busca por vertical, ciudad, radio y capacidades
get_business Detalle completo del negocio, incluyendo horarios y servicios
get_business_hours Horario de apertura para un negocio específico
get_business_services Catálogo de servicios y precios
get_business_faqs Preguntas frecuentes aprobadas por el propietario para un negocio
contact_business Canales de contacto + URLs de acción de capacidades (devuelve enlaces; no envía)
list_verticals Enumera todas las verticales del registro
Ejemplo — get_business_faqs
// get_business_faqs(slug="clinica-dental-norte-tijuana")
{
"slug": "clinica-dental-norte-tijuana",
"name": "Clínica Dental Norte",
"faqs": [
{ "question": "¿Atienden urgencias?", "answer": "Sí, atendemos urgencias con cita el mismo día." },
{ "question": "¿Aceptan seguros dentales?", "answer": "Trabajamos con las principales aseguradoras nacionales." }
]
}
contact_business(slug) devuelve los canales de contacto del negocio — teléfono, whatsapp_url (un enlace profundo de WhatsApp), sitio web, correo electrónico (solo negocios reclamados) y capacidades con action_urls listas para usar. Devuelve enlaces para que tu agente actúe — no envía el mensaje en sí.
Errores
Los errores devuelven un cuerpo JSON con la forma { "detail": "…" } y el estado HTTP correspondiente.
// 401 — missing / invalid / revoked API key
{ "detail": "API key inválida o revocada" }
// 429 — per-minute rate limit
{ "detail": "Rate limit excedido (por minuto)" }
// 429 — monthly credits exhausted
{ "detail": "Créditos mensuales agotados" }