Reten Docs
Integración Tareas

Enviar Resultado

Registra el resultado de una gestión de tipo tarea.

POST /api/integration/activity-results/tasks

Envía el resultado de una gestión de tipo tarea. El resultado se asocia a la actividad correspondiente y actualiza su estado en Reten.

Autenticación: Requerida — permiso SUBMIT_ACTIVITY_RESULT

Headers requeridos

HeaderValor
x-api-keyYOUR_API_KEY
Content-Typeapplication/json

Cuerpo de la solicitud

CampoTipoRequeridoDescripción
activity_idstring (UUID)No*ID de la actividad en Reten
provider_activity_idstringNo*ID de la actividad en el sistema externo (para correlación)
commerce_external_idstringID externo del comercio
occurred_atstring (ISO 8601)Fecha y hora en que se realizó la gestión
statusstringEstado del resultado: EFFECTIVE, NOT_EFFECTIVE, o PENDING
external_statusstringNoEstado personalizado del sistema externo
hard_overridebooleanNoForzar sobreescritura de un resultado existente
raw_payloadobjectNoDatos adicionales del sistema externo (almacenados sin procesar)
task_resultobjectDetalle del resultado de la tarea (ver tabla abajo)

Se debe enviar al menos uno de activity_id o provider_activity_id para identificar la actividad. Si se envían ambos, activity_id tiene prioridad.

Campos de task_result

CampoTipoRequeridoDescripción
resultstringCódigo del tipo de resultado (obtenido de /integration/task-result-type-configs)
commentstringNoComentario del operador sobre la gestión
contact_typestringNoDirección del contacto: INBOUND o OUTBOUND
operator_external_idstringNoID externo del operador que realizó la gestión
future_scheduled_atstring (ISO 8601)CondicionalFecha de reprogramación. Requerido si el tipo de resultado tiene requiresFutureScheduledAt: true
payloadobjectNoDatos adicionales del resultado

Ejemplo

curl -X POST BASE_URL/api/integration/activity-results/tasks \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "activity_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "commerce_external_id": "COM-001",
    "occurred_at": "2026-04-11T10:30:00.000Z",
    "status": "EFFECTIVE",
    "task_result": {
      "result": "SALE_COMPLETED",
      "comment": "Cliente aceptó oferta de renovación",
      "operator_external_id": "OP-042",
      "contact_type": "OUTBOUND"
    }
  }'
const response = await fetch(
  `${BASE_URL}/api/integration/activity-results/tasks`,
  {
    method: "POST",
    headers: {
      "x-api-key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      activity_id: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      commerce_external_id: "COM-001",
      occurred_at: "2026-04-11T10:30:00.000Z",
      status: "EFFECTIVE",
      task_result: {
        result: "SALE_COMPLETED",
        comment: "Cliente aceptó oferta de renovación",
        operator_external_id: "OP-042",
        contact_type: "OUTBOUND",
      },
    }),
  }
);

const data = await response.json();
import requests

response = requests.post(
    f"{BASE_URL}/api/integration/activity-results/tasks",
    headers={
        "x-api-key": "YOUR_API_KEY",
    },
    json={
        "activity_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "commerce_external_id": "COM-001",
        "occurred_at": "2026-04-11T10:30:00.000Z",
        "status": "EFFECTIVE",
        "task_result": {
            "result": "SALE_COMPLETED",
            "comment": "Cliente aceptó oferta de renovación",
            "operator_external_id": "OP-042",
            "contact_type": "OUTBOUND",
        },
    },
)

data = response.json()

Respuesta 201 Created

{
  "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "activityId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "resultStatus": "EFFECTIVE",
  "source": "INTEGRATION",
  "origin": "API",
  "occurredAt": "2026-04-11T10:30:00.000Z",
  "createdAt": "2026-04-11T10:30:05.000Z",
  "resultDetails": {
    "type": "TASK",
    "result": {
      "code": "SALE_COMPLETED",
      "label": "Venta completada",
      "isPositive": true
    },
    "comment": "Cliente aceptó oferta de renovación",
    "externalOperatorId": "OP-042",
    "operator": {
      "externalId": "OP-042",
      "name": "Carlos Pérez"
    },
    "requiresFutureScheduledAt": false
  }
}

Reglas de validación

  • El commerce_external_id debe existir en el tenant
  • El código de result debe ser un tipo de resultado válido (consulta Listar Configuraciones)
  • Si el tipo de resultado tiene requiresFutureScheduledAt: true, el campo future_scheduled_at es obligatorio y debe ser una fecha futura
  • Si la actividad ya tiene un resultado, la solicitud retorna 409 Conflict (a menos que hard_override: true)

Errores

StatusDescripción
400Error de validación — campos faltantes, tipo de resultado inválido, o future_scheduled_at requerido
401Clave de API faltante o inválida
403La clave no tiene el permiso SUBMIT_ACTIVITY_RESULT
404Actividad o comercio no encontrado en el tenant
409La actividad ya tiene un resultado registrado