Saltar al contenido principal

Feedback API

Almirant expone una API REST publica (no MCP) para la ingesta de feedback desde widgets embebidos en sitios web o desde integraciones servidor-a-servidor. Esta API es independiente del servidor MCP y no requiere una API Key de Almirant.

Autenticacion

La Feedback API utiliza un sistema de autenticacion basado en Public Keys y widget tokens:

  • Public Key (pk_...): Identifica la fuente de feedback. Se obtiene al crear una fuente de feedback en Almirant y es segura para exponer en el frontend.
  • Widget Token: Token temporal firmado que se obtiene mediante el endpoint bootstrap. Tiene una duracion limitada y se usa para validar las peticiones de ingesta.

Endpoints

GET /feedback/widget/bootstrap

Inicializa el widget de feedback. Devuelve la configuracion de la fuente y un token temporal firmado necesario para enviar feedback.

Query Parameters:

NombreTipoRequeridoDescripcion
publicKeystringSiPublic Key de la fuente de feedback (pk_...)

Ejemplo de peticion:

curl "https://api.almirant.ai/feedback/widget/bootstrap?publicKey=pk_abc123def456"

Respuesta exitosa (200):

{
"success": true,
"data": {
"source": {
"publicKey": "pk_abc123def456",
"type": "widget",
"name": "Web App Feedback"
},
"token": "eyJzb3VyY2VJZCI6Ii4uLiJ9.a1b2c3d4e5f6",
"expiresAt": 1708531200,
"config": {
"requireCaptcha": true
}
}
}

Errores:

CodigoDescripcion
404Fuente de feedback no encontrada para la publicKey proporcionada
403El origen (dominio) de la peticion no esta en la lista de dominios permitidos

POST /feedback/ingest

Envia un item de feedback. Requiere el token obtenido del endpoint bootstrap.

Headers:

Content-Type: application/json

Body:

NombreTipoRequeridoDescripcion
publicKeystringSiPublic Key de la fuente de feedback
tokenstringSiWidget token obtenido de bootstrap
messagestringSiContenido del feedback (1-5000 caracteres)
categorystringNoCategoria: bug, feature_request, improvement, question, praise, other
emailstringNoEmail del remitente
pageUrlstringNoURL de la pagina donde se envio el feedback
localestringNoIdioma/locale del usuario
captchaTokenstringNoToken de hCaptcha (requerido si la fuente tiene captcha habilitado)

Ejemplo de peticion:

curl -X POST "https://api.almirant.ai/feedback/ingest" \
-H "Content-Type: application/json" \
-d '{
"publicKey": "pk_abc123def456",
"token": "eyJzb3VyY2VJZCI6Ii4uLiJ9.a1b2c3d4e5f6",
"message": "El formulario de registro no valida emails correctamente",
"category": "bug",
"email": "[email protected]",
"pageUrl": "https://miapp.com/registro",
"locale": "es"
}'

Respuesta exitosa (201):

{
"success": true,
"data": {
"id": "fb-uuid-001",
"status": "new",
"createdAt": "2025-02-15T10:30:00.000Z"
}
}

Errores:

CodigoDescripcion
400Token de captcha invalido o ausente (cuando captcha es requerido)
401Widget token invalido o expirado
403El origen (dominio) de la peticion no esta permitido
404Fuente de feedback no encontrada
409Feedback duplicado detectado (mismo contenido enviado recientemente)
429Rate limit excedido

Flujo completo de integracion

1. Widget se carga en la pagina del usuario
|
2. GET /feedback/widget/bootstrap?publicKey=pk_...
|-- Obtiene token temporal + configuracion
|
3. Usuario escribe feedback y envia
|
4. POST /feedback/ingest
|-- publicKey + token + message + metadata
|
5. Feedback aparece en Almirant como item nuevo

Protecciones

La API incluye las siguientes protecciones:

  • Validacion de origen: Solo acepta peticiones desde los dominios configurados en la fuente de feedback (soporta wildcards como *.midominio.com)
  • Widget tokens firmados: Tokens HMAC-SHA256 con expiracion temporal
  • Rate limiting: Limita el numero de peticiones por IP y fuente dentro de una ventana temporal
  • Deduplicacion: Detecta y rechaza feedback duplicado enviado recientemente (basado en hash SHA-256 del contenido normalizado)
  • hCaptcha: Verificacion de captcha opcional por fuente (habilitada por defecto)

Categorias de feedback

CategoriaDescripcion
bugReporte de error o mal funcionamiento
feature_requestSolicitud de nueva funcionalidad
improvementSugerencia de mejora sobre funcionalidad existente
questionPregunta o solicitud de informacion
praiseComentario positivo
otherCategoria por defecto cuando no se especifica

Integracion servidor-a-servidor

Para integraciones desde backend (sin widget), el flujo es el mismo: primero llama a bootstrap para obtener un token y luego envia el feedback a ingest. La diferencia es que debes asegurarte de que el dominio de origen este en la lista de permitidos de la fuente de feedback, o configurar la fuente sin restricciones de dominio.

Vincular feedback con ideas

El feedback ingresado puede vincularse a items del Idea Hub usando el MCP tool link_feedback_to_idea_item. Esto crea trazabilidad entre el feedback de usuarios y las decisiones de producto.