Lera API

v166 operaciones
https://leracore.com/openapi.json

Documentació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_calls

Si 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 unauthorizedFalta la clave, está mal formada o se ha revocado.
  • 401 api_key_expiredLa clave tenía fecha de caducidad y ya pasó.
  • 402 account_read_onlyLa cuenta está caducada: se puede leer, no escribir.
  • 403 insufficient_scopeClave de solo consulta contra una operación que modifica.
  • 403 workspace_suspendedLa cuenta está suspendida y no opera.
  • 404 tool_not_foundEse nombre de operación no existe.
  • 400 all_only_for_readsX-Lera-Client: all sobre una operación que modifica.
  • 403 not_a_partnerX-Lera-Client en una cuenta que no es partner.
  • 403 not_a_partner_rootLa clave se creó dentro de un cliente, no en la cuenta raíz.
  • 404 client_not_foundEse cliente no cuelga de tu cuenta.
  • 429 too_many_requestsSe ha pasado el límite de peticiones.

Términos de usoCentro de confianzaEscríbenos

Referencia

Agentes
CONSULTAPOST /api/v1/tools/get_agentDevuelve la configuración completa de un agente por su id: prompt, voz, funciones y límites.

Parámetros

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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ódigoDescripción
200
{
  "result": [
    {
      "key": "clinica",
      "name": "Clínica",
      "sector": "salud"
    }
  ]
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "name": "Recepción",
    "status": "draft"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
CREAPOST /api/v1/tools/duplicate_agentDuplica un agente existente como un borrador nuevo, sin tocar el original.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "id": "cmk9z8y7x...",
    "name": "Recepción (copia)",
    "status": "draft"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "id": "cmk9z8y7x...",
    "name": "Recepción",
    "status": "draft"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
ACTUALIZAPOST /api/v1/tools/export_agentExporta un agente a un JSON portable para llevarlo a otro workspace. Los secretos salen redactados.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "version": 1,
    "agent": {
      "name": "Recepción",
      "kind": "voice",
      "mode": "conversation_flow"
    },
    "config": {
      "prompt": "...",
      "customTools": [
        {
          "url": "***"
        }
      ]
    }
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "id": "cmk1a2b3c...",
    "status": "published",
    "version": 4
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
ACTUALIZAPOST /api/v1/tools/update_agentActualiza el borrador de un agente: nombre, prompt, saludo, voz, modelo, comportamiento y bases de conocimiento.

Parámetros

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
Llamadas y analítica
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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ódigoDescripció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

400Petición inválida
403Prohibido
CONSULTAPOST /api/v1/tools/get_callDevuelve el detalle de una llamada: resumen, transcripción, eventos y funciones ejecutadas.

Parámetros

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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ódigoDescripción
200
{
  "result": {
    "current_concurrency": 3,
    "concurrency_limit": 10,
    "available": 7,
    "reserved_inbound_concurrency": 2,
    "available_for_outbound": 5
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
CONSULTAPOST /api/v1/tools/list_callsDevuelve las llamadas recientes, filtrables por estado, dirección y teléfono. Hasta 50 por petición.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": [
    {
      "id": "cmk...",
      "status": "completed",
      "direction": "inbound",
      "callerName": "Ana",
      "callerPhone": "+34600111222",
      "summary": "Pide cita para el jueves"
    }
  ]
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "call_id": "cmk...",
    "to_number": "+34600111222",
    "duplicate": false
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
CREAPOST /api/v1/web-callsAbre una llamada por navegador desde tu backend y devuelve el token de sala para tu frontend.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "call_id": "cmk...",
  "access_token": "eyJhbGciOi...",
  "livekit_url": "wss://....livekit.cloud",
  "max_duration_sec": 600
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
Números de teléfono
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ódigoDescripción
200
{
  "result": [
    {
      "id": "cmk...",
      "label": "Centralita",
      "e164": "+34600333444",
      "provider": "sip",
      "status": "active",
      "inboundAgentId": "cmk1a2b3c...",
      "outboundAgentId": "cmk4d5e6f..."
    }
  ]
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "e164": "+34600333444",
    "inboundAgentId": "cmk1a2b3c..."
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "e164": "+34600333444",
    "outboundAgentId": "cmk1a2b3c..."
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "e164": "+34600333444",
    "inbound_ready": true
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
Flujo conversacional
CONSULTAPOST /api/v1/tools/check_transfersDiagnostica qué derivaciones puede hacer de verdad esta cuenta. Úsalo antes de prometer una a nadie.

Parámetros

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "nodeId": "consulta",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "nodeId": "cierre",
    "fields": [
      "prompt"
    ],
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
ELIMINAPOST /api/v1/tools/detach_function_from_nodeDeja de ofrecer una función en ese nodo. No la borra del agente.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "nodeId": "consulta",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
Funciones y calendario
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "eventTypes": [
      {
        "id": 123456,
        "title": "Consulta 30 min",
        "length": 30
      }
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "agentId": "cmk1a2b3c...",
    "connected": true,
    "functions": [
      {
        "name": "reservar_cita",
        "kind": "book",
        "provider": "calcom"
      }
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "channel": "sms"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
CREAPOST /api/v1/tools/connect_calendarConecta Cal.com a un agente para consultar huecos y reservar citas durante la llamada.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "eventTypeId": "123456",
    "functions": [
      "consultar_disponibilidad",
      "reservar_cita"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "count": 2
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "functions": []
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
ELIMINAPOST /api/v1/tools/remove_calendar_functionsDesconecta el calendario de un agente. Acuérdate de publicar después.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
Base de conocimiento
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "pages": [
      {
        "url": "https://example.com/precios",
        "title": "Precios"
      }
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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ódigoDescripció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

400Petición inválida
403Prohibido
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ódigoDescripció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

400Petición inválida
403Prohibido
CREAPOST /api/v1/tools/add_knowledgeAñade una entrada de conocimiento. Solo hacen falta un título y la respuesta.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "entryId": "cmk...",
    "title": "Horario",
    "action": "add"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "id": "cmk...",
    "kind": "text",
    "title": "Precios",
    "status": "processing"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
CREAPOST /api/v1/tools/analyze_websiteLee la web del negocio y extrae nombre, actividad, servicios, preguntas frecuentes, tono y un saludo sugerido.

Parámetros

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "id": "cmk...",
    "name": "Web de la clínica",
    "status": "empty"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
ACTUALIZAPOST /api/v1/tools/update_knowledgeEdita una entrada de conocimiento por su id. Cambia solo los campos que pasas.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "entryId": "cmk...",
    "title": "Horario",
    "action": "update"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
ELIMINAPOST /api/v1/tools/remove_knowledgeElimina una entrada de conocimiento por su id.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "entryId": "cmk...",
    "action": "remove"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "id": "cmk..."
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
Variables y webhook de pre-llamada
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "variableName": "nombre_cliente",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "respondio": true,
    "ms": 412,
    "intentos": 1,
    "variables_que_devuelve": [
      "nombre_cliente",
      "ultimo_pedido"
    ],
    "problemas": []
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
ACTUALIZAPOST /api/v1/tools/update_call_variableEdita una variable de llamada por su nombre. Solo cambia lo que pasas.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "variableName": "nombre_cliente",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
ELIMINAPOST /api/v1/tools/remove_call_variableElimina una variable de llamada de un agente.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "variableName": "nombre_cliente",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
Lista de exclusión
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ódigoDescripció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

400Petición inválida
403Prohibido
CREAPOST /api/v1/tools/add_optout_numberExcluye un número de las llamadas salientes: el agente no volverá a llamarle nunca.

Parámetros

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "e164": "+34600111222"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "e164": "+34600111222"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
Cuenta y canal web
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ódigoDescripción
200
{
  "result": {
    "isBillingChild": false,
    "balanceCents": 4210,
    "monthMinutes": 312.5,
    "monthCostCents": 3980
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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ódigoDescripción
200
{
  "result": [
    {
      "id": "cmk...",
      "type": "post_call_webhook",
      "status": "connected",
      "displayName": "Webhook de mi ERP"
    }
  ]
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripción
200
{
  "result": {
    "ok": true,
    "id": "cmk...",
    "type": "webhook",
    "status": "enabled",
    "url": "https://tu-sistema.example.com/llamadas"
  }
}

application/json; charset=utf-8

400Petición inválida
403Prohibido
Cuentas partner
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
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

NombreDescripció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ódigoDescripció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

400Petición inválida
403Prohibido
Catálogo de operaciones
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ódigoDescripción
200
{
  "tools": [{
    "name": "list_agents",
    "description": "...",
    "input_schema": { "type": "object", "properties": {} }
  }]
}

application/json; charset=utf-8

400Petición inválida
403Prohibido