Documentación
Guía de integración
Publica una herramienta y los agentes de IA de Emmia podrán llamar a tu API durante una conversación para responder con tus datos o ejecutar acciones en tu sistema.
Introducción
Una herramienta es un endpoint HTTPS tuyo que Emmia invoca cuando el agente lo necesita. Tú la describes (qué hace y qué parámetros recibe); el modelo decide cuándo llamarla. No necesitas un SDK: todo se gestiona con llamadas HTTP autenticadas por OAuth2, o desde este portal.
Inicio rápido
- Crea tu cuenta de desarrollador y confirma tu correo.
- Crea una app en el panel y guarda su
client_idyclient_secret. - Obtén un
access_tokeny registra tu primera herramienta.
Autenticación (OAuth2)
La gestión de herramientas usa el flujo client_credentials. Intercambia tus credenciales por un access_token (válido 1 hora) y úsalo como Bearer en cada llamada.
curl -X POST https://api.emmia.io/api/dev/oauth/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=emmia_app_xxxx" \ -d "client_secret=yyyy" \ -d "scope=tools:read tools:write tools:publish"
{
"access_token": "eat_...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "tools:read tools:write tools:publish"
}Scopes disponibles: tools:read, tools:write, tools:publish.
Crear una herramienta
La descripción corta es lo que el modelo lee para decidir cuándo usarla: sé claro y específico. El endpoint debe ser HTTPS.
POST /api/dev/tools
Authorization: Bearer {access_token}
Content-Type: application/json
{
"name": "buscar_producto",
"description": "Busca productos en el catálogo de ACME por nombre o categoría.",
"endpoint": "https://api.acme.com/emmia/buscar",
"method": "POST",
"authType": "none",
"category": "ecommerce",
"parameters": [
{ "name": "query", "type": "string", "required": true,
"description": "Término de búsqueda" }
]
}Parámetros
Cada parámetro tiene name, type (string, number,boolean o array), description y required. El modelo completa estos valores a partir de la conversación y los envía a tu endpoint.
Recibir llamadas
Emmia hace una petición a tu endpoint con los parámetros del modelo más un objeto _emmia_contextcon el agente y la organización que originaron la llamada. Responde en JSON; el contenido se entrega al modelo.
// Express.js — tu servidor
app.post('/emmia/buscar', (req, res) => {
const { query, _emmia_context } = req.body;
// _emmia_context = { agentId, orgId, timestamp }
const results = miBase.buscar(query);
res.json({ results }); // se entrega tal cual al modelo
});Autenticar tu endpoint
Si tu API requiere credenciales, cada negocio las ingresa al instalar la herramienta. Emmia las guarda cifradas y las envía en cada llamada según el tipo que elijas:
- Bearer: cabecera
Authorization: Bearer … - API key: cabecera
X-API-Key: … - HMAC SHA-256: firma del cuerpo en
X-Emmia-SignatureconX-Emmia-Timestamp
Verificación de la firma HMAC en tu servidor:
const crypto = require('crypto');
const ts = req.header('X-Emmia-Timestamp');
const sig = req.header('X-Emmia-Signature'); // "sha256=..."
const expected = 'sha256=' + crypto
.createHmac('sha256', MI_CLAVE)
.update(`${ts}.${JSON.stringify(req.body)}`)
.digest('hex');
const ok = sig.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
if (!ok) return res.status(401).end();Publicar
Mientras está en draft, solo tú la ves. Al publicarla pasa a published y aparece en el catálogo para que cualquier negocio la habilite. Publica desde el panel o con POST /api/dev/tools/{toolId}/publish (requiere el scope tools:publish).
Referencia de la API
POST/api/dev/oauth/tokenObtener access_token · client_id/secretPOST/api/dev/toolsCrear herramienta · tools:writeGET/api/dev/toolsListar tus herramientas · tools:readGET/api/dev/tools/{id}Obtener una herramienta · tools:readPUT/api/dev/tools/{id}Actualizar · tools:writePOST/api/dev/tools/{id}/publishPublicar · tools:publishDELETE/api/dev/tools/{id}Eliminar · tools:writeLímites y buenas prácticas
- Responde rápido: el tiempo máximo por llamada es 30 segundos (8 s por defecto, configurable por herramienta).
- Devuelve respuestas concisas; se truncan a unos 3.000 caracteres.
- Tu endpoint no puede apuntar a direcciones internas: Emmia bloquea IPs privadas (anti-SSRF).
- Usa nombres de herramienta claros; el modelo los usa para decidir cuándo llamarlas.