Lera API
v166 operacionesDocumentación de la API de Lera
Para usar la API necesitas una clave secreta (lera_sk_) que se crea desde el panel, en Ajustes → API Keys. La clave completa se enseña una sola vez al crearla: guárdala en ese momento. Se puede rotar conservando su nombre y revocar cuando quieras.
La clave va en la cabecera Authorization de cada petición, como Bearer, y es lo que identifica al workspace: no se pasa ningún id de cuenta. No la publiques en el navegador ni en el código de tu web; está pensada para llamadas de servidor a servidor. Si sospechas que se ha filtrado, revócala y crea otra.
Todas las operaciones del catálogo son POST con cuerpo JSON, también las de consulta. Sin parámetros, envía un objeto vacío. Las cuatro rutas que no salen del catálogo (el propio catálogo y las de cuentas partner) son GET y llevan sus parámetros en la URL; el método va indicado en cada fila.
URL base:
https://leracore.com
Todas las rutas de esta página cuelgan de ahí. La de cada operación se añade tal cual.
Ejemplos de llamada:
curl -H "Authorization: Bearer lera_sk_..." https://leracore.com/api/v1/tools
curl -X POST -H "Authorization: Bearer lera_sk_..." -H "Content-Type: application/json" \
-d '{}' https://leracore.com/api/v1/tools/list_agents
curl -X POST -H "Authorization: Bearer lera_sk_..." -H "Content-Type: application/json" \
-d '{"limit":10,"direction":"inbound"}' https://leracore.com/api/v1/tools/list_callsSi importas el openapi.json en Postman, deja el cuerpo de las consultas en {} o pídele que genere los parámetros a partir de los ejemplos. Generándolos del esquema rellena los filtros con valores inventados, y una consulta filtrada por un valor que no existe devuelve la lista vacía.
Alcance de la clave:
- read — solo consulta. Las operaciones que modifican responden 403 insufficient_scope.
- manage — consulta y modificación.
- Una cuenta caducada es de solo lectura también por API: las escrituras responden 402 account_read_only.
- Una cuenta suspendida no opera por API: todo responde 403 workspace_suspended.
Límites de uso:
- - 120 peticiones por minuto por clave y origen. Al pasarse se responde 429.
Cuentas partner: una clave para todos tus clientes
- - Si tu cuenta es partner, la cabecera X-Lera-Client hace que la operación se ejecute sobre uno de tus clientes. No necesitas una clave por cliente.
- - X-Lera-Client: <workspace_id> — la operación va sobre ese cliente. El id lo devuelve GET /api/v1/partner/clients.
- - X-Lera-Client: all — solo en consultas. El resultado llega etiquetado por cliente, en clients en vez de en result.
- - La clave tiene que estar emitida desde la cuenta raíz. Un cliente que no cuelga de ella responde 404 client_not_found, y all sobre una operación que modifica responde 400 all_only_for_reads: abrir una escritura sobre toda la cartera en una sola petición no se permite.
Errores
- 401 unauthorized — Falta la clave, está mal formada o se ha revocado.
- 401 api_key_expired — La clave tenía fecha de caducidad y ya pasó.
- 402 account_read_only — La cuenta está caducada: se puede leer, no escribir.
- 403 insufficient_scope — Clave de solo consulta contra una operación que modifica.
- 403 workspace_suspended — La cuenta está suspendida y no opera.
- 404 tool_not_found — Ese nombre de operación no existe.
- 400 all_only_for_reads — X-Lera-Client: all sobre una operación que modifica.
- 403 not_a_partner — X-Lera-Client en una cuenta que no es partner.
- 403 not_a_partner_root — La clave se creó dentro de un cliente, no en la cuenta raíz.
- 404 client_not_found — Ese cliente no cuelga de tu cuenta.
- 429 too_many_requests — Se ha pasado el límite de peticiones.
Términos de usoCentro de confianzaEscríbenos
Referencia
AgentesOperaciones disponibles en AGENTES:CONSULTA /api/v1/tools/get_agentCONSULTA /api/v1/tools/list_agent_templatesCONSULTA /api/v1/tools/list_agentsCREA /api/v1/tools/create_agentCREA /api/v1/tools/duplicate_agentCREA /api/v1/tools/import_agentACTUALIZA /api/v1/tools/export_agentACTUALIZA /api/v1/tools/publish_agentACTUALIZA /api/v1/tools/set_business_hoursACTUALIZA /api/v1/tools/set_call_recordingACTUALIZA /api/v1/tools/update_agentACTUALIZA /api/v1/tools/write_agent_prompt
CONSULTAPOST /api/v1/tools/get_agentDevuelve la configuración completa de un agente por su id: prompt, voz, funciones y límites.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/get_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"id": "cmk1a2b3c...",
"name": "Recepción",
"description": "Atiende el teléfono principal y coge citas",
"kind": "voice",
"mode": "conversation_flow",
"status": "published",
"language": "es"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_agent_templatesDevuelve las plantillas de agente disponibles por sector, para partir de una en lugar de una hoja en blanco.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/list_agent_templates \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": [
{
"key": "clinica",
"name": "Clínica",
"sector": "salud"
}
]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_agentsDevuelve los agentes del workspace con su tipo, modo, estado y plantilla de origen.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/list_agents \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": [{
"id": "cmk1a2b3c...",
"name": "Recepción",
"kind": "voice",
"mode": "conversation_flow",
"status": "published",
"templateKey": "clinica",
"updatedAt": "2026-09-01T10:00:00.000Z"
}]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/create_agentCrea un agente de voz en borrador. Con los datos del negocio, el prompt se genera al nivel de las plantillas.
Parámetros
| Nombre | Descripción |
|---|---|
| name* obligatoriostring(body) | Nombre del agente, para reconocerlo en el panel. |
| kindstring(body) | Si el agente es de voz o de chat.Valores: voice · chat |
| modestring(body) | Cómo se construye el agente: prompt único o flujo por nodos.Valores: single_prompt · conversation_flow |
| template_keystring(body) | Plantilla de sector de la que partir. Las devuelve list_agent_templates. |
| business_namestring(body) | Nombre real del negocio. Se usa en el saludo y en el prompt. |
| summarystring(body) | A qué se dedica el negocio, en una frase. Se usa para generar el prompt. |
| servicesarray<string>(body) | Servicios del negocio. Alimentan el prompt y lo que el agente sabe ofrecer. |
| tonestring(body) | Tono con el que habla el agente (cercano, formal, directo…). |
| transferboolean(body) | Si el agente debe poder pasar la llamada a una persona. |
| promptstring(body) | Instrucciones del agente: qué hace, qué pregunta y cómo responde. |
Petición
curl -X POST https://leracore.com/api/v1/tools/create_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"name": "texto de ejemplo",
"kind": "voice",
"mode": "single_prompt"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"name": "Recepción",
"status": "draft"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/duplicate_agentDuplica un agente existente como un borrador nuevo, sin tocar el original.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/duplicate_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"id": "cmk9z8y7x...",
"name": "Recepción (copia)",
"status": "draft"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/import_agentCrea un agente en este workspace desde un JSON exportado. Hay que volver a poner los secretos a mano.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_export* obligatorioobject(body) | El objeto que devolvió export_agent, tal cual. |
Petición
curl -X POST https://leracore.com/api/v1/tools/import_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_export": {}
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"id": "cmk9z8y7x...",
"name": "Recepción",
"status": "draft"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/export_agentExporta un agente a un JSON portable para llevarlo a otro workspace. Los secretos salen redactados.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/export_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"version": 1,
"agent": {
"name": "Recepción",
"kind": "voice",
"mode": "conversation_flow"
},
"config": {
"prompt": "...",
"customTools": [
{
"url": "***"
}
]
}
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/publish_agentPublica el borrador y crea una versión activa. Hasta publicar, las llamadas siguen usando la versión anterior.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/publish_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"id": "cmk1a2b3c...",
"status": "published",
"version": 4
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/set_business_hoursDefine el horario del negocio, su zona horaria y los días especiales. No apaga al agente: le da la información.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| enabledboolean(body) | Poner o quitar el horario. Quitarlo no apaga al agente. |
| time_zonestring(body) | Zona horaria con la que se decide si está abierto. |
| weeklyarray<array>(body) | Los tramos de cada día, de lunes a domingo. Siete listas, ni una más ni una menos. |
| exceptionsarray<object>(body) | Festivos, puentes y vacaciones. Sustituyen al horario semanal en esas fechas. |
Petición
curl -X POST https://leracore.com/api/v1/tools/set_business_hours \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"enabled": true,
"time_zone": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"days": 5,
"exceptions": 2,
"functions": [
"consultar_pedido"
],
"reminder": "Borrador actualizado: publica el agente para que el cambio entre en producción."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/set_call_recordingActiva o desactiva la grabación del audio. Al activarla, el agente dice un aviso legal fijo que no se puede quitar.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| enabled* obligatorioboolean(body) | Enciende o apaga la grabación del audio de las llamadas de este agente. |
| purposestring(body) | Para qué se graba. Queda registrado junto al consentimiento.Valores: calidad · contratacion · incidencias · formacion |
| retention_daysany(body) | Días que se guarda el audio. Solo puede ACORTAR el plazo del workspace. |
Petición
curl -X POST https://leracore.com/api/v1/tools/set_call_recording \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"enabled": true,
"purpose": "calidad",
"retention_days": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"enabled": true,
"functions": [
"consultar_pedido"
],
"reminder": "Borrador actualizado: publica el agente para que el cambio entre en producción."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/update_agentActualiza el borrador de un agente: nombre, prompt, saludo, voz, modelo, comportamiento y bases de conocimiento.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| namestring(body) | Nombre del agente, para reconocerlo en el panel. |
| promptstring(body) | Instrucciones del agente: qué hace, qué pregunta y cómo responde. |
| tonestring(body) | Tono con el que habla el agente (cercano, formal, directo…). |
| agent_namestring(body) | Nombre con el que se presenta el agente al descolgar. |
| business_namestring(body) | Nombre real del negocio. Se usa en el saludo y en el prompt. |
| begin_messagestring(body) | Frase fija de saludo. Vacía, la improvisa el modelo en cada llamada. |
| farewell_messagestring(body) | Frase fija de despedida. Vacía, la improvisa el modelo. |
| voice_providerstring(body) | Proveedor de la voz. Determina qué voces se pueden elegir. |
| voice_idstring(body) | Identificador de la voz en su proveedor. Solo voces del propio workspace. |
| modelstring(body) | Modelo de lenguaje del agente. Marca latencia y fiabilidad. |
| runtime_modestring(body) | Valores: cascade · sts |
| sts_providerstring(body) | Valores: openai · google |
| sts_modelstring(body) | |
| greeting_enabledboolean(body) | Si habla primero el agente o espera a que hable quien llama. |
| greeting_interruptibleboolean(body) | Si se le puede cortar el saludo. |
| speak_when_silentboolean(body) | Ante silencio, comprueba una vez si la persona sigue ahí antes de colgar. |
| knowledge_base_idsarray<string>(body) | Ids de las bases de conocimiento asignadas al agente. Lista vacía para quitarlas todas. |
| kb_top_knumber(body) | Cuántos fragmentos de la base de conocimiento se recuperan por turno. |
| kb_min_scorenumber(body) | Corte de similitud de la búsqueda. Está calibrado con lenguaje HABLADO: subirlo pierde datos que sí están. |
| kb_instructionstring(body) | Guía para construir la búsqueda en la base de conocimiento. |
| silence_reminder_secnumber(body) | Segundos de silencio antes de que el agente pregunte si sigue ahí. |
| silence_hangup_secnumber(body) | Segundos de silencio tras los que cuelga. |
| end_call_enabledboolean(body) | Si el agente puede colgar él mismo al terminar. |
| max_duration_secnumber(body) | Duración máxima de la llamada. Al llegar, se corta. |
| transfer_modestring(body) | Cómo pasa la llamada a una persona en un agente de prompt único.Valores: none · phone · pending_request · phone_or_pending_request |
| transfer_e164string(body) | Número al que pasa la llamada, en formato E.164. |
| transfer_messagestring(body) | Frase que se dice justo antes de pasar la llamada. |
| cold_transfer_modestring(body) | Cómo se entrega la llamada: se la damos al operador y salimos, o hacemos de puente.Valores: sip_refer · sip_invite |
| responsivenessnumber(body) | Cuánto tarda en contestar tras la última palabra. Alto responde antes. |
| interruption_sensitivitynumber(body) | Facilidad para cortarle. Bajo aguanta ruido de fondo; alto se corta enseguida. |
| enable_backchannelboolean(body) | Si el agente asiente mientras el otro habla ("ajá", "claro"). |
| backchannel_frequencynumber(body) | Cuánto asiente. Alto asiente cada pocas palabras. |
| backchannel_wordsarray<string>(body) | Palabras con las que asiente. |
| post_call_analysisarray<object>(body) | Campos que se extraen solos de cada llamada al terminar, además del resumen. |
| ai_disclosureboolean(body) | Si el saludo dice que es un asistente virtual. Informar es responsabilidad del cliente. |
| pii_categoriesarray<string>(body) | Datos personales que se BORRAN de la transcripción y del resumen al colgar. |
| voicemail_optionobject(body) | Qué hace en un saliente si salta el contestador. Sin esto, le habla como a una persona. |
| voice_modelstring(body) | Modelo de síntesis. Solo se toca para más calidad o menos latencia.Valores: eleven_turbo_v2 · eleven_flash_v2 · eleven_turbo_v2_5 · eleven_flash_v2_5 · eleven_multilingual_v2 · eleven_v3 · sonic-3 · sonic-3-latest · sonic-3.5 |
| voice_speednumber(body) | Velocidad del habla. 1 es la normal. |
| voice_temperaturenumber(body) | Expresividad de la voz. Bajo suena más estable; alto, más variable. |
| llm_temperaturenumber(body) | Cuánto se aparta el modelo de la respuesta más probable. |
| background_soundstring(body) | Ambiente de fondo para que la llamada no suene aséptica. null, ninguno.Valores: office |
| background_sound_volumenumber(body) | Cuánto se oye ese ambiente. Solo aplica si hay uno puesto. |
| thinking_sound_volumenumber(body) | |
| normalize_for_speechboolean(body) | Convierte cifras y horas a como se dicen en voz alta. Viene encendido. |
| languagestring(body) | Idioma en el que atiende las llamadas (es, en, fr). Es del agente, no del panel. |
| volumenumber(body) | Volumen de la voz del agente. |
| fallback_voice_idsarray<string>(body) | Voces de reserva si su proveedor no da audio. Tienen que ser de OTRO proveedor. |
| enable_dynamic_responsivenessboolean(body) | Ajusta solo la rapidez de respuesta según cómo vaya la conversación. |
| enable_dynamic_voice_speedboolean(body) | Ajusta sola la velocidad del habla durante la llamada. |
| keypadobject(body) | Las teclas del teléfono: recibir las que marque quien llama (encendido de fábrica) y dejar que el agente marque. |
| denoising_modestring(body) | Limpieza del audio que OYE el agente, no del que oye quien llama.Valores: no-denoise · noise-cancellation · noise-and-background-speech-cancellation |
| boosted_keywordsarray<string>(body) | Palabras que cuestan de transcribir y conviene reforzar (marcas, apellidos). |
| pronunciation_dictionaryarray<object>(body) | Cómo se pronuncian palabras concretas. |
| behaviorobject(body) | Interruptores de conducta: no inventar datos, repetir para confirmar, pedir deletreo… |
Petición
curl -X POST https://leracore.com/api/v1/tools/update_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"name": "texto de ejemplo",
"prompt": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functions": [
"consultar_pedido"
],
"reminder": "Borrador actualizado: publica el agente para que el cambio entre en producción."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/write_agent_promptRegenera el prompt completo de un agente existente a partir de los datos del negocio y lo guarda en el borrador.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| business_namestring(body) | Nombre real del negocio. Se usa en el saludo y en el prompt. |
| summarystring(body) | A qué se dedica el negocio, en una frase. Se usa para generar el prompt. |
| servicesarray<string>(body) | Servicios del negocio. Alimentan el prompt y lo que el agente sabe ofrecer. |
| transferboolean(body) | Si el agente debe poder pasar la llamada a una persona. |
| template_keystring(body) | Plantilla de sector de la que partir. Las devuelve list_agent_templates. |
Petición
curl -X POST https://leracore.com/api/v1/tools/write_agent_prompt \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"business_name": "texto de ejemplo",
"summary": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functions": [
"consultar_pedido"
],
"reminder": "Borrador actualizado: publica el agente para que el cambio entre en producción."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Llamadas y analíticaOperaciones disponibles en LLAMADAS Y ANALÍTICA:CONSULTA /api/v1/tools/get_agent_latencyCONSULTA /api/v1/tools/get_analyticsCONSULTA /api/v1/tools/get_callCONSULTA /api/v1/tools/get_concurrencyCONSULTA /api/v1/tools/list_callsCREA /api/v1/tools/start_outbound_callACTUALIZA /api/v1/tools/set_inbound_concurrency_reservationCREA /api/v1/web-calls
CONSULTAPOST /api/v1/tools/get_agent_latencyDesglosa la latencia de las últimas llamadas de un agente, de punta a punta y por componente.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| callsnumber(body) | Cuántas llamadas recientes se miran para el cálculo. |
Petición
curl -X POST https://leracore.com/api/v1/tools/get_agent_latency \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"agentId": "cmk1a2b3c...",
"agentName": "Recepción",
"mode": "conversation_flow",
"model": "gpt-4.1-mini",
"callsAnalizadas": 10,
"e2e": {
"p50": 1290,
"p90": 1980
}
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/get_analyticsDevuelve la analítica del workspace: totales, por estado, por dirección, por hora y duración media.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/get_analytics \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"totalCalls": 128,
"byStatus": {
"completed": 119,
"failed": 9
},
"byDirection": {
"inbound": 120,
"outbound": 8
},
"byHour": {
"10": 14,
"11": 21
},
"averageDurationSeconds": 96
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/get_callDevuelve el detalle de una llamada: resumen, transcripción, eventos y funciones ejecutadas.
Parámetros
| Nombre | Descripción |
|---|---|
| call_id* obligatoriostring(body) | Id de la llamada. Lo devuelve list_calls. |
Petición
curl -X POST https://leracore.com/api/v1/tools/get_call \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"call_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"id": "cmk...",
"status": "completed",
"direction": "inbound",
"callerName": "Ana",
"callerPhone": "+34600111222",
"summary": "Pide cita para el jueves",
"transcript": [
{
"role": "agent",
"text": "Empresa Ejemplo, ¿en qué puedo ayudarte?"
}
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/get_concurrencyDevuelve cuántas llamadas hay en curso y cuántas líneas quedan libres, para autorregular los disparos.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/get_concurrency \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"current_concurrency": 3,
"concurrency_limit": 10,
"available": 7,
"reserved_inbound_concurrency": 2,
"available_for_outbound": 5
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_callsDevuelve las llamadas recientes, filtrables por estado, dirección y teléfono. Hasta 50 por petición.
Parámetros
| Nombre | Descripción |
|---|---|
| statusstring(body) | Filtra por cómo acabó la llamada. |
| directionstring(body) | Si la llamada la recibió el agente o la hizo él.Valores: inbound · outbound |
| phonestring(body) | Fragmento del teléfono de quien llamó, para filtrar. |
| limitnumber(body) | Máximo de resultados que devuelve. |
Petición
curl -X POST https://leracore.com/api/v1/tools/list_calls \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": [
{
"id": "cmk...",
"status": "completed",
"direction": "inbound",
"callerName": "Ana",
"callerPhone": "+34600111222",
"summary": "Pide cita para el jueves"
}
]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/start_outbound_callLanza una llamada saliente. Las variables llegan por llamada y se interpolan en el prompt y las funciones.
Parámetros
| Nombre | Descripción |
|---|---|
| to_number* obligatoriostring(body) | Número al que llamar, en formato E.164 (+34600111222). |
| agent_idstring(body) | Agente que llama. Si se omite, se usa el agente saliente asignado al número. |
| variablesobject(body) | Valores propios de esta llamada. Se interpolan en el prompt y en las funciones. |
| idempotency_keystring(body) | Clave propia para que reintentar la misma petición no dispare dos llamadas. |
Petición
curl -X POST https://leracore.com/api/v1/tools/start_outbound_call \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"to_number": "+34600111222",
"agent_id": "cmk1a2b3c...",
"variables": {}
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"call_id": "cmk...",
"to_number": "+34600111222",
"duplicate": false
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/set_inbound_concurrency_reservationGuarda N líneas simultáneas para el teléfono entrante: las salientes y el canal web no podrán ocuparlas.
Parámetros
| Nombre | Descripción |
|---|---|
| reserved* obligatorionumber(body) |
Petición
curl -X POST https://leracore.com/api/v1/tools/set_inbound_concurrency_reservation \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"reserved": 10
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"workspace_id": "cmk1a2b3c...",
"workspace_name": "Mi empresa",
"reserved_inbound_concurrency": 2,
"concurrency_limit": 10,
"available_for_outbound": 8,
"clamped": false
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/web-callsAbre una llamada por navegador desde tu backend y devuelve el token de sala para tu frontend.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Agente que atiende la llamada. Tiene que estar publicado. |
| variablesobject(body) | Valores por llamada, solo cadenas. Únicamente se aceptan las variables declaradas en el agente. |
Petición
curl -X POST https://leracore.com/api/v1/web-calls \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"call_id": "cmk...",
"access_token": "eyJhbGciOi...",
"livekit_url": "wss://....livekit.cloud",
"max_duration_sec": 600
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Números de teléfonoOperaciones disponibles en NÚMEROS DE TELÉFONO:CONSULTA /api/v1/tools/list_phone_numbersCREA /api/v1/tools/check_phone_numberCREA /api/v1/tools/import_phone_numberACTUALIZA /api/v1/tools/assign_inbound_agentACTUALIZA /api/v1/tools/assign_outbound_agentACTUALIZA /api/v1/tools/reconnect_phone_number
CONSULTAPOST /api/v1/tools/list_phone_numbersDevuelve los números del workspace con sus agentes asignados, países permitidos y estado.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/list_phone_numbers \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": [
{
"id": "cmk...",
"label": "Centralita",
"e164": "+34600333444",
"provider": "sip",
"status": "active",
"inboundAgentId": "cmk1a2b3c...",
"outboundAgentId": "cmk4d5e6f..."
}
]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/check_phone_numberDiagnostica un número: si está conectado, si tiene agente entrante y si ese agente está publicado.
Parámetros
| Nombre | Descripción |
|---|---|
| phone_number_idstring(body) | Id del número. Lo devuelve list_phone_numbers. |
| e164string(body) | Número en formato E.164, con prefijo de país (+34600111222). |
Petición
curl -X POST https://leracore.com/api/v1/tools/check_phone_number \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"phone_number_id": "cmk1a2b3c...",
"e164": "+34600111222"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"phone_number": {
"id": "cmk...",
"e164": "+34600333444",
"status": "active"
},
"inbound_agent": {
"id": "cmk1a2b3c...",
"name": "Recepción",
"status": "published"
},
"problems": []
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/import_phone_numberImporta un número que ya tienes (Twilio, Telnyx o SIP) para que Lera atienda sus llamadas.
Parámetros
| Nombre | Descripción |
|---|---|
| e164* obligatoriostring(body) | Número en formato E.164, con prefijo de país (+34600111222). |
| providerstring(body) | De dónde viene el número: Twilio, Telnyx o una centralita SIP.Valores: twilio · telnyx · sip · custom |
| labelstring(body) | Alias para reconocer el número en el panel. |
Petición
curl -X POST https://leracore.com/api/v1/tools/import_phone_number \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"e164": "+34600111222",
"provider": "twilio",
"label": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"phone_number": {
"id": "cmk...",
"e164": "+34600333444",
"status": "active"
},
"next_step": "Asigna el agente que atiende con assign_inbound_agent."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/assign_inbound_agentAsigna qué agente atiende las llamadas entrantes de un número. Pasa null para dejarlo sin agente.
Parámetros
| Nombre | Descripción |
|---|---|
| phone_number_id* obligatoriostring(body) | Id del número. Lo devuelve list_phone_numbers. |
| agent_idstring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/assign_inbound_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"phone_number_id": "cmk1a2b3c...",
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"e164": "+34600333444",
"inboundAgentId": "cmk1a2b3c..."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/assign_outbound_agentAsigna qué agente hace las llamadas salientes desde un número. Pasa null para dejarlo sin agente.
Parámetros
| Nombre | Descripción |
|---|---|
| phone_number_id* obligatoriostring(body) | Id del número. Lo devuelve list_phone_numbers. |
| agent_idstring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/assign_outbound_agent \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"phone_number_id": "cmk1a2b3c...",
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"e164": "+34600333444",
"outboundAgentId": "cmk1a2b3c..."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/reconnect_phone_numberReintenta conectar un número a la entrada de llamadas. Úsalo si el diagnóstico dice que no está conectado.
Parámetros
| Nombre | Descripción |
|---|---|
| phone_number_idstring(body) | Id del número. Lo devuelve list_phone_numbers. |
| e164string(body) | Número en formato E.164, con prefijo de país (+34600111222). |
Petición
curl -X POST https://leracore.com/api/v1/tools/reconnect_phone_number \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"phone_number_id": "cmk1a2b3c...",
"e164": "+34600111222"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"e164": "+34600333444",
"inbound_ready": true
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Flujo conversacionalOperaciones disponibles en FLUJO CONVERSACIONAL:CONSULTA /api/v1/tools/check_transfersCONSULTA /api/v1/tools/get_agent_flowCREA /api/v1/tools/attach_function_to_nodeACTUALIZA /api/v1/tools/patch_nodeACTUALIZA /api/v1/tools/patch_transferACTUALIZA /api/v1/tools/update_agent_flowELIMINA /api/v1/tools/detach_function_from_node
CONSULTAPOST /api/v1/tools/check_transfersDiagnostica qué derivaciones puede hacer de verdad esta cuenta. Úsalo antes de prometer una a nadie.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_idstring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/check_transfers \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"cuenta": {
"puede_derivar": true,
"linea_de_salida": true
},
"agente": {
"modo": "flujo",
"donde_se_configura": "patch_transfer (cada derivación en su nodo)",
"derivaciones": [
{
"nodeId": "pasar_persona",
"destino": "+34600333444"
}
]
}
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/get_agent_flowDevuelve el flujo por nodos del borrador junto a las funciones disponibles. Léelo antes de editarlo.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/get_agent_flow \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"id": "cmk1a2b3c...",
"mode": "conversation_flow",
"conversationFlow": {
"startNodeId": "inicio",
"nodes": [
{
"id": "inicio",
"type": "conversation"
}
]
},
"availableCustomTools": [
{
"name": "consultar_pedido",
"description": "Busca el pedido"
}
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/attach_function_to_nodeOfrece una función en una fase concreta del flujo. En un agente de flujo, crear la función no basta.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| node_id* obligatoriostring(body) | Id del nodo del flujo. Lo devuelve get_agent_flow. |
| function_name* obligatoriostring(body) | Nombre de la función del agente. Lo devuelve list_agent_functions. |
| run_on_enterboolean(body) | Ejecutar la función al ENTRAR en el nodo, sin esperar a que el modelo la pida. |
Petición
curl -X POST https://leracore.com/api/v1/tools/attach_function_to_node \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"node_id": "cmk1a2b3c...",
"function_name": "texto de ejemplo",
"run_on_enter": true
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functionName": "consultar_pedido",
"nodeId": "consulta",
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/patch_nodeCambia un solo nodo del flujo sin tocar el resto: su prompt, su tipo, su modelo o sus bases de conocimiento.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| node_id* obligatoriostring(body) | Id del nodo del flujo. Lo devuelve get_agent_flow. |
| promptstring(body) | Instrucciones del agente: qué hace, qué pregunta y cómo responde. |
| static_textstring(body) | Frase fija que dice el nodo tal cual, sin generar. Es la opción más rápida. |
| instruction_modestring(body) | Si manda la frase fija o el prompt del nodo.Valores: prompt · static |
| typestring(body) | Tipo del nodo. Solo entre diálogo con herramientas y diálogo limpio.Valores: conversation · subagent |
| namestring(body) | Nuevo nombre del nodo. Se inyecta en el prompt, así que escríbelo bien y con tildes. |
| llm_modelstring(body) | Modelo solo para este nodo. Sirve para poner uno más capaz donde de verdad hace falta. |
| is_globalboolean(body) | Hace el nodo alcanzable desde cualquier fase sin necesidad de una flecha. |
| global_conditionstring(body) | Cuándo se salta a ese nodo global, dicho desde lo que dice quien llama. |
| global_cooldownnumber(body) | Fases que tienen que pasar antes de que ese global pueda volver a dispararse. |
| knowledge_base_idsarray<string>(body) | Ids de las bases de conocimiento asignadas al agente. Lista vacía para quitarlas todas. |
| kb_configobject(body) | Ajuste fino de la búsqueda solo en este nodo. Pisa el del agente campo a campo. |
| thinking_soundboolean(body) |
Petición
curl -X POST https://leracore.com/api/v1/tools/patch_node \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"node_id": "cmk1a2b3c...",
"prompt": "texto de ejemplo",
"static_text": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"nodeId": "cierre",
"fields": [
"prompt"
],
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/patch_transferCambia cómo deriva un agente: destino, extensión, si entrega o presenta el caso, y qué oye quien espera.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| node_idstring(body) | Id del nodo del flujo. Lo devuelve get_agent_flow. |
| targetstring(body) | A dónde va la llamada: un número E.164 o una dirección SIP de la centralita. |
| destination_promptstring(body) | En vez de un destino fijo, describe a dónde va cada caso y el modelo elige. Excluyente con target. |
| extensionstring(body) | Extensión que se teclea al descolgar. Solo funciona haciendo de puente. |
| extra_targetsarray<object>(body) | Destinos de respaldo si el primero no coge. |
| announce_next_targetboolean(body) | Si avisa a quien llama antes de probar con el siguiente destino. |
| next_target_messagestring(body) | Frase de ese aviso. Vacía, la redacta el agente. |
| transfer_typestring(body) | Si se entrega la llamada o se presenta el caso antes de pasarla.Valores: cold · warm · agentic |
| cold_transfer_modestring(body) | Cómo se entrega la llamada: se la damos al operador y salimos, o hacemos de puente.Valores: sip_refer · sip_invite |
| caller_idstring(body) | Qué número ve quien recibe la llamada transferida.Valores: trunk · caller |
| ring_duration_msnumber(body) | Cuánto suena el destino antes de darlo por fallido. |
| speak_during_executionboolean(body) | Si el agente dice algo mientras la función se ejecuta, para que la espera no suene a silencio. |
| transfer_messagestring(body) | Frase que se dice justo antes de pasar la llamada. |
| human_detectionboolean(body) | Comprobar que ha descolgado una persona antes de presentarle el caso. |
| hold_musicstring(body) | Qué oye quien llama mientras espera la transferencia.Valores: none · hold_music · office_ambience · keyboard_typing |
| handoff_privatestring(body) | Lo que el agente le cuenta a la persona ANTES de pasarle la llamada. |
| handoff_publicstring(body) | Lo que se dice delante de quien llama al hacer el traspaso. |
| allow_unvalidated_targetboolean(body) | Aceptar un destino que no es número ni SIP, como una extensión suelta de su centralita. |
Petición
curl -X POST https://leracore.com/api/v1/tools/patch_transfer \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"node_id": "cmk1a2b3c...",
"target": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"nodeId": "pasar_persona",
"fields": [
"target"
],
"functions": [
"consultar_pedido"
],
"reminder": "Borrador actualizado: publica el agente para que el cambio entre en producción."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/update_agent_flowReemplaza el grafo completo del borrador y pone el agente en modo flujo. Para un solo nodo, usa patch_node.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| conversation_flow* obligatorioobject(body) | El grafo completo: nodo inicial y lista de nodos. Reemplaza el flujo anterior. |
Petición
curl -X POST https://leracore.com/api/v1/tools/update_agent_flow \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"conversation_flow": {}
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"nodes": 6,
"functions": [
"consultar_pedido"
],
"reminder": "Borrador actualizado: publica el agente para que el cambio entre en producción."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ELIMINAPOST /api/v1/tools/detach_function_from_nodeDeja de ofrecer una función en ese nodo. No la borra del agente.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| node_id* obligatoriostring(body) | Id del nodo del flujo. Lo devuelve get_agent_flow. |
| function_name* obligatoriostring(body) | Nombre de la función del agente. Lo devuelve list_agent_functions. |
Petición
curl -X POST https://leracore.com/api/v1/tools/detach_function_from_node \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"node_id": "cmk1a2b3c...",
"function_name": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functionName": "consultar_pedido",
"nodeId": "consulta",
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Funciones y calendarioOperaciones disponibles en FUNCIONES Y CALENDARIO:CONSULTA /api/v1/tools/list_agent_functionsCONSULTA /api/v1/tools/list_calcom_event_typesCONSULTA /api/v1/tools/list_calendar_functionsCREA /api/v1/tools/add_agent_functionCREA /api/v1/tools/add_agent_messageCREA /api/v1/tools/connect_calendarACTUALIZA /api/v1/tools/set_post_call_actionsACTUALIZA /api/v1/tools/update_agent_functionELIMINA /api/v1/tools/remove_agent_functionELIMINA /api/v1/tools/remove_calendar_functions
CONSULTAPOST /api/v1/tools/list_agent_functionsDevuelve las funciones personalizadas de un agente con su método, su URL y sus parámetros.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/list_agent_functions \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"agentId": "cmk1a2b3c...",
"functions": [
{
"name": "consultar_pedido",
"description": "Busca el pedido por su número",
"method": "POST",
"url": "https://tu-sistema.example.com/pedidos"
}
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_calcom_event_typesLista los tipos de evento de una cuenta de Cal.com para elegir cuál usar. Solo lee: no guarda nada.
Parámetros
| Nombre | Descripción |
|---|---|
| api_key* obligatoriostring(body) | Clave de Cal.com del usuario. No se devuelve nunca al consultar. |
Petición
curl -X POST https://leracore.com/api/v1/tools/list_calcom_event_types \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"api_key": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"eventTypes": [
{
"id": 123456,
"title": "Consulta 30 min",
"length": 30
}
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_calendar_functionsDevuelve el conector de calendario de un agente y su tipo de evento. Nunca devuelve la clave de Cal.com.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/list_calendar_functions \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"agentId": "cmk1a2b3c...",
"connected": true,
"functions": [
{
"name": "reservar_cita",
"kind": "book",
"provider": "calcom"
}
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/add_agent_functionAñade una función: durante la llamada el agente hace una petición firmada a tu URL. Máximo 10 por agente.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| name* obligatoriostring(body) | Identificador de la función: minúsculas, sin espacios. |
| description* obligatoriostring(body) | Cuándo debe usar el agente esta función. |
| url* obligatoriostring(body) | URL de tu sistema. Tiene que ser https y accesible desde fuera. |
| methodstring(body) | Método HTTP con el que se llama a tu URL. Por defecto POST.Valores: GET · POST · PUT · PATCH · DELETE |
| headersarray<object>(body) | Cabeceras propias de la petición. No se admiten content-type ni las que empiezan por x-lera-. |
| parametersarray<object>(body) | Datos que el agente recoge en la llamada y te manda en la petición. |
| speak_during_executionboolean(body) | Si el agente dice algo mientras la función se ejecuta, para que la espera no suene a silencio. |
| wait_messagestring(body) | Frase que dice el agente mientras la función se ejecuta. Vacío usa la del motor. |
| wait_after_msnumber(body) | Milisegundos que debe tardar la función antes de decir la frase de espera. Recomendado 1000. |
| thinking_soundboolean(body) | |
| speak_after_executionboolean(body) | Si el agente habla después de ejecutarla. Con false el turno cierra, salvo que falle. |
| refrescar_cuandostring(body) | |
| mock_responsestring(body) | Respuesta de prueba para el panel. En una llamada real se llama a tu URL. |
| response_capturesarray<object>(body) | Campos de tu respuesta que se guardan como variables para usarlos después. |
| timeout_msnumber(body) | Tiempo máximo de espera a tu sistema, en milisegundos. |
Petición
curl -X POST https://leracore.com/api/v1/tools/add_agent_function \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"name": "texto de ejemplo",
"description": "texto de ejemplo",
"url": "https://tu-sistema.example.com/consultar",
"method": "GET",
"headers": []
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functionName": "consultar_pedido",
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/add_agent_messageDa al agente la capacidad de mandar un SMS, un correo o un WhatsApp durante la llamada. Hoy solo el correo está disponible, y lo enviamos nosotros. SMS y WhatsApp aún no tienen conector.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| name* obligatoriostring(body) | |
| channel* obligatoriostring(body) | Valores: sms · email · whatsapp |
| descriptionstring(body) | |
| body_modestring(body) | Valores: static · prompt · template |
| body* obligatoriostring(body) | |
| subjectstring(body) | |
| template_keystring(body) | Plantilla de sector de la que partir. Las devuelve list_agent_templates. |
| tostring(body) | Valores: caller · variable · fixed |
| to_varstring(body) | |
| to_fixedstring(body) |
Petición
curl -X POST https://leracore.com/api/v1/tools/add_agent_message \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"name": "texto de ejemplo",
"channel": "sms",
"body": "texto de ejemplo",
"description": "texto de ejemplo",
"body_mode": "static"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"channel": "sms"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/connect_calendarConecta Cal.com a un agente para consultar huecos y reservar citas durante la llamada.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| api_key* obligatoriostring(body) | Clave de Cal.com del usuario. No se devuelve nunca al consultar. |
| event_type_id* obligatoriostring(body) | Tipo de evento de Cal.com que se reserva. Lo devuelve list_calcom_event_types. |
| timezonestring(body) | Zona horaria con la que se leen los huecos y se reservan las citas. |
| availability_wait_messagestring(body) | Frase mientras consulta huecos. Vacía usa la del motor, en el idioma del agente. |
| book_wait_messagestring(body) | Frase mientras reserva. Vacía usa la del motor. |
Petición
curl -X POST https://leracore.com/api/v1/tools/connect_calendar \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"api_key": "texto de ejemplo",
"event_type_id": "cmk1a2b3c...",
"timezone": "texto de ejemplo",
"availability_wait_message": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"eventTypeId": "123456",
"functions": [
"consultar_disponibilidad",
"reservar_cita"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/set_post_call_actionsDefine qué pasa cuando la llamada termina: mandar un mensaje o llamar a una función tuya, con una condición opcional sobre el análisis.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| actions* obligatorioarray<object>(body) |
Petición
curl -X POST https://leracore.com/api/v1/tools/set_post_call_actions \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"actions": []
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"count": 2
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/update_agent_functionEdita una función por su nombre. Solo cambia lo que pasas; para renombrarla, bórrala y créala de nuevo.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| name* obligatoriostring(body) | Nombre de la función a editar. |
| descriptionstring(body) | Cuándo debe usar el agente esta función. |
| urlstring(body) | URL de tu sistema. Tiene que ser https y accesible desde fuera. |
| methodstring(body) | Método HTTP con el que se llama a tu URL. Por defecto POST.Valores: GET · POST · PUT · PATCH · DELETE |
| headersarray<object>(body) | Cabeceras propias de la petición. No se admiten content-type ni las que empiezan por x-lera-. |
| parametersarray<object>(body) | Datos que el agente recoge en la llamada y te manda en la petición. |
| speak_during_executionboolean(body) | Si el agente dice algo mientras la función se ejecuta, para que la espera no suene a silencio. |
| wait_messagestring(body) | Frase que dice el agente mientras la función se ejecuta. Vacío usa la del motor. |
| wait_after_msnumber(body) | Milisegundos que debe tardar la función antes de decir la frase de espera. Recomendado 1000. |
| thinking_soundboolean(body) | |
| speak_after_executionboolean(body) | Si el agente habla después de ejecutarla. Con false el turno cierra, salvo que falle. |
| refrescar_cuandostring(body) | |
| mock_responsestring(body) | Respuesta de prueba para el panel. En una llamada real se llama a tu URL. |
| response_capturesarray<object>(body) | Campos de tu respuesta que se guardan como variables para usarlos después. |
| timeout_msnumber(body) | Tiempo máximo de espera a tu sistema, en milisegundos. |
Petición
curl -X POST https://leracore.com/api/v1/tools/update_agent_function \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"name": "texto de ejemplo",
"description": "texto de ejemplo",
"url": "https://tu-sistema.example.com/consultar"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functionName": "consultar_pedido",
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ELIMINAPOST /api/v1/tools/remove_agent_functionElimina una función del agente y la quita de cualquier fase del flujo que la usara.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| name* obligatoriostring(body) | Nombre de la función a eliminar. |
Petición
curl -X POST https://leracore.com/api/v1/tools/remove_agent_function \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"name": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functionName": "consultar_pedido",
"functions": []
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ELIMINAPOST /api/v1/tools/remove_calendar_functionsDesconecta el calendario de un agente. Acuérdate de publicar después.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/remove_calendar_functions \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Base de conocimientoOperaciones disponibles en BASE DE CONOCIMIENTO:CONSULTA /api/v1/tools/discover_siteCONSULTA /api/v1/tools/list_knowledgeCONSULTA /api/v1/tools/list_knowledge_basesCREA /api/v1/tools/add_knowledgeCREA /api/v1/tools/add_knowledge_sourceCREA /api/v1/tools/analyze_websiteCREA /api/v1/tools/create_knowledge_baseACTUALIZA /api/v1/tools/update_knowledgeELIMINA /api/v1/tools/remove_knowledgeELIMINA /api/v1/tools/remove_knowledge_source
CONSULTAPOST /api/v1/tools/discover_siteDescubre las páginas de un sitio por su sitemap para decidir cuáles añadir. Solo lee: no crea nada.
Parámetros
| Nombre | Descripción |
|---|---|
| url* obligatoriostring(body) | URL de tu sistema. Tiene que ser https y accesible desde fuera. |
Petición
curl -X POST https://leracore.com/api/v1/tools/discover_site \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-sistema.example.com/consultar"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"pages": [
{
"url": "https://example.com/precios",
"title": "Precios"
}
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_knowledgeDevuelve las entradas de conocimiento del proyecto: lo que el agente sabe responder del negocio.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/list_knowledge \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": [
{
"id": "cmk...",
"title": "Horario",
"scope": "workspace",
"status": "published",
"keywords": [
"horario"
],
"answer": "De 9 a 18 de lunes a viernes."
}
]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_knowledge_basesDevuelve las bases de conocimiento del proyecto con su estado y sus documentos.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/list_knowledge_bases \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": [
{
"id": "cmk...",
"name": "Web de la clínica",
"status": "ready",
"documentos": [
{
"id": "cmk...",
"kind": "url",
"title": "Precios",
"status": "ready",
"url": "https://example.com/precios"
}
]
}
]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/add_knowledgeAñade una entrada de conocimiento. Solo hacen falta un título y la respuesta.
Parámetros
| Nombre | Descripción |
|---|---|
| title* obligatoriostring(body) | Título con el que se identifica, y por el que se busca. |
| answer* obligatoriostring(body) | La información que el agente da al responder. |
| keywordsarray<string>(body) | Palabras por las que se encuentra esta entrada. |
Petición
curl -X POST https://leracore.com/api/v1/tools/add_knowledge \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"title": "texto de ejemplo",
"answer": "texto de ejemplo",
"keywords": []
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"entryId": "cmk...",
"title": "Horario",
"action": "add"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/add_knowledge_sourceAñade un documento a una base: texto o una página web, que se relee sola cada 12 horas.
Parámetros
| Nombre | Descripción |
|---|---|
| knowledge_base_id* obligatoriostring(body) | Id de la base de conocimiento. Lo devuelve list_knowledge_bases. |
| kind* obligatoriostring(body) | Si el documento es texto pegado o una página web.Valores: text · url |
| titlestring(body) | Título con el que se identifica, y por el que se busca. |
| textstring(body) | El contenido pegado, cuando el documento es texto. |
| urlstring(body) | URL de tu sistema. Tiene que ser https y accesible desde fuera. |
Petición
curl -X POST https://leracore.com/api/v1/tools/add_knowledge_source \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"knowledge_base_id": "cmk1a2b3c...",
"kind": "text",
"title": "texto de ejemplo",
"text": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"id": "cmk...",
"kind": "text",
"title": "Precios",
"status": "processing"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/analyze_websiteLee la web del negocio y extrae nombre, actividad, servicios, preguntas frecuentes, tono y un saludo sugerido.
Parámetros
| Nombre | Descripción |
|---|---|
| url* obligatoriostring(body) | URL de tu sistema. Tiene que ser https y accesible desde fuera. |
Petición
curl -X POST https://leracore.com/api/v1/tools/analyze_website \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-sistema.example.com/consultar"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"url": "https://example.com",
"businessName": "Empresa Ejemplo",
"summary": "Servicio de ejemplo para la documentación",
"services": [
"Limpieza",
"Ortodoncia"
],
"faqs": [
{
"q": "¿Tenéis parking?",
"a": "Sí, gratuito."
}
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/create_knowledge_baseCrea una base de conocimiento vacía. Después se le añaden documentos y se asigna a un agente.
Parámetros
| Nombre | Descripción |
|---|---|
| name* obligatoriostring(body) | Nombre de la base de conocimiento. |
Petición
curl -X POST https://leracore.com/api/v1/tools/create_knowledge_base \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"name": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"id": "cmk...",
"name": "Web de la clínica",
"status": "empty"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/update_knowledgeEdita una entrada de conocimiento por su id. Cambia solo los campos que pasas.
Parámetros
| Nombre | Descripción |
|---|---|
| id* obligatoriostring(body) | Id de la entrada de conocimiento. Lo devuelve list_knowledge. |
| titlestring(body) | Título con el que se identifica, y por el que se busca. |
| answerstring(body) | La información que el agente da al responder. |
| keywordsarray<string>(body) | Palabras por las que se encuentra esta entrada. |
| statusstring(body) | Si la entrada está publicada o guardada como borrador.Valores: draft · published |
Petición
curl -X POST https://leracore.com/api/v1/tools/update_knowledge \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"id": "cmk1a2b3c...",
"title": "texto de ejemplo",
"answer": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"entryId": "cmk...",
"title": "Horario",
"action": "update"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ELIMINAPOST /api/v1/tools/remove_knowledgeElimina una entrada de conocimiento por su id.
Parámetros
| Nombre | Descripción |
|---|---|
| id* obligatoriostring(body) | Id de la entrada de conocimiento. Lo devuelve list_knowledge. |
Petición
curl -X POST https://leracore.com/api/v1/tools/remove_knowledge \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"entryId": "cmk...",
"action": "remove"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ELIMINAPOST /api/v1/tools/remove_knowledge_sourceQuita un documento de una base y borra sus fragmentos, así que el agente deja de poder responder con él.
Parámetros
| Nombre | Descripción |
|---|---|
| knowledge_base_id* obligatoriostring(body) | Id de la base de conocimiento. Lo devuelve list_knowledge_bases. |
| source_id* obligatoriostring(body) | Id del documento dentro de la base. Lo devuelve list_knowledge_bases. |
Petición
curl -X POST https://leracore.com/api/v1/tools/remove_knowledge_source \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"knowledge_base_id": "cmk1a2b3c...",
"source_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"id": "cmk..."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Variables y webhook de pre-llamadaOperaciones disponibles en VARIABLES Y WEBHOOK DE PRE-LLAMADA:CONSULTA /api/v1/tools/get_pre_call_webhookCREA /api/v1/tools/add_call_variableCREA /api/v1/tools/test_pre_call_webhookACTUALIZA /api/v1/tools/set_pre_call_webhookACTUALIZA /api/v1/tools/update_call_variableELIMINA /api/v1/tools/remove_call_variableELIMINA /api/v1/tools/remove_pre_call_webhook
CONSULTAPOST /api/v1/tools/get_pre_call_webhookDevuelve la configuración del webhook de pre-llamada. De las cabeceras solo devuelve los nombres.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/get_pre_call_webhook \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"agentId": "cmk1a2b3c...",
"configurado": true,
"url": "https://tu-sistema.example.com/quien-llama",
"presupuesto_ms": 2500,
"canales": [
"phone_inbound"
],
"se_le_permite_devolver": [
"variables"
],
"si_falla": "se atiende igual con el agente por defecto"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/add_call_variableAñade una variable de llamada, usable como {{nombre}} en el saludo, las instrucciones y las funciones.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| name* obligatoriostring(body) | Nombre de la variable. Se usa como {{nombre}} en el prompt y las funciones. |
| descriptionstring(body) | Qué contiene la variable, para que el agente sepa usarla. |
| default_valuestring(body) | Valor que toma la variable si la llamada no trae otro. |
Petición
curl -X POST https://leracore.com/api/v1/tools/add_call_variable \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"name": "texto de ejemplo",
"description": "texto de ejemplo",
"default_value": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"variableName": "nombre_cliente",
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/test_pre_call_webhookDispara el webhook con un número de ejemplo y enseña lo que contesta tu sistema, sin llamar por teléfono.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| from_numberstring(body) | Número de ejemplo con el que se dispara la prueba. |
Petición
curl -X POST https://leracore.com/api/v1/tools/test_pre_call_webhook \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"from_number": "+34600111222"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"respondio": true,
"ms": 412,
"intentos": 1,
"variables_que_devuelve": [
"nombre_cliente",
"ultimo_pedido"
],
"problemas": []
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/set_pre_call_webhookConfigura la URL a la que Lera pregunta quién llama antes de descolgar, para que el saludo ya sepa el nombre.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| url* obligatoriostring(body) | URL de tu sistema. Tiene que ser https y accesible desde fuera. |
| budget_msnumber(body) | Tope TOTAL de espera. Es silencio en la línea: no lo subas sin motivo. |
| channelsarray<string>(body) | En qué puertas se pregunta: teléfono entrante, widget web o salientes. |
| allowarray<string>(body) | Qué se le permite devolver a tu sistema. Por defecto, solo variables. |
| on_failurestring(body) | Qué pasa si tu endpoint no contesta: atender igual o no atender.Valores: continue · reject |
Petición
curl -X POST https://leracore.com/api/v1/tools/set_pre_call_webhook \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"url": "https://tu-sistema.example.com/consultar",
"budget_ms": 1000,
"channels": []
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"host": "tu-sistema.example.com",
"functions": [
"consultar_pedido"
],
"siguiente_paso": "Pruébalo con test_pre_call_webhook antes de publicar.",
"reminder": "Borrador actualizado: publica el agente para que el cambio entre en producción."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/update_call_variableEdita una variable de llamada por su nombre. Solo cambia lo que pasas.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| name* obligatoriostring(body) | Nombre de la variable a editar. |
| descriptionstring(body) | Qué contiene la variable. |
| default_valuestring(body) | Valor que toma la variable si la llamada no trae otro. |
Petición
curl -X POST https://leracore.com/api/v1/tools/update_call_variable \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"name": "texto de ejemplo",
"description": "texto de ejemplo",
"default_value": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"variableName": "nombre_cliente",
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ELIMINAPOST /api/v1/tools/remove_call_variableElimina una variable de llamada de un agente.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
| name* obligatoriostring(body) | Nombre de la variable a eliminar. |
Petición
curl -X POST https://leracore.com/api/v1/tools/remove_call_variable \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c...",
"name": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"variableName": "nombre_cliente",
"functions": [
"consultar_pedido"
]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ELIMINAPOST /api/v1/tools/remove_pre_call_webhookQuita el webhook de pre-llamada. El agente deja de saber quién llama antes de descolgar.
Parámetros
| Nombre | Descripción |
|---|---|
| agent_id* obligatoriostring(body) | Id del agente. Lo devuelve list_agents. |
Petición
curl -X POST https://leracore.com/api/v1/tools/remove_pre_call_webhook \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"agent_id": "cmk1a2b3c..."
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"agentId": "cmk1a2b3c...",
"functions": [
"consultar_pedido"
],
"reminder": "Borrador actualizado: publica el agente para que el cambio entre en producción."
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Lista de exclusiónOperaciones disponibles en LISTA DE EXCLUSIÓN:CONSULTA /api/v1/tools/list_optout_numbersCREA /api/v1/tools/add_optout_numberELIMINA /api/v1/tools/remove_optout_number
CONSULTAPOST /api/v1/tools/list_optout_numbersDevuelve los números excluidos de llamadas salientes.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/list_optout_numbers \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"numbers": [{
"e164": "+34600111222",
"reason": "pidió no recibir más llamadas",
"createdAt": "2026-08-14T09:12:00.000Z"
}]
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CREAPOST /api/v1/tools/add_optout_numberExcluye un número de las llamadas salientes: el agente no volverá a llamarle nunca.
Parámetros
| Nombre | Descripción |
|---|---|
| e164* obligatoriostring(body) | Número en formato E.164, con prefijo de país (+34600111222). |
| reasonstring(body) | Por qué se excluye el número. Queda registrado. |
Petición
curl -X POST https://leracore.com/api/v1/tools/add_optout_number \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"e164": "+34600111222",
"reason": "texto de ejemplo"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"e164": "+34600111222"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ELIMINAPOST /api/v1/tools/remove_optout_numberQuita un número de la lista de exclusión, de forma que vuelve a ser llamable.
Parámetros
| Nombre | Descripción |
|---|---|
| e164* obligatoriostring(body) | Número en formato E.164, con prefijo de país (+34600111222). |
Petición
curl -X POST https://leracore.com/api/v1/tools/remove_optout_number \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"e164": "+34600111222"
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"e164": "+34600111222"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Cuenta y canal webOperaciones disponibles en CUENTA Y CANAL WEB:CONSULTA /api/v1/tools/get_billing_summaryCONSULTA /api/v1/tools/list_integrationsCONSULTA /api/v1/tools/list_widget_keysACTUALIZA /api/v1/tools/set_post_call_webhook
CONSULTAPOST /api/v1/tools/get_billing_summaryDevuelve el consumo del mes, el saldo y los límites del workspace. En un proyecto hijo, el saldo llega vacío.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/get_billing_summary \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"isBillingChild": false,
"balanceCents": 4210,
"monthMinutes": 312.5,
"monthCostCents": 3980
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_integrationsDevuelve las integraciones del proyecto y su estado. Hoy existe el webhook posterior a la llamada.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/list_integrations \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": [
{
"id": "cmk...",
"type": "post_call_webhook",
"status": "connected",
"displayName": "Webhook de mi ERP"
}
]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAPOST /api/v1/tools/list_widget_keysDevuelve las claves del canal web con sus webs autorizadas y su último uso. Útil para diagnosticar el widget.
Parámetros
Sin parámetros. Envía un objeto vacío.
Petición
curl -X POST https://leracore.com/api/v1/tools/list_widget_keys \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": [
{
"id": "cmk...",
"name": "Web pública",
"prefix": "lera_pk_a1b2c3d4",
"allowedOrigins": [
"https://example.com"
],
"requireCaptcha": false,
"lastUsedAt": "2026-09-05T18:22:00.000Z"
}
]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
ACTUALIZAPOST /api/v1/tools/set_post_call_webhookDefine la URL a la que Lera envía cada llamada al cerrarse, con su resumen, su transcripción y los datos extraídos.
Parámetros
| Nombre | Descripción |
|---|---|
| url* obligatoriostring(body) | URL de tu sistema. Tiene que ser https y accesible desde fuera. |
| enabledboolean(body) | Activar o desactivar el envío sin perder la URL. Por defecto true. |
Petición
curl -X POST https://leracore.com/api/v1/tools/set_post_call_webhook \
-H "Authorization: Bearer lera_sk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-sistema.example.com/consultar",
"enabled": true
}'Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"result": {
"ok": true,
"id": "cmk...",
"type": "webhook",
"status": "enabled",
"url": "https://tu-sistema.example.com/llamadas"
}
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Cuentas partnerOperaciones disponibles en CUENTAS PARTNER:CONSULTA /api/v1/partner/clientsCONSULTA /api/v1/partner/clients/{workspace_id}
CONSULTAGET /api/v1/partner/clientsCada cliente de la cuenta partner con sus minutos y su coste del periodo pedido, o del mes en curso si no pides ninguno, para repercutírselo en su factura. El saldo es único de la cuenta; lo que se desglosa por cliente es el consumo. La clave tiene que estar emitida desde la cuenta raíz: una creada dentro de un cliente responde 403 not_a_partner_root. En el panel, lo mismo está en Ajustes → Clientes.
Parámetros
| Nombre | Descripción |
|---|---|
| fromstring(query) | Inicio del periodo, en ISO 8601. Sin él, el mes en curso. Para facturar un mes cerrado, pásalo. |
| tostring(query) | Fin del periodo, en ISO 8601 y exclusivo. Sin él, ahora mismo. |
Petición
curl "https://leracore.com/api/v1/partner/clients?from=...&to=..." \ -H "Authorization: Bearer lera_sk_..."
Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"partner": { "workspace_id": "cmk...", "name": "Integrador" },
"period": { "from": "2026-09-01T00:00:00.000Z", "to": "2026-09-07T12:00:00.000Z" },
"clients": [{
"workspace_id": "cmk...",
"name": "Empresa Ejemplo",
"slug": "empresa-ejemplo",
"status": "ACTIVE",
"phone_number": "+34600333444",
"minutes": 128.4,
"cost_cents": 1794
}]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
CONSULTAGET /api/v1/partner/clients/{workspace_id}Un cliente concreto con su actividad además de su gasto: llamadas totales, de los últimos 7 días y la última. Es lo que dice si un piloto está vivo, que no se ve en el coste. Un workspace que no cuelga de tu raíz responde 404.
Parámetros
| Nombre | Descripción |
|---|---|
| fromstring(query) | Inicio del periodo, en ISO 8601. Sin él, el mes en curso. |
| tostring(query) | Fin del periodo, en ISO 8601 y exclusivo. Sin él, ahora mismo. |
Petición
curl "https://leracore.com/api/v1/partner/clients/{workspace_id}?from=...&to=..." \
-H "Authorization: Bearer lera_sk_..."Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"workspace_id": "cmk...",
"name": "Empresa Ejemplo",
"slug": "empresa-ejemplo",
"status": "ACTIVE",
"phone_number": "+34600333444",
"period": { "from": "2026-09-01T00:00:00.000Z", "to": "2026-09-07T12:00:00.000Z" },
"minutes": 128.4,
"cost_cents": 1794,
"calls_total": 214,
"calls_last_7_days": 31,
"last_call_at": "2026-09-07T11:42:00.000Z"
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |
Catálogo de operacionesOperaciones disponibles en CATÁLOGO DE OPERACIONES:CONSULTA /api/v1/tools
CONSULTAGET /api/v1/toolsDevuelve el catálogo de operaciones con su esquema de entrada, para descubrirlas desde código.
Parámetros
Sin parámetros.
Petición
curl "https://leracore.com/api/v1/tools" \ -H "Authorization: Bearer lera_sk_..."
Respuestas
| Código | Descripción |
|---|---|
| 200 | {
"tools": [{
"name": "list_agents",
"description": "...",
"input_schema": { "type": "object", "properties": {} }
}]
}application/json; charset=utf-8 |
| 400 | Petición inválida |
| 403 | Prohibido |