Saltar al contenido principal

Endpoints Personalizados

Los endpoints personalizados son las herramientas invocables del agente: una peticion HTTP saliente que el agente realiza durante la llamada, por ejemplo "crear un lead en el CRM" o "consultar el estado de un pedido". El agente decide cuando llamar a una a partir de su descripcion, VOCALS realiza la peticion y la respuesta se devuelve al mismo turno. Para el comportamiento y el editor del dashboard, consulta Endpoints Personalizados en la guia de usuario.

Los endpoints pertenecen a un unico agente y viven bajo /agents/{agent_id}/custom-endpoints. Todas las rutas aceptan la misma autenticacion que el resto de la API publica: envia tu clave en la cabecera X-API-Key (tambien funciona un JWT Bearer), de modo que las herramientas se pueden registrar y actualizar desde un script y no solo desde el dashboard. El espacio de trabajo de la clave es el unico al que puede llegar: un agente de otro espacio responde 404 Not Found. La URL base es https://api.usevocals.com/api/v1.

Endpoints

MetodoRutaProposito
GET/agents/{agent_id}/custom-endpointsLista los endpoints del agente (mas antiguos primero)
POST/agents/{agent_id}/custom-endpointsCrea un endpoint
GET/agents/{agent_id}/custom-endpoints/{endpoint_id}Obtiene un endpoint
PATCH/agents/{agent_id}/custom-endpoints/{endpoint_id}Actualiza un endpoint
DELETE/agents/{agent_id}/custom-endpoints/{endpoint_id}Elimina un endpoint

Cada agente admite hasta 20 endpoints; crear uno mas por encima del limite devuelve 422 Unprocessable Entity.

Esquema del Endpoint

CustomEndpointResponse lo devuelven las rutas de listado, obtencion, creacion y actualizacion.

CampoTipoDescripcion
iduuidID del endpoint
agent_iduuidID del agente propietario
namestringNombre de la herramienta con el que la IA se refiere a este endpoint
descriptionstringIndica a la IA cuando y por que llamar a la herramienta
http_methodstringGET, POST, PUT, PATCH o DELETE
url_templatestringURL de destino, puede contener marcadores {{variable}}
headersarrayCabeceras configuradas como { "name": ..., "has_value": true }. Los valores almacenados nunca se devuelven.
body_templatestring | nullCuerpo de la peticion, puede contener marcadores {{variable}}
parametersarrayDefiniciones de parametros que la IA rellena a partir de la conversacion
timeout_secondsintegerTiempo de espera de la peticion, de 1 a 60
is_enabledbooleanSi la herramienta se ofrece al agente
created_atdatetimeMarca de tiempo de creacion
updated_atdatetimeMarca de tiempo de la ultima actualizacion

Los valores de cabecera son de solo escritura

El valor de una cabecera es un secreto. Se cifra al guardarlo y nunca se devuelve en ninguna ruta: las lecturas solo muestran has_value, asi que no existe ninguna llamada de la API que recupere un valor almacenado. Para rotarlo, envia la cabecera de nuevo con un value nuevo.

Parametros

Cada entrada de parameters describe un valor que la IA recoge durante la conversacion y aporta al invocar la herramienta:

CampoTipoRequeridoDescripcion
namestringSiLetras minusculas, digitos y guiones bajos, empezando por una letra. Debe ser unico dentro del endpoint y no puede coincidir con el nombre de una variable integrada.
descriptionstringSiQue debe recoger la IA
typestringSistring, number, integer o boolean
requiredbooleanNoSi la IA debe aportarlo (por defecto false)

Referencia un parametro como {{name}} en url_template, en el valor de cualquier cabecera o en body_template. Los mismos marcadores tambien resuelven variables integradas y variables personalizadas del agente: consulta Variables Dinámicas.

Listar Endpoints

GET /agents/{agent_id}/custom-endpoints

Devuelve los endpoints del agente, los mas antiguos primero.

curl -H "X-API-Key: voc_a1b2c3d4e5f6..." \
https://api.usevocals.com/api/v1/agents/{agent_id}/custom-endpoints

Respuesta

[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"agent_id": "9f8b7c6d-1234-4a5b-9c8d-abcdef012345",
"name": "create_lead",
"description": "Crea un lead en el CRM cuando la persona da su nombre.",
"http_method": "POST",
"url_template": "https://api.example.com/v1/leads",
"headers": [{ "name": "Authorization", "has_value": true }],
"body_template": "{\"name\": \"{{customer_name}}\", \"phone\": \"{{caller_number}}\"}",
"parameters": [
{
"name": "customer_name",
"description": "Nombre completo de quien llama",
"type": "string",
"required": true
}
],
"timeout_seconds": 8,
"is_enabled": true,
"created_at": "2026-06-01T10:30:00Z",
"updated_at": "2026-06-01T10:30:00Z"
}
]

Crear Endpoint

POST /agents/{agent_id}/custom-endpoints

Cuerpo de la Peticion

{
"name": "create_lead",
"description": "Crea un lead en el CRM cuando la persona da su nombre.",
"http_method": "POST",
"url_template": "https://api.example.com/v1/leads",
"headers": [{ "name": "Authorization", "value": "Bearer crm-token" }],
"body_template": "{\"name\": \"{{customer_name}}\"}",
"parameters": [
{
"name": "customer_name",
"description": "Nombre completo de quien llama",
"type": "string",
"required": true
}
],
"timeout_seconds": 8,
"is_enabled": true
}

Campos de la Peticion

CampoTipoRequeridoPor defectoDescripcion
namestringSi--Nombre de la herramienta. Letras minusculas, digitos y guiones bajos, empezando por una letra, hasta 64 caracteres. Debe ser unico en el agente y no puede empezar por hubspot_, calendar_, shopify_ ni custom_.
descriptionstringSi--Cuando y por que debe llamar la IA a la herramienta
http_methodstringSi--GET, POST, PUT, PATCH o DELETE
url_templatestringSi--URL de destino. Debe usar http o https y resolver a una direccion publica.
headersarrayNo[]Cabeceras de la peticion, cada una { "name": ..., "value": ... }. Al crear, value es obligatorio.
body_templatestringNonullCuerpo de la peticion. Se envia como application/json salvo que configures tu propia cabecera Content-Type.
parametersarrayNo[]Definiciones de parametros (ver arriba)
timeout_secondsintegerNo10Tiempo de espera de la peticion, de 1 a 60
is_enabledbooleanNotrueSi la herramienta se ofrece al agente
curl -X POST https://api.usevocals.com/api/v1/agents/{agent_id}/custom-endpoints \
-H "X-API-Key: voc_a1b2c3d4e5f6..." \
-H "Content-Type: application/json" \
-d '{
"name": "create_lead",
"description": "Crea un lead en el CRM cuando la persona da su nombre.",
"http_method": "POST",
"url_template": "https://api.example.com/v1/leads",
"headers": [{ "name": "Authorization", "value": "Bearer crm-token" }],
"body_template": "{\"name\": \"{{customer_name}}\"}",
"parameters": [
{ "name": "customer_name", "description": "Nombre completo de quien llama", "type": "string", "required": true }
],
"timeout_seconds": 8
}'

Respuesta

201 Created - Devuelve el CustomEndpointResponse. El valor de cabecera que enviaste no se devuelve; aparece como has_value: true.

La API devuelve 422 Unprocessable Entity cuando el nombre es invalido, ya existe en el agente o empieza por un prefijo reservado; cuando el metodo no esta soportado; cuando la URL no es una direccion publica http/https; cuando un parametro es invalido, esta duplicado o coincide con el nombre de una variable integrada; cuando timeout_seconds esta fuera del rango de 1 a 60; o cuando el agente ya alcanzo el limite de 20 endpoints. Devuelve 404 Not Found cuando el agente no existe en tu espacio de trabajo.

Obtener Endpoint

GET /agents/{agent_id}/custom-endpoints/{endpoint_id}
curl -H "X-API-Key: voc_a1b2c3d4e5f6..." \
https://api.usevocals.com/api/v1/agents/{agent_id}/custom-endpoints/{endpoint_id}

Respuesta

200 OK - Devuelve el CustomEndpointResponse, o 404 Not Found.

Actualizar Endpoint

PATCH /agents/{agent_id}/custom-endpoints/{endpoint_id}

Actualizacion parcial: envia solo los campos que quieras cambiar. Desactivar una herramienta, por ejemplo, es una llamada de un solo campo.

curl -X PATCH https://api.usevocals.com/api/v1/agents/{agent_id}/custom-endpoints/{endpoint_id} \
-H "X-API-Key: voc_a1b2c3d4e5f6..." \
-H "Content-Type: application/json" \
-d '{"is_enabled": false}'

Actualizar cabeceras

headers se reemplaza por completo, no se fusiona: la lista que envias pasa a ser el conjunto completo de cabeceras del endpoint, y cualquier cabecera que omitas se elimina. Dentro de esa lista, cada entrada lleva un value nuevo (que reemplaza el secreto almacenado) u omite value (lo que conserva el secreto almacenado). Omitir value en una cabecera que no tiene ninguno almacenado devuelve 422.

{
"headers": [
{ "name": "Authorization" },
{ "name": "X-Account", "value": "acct_42" }
]
}

Esa peticion conserva intacto el secreto de Authorization y establece un nuevo valor para X-Account.

Respuesta

200 OK - Devuelve el CustomEndpointResponse actualizado. Se aplican las mismas reglas de validacion 422 que en la creacion.

Eliminar Endpoint

DELETE /agents/{agent_id}/custom-endpoints/{endpoint_id}

Elimina un endpoint. La herramienta deja de ofrecerse al agente a partir de la siguiente llamada; las llamadas en curso no se ven afectadas.

curl -X DELETE https://api.usevocals.com/api/v1/agents/{agent_id}/custom-endpoints/{endpoint_id} \
-H "X-API-Key: voc_a1b2c3d4e5f6..."

Respuesta

204 No Content - Sin cuerpo de respuesta.