Disponible en el plan Corporate. Esta funcionalidad forma parte de las capacidades empresariales de woku. Conversa con nuestro equipo comercial.
Esta guía aplica solo a la versión v1 de la API. Corresponde exactamente a la pestaña API Reference que ves en la parte superior de la documentación. Para el comportamiento histórico (rutas sin el prefijo
/v1/), cambia el selector de versión a v0.Referencia interactiva
Toda la API está documentada de forma interactiva en la pestaña API Reference de esta misma documentación. Allí puedes ver cada endpoint con su esquema completo, ejecutarlo en vivo desde el navegador y copiar ejemplos en tu lenguaje preferido. Esta guía es complementaria: te explica el flujo y el “por qué” de cada llamada para que la integración te tome el menor tiempo posible.Introducción
La API de woku te permite operar de forma programática todas las herramientas de feedback: wokus, NPS, CSAT, CES, formularios y flows, además de invitaciones, cuarentenas, trackers externos, destinos de tickets y planes de acción. Los casos de uso típicos:- Crear wokus automáticamente cuando ocurre un evento en tu aplicación (por ejemplo, cierre de una venta, fin de una sesión de capacitación, entrega de un producto).
- Capturar respuestas directamente desde tu interfaz o backend, sin redirigir al cliente al sitio de woku: calificaciones y reseñas de wokus, puntajes NPS, CSAT y CES, y respuestas de formularios.
- Enviar encuestas por correo o WhatsApp a listas de destinatarios desde tu backend.
- Capturar feedback desde tu app móvil con un único endpoint idempotente, pensado para el SDK de React Native.
- Etiquetar herramientas con identificadores de tus sistemas (CRM, ERP, ticketing) para luego buscarlas cruzadas.
- Extraer respuestas y reportes hacia tus dashboards y sistemas internos.
- Configurar a dónde llegan los tickets de soporte (Zendesk, Salesforce, Slack, un servicio propio o correo) y cómo se enrutan según tus trackers.
- Gestionar planes de acción generados por IA: aprobarlos, enviarlos a Jira, monday.com, ClickUp o Notion, o trabajarlos dentro de woku.
multipart/form-data y responden con estructuras consistentes.
URL Base
/v1/.
Autenticación
Cada empresa registrada en woku tiene una Clave de Compañía que se incluye en el headerAuthorization de cada solicitud:

Vista de la ventana de información de la empresa.
Compañía
Obtener la compañía actual
Recupera los datos de la empresa asociada a la Clave de Compañía. Útil para validar que tu integración esté autenticando con la cuenta correcta. EndpointAuthorization: Bearer <Company-Key>
200 OK: Devuelve el objeto de la compañía.403 Forbidden: La clave no es válida o no tiene permiso.
Wokus
Las funciones de wokus te permiten crear, consultar, calificar y compartir wokus de forma programática.Crear un woku con URL de archivo
Crea un woku usando una imagen o video alojado en una URL pública (CDN, S3, ImageKit, etc.). EndpointContent-Type: application/jsonAuthorization: Bearer <Company-Key>
description(string, obligatorio): Entre 3 y 140 caracteres.fileUrl(string, obligatorio): URL pública de una imagen o video (preferentemente.mp4).folderSecondaryKey(string, opcional): Clave de la carpeta donde se almacena el woku.parentFolderSecondaryKey(string, opcional): Clave de la carpeta padre. No puede ser la misma quefolderSecondaryKey.clientEmail(string, opcional): Email del cliente asociado.clientPhone(number, opcional): Número de WhatsApp.
201 Created: Devuelve el objeto del woku creado.400 Bad Request: El body no pasó la validación.403 Forbidden: Clave inválida.
Crear un woku con archivo (multipart)
Cuando el archivo está en tu propio storage o tu cliente sube la imagen directamente desde un formulario, usa el endpoint conmultipart/form-data.
Endpoint
Content-Type: multipart/form-dataAuthorization: Bearer <Company-Key>
file(binary, obligatorio): Archivo de imagen o video.description(string, obligatorio): Entre 3 y 140 caracteres.folderSecondaryKey(string, opcional).parentFolderSecondaryKey(string, opcional).clientEmail(string, opcional).clientPhone(string, opcional).
201 Created: Woku creado.400 Bad Request: Validación fallida (formato de archivo, tamaño, campos requeridos).403 Forbidden: Clave inválida.
Obtener los datos de un woku
Recupera el woku junto con sus calificaciones y reseñas. EndpointAuthorization: Bearer <Company-Key>
id(string, obligatorio): Identificador del woku.
200 OK: Objeto del woku con sus reseñas.403 Forbidden: Clave inválida.404 Not Found: No existe un woku con ese ID en tu empresa.
Listar los wokus de la empresa
Lista paginada de los wokus de tu empresa. Endpointpage(number, opcional): Por defecto 1.limit(number, opcional): Por defecto 20.
200 OK: Lista paginada de wokus.403 Forbidden: Clave inválida.
Obtener un woku con estadísticas
Devuelve un woku con sus estadísticas agregadas de reseñas. Endpoint200 OK: Woku con estadísticas.403 Forbidden: El woku pertenece a otra empresa.404 Not Found: No existe el woku.
Listar las reseñas de un woku
Reseñas en texto y audio, paginadas, de la más reciente a la más antigua. Las reseñas de audio exponen su transcripción. Nunca se incluyen datos de contacto del cliente, soloclientId. Cada reseña incluye responseChannel: el canal por el que llegó (whatsapp, email, review-app, widget-web, mobile-sdk, api, o un valor personalizado definido por ti); es null en respuestas históricas.
Endpoint
page(number, opcional).limit(number, opcional).
200 OK: Lista paginada de reseñas.403 Forbidden: El woku pertenece a otra empresa.404 Not Found: No existe el woku.
Calificar con una reseña en texto
Agrega una calificación de 1 a 5 estrellas con un comentario escrito. EndpointContent-Type: application/jsonAuthorization: Bearer <Company-Key>
qualification(integer, obligatorio): Valor entre 1 y 5.description(string, obligatorio): Reseña en texto, máximo 3000 caracteres.clientEmail(string, opcional): Si no se entrega,anonymousdebe sertrue.clientPhone(number, opcional).anonymous(boolean, opcional): Por defectofalse.responseChannel(string, opcional, máx 48): Canal por el que llegó la respuesta. Valores canónicos:whatsapp,email,review-app,widget-web,mobile-sdk,api. También puedes enviar tu propio valor personalizado, que reemplaza el valor por defecto. Por defectoapi.
201 Created: Reseña registrada.400 Bad Request: Validación fallida.403 Forbidden: Clave inválida.404 Not Found: No existe el woku.
Calificar con una reseña en audio
Sube un archivo de audio junto con la calificación. EndpointContent-Type: multipart/form-dataAuthorization: Bearer <Company-Key>
file(binary, obligatorio): Audio. Recomendado.mp4o.wav.qualification(string"1","5", obligatorio).clientEmail(string, opcional).clientPhone(string, opcional).anonymous(string"true"o"false", opcional).responseChannel(string, opcional, máx 48): Canal por el que llegó la respuesta. Valores canónicos:whatsapp,email,review-app,widget-web,mobile-sdk,api. También puedes enviar tu propio valor personalizado, que reemplaza el valor por defecto. Por defectoapi.
201 Created: Reseña registrada.400 Bad Request: Validación fallida.403 Forbidden: Clave inválida.404 Not Found: No existe el woku.
Compartir un woku por correo
Envía el woku a uno o varios destinatarios. Es el mismo flujo que se inicia desde la interfaz de compartir. EndpointContent-Type: application/jsonAuthorization: Bearer <Company-Key>
200 OK: Envío encolado.400 Bad Request: Validación fallida (correo mal formado, ambos campos vacíos, etc.).403 Forbidden: Clave inválida.
Capturas del SDK móvil
Endpoint único de ingesta pensado para el SDK de React Native. Recibe una captura normalizada y la enruta según sukind: woku (reseña de un woku), nps, csat o ces. El canal de la respuesta queda sellado como mobile-sdk del lado del servidor.
Endpoint
application/json: capturas de texto o calificación. El body es la captura.multipart/form-data: capturas con audio. El archivo va en el campofiley la captura como JSON en el campopayload. El audio está disponible parawokuynps; los comentarios de audio aún no están soportados paracsatnices.
id(string, opcional): Identificador generado por el cliente. Se usa como clave de idempotencia.kind(string, obligatorio):woku,nps,csatoces.targetId(string): Id del woku (obligatorio parawoku), del NPS Tool (opcional paranps) o del CSAT/CES Tool (obligatorio paracsatyces).rating(integer, opcional): Calificación del woku, de 1 a 5.score(integer, opcional): Puntaje NPS de 0 a 10, o CSAT/CES de 1 a 5.comment(string, opcional, máx 3000): Comentario en texto. Obligatorio en las capturas de texto de un woku.respondent(object, opcional):email,phone,externalId. Sin identificador, la captura queda anónima.
X-Woku-Idempotency-Key o, en su ausencia, del campo id del body. Si el mismo envío se reintenta (por ejemplo, por la cola offline del SDK), la API devuelve el resultado ya registrado en lugar de crear un duplicado.
Respuestas
201 Created: Captura aceptada. Devuelveid,kind,remoteIdystatus: "accepted".400 Bad Request: Validación fallida (faltatargetId, audio encsatoces,payloadmalformado).403 Forbidden: Clave inválida.
Respuestas NPS
Puedes capturar puntajes NPS y extraer las respuestas individuales hacia tus sistemas. Los reportes agregados están en la sección Reportes NPS.Capturar un puntaje NPS
Endpointscore(integer, obligatorio): De 0 a 10.npsToolId(string, opcional): NPS Tool específico. Si se omite, el puntaje se registra a nivel de compañía.clientEmail(string, opcional): Si no se entrega, la respuesta queda anónima.anonymous(boolean, opcional).responseChannel(string, opcional, máx 48): Canal por el que llegó la respuesta. Valores canónicos:whatsapp,email,review-app,widget-web,mobile-sdk,api. También puedes enviar tu propio valor personalizado, que reemplaza el valor por defecto. Por defectoapi.
201 Created: DevuelvenpsIdy el objeto de la respuesta.400 Bad Request: Validación fallida.403 Forbidden: El NPS Tool no pertenece a tu empresa.
Agregar una reseña a un puntaje NPS
Una vez creado el puntaje, puedes adjuntarle una reseña opcional en texto o audio. Endpoints- Texto: body JSON
{ "description": "..." }, máximo 3000 caracteres. - Audio:
multipart/form-datacon el archivo en el campofile(m4a, aac o mp4). La transcripción se genera en el servidor.
201 Created: Reseña adjuntada.400 Bad Request: Validación fallida.403 Forbidden: El NPS pertenece a otra empresa.404 Not Found: No existe el NPS.
Consultar NPS Tools y respuestas
Endpoints de lectura para traer los datos NPS a tus sistemas:GET /v1/nps-tools: Lista paginada de los NPS Tools de tu empresa.GET /v1/nps-tool/:id: Definición de un NPS Tool (para construir la pregunta).GET /v1/nps: Respuestas paginadas, de la más reciente a la más antigua.GET /v1/nps/:id: Una respuesta individual.
GET /v1/nps acepta los filtros npsToolId, from y to (fechas ISO sobre la fecha de creación) y withFeedback=true (solo respuestas con reseña en texto o audio), además de page y limit. Las respuestas nunca incluyen datos de contacto del cliente, solo clientId. Cada respuesta incluye responseChannel: el canal por el que llegó (whatsapp, email, review-app, widget-web, mobile-sdk, api, o un valor personalizado definido por ti); es null en respuestas históricas.
CSAT y CES
Las familias CSAT (satisfacción, escala 1 a 5) y CES (esfuerzo, escala 1 a 5) son espejos exactos. Los ejemplos usancsat; reemplaza csat por ces y csatToolId por cesToolId para obtener la familia CES. A diferencia de NPS, el id de la herramienta es siempre obligatorio: los CSAT y CES son siempre encuestas personalizadas.
Capturar un puntaje CSAT
Endpointscore(integer, obligatorio): De 1 a 5.csatToolId(string, obligatorio): CSAT Tool que responde la encuesta.clientEmail(string, opcional): Si no se entrega, la respuesta queda anónima.anonymous(boolean, opcional).responseChannel(string, opcional, máx 48): Canal por el que llegó la respuesta. Valores canónicos:whatsapp,email,review-app,widget-web,mobile-sdk,api. También puedes enviar tu propio valor personalizado, que reemplaza el valor por defecto. Por defectoapi.
201 Created: DevuelvecsatIdy el objeto de la respuesta.400 Bad Request: Validación fallida.403 Forbidden: El CSAT Tool no pertenece a tu empresa.
Agregar un comentario a una respuesta CSAT
Endpoints- Texto: body JSON
{ "description": "..." }, máximo 3000 caracteres. - Audio:
multipart/form-datacon el archivo en el campofile(m4a, aac o mp4). La transcripción se genera en el servidor.
201 Created: Comentario aceptado.403 Forbidden: La respuesta pertenece a otra empresa.404 Not Found: No existe la respuesta CSAT.
Consultar tools y respuestas CSAT
GET /v1/csat-tools: Lista paginada de los CSAT Tools de tu empresa.GET /v1/csat-tool/:id: Definición de un CSAT Tool (para construir la encuesta).GET /v1/csat: Respuestas paginadas, con los filtroscsatToolId,from,toywithFeedback.GET /v1/csat/:id: Una respuesta individual.
responseChannel: el canal por el que llegó (whatsapp, email, review-app, widget-web, mobile-sdk, api, o un valor personalizado definido por ti); es null en respuestas históricas.
La familia CES expone exactamente los mismos endpoints: POST /v1/ces, POST /v1/ces/:id/textnotes, POST /v1/ces/:id/voicemails, GET /v1/ces-tools, GET /v1/ces-tool/:id, GET /v1/ces y GET /v1/ces/:id.
Formularios
Consulta y captura de formularios desde tus propios sistemas: renderiza el formulario con su definición, envía respuestas y extrae los resultados.Listar los formularios de la empresa
Endpointpage(number, opcional).limit(number, opcional).
200 OK: Lista paginada de formularios.403 Forbidden: Clave inválida.
Obtener la definición de un formulario
Devuelve el formulario activo (campos, configuración, contenido localizado) junto con el branding de la empresa, para renderizarlo en tu propia interfaz. Endpoint200 OK: Definición del formulario.403 Forbidden: El formulario pertenece a otra empresa.404 Not Found: No existe o está inactivo.
Enviar una respuesta de formulario
Endpointanonymous(boolean, obligatorio).email/phone(string, opcional): Requerido según cómo identifica clientes el formulario, cuando la respuesta no es anónima.answers(object, obligatorio): Respuestas por id de campo. Se validan contra la definición del formulario.responseChannel(string, opcional, máx 48): Canal por el que llegó la respuesta. Valores canónicos:whatsapp,email,review-app,widget-web,mobile-sdk,api. También puedes enviar tu propio valor personalizado, que reemplaza el valor por defecto. Por defectoapi.
201 Created: Respuesta registrada.400 Bad Request: Validación fallida o el formulario está cerrado.403 Forbidden: El formulario pertenece a otra empresa.404 Not Found: No existe o está inactivo.429 Too Many Requests: El respondente está en cuarentena.
Listar las respuestas de un formulario
Paginadas, de la más reciente a la más antigua. Las respuestas exponen los valores por id de campo y nunca incluyen datos de contacto del cliente, soloclientId. Cada respuesta incluye responseChannel: el canal por el que llegó (whatsapp, email, review-app, widget-web, mobile-sdk, api, o un valor personalizado definido por ti); es null en respuestas históricas.
Endpoint
200 OK: Lista paginada de respuestas.403 Forbidden: El formulario pertenece a otra empresa.404 Not Found: No existe el formulario.
Flows
Endpoints de solo lectura. Un flow encadena varios wokus (y opcionalmente un NPS) en un solo recorrido; con estos datos puedes renderizar el recorrido en tu aplicación y capturar con los endpoints existentes (POST /v1/wokus/:id/textnotes, POST /v1/nps, etc.).
GET /v1/flows: Lista paginada de los flows de tu empresa.GET /v1/flows/:id: Datos del flow: wokus en orden, branding y NPS vinculado.
200 OK: Datos del flow o lista paginada.403 Forbidden: El flow pertenece a otra empresa.404 Not Found: No existe el flow.
Invitaciones
Familia homogénea de endpoints para enviar encuestas por correo o WhatsApp a una lista de hasta 100 destinatarios. Los envíos son asíncronos: la API responde de inmediato con el detalle por destinatario. Endpointschannel(string, obligatorio):emailowhatsapp.recipients(string[], obligatorio, máx 100): Correos para el canalemail; números con código de país (por ejemplo56912345678) parawhatsapp.language(string, opcional):esoen.npsToolId(string, opcional, solo NPS): Si se omite, se envía la encuesta NPS a nivel de compañía.csatToolId/cesToolId(string, obligatorio en CSAT y CES).
202 Accepted: Resumen por destinatario:accepted(despachados o encolados) yrejectedcon el motivo (invalid_recipient,quarantined,insufficient_credits_or_blocked,send_failed).400 Bad Request: Validación fallida, o el formulario o woku está cerrado.403 Forbidden: La herramienta no pertenece a tu empresa.404 Not Found: No existe el formulario o el woku.
Cuarentenas
Consulta de solo lectura para saber si un respondente está actualmente en cuarentena, antes de pedirle feedback. No registra nada. Las reglas anti-duplicado se configuran en el panel administrativo; ver Cuarentenas. Endpointemail(string, opcional).phone(string, opcional).
200 OK: Estado de cuarentena del respondente.400 Bad Request: No se entregó niemailniphone.403 Forbidden: Clave inválida.
Reportes NPS
Si tu empresa usa la herramienta NPS, puedes consultar los reportes agregados directamente desde la API para integrarlos en tus propios dashboards.Reporte NPS de la compañía
Devuelve el reporte agregado de todos los NPS registrados para tu empresa. EndpointAuthorization: Bearer <Company-Key>
200 OK: Reporte con distribución de promotores, pasivos y detractores, y el puntaje NPS resultante.403 Forbidden: Clave inválida.
Reporte NPS de una herramienta
Devuelve el reporte de un NPS Tool específico (por ejemplo, “NPS post-evento” o “NPS post-compra”). EndpointAuthorization: Bearer <Company-Key>
id(string, obligatorio): Identificador del NPS Tool.
200 OK: Reporte del NPS Tool.400 Bad Request:idmal formado.403 Forbidden: Clave inválida.404 Not Found: El NPS Tool no existe o no pertenece a tu empresa.
Trackers Externos
Los trackers externos te permiten asociar identificadores de tus sistemas (CRM, ERP, ticketing, OMS) a tus herramientas de feedback (wokus, NPS, CSAT, CES, formularios y flows) para luego buscarlas cruzadas. Por ejemplo: vincular un woku altransaction_id de tu CRM o al order_id de tu ERP.
Modelo
- Tracker definition: Una entrada de catálogo a nivel de empresa, como
{ name: "trr", system: "crm interno", description: "..." }. Se define en el panel administrativo de woku, en la sección Empresa. - Tracker value: Un valor string ligado a un par
(herramienta, Tracker). Varias herramientas pueden compartir el mismo valor.
Listar trackers activos de la empresa
Endpointpage(number, opcional).limit(number, opcional).
200 OK: Lista paginada de definiciones de trackers.403 Forbidden: Clave inválida.
Listar trackers asignados a un woku
Endpoint200 OK: Trackers asignados al woku.403 Forbidden: Clave inválida.
Asignar un valor de tracker a un woku
Crea o actualiza (upsert) el valor de un tracker en un woku. Endpointname(string, obligatorio, máx 60): Nombre del tracker definido en tu empresa.value(string, obligatorio, máx 500): Valor del identificador externo (siempre se almacena como string).
201 Created: Valor asignado o actualizado.400 Bad Request: Validación fallida.403 Forbidden: Clave inválida.404 Not Found: El woku o el tracker no existen.
Eliminar un valor de tracker de un woku
Endpoint200 OK: Eliminado.403 Forbidden: Clave inválida.404 Not Found: El woku o el tracker no existen.
Buscar wokus por tracker
Encuentra todos los wokus que tienen un determinado(name, value). Útil para volver desde tu CRM al woku correspondiente.
Endpoint
name(string, obligatorio): Nombre del tracker.value(string, obligatorio): Valor a buscar.page(number, opcional).limit(number, opcional).
200 OK: Lista paginada de wokus con sus tracker values.403 Forbidden: Clave inválida.404 Not Found: No existen coincidencias.
Trackers en herramientas VoC (NPS, CSAT, CES, formularios, flows)
Además de los wokus, puedes asignar trackers a las demás herramientas de feedback. El tipo de herramienta va en la ruta como:entityType, con uno de estos valores: nps, csat, ces, form, flow. El :id es el id de la herramienta (por ejemplo npsToolId, csatToolId, cesToolId, formId o flowId).
En la versión 2 de la API estos endpoints y los de wokus se unificarán en un único recurso polimórfico.
Listar trackers asignados a una herramienta
EndpointGET /v1/external-trackers/nps/671000000000000000000001.
Respuestas
200 OK: Trackers asignados a la herramienta.400 Bad Request: Tipo de herramienta no soportado.403 Forbidden: Clave inválida.
Asignar un valor de tracker a una herramienta
Crea o actualiza (upsert) el valor de un tracker en la herramienta. Endpointname(string, obligatorio, máx 60): Nombre del tracker definido en tu empresa.value(string, obligatorio, máx 500): Valor del identificador externo (siempre se almacena como string).
201 Created: Valor asignado o actualizado.400 Bad Request: Tipo no soportado, tracker inactivo o validación fallida.403 Forbidden: La herramienta pertenece a otra empresa.404 Not Found: La herramienta o el tracker no existen.
Eliminar un valor de tracker de una herramienta
Endpoint200 OK: Eliminado.404 Not Found: El tracker o la asignación no existen.
Destinos de tickets
Los destinos de tickets definen a dónde llegan los tickets de soporte que genera la IA de woku: una plataforma SAC (Zendesk, Salesforce), un canal de Slack, un servicio HTTP propio o una lista de correos. Cada destino tiene reglas de enrutamiento basadas en tus trackers externos que deciden qué tickets le llegan.Modelo
kind(obligatorio):zendesk,salesforce,slack,customoemail.config(obligatorio): configuración no sensible, específica de cadakind.zendesk:{ connectionId, groupId? }.connectionIdes el id de tu Integración de Zendesk conectada en el panel administrativo;groupIdes el grupo de agentes, opcional.salesforce:{ queueId?, caseOrigin? }.queueIdes el Id de una Queue de Salesforce ("00G...");caseOrigines"Web"por defecto.slack:{ connectionId, channelId, channelLabel? }.connectionIdes el id de tu Integración de Slack;channelIdes el id del canal ("C...").custom:{ url, method, headers? }.methodesPOSToPUT;headersson cabeceras extra no sensibles.email:{ emails }. Hasta 20 destinatarios.
credentials(obligatorio, de solo escritura): nunca se devuelve en las respuestas, solo sucredentialsHint(últimos 4 caracteres enmascarados). Zendesk, Salesforce y Slack se autentican con la Integración conectada de tu empresa, así que envías{}. Custom usa{ authType, ... }, conauthTypenone,basic(agregausername,password),bearer(agregatoken) oapi-key-header(agregaheaderName,headerValue). Email tampoco usa credenciales, envías{}.routingConditions(opcional, hasta 20 filas): condiciones sobre tus trackers externos. Cada fila usa el operadorequals(el tracker debe tener un valor exacto envalue) oany(cualquier valor del tracker, se omitevalue).relationToPreviousune una fila con la anterior (ANDmismo grupo,ORgrupo nuevo); la primera fila no lo incluye. El destino recibe el ticket cuando algún grupo OR se cumple completo.
Listar los destinos de tickets
Endpoint200 OK: Lista de destinos (sin credenciales).403 Forbidden: Clave inválida.
Obtener un destino de tickets
Endpoint200 OK: Destino.403 Forbidden: Clave inválida.404 Not Found: No existe el destino.
Crear un destino de tickets
EndpointContent-Type: application/jsonAuthorization: Bearer <Company-Key>
name(string, obligatorio, máx 120).kind,config,credentials,routingConditions: ver la sección Modelo de este apartado.aiContext(string, opcional, máx 2000): contexto adicional para el triage de IA de este destino.template(object, opcional, solokind: "custom"):{ preset, body? }. Sinbody, se envía el sobre canónico del ticket.
201 Created: Destino creado.400 Bad Request: Validación fallida.403 Forbidden: Clave inválida.
Actualizar un destino de tickets
Endpointcredentials rota el secreto guardado. Enviar kind cambia el proveedor: config y credentials se validan contra el nuevo kind.
Body (ejemplo: deshabilitar)
200 OK: Destino actualizado.400 Bad Request: Validación fallida.403 Forbidden: Clave inválida.404 Not Found: No existe el destino.
Eliminar un destino de tickets
Endpoint200 OK:{ "deleted": true }.403 Forbidden: Clave inválida.404 Not Found: No existe el destino.
Grupos de planes de acción
Un grupo de plan de acción define qué feedback (por condiciones de trackers) genera un plan de mejora y quiénes son los responsables. Cuando el contador de comentarios nuevos de tipo mejora alcanza elthreshold del grupo, woku redacta un plan con IA para sus miembros.
Modelo
conditions(obligatorio, mínimo 1 fila, hasta 20): mismas reglas queroutingConditionsde los destinos de tickets (operadorequalsoany,relationToPreviouspara armar AND/OR).members(obligatorio, mínimo 1): cada uno conuserIdyrole(adminaprueba y envía planes,assigneetrabaja las tareas). Un grupo necesita al menos unadminy unassignee.threshold(integer, opcional, mínimo 1, por defecto 300): comentarios nuevos de tipo mejora que disparan un borrador.enabled: un grupo deshabilitado deja de contar feedback y de generar borradores, pero conserva su historial y estadísticas.
Listar los grupos de planes de acción
Endpointsearch(string, opcional): búsqueda libre por nombre, descripción y valores de condición.
200 OK: Lista de grupos.403 Forbidden: Clave inválida.
Obtener un grupo de planes de acción
Endpoint200 OK: Grupo.403 Forbidden: Clave inválida.404 Not Found: No existe el grupo.
Crear un grupo de planes de acción
EndpointContent-Type: application/jsonAuthorization: Bearer <Company-Key>
name (string, obligatorio, máx 120) y description (string, opcional, máx 500).
Respuestas
201 Created: Grupo creado.400 Bad Request: Validación fallida.403 Forbidden: Clave inválida.
Actualizar un grupo de planes de acción
Endpointdescription: "" la limpia.
Respuestas
200 OK: Grupo actualizado.400 Bad Request: Validación fallida.403 Forbidden: Clave inválida.404 Not Found: No existe el grupo.
Habilitar o deshabilitar un grupo
Endpoint200 OK: Grupo actualizado.403 Forbidden: Clave inválida.404 Not Found: No existe el grupo.
Eliminar un grupo de planes de acción
Endpoint200 OK:{ "deleted": true }.403 Forbidden: Clave inválida.404 Not Found: No existe el grupo.
Planes de acción
Los planes de acción son planes de mejora redactados por IA a partir del feedback de un grupo. Un plan nace en estadodraft, se aprueba, y desde ahí se envía a una herramienta externa (Jira, monday.com, ClickUp o Notion) o se trabaja dentro de woku con el proveedor internal (“Gestionar en woku”, un kanban interno).
Modelo
status:draft,approved,sent,canceled,delivery_error,in_progress(gestionado dentro de woku) ocompleted.priority:high,mediumolow, calculada por woku (nunca la define la IA).evidence: el recorte de feedback congelado al momento de generar el plan; sus números nunca se recalculan.tasks: lista de tareas del plan. En un plan gestionado (in_progress) cada tarea además tienestatus(todo,in_progress,done) yassigneeId.
Listar los planes de acción
EndpointgroupId,status,source(woku,nps,csatoces),priority,from,to,search,page,limit: todos opcionales.
200 OK:{ "data": [...], "total": 42 }. A diferencia de otros listados de esta API, esta respuesta no repitepagenilimit.403 Forbidden: Clave inválida.
Obtener un plan de acción
Endpoint200 OK: Plan.403 Forbidden: Clave inválida.404 Not Found: No existe el plan.
Enviar un plan a un destino
Endpointapproved (o delivery_error para reintentar) para enviarlo a un proveedor externo. provider: "internal" es la excepción: gestiona el plan dentro de woku, no lleva target y aplica de inmediato (el plan pasa a in_progress). Los proveedores externos encolan el envío (202 Accepted); consulta GET /v1/action-plans/:id para ver el resultado.
Body (gestionar dentro de woku)
provider(string, obligatorio):jira,monday,clickup,notionointernal.target(object, obligatorio salvointernal):jiraes{ siteId?, projectId, issueTypeId };mondayes{ boardId, groupId };clickupes{ listId };notiones{ databaseId }.resourceLabel(string, opcional, máx 300): descripción legible del destino.
202 Accepted:{ "status": "sending" }para un proveedor externo,{ "status": "managed" }parainternal.400 Bad Request: Falta o es inválido eltargetdel proveedor.403 Forbidden: Clave inválida.404 Not Found: No existe el plan.409 Conflict: El plan no está en un estado válido para esta transición, o ya hay un envío en curso.
Tareas de un plan
Disponibles mientras el plan está endraft o in_progress (gestionado). El status y el assigneeId de una tarea solo se editan en un plan gestionado.
Endpoints
- Agregar (
POST .../tasks): body{ "text": "..." }, máximo 160 caracteres, hasta 100 tareas por plan. - Reordenar (
PATCH .../tasks/reorder): body{ "orderedTaskIds": [...] }con TODOS los ids de tareas del plan, en el orden deseado. - Editar (
PATCH .../tasks/:taskId): body con al menos uno detext,statusoassigneeId. - Eliminar (
DELETE .../tasks/:taskId): sin body.
200 OK(201 Createdal agregar): Plan actualizado.400 Bad Request: Validación fallida.403 Forbidden: Clave inválida.404 Not Found: No existe el plan o la tarea.409 Conflict: El plan no está endraftniin_progress, o se envióstatus/assigneeIden un plan no gestionado.
Cambiar el estado de un plan
Endpoints
Respuestas
200 OK: Plan actualizado.403 Forbidden: Clave inválida.404 Not Found: No existe el plan.409 Conflict: El plan no está en el estado de origen requerido para esa acción.
Límites de ingesta y extracción
La API REST está documentada de forma interactiva en la pestaña API Reference y aplica límites de tasa y de volumen tanto para la ingesta (creación de wokus, reseñas, NPS, asignación de trackers) como para la extracción (consulta de wokus, reportes y búsquedas). Los límites cubren los dos modos de operación: por evento (una llamada por registro) y por lote (cargas batch). Los límites se aplican por Clave de Compañía:Estos son los límites por defecto del plan Corporate. Si tu integración
necesita ventanas mayores (picos estacionales, migraciones masivas),
escríbenos para ampliarlos.
Manejo de 429 (Too Many Requests)
Cuando superas un límite de tasa, la API responde con429 Too Many Requests
e incluye encabezados que te indican cuándo reintentar:
Retry-After: segundos a esperar antes del siguiente intento.X-RateLimit-Limit: tope de la ventana actual.X-RateLimit-Remaining: solicitudes restantes en la ventana.X-RateLimit-Reset: marca de tiempo en que se reinicia la ventana.
Retry-After.
Para cargas batch, divide los lotes que excedan el máximo de registros en
lugar de reintentar el lote completo.
Paginación en la extracción
Los endpoints de extracción que devuelven colecciones son paginados. Controla la página con los query paramspage y limit (por ejemplo, en
GET /v1/external-trackers o GET /v1/external-trackers/search). Para
extraer grandes volúmenes, recorre las páginas de forma secuencial respetando
el límite de extracción por minuto y el máximo de registros por página.
Errores comunes
URL de archivo inaccesible
Si usasPOST /v1/wokus con fileUrl, asegúrate de que la URL sea públicamente accesible. Nuestro servicio descarga el archivo antes de crear el woku.
Clave secundaria duplicada
folderSecondaryKey se usa para identificar una carpeta dentro de tu empresa. No pueden existir dos carpetas con la misma clave en una misma empresa. Si necesitas reutilizar una clave, primero elimina la carpeta existente desde el panel administrativo.
403 en todas las llamadas
Casi siempre significa que la clave es incorrecta, está caducada o pertenece a otra empresa. Vuelve a obtener la clave desde admin.woku.app → Información de la empresa → Obtener Clave.Contacto y soporte
- Diego Orrego Brito, CTO de woku.
- Correo: diego@woku.app (incluye el nombre de la empresa en el asunto y menciona que se trata de la API).