Reten Docs
Resultados de Actividades

Crear Resultado de Actividad

Crear el resultado de una actividad de tarea.

POST /api/activity-results/tasks

Crea un resultado para una actividad de tarea desde la app interna de admin/operador. Los resultados pueden vincularse a una actividad existente de Reten (con activity_id) o crearse como entradas independientes (omitiéndolo).

Auth: Requerida — header Authorization: Bearer <token> + x-tenant-id, con el permiso SUBMIT_ACTIVITY_RESULT.

Este es el endpoint interno. Los proveedores externos usan el endpoint de integración POST /api/integration/activity-results/tasks, que tiene otra forma de request y se autentica con x-api-key.

Cuerpo de la Solicitud

Todos los campos son snake_case.

CampoTipoRequeridoDescripción
activity_idUUIDNoID de actividad en Reten. Omitir para crear un resultado STANDALONE no vinculado a una actividad existente.
commerce_idUUIDNoID interno del comercio en Reten.
channelenumNoCanal por el que se accionó la actividad. Uno de SALESMAN, CALLCENTER, WHATSAPP, EMAIL, SMS, PUSH.
resultstringCódigo del tipo de resultado (ej., success, not_home). Patrón ^[a-zA-Z0-9_-]+$, máx 100 caracteres.
commentstringNoComentario de texto libre, máx 500 caracteres.
future_scheduled_atISO 8601CondicionalRequerido solo cuando el tipo de resultado seleccionado exige una fecha de seguimiento.

Ejemplo

curl -X POST https://api.reten.ai/api/activity-results/tasks \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "activity_id": "ee0e8400-e29b-41d4-a716-446655440000",
    "channel": "SALESMAN",
    "result": "success",
    "comment": "Order placed successfully"
  }'
const response = await fetch("https://api.reten.ai/api/activity-results/tasks", {
  method: "POST",
  headers: {
    "Authorization": "Bearer <token>",
    "x-tenant-id": "<tenant-id>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    activity_id: "ee0e8400-e29b-41d4-a716-446655440000",
    channel: "SALESMAN",
    result: "success",
    comment: "Order placed successfully",
  }),
});
const result = await response.json();
import requests

response = requests.post(
    "https://api.reten.ai/api/activity-results/tasks",
    headers={
        "Authorization": "Bearer <token>",
        "x-tenant-id": "<tenant-id>",
    },
    json={
        "activity_id": "ee0e8400-e29b-41d4-a716-446655440000",
        "channel": "SALESMAN",
        "result": "success",
        "comment": "Order placed successfully",
    },
)
result = response.json()

Respuesta 201 Created

El endpoint interno retorna directamente la entidad enriquecida del resultado de actividad. El subconjunto representativo:

{
  "id": "770e8400-e29b-41d4-a716-446655440000",
  "source": "RETEN_ACTIVITY",
  "origin": "PLATFORM",
  "activityId": "ee0e8400-e29b-41d4-a716-446655440000",
  "commerceId": "c1d2e3f4-a5b6-7890-cdef-1234567890ab",
  "resultStatus": "COMPLETED",
  "occurredAt": "2026-04-11T10:30:00.000Z",
  "createdAt": "2026-04-11T10:30:05.000Z",
  "updatedAt": "2026-04-11T10:30:05.000Z",
  "taskDetails": {
    "comment": "Order placed successfully",
    "futureScheduledAt": null,
    "result": {
      "code": "success",
      "label": "Éxito"
    }
  }
}

Notas

  • Si activity_id coincide con una actividad existente, el source es RETEN_ACTIVITY; si se omite, el source es STANDALONE.
  • El estado de la actividad asociada al resultado pasa a completado (independiente si el resultado es positivo o negativo por ejemplo "no hubo venta" o "programar para otro día).