Lera API

v178 opérations
https://leracore.com/openapi.json

Documentation de l’API Lera

Pour utiliser l’API il vous faut une clé secrète (lr_sk_) créée depuis le panneau, sous Paramètres → API Keys. La clé complète ne s’affiche qu’une fois, à la création : conservez-la à ce moment-là. Elle peut être renouvelée en gardant son nom, et révoquée quand vous voulez. Les anciennes clés qui commencent par lera_sk_ continuent de fonctionner.

La clé va dans l’en-tête Authorization de chaque requête, en Bearer, et c’est elle qui identifie l’espace de travail : aucun identifiant de compte n’est transmis. Ne la publiez pas dans le navigateur ni dans le code de votre site ; elle est prévue pour des appels de serveur à serveur. Si vous la soupçonnez divulguée, révoquez-la et créez-en une autre.

Toutes les opérations du catalogue sont des POST avec un corps JSON, y compris les consultations. Sans paramètres, envoyez un objet vide. Les routes qui ne viennent pas du catalogue (le catalogue lui-même et celles des comptes partenaires) ont leur propre méthode (GET, POST, PATCH ou DELETE), indiquée sur chaque ligne.

URL de base :

https://leracore.com

Tous les chemins de cette page en dépendent. Ajoutez celui de chaque opération tel quel.

Exemples d’appel :

curl -H "Authorization: Bearer lr_sk_..." https://leracore.com/api/v1/tools
curl -X POST -H "Authorization: Bearer lr_sk_..." -H "Content-Type: application/json" \
  -d '{}' https://leracore.com/api/v1/tools/list_agents
curl -X POST -H "Authorization: Bearer lr_sk_..." -H "Content-Type: application/json" \
  -d '{"limit":10,"direction":"inbound"}' https://leracore.com/api/v1/tools/list_calls

Si vous importez openapi.json dans Postman, laissez le corps des consultations à {} ou demandez-lui de générer les paramètres à partir des exemples. Générés depuis le schéma, les filtres sont remplis de valeurs inventées, et une requête filtrée sur une valeur inexistante renvoie une liste vide.

Connecteur MCP : construisez et exploitez vos agents depuis votre propre assistant

https://leracore.com/mcp

Lera dispose d’un serveur MCP distant, sans rien installer, avec les mêmes opérations que cette API et la même clé secrète dans l’en-tête Authorization. Il permet à Claude Code, Cursor, VS Code, Codex ou tout client MCP de construire et gérer vos agents en dialoguant avec vous.

Il apporte aussi le guide pour construire un agent qui fonctionne (l’opération lera_guide, avec les recettes éprouvées en appels réels, la spécification des flux et le correctif de chaque avertissement du linter), les ressources lera://guia/<sujet> et les prompts crear_agente, editar_flujo, revisar_agente et mejorar_desde_llamada. L’assistant le lit avant de construire quoi que ce soit. Avec test_agent_chat, il teste le brouillon par écrit avec le même moteur que l’appel avant de proposer un changement, et avec list_agent_versions et restore_agent_version il remet le brouillon dans une version publiée précédente.

Tout reste en brouillon : le serveur ne publie jamais un agent sans votre demande. Chaque opération porte des annotations (lecture seule, destructive) pour que votre client demande la permission là où il faut, et les erreurs disent quoi corriger.

Cursor admet environ 40 opérations sur l’ensemble de ses serveurs : avec ?toolset=construir dans l’URL vous ne voyez que celles pour construire des agents ; avec ?toolset=operar, les appels, numéros et sortants ; sans paramètre, toutes. Si votre compte est partenaire, ajoutez l’en-tête X-Lera-Client comme dans l’API.

Claude Code — Il va dans terminal.

claude mcp add --transport http lera https://leracore.com/mcp --header "Authorization: Bearer lr_sk_…"

Cursor — Il va dans ~/.cursor/mcp.json.

{
  "mcpServers": {
    "lera": {
      "url": "https://leracore.com/mcp?toolset=construir",
      "headers": { "Authorization": "Bearer lr_sk_…" }
    }
  }
}

VS Code — Il va dans .vscode/mcp.json.

{
  "servers": {
    "lera": {
      "type": "http",
      "url": "https://leracore.com/mcp",
      "headers": { "Authorization": "Bearer lr_sk_…" }
    }
  }
}

Codex — Il va dans ~/.codex/config.toml.

[mcp_servers.lera]
url = "https://leracore.com/mcp"
bearer_token_env_var = "LERA_API_KEY"
tool_timeout_sec = 120
# y en tu entorno: LERA_API_KEY=lr_sk_…

Portée de la clé :

  • read — lecture seule. Les opérations qui modifient répondent 403 insufficient_scope.
  • manage — lecture et écriture.
  • Un compte expiré est en lecture seule par l’API aussi : les écritures répondent 402 account_read_only.
  • Un compte suspendu n’opère pas par l’API : tout répond 403 workspace_suspended.

Limites d’usage :

  • - 120 requêtes par minute et par clé et origine. Au-delà, la réponse est 429.

Comptes partenaires : une clé pour tous vos clients

  • - Si votre compte est un compte partenaire, l’en-tête X-Lera-Client exécute l’opération sur l’un de vos clients. Pas besoin d’une clé par client.
  • - X-Lera-Client : <workspace_id> — l’opération porte sur ce client. L’id vient de GET /api/v1/partner/clients.
  • - X-Lera-Client : all — uniquement en consultation. Le résultat arrive étiqueté par client, sous clients au lieu de result.
  • - La clé doit être émise depuis le compte racine. Un client qui n’en dépend pas renvoie 404 client_not_found, et all sur une écriture renvoie 400 all_only_for_reads : diffuser une écriture sur tout le portefeuille en une requête n’est pas permis.

Erreurs

  • 401 unauthorized — La clé est absente, mal formée ou révoquée.
  • 401 api_key_expired — La clé avait une date d’expiration, désormais dépassée.
  • 402 account_read_only — Le compte a expiré : lecture possible, écriture non.
  • 403 insufficient_scope — Clé en lecture seule sur une opération qui modifie.
  • 403 workspace_suspended — Le compte est suspendu et n’opère pas.
  • 404 tool_not_found — Ce nom d’opération n’existe pas.
  • 400 all_only_for_reads — X-Lera-Client : all sur une opération qui écrit.
  • 403 not_a_partner — X-Lera-Client sur un compte qui n’est pas partenaire.
  • 403 not_a_partner_root — La clé a été créée dans un client, pas dans le compte racine.
  • 404 client_not_found — Ce client ne dépend pas de votre compte.
  • 429 too_many_requests — La limite de requêtes a été dépassée.

Conditions d’utilisationCentre de confianceÉcrivez-nous

Référence

Agents
LECTUREPOST /api/v1/tools/get_agentRenvoie la configuration complète d’un agent par son id : prompt, voix, fonctions et limites.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/lera_guideRenvoie le guide pour construire un agent qui fonctionne : les recettes éprouvées en appels réels (rendez-vous, transferts, collecte de données, appels sortants, chat), la spécification des flux, comment monter une base de connaissances qui trouve, et les avertissements du linter avec leur correctif. Sans sujet, l’index.

Paramètres

NomDescription
temastring(body)Le sujet du guide. Les recettes commencent par « receta- ». Sans lui, l’index de tous les sujets.Valeurs: receta-prompt-unico · receta-citas-calcom-flujo · receta-transferencia-prompt-unico · receta-transferencia-flujo · receta-recoger-datos · receta-saliente · receta-chat · trabajo · revisar-llamadas · analisis-post-llamada · crear-agente · flujos · nodos · recoger-datos · repaso · funciones · citas-calcom · transferencias · base-conocimiento · montar-base-conocimiento · comportamiento · modelo-y-latencia · numeros · canal-web · chat · linter · no-duplicar-motor · seguridad

Requête

curl -X POST https://leracore.com/api/v1/tools/lera_guide \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": {
    "tema": "receta-citas-calcom-flujo",
    "titulo": "Receta: citas con Cal.com en un agente de flujo",
    "guia": "# Receta: citas con Cal.com en un agente de flujo\n\nCUANDO: ..."
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_agent_templatesRenvoie les modèles d’agent disponibles par secteur, pour partir de l’un d’eux plutôt que d’une page blanche.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_agent_templates \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": [
    {
      "key": "clinica",
      "name": "Clínica",
      "sector": "salud"
    }
  ]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_agent_versionsListe les versions publiées d’un agent, de la plus récente à la plus ancienne, et indique celle qui répond actuellement.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_agent_versions \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "agent_id": "cmk1a2b3c...",
    "status": "published",
    "versions": [
      { "id": "cmv4d5e6f...", "version": 4, "createdAt": "2026-10-06T10:12:00.000Z", "active": true },
      { "id": "cmv1a2b3c...", "version": 3, "createdAt": "2026-10-02T17:40:00.000Z", "active": false }
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_agentsRenvoie les agents de l’espace de travail avec leur type, mode, statut et modèle d’origine.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_agents \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/test_agent_chatTeste le brouillon d’un agent par écrit avec le même moteur que l’appel : renvoie ce qu’il répondrait, le nœud où se trouve le flux, les variables collectées et les fonctions qu’il aurait appelées. Les fonctions tournent en mode test et ne touchent jamais votre système. Sans état : pour continuer la conversation, passez les tours précédents et l’état du flux renvoyé par le tour précédent. Limite de 30 messages par minute.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
message* obligatoirestring(body)
historyarray<object>(body)
flow_stateobject(body)Agents de flux uniquement : l’objet flow renvoyé par le tour précédent, tel quel. Sans lui, le test commence au nœud de départ.

Requête

curl -X POST https://leracore.com/api/v1/tools/test_agent_chat \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "message": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "agent_id": "cmk1a2b3c...",
    "mode": "conversation_flow",
    "kind": "voice",
    "reply": "Claro, ¿para qué día le viene bien?",
    "flow": {
      "nodeId": "pedir-dia",
      "vars": { "servicio": "corte" },
      "visited": ["saludo", "pedir-dia"],
      "executedFunctions": []
    },
    "functionCalls": [],
    "ended": false,
    "descartes": []
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/convert_agentConvertit un agent vers un autre type (voix ou chat, prompt unique ou flux) en créant un nouveau brouillon avec toute sa configuration, clés des fonctions comprises. L’original ne change pas.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
to* obligatoirestring(body)Valeurs: voice · chat · single_prompt · conversation_flow

Requête

curl -X POST https://leracore.com/api/v1/tools/convert_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "to": "voice"
}'

Réponses

CodeDescription
200
{
  "result": {
    "id": "cmk7c6d5e...",
    "name": "Recepción (chat)",
    "kind": "chat",
    "mode": "single_prompt",
    "status": "draft",
    "original_id": "cmk1a2b3c...",
    "perdidas": [{ "tipo": "herramienta_transferencia", "nombre": "pasar_a_recepcion" }],
    "siguiente_paso": "Revisa el prompt y el flujo del agente NUEVO (agent_id cmk7c6d5e...) y adapta lo que hablaba de llamadas..."
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/create_agentCrée un agent vocal en brouillon. Avec les données de l’entreprise, le prompt est généré au niveau des modèles.

Paramètres

NomDescription
name* obligatoirestring(body)Nom de l’agent, pour le reconnaître dans le panneau.
kindstring(body)Si l’agent est vocal ou de chat.Valeurs: voice · chat
modestring(body)Comment l’agent est construit : prompt unique ou flux par nœuds.Valeurs: single_prompt · conversation_flow
template_keystring(body)Modèle sectoriel de départ. Renvoyés par list_agent_templates.
business_namestring(body)Nom réel de l’entreprise. Utilisé dans l’accueil et le prompt.
summarystring(body)Ce que fait l’entreprise, en une phrase. Sert à générer le prompt.
servicesarray<string>(body)Les services de l’entreprise. Ils nourrissent le prompt et l’offre de l’agent.
tonestring(body)Ton avec lequel l’agent parle (proche, formel, direct…).
transferboolean(body)Si l’agent doit pouvoir passer l’appel à une personne.
promptstring(body)Instructions de l’agent : ce qu’il fait, demande et répond.
markdown_link_allowed_hostsarray<string>(body)
markdown_link_include_wwwboolean(body)
markdown_link_allow_httpboolean(body)

Requête

curl -X POST https://leracore.com/api/v1/tools/create_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "texto de ejemplo",
  "kind": "voice",
  "mode": "single_prompt"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "name": "Recepción",
    "status": "draft"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/duplicate_agentDuplique un agent existant sous forme de nouveau brouillon, sans toucher à l’original.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/duplicate_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "id": "cmk9z8y7x...",
    "name": "Recepción (copia)",
    "status": "draft"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/import_agentCrée un agent dans cet espace de travail à partir d’un JSON exporté. Les secrets doivent être ressaisis.

Paramètres

NomDescription
agent_export* obligatoireobject(body)L’objet renvoyé par export_agent, tel quel.

Requête

curl -X POST https://leracore.com/api/v1/tools/import_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_export": {}
}'

Réponses

CodeDescription
200
{
  "result": {
    "id": "cmk9z8y7x...",
    "name": "Recepción",
    "status": "draft"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/export_agentExporte un agent en JSON portable pour le transférer vers un autre espace de travail. Les secrets sont masqués.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/export_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "version": 1,
    "agent": {
      "name": "Recepción",
      "kind": "voice",
      "mode": "conversation_flow"
    },
    "config": {
      "prompt": "...",
      "customTools": [
        {
          "url": "***"
        }
      ]
    }
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/publish_agentPublie le brouillon et crée une version active. Jusqu’à la publication, les appels utilisent la version précédente.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/publish_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "id": "cmk1a2b3c...",
    "status": "published",
    "version": 4
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/restore_agent_versionRemet le brouillon dans l’état d’une version publiée précédente. Ne publie pas : les appels gardent la version active jusqu’à la publication. Le brouillon non publié est perdu.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
version_id* obligatoirestring(body)

Requête

curl -X POST https://leracore.com/api/v1/tools/restore_agent_version \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "version_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "id": "cmk1a2b3c...",
    "restored_version": 3,
    "is_active_version": false,
    "nota": "El borrador es ahora esa versión. Lo publicado no cambia hasta publish_agent."
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/set_business_hoursDéfinit les horaires, le fuseau horaire et les jours spéciaux. N’éteint pas l’agent : elle l’informe.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
enabledboolean(body)Définir ou retirer l’horaire. Le retirer n’éteint pas l’agent.
time_zonestring(body)Fuseau utilisé pour décider si c’est ouvert.
weeklyarray<array>(body)Les plages de chaque jour, lundi à dimanche. Sept listes.
exceptionsarray<object>(body)Jours fériés et congés. Ils remplacent l’horaire hebdomadaire.

Requête

curl -X POST https://leracore.com/api/v1/tools/set_business_hours \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "enabled": true,
  "time_zone": "texto de ejemplo"
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/set_call_recordingActive ou désactive l’enregistrement audio. Activé, l’agent lit un avis légal fixe qui ne peut être retiré.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
enabled* obligatoireboolean(body)Active ou désactive l’enregistrement audio des appels de cet agent.
purposestring(body)Pourquoi on enregistre. Conservé avec le consentement.Valeurs: calidad · contratacion · incidencias · formacion
retention_daysany(body)Jours de conservation de l’audio. Peut seulement RACCOURCIR le délai.

Requête

curl -X POST https://leracore.com/api/v1/tools/set_call_recording \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "enabled": true,
  "purpose": "calidad",
  "retention_days": "texto de ejemplo"
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/update_agentMet à jour le brouillon d’un agent : nom, prompt, accueil, voix, modèle, comportement et bases de connaissances.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
namestring(body)Nom de l’agent, pour le reconnaître dans le panneau.
promptstring(body)Instructions de l’agent : ce qu’il fait, demande et répond.
tonestring(body)Ton avec lequel l’agent parle (proche, formel, direct…).
agent_namestring(body)Nom sous lequel l’agent se présente en décrochant.
business_namestring(body)Nom réel de l’entreprise. Utilisé dans l’accueil et le prompt.
begin_messagestring(body)Phrase d’accueil fixe. Vide, le modèle l’improvise à chaque appel.
farewell_messagestring(body)Phrase d’adieu fixe. Vide, le modèle l’improvise.
voice_providerstring(body)Fournisseur de la voix. Il détermine les voix disponibles.
voice_idstring(body)Identifiant de la voix chez son fournisseur. Uniquement celles de l’espace.
modelstring(body)Modèle de langage de l’agent. Il pèse sur latence et fiabilité.
greeting_enabledboolean(body)Si l’agent parle en premier ou attend l’appelant.
greeting_interruptibleboolean(body)Si l’accueil peut être interrompu.
end_chat_after_silence_msnumber(body)
auto_close_messagestring(body)
markdown_link_allowed_hostsarray<string>(body)
markdown_link_include_wwwboolean(body)
markdown_link_allow_httpboolean(body)
speak_when_silentboolean(body)En cas de silence, il vérifie une fois avant de raccrocher.
knowledge_base_idsarray<string>(body)Ids des bases de connaissances assignées à l’agent. Liste vide pour toutes les retirer.
kb_top_knumber(body)Combien de fragments de la base sont récupérés par tour.
kb_min_scorenumber(body)Seuil de similarité. Calibré sur la langue PARLÉE : l’augmenter perd des données.
kb_instructionstring(body)Guide pour construire la recherche dans la base.
silence_reminder_secnumber(body)Secondes de silence avant que l’agent demande si vous êtes là.
silence_hangup_secnumber(body)Secondes de silence après lesquelles il raccroche.
end_call_enabledboolean(body)Si l’agent peut raccrocher lui-même à la fin.
max_duration_secnumber(body)Durée maximale de l’appel. Atteinte, l’appel est coupé.
transfer_modestring(body)Comment il passe l’appel à une personne (agent à prompt unique).Valeurs: none · phone · pending_request · phone_or_pending_request
transfer_e164string(body)Numéro vers lequel l’appel est transféré, au format E.164.
transfer_messagestring(body)Phrase dite juste avant de transférer l’appel.
transfer_toolsarray<object>(body)
agent_swap_toolsarray<object>(body)Prompt unique uniquement : outils pour passer la conversation à un AUTRE agent du projet. Même appel et même numéro ; la destination reprend avec l’historique. Remplace toute la liste.
cold_transfer_modestring(body)Comment l’appel est remis : à l’opérateur, ou en pont.Valeurs: sip_refer · sip_invite
responsivenessnumber(body)Le délai après le dernier mot. Plus haut répond plus tôt.
interruption_sensitivitynumber(body)Facilité d’interruption. Bas résiste au bruit ; haut se coupe vite.
enable_backchannelboolean(body)Si l’agent acquiesce pendant que l’autre parle.
backchannel_frequencynumber(body)À quelle fréquence il acquiesce. Haut, tous les quelques mots.
backchannel_wordsarray<string>(body)Mots avec lesquels il acquiesce.
post_call_analysisarray<object>(body)Champs extraits automatiquement à la fin de chaque appel.
ai_disclosureboolean(body)Si l’accueil précise qu’il s’agit d’un assistant virtuel.
pii_categoriesarray<string>(body)Données personnelles EFFACÉES de la transcription à la fin.
voicemail_optionobject(body)Ce qu’il fait si la messagerie décroche lors d’un appel sortant.
voice_modelstring(body)Modèle de synthèse. À toucher seulement pour la qualité ou la latence.Valeurs: eleven_turbo_v2 · eleven_turbo_v2_5 · eleven_flash_v2_5 · eleven_v4_turbo · eleven_flash_v2 · eleven_multilingual_v2 · eleven_v3 · sonic-3.6 · sonic-3 · sonic-3-latest · sonic-3.5
voice_speednumber(body)Vitesse de parole. 1 est la normale.
enable_expressive_modeboolean(body)
expressive_emotion_tagsarray<string>(body)
expressive_mode_promptany(body)
voice_temperaturenumber(body)Expressivité de la voix. Bas plus stable ; haut plus variable.
model_priorityboolean(body)
llm_temperaturenumber(body)À quel point le modèle s’écarte de la réponse la plus probable.
background_soundstring(body)Ambiance de fond pour que l’appel ne sonne pas aseptisé. null, aucune.Valeurs: office
background_sound_volumenumber(body)Le niveau de cette ambiance. Uniquement si elle est définie.
thinking_sound_volumenumber(body)
normalize_for_speechboolean(body)Convertit chiffres et heures en langage parlé. Activé par défaut.
languagestring(body)Langue dans laquelle il répond (es, en, fr). Elle appartient à l’agent.
volumenumber(body)Volume de la voix de l’agent.
fallback_voice_idsarray<string>(body)Voix de secours si le fournisseur ne rend pas d’audio. D’un AUTRE fournisseur.
enable_dynamic_responsivenessboolean(body)Ajuste seul la vitesse de réponse selon la conversation.
enable_dynamic_voice_speedboolean(body)Ajuste seule la vitesse de parole pendant l’appel.
keypadobject(body)Les touches du téléphone : recevoir celles composées par l’appelant (activé par défaut) et laisser l’agent composer.
denoising_modestring(body)Nettoyage de l’audio que l’agent ENTEND, pas de celui de l’appelant.Valeurs: no-denoise · noise-cancellation · noise-and-background-speech-cancellation
stt_modestring(body)Transcription rapide (fast, par défaut) ou précise (accurate) : la précise attend un peu plus de silence pour que les numéros dictés arrivent entiers, au prix d’une attente un peu plus longue à chaque tour.Valeurs: fast · accurate
boosted_keywordsarray<string>(body)Mots difficiles à transcrire à renforcer (marques, noms).
pronunciation_dictionaryarray<object>(body)Comment prononcer des mots précis.
behaviorobject(body)Interrupteurs de conduite : ne rien inventer, répéter pour confirmer…

Requête

curl -X POST https://leracore.com/api/v1/tools/update_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "name": "texto de ejemplo",
  "prompt": "texto de ejemplo"
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/write_agent_promptRégénère le prompt complet d’un agent existant à partir des données de l’entreprise et l’enregistre dans le brouillon.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
business_namestring(body)Nom réel de l’entreprise. Utilisé dans l’accueil et le prompt.
summarystring(body)Ce que fait l’entreprise, en une phrase. Sert à générer le prompt.
servicesarray<string>(body)Les services de l’entreprise. Ils nourrissent le prompt et l’offre de l’agent.
transferboolean(body)Si l’agent doit pouvoir passer l’appel à une personne.
template_keystring(body)Modèle sectoriel de départ. Renvoyés par list_agent_templates.

Requête

curl -X POST https://leracore.com/api/v1/tools/write_agent_prompt \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "business_name": "texto de ejemplo",
  "summary": "texto de ejemplo"
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
Appels et analytique
LECTUREPOST /api/v1/tools/get_agent_latencyDétaille la latence des derniers appels d’un agent, de bout en bout et par composant.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
callsnumber(body)Combien d’appels récents sont pris en compte.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_agent_latency \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/get_analyticsRenvoie l’analytique de l’espace : totaux, par statut, par sens, par heure et durée moyenne.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_analytics \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/get_callRenvoie le détail d’un appel : résumé, transcription, événements et fonctions exécutées.

Paramètres

NomDescription
call_id* obligatoirestring(body)Id de l’appel. Renvoyé par list_calls.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_call \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "call_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/get_chatUne conversation complète d’un agent de chat : les messages, les fonctions exécutées par l’agent, le résumé et l’analyse.

Paramètres

NomDescription
chat_id* obligatoirestring(body)

Requête

curl -X POST https://leracore.com/api/v1/tools/get_chat \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "chat_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200

Renvoie le résultat dans result.

{ "result": ... }

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/get_concurrencyIndique combien d’appels sont en cours et combien de lignes restent libres, pour s’autoréguler.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_concurrency \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": {
    "current_concurrency": 1,
    "concurrency_limit": 5,
    "available": 4,
    "reserved_inbound_concurrency": 2,
    "available_for_outbound": 2,
    "limit_scope": "account"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_callsRenvoie les appels récents, filtrables par statut, sens et numéro. Jusqu’à 50 par requête.

Paramètres

NomDescription
statusstring(body)Filtrer selon la fin de l’appel.
directionstring(body)Si l’appel est entrant ou passé par l’agent.Valeurs: inbound · outbound
phonestring(body)Fragment du numéro de l’appelant, pour filtrer.
limitnumber(body)Nombre maximal de résultats renvoyés.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_calls \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": [
    {
      "id": "cmk...",
      "status": "completed",
      "direction": "inbound",
      "callerName": "Ana",
      "callerPhone": "+34600111222",
      "summary": "Pide cita para el jueves"
    }
  ]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_chatsListe les conversations récentes de vos agents de chat : statut, canal (web ou API), messages, résumé et sentiment.

Paramètres

NomDescription
agent_idstring(body)Id de l’agent. Renvoyé par list_agents.
statusstring(body)Valeurs: ongoing · ended · error
limitnumber(body)Nombre maximal de résultats renvoyés.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_chats \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200

Renvoie le résultat dans result.

{ "result": ... }

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/start_outbound_callLance un appel sortant. Les variables sont passées par appel et interpolées dans le prompt et les fonctions.

Paramètres

NomDescription
to_number* obligatoirestring(body)Numéro à appeler, au format E.164 (+34600111222).
agent_idstring(body)Agent qui appelle. Omis, l’agent sortant assigné au numéro est utilisé.
variablesobject(body)Valeurs propres à cet appel, interpolées dans le prompt et les fonctions.
idempotency_keystring(body)Votre propre clé pour qu’un renvoi de la même requête ne déclenche pas deux appels.

Requête

curl -X POST https://leracore.com/api/v1/tools/start_outbound_call \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "to_number": "+34600111222",
  "agent_id": "cmk1a2b3c...",
  "variables": {}
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "call_id": "cmk...",
    "to_number": "+34600111222",
    "duplicate": false
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/set_inbound_concurrency_reservationRéserve N lignes simultanées pour les appels téléphoniques entrants : les sortants et le canal web ne peuvent pas les occuper.

Paramètres

NomDescription
reserved* obligatoirenumber(body)

Requête

curl -X POST https://leracore.com/api/v1/tools/set_inbound_concurrency_reservation \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "reserved": 10
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "workspace_id": "cmk1a2b3c...",
    "workspace_name": "Mi empresa",
    "reserved_inbound_concurrency": 2,
    "concurrency_limit": 5,
    "available_for_outbound": 3,
    "clamped": false
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/web-callsOuvre un appel navigateur depuis votre backend et renvoie le jeton de salle pour votre frontend.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Agent qui prend l’appel. Il doit être publié.
variablesobject(body)Valeurs par appel, chaînes uniquement. Seules les variables déclarées sur l’agent sont acceptées.

Requête

curl -X POST https://leracore.com/api/v1/web-calls \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "call_id": "cmk...",
  "access_token": "eyJhbGciOi...",
  "livekit_url": "wss://....livekit.cloud",
  "max_duration_sec": 600
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/chatsOuvre une conversation avec un agent de chat. Renvoie le chat et le message de bienvenue, si l’agent en a un.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Agent de chat qui répond. Il doit être publié.
variablesobject(body)Valeurs pour l’agent, chaînes uniquement. Seules les variables déclarées sur l’agent sont acceptées.
metadataobject(body)Ce que vous voulez garder avec la conversation (votre identifiant client, par exemple). Il revient dans le webhook.

Requête

curl -X POST https://leracore.com/api/v1/chats \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "chat": { "id": "cmk...", "agent_id": "cmk...", "channel": "api", "status": "ongoing" },
  "messages": [{ "id": "cmk...", "role": "agent", "content": "Hola, soy el asistente virtual...", "created_at": "2026-10-02T09:00:00.000Z" }]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/chats/{id}/messagesEnvoie un message et renvoie seulement la nouvelle réponse de l’agent. Facturé par message de l’agent.

Paramètres

NomDescription
content* obligatoirestring(body)Ce que la personne écrit. Jusqu’à 2 000 caractères.

Requête

curl -X POST https://leracore.com/api/v1/chats/{id}/messages \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "messages": [{ "id": "cmk...", "role": "agent", "content": "Abrimos de lunes a viernes de 7:00 a 22:00.", "created_at": "2026-10-02T09:00:05.000Z" }],
  "chat": { "id": "cmk...", "status": "ongoing", "agent_messages": 1 }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/chats/{id}/endFerme la conversation. Elle est facturée et analysée à la fermeture. Sinon, elle se ferme toute seule après le délai d’inactivité de l’agent.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/chats/{id}/end \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "chat": { "id": "cmk...", "status": "ended", "end_reason": "api", "agent_messages": 4 }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
Numéros de téléphone
LECTUREPOST /api/v1/tools/get_forwarding_codesCodes pour renvoyer le numéro de l’entreprise vers sa ligne d’entrée Lera, selon l’opérateur et le type de ligne, avec ce que facture l’opérateur pour le renvoi.

Paramètres

NomDescription
operator* obligatoirestring(body)Valeurs: movistar · vodafone · orange · yoigo · masmovil · digi · lowi · pepephone · o2 · jazztel · simyo · finetwork · avatel · euskaltel · adamo · unknown · other
line* obligatoirestring(body)Valeurs: fixed · mobile
modestring(body)Comment l’agent est construit : prompt unique ou flux par nœuds.Valeurs: unanswered · always
ring_secondsnumber(body)
phone_number_idstring(body)Id du numéro. Renvoyé par list_phone_numbers.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_forwarding_codes \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "operator": "movistar",
  "line": "fixed"
}'

Réponses

CodeDescription
200
{
  "result": {
    "lera_line": "+34848000000",
    "dial_first": { "codes": ["##002#"], "text": "Primero quita tu buzón de voz..." },
    "codes": [
      { "type": "noAnswer", "activate": "**61*848000000#", "deactivate": "##61#", "check": "*#61#", "published_by_operator": true },
      { "type": "busy", "activate": "**67*848000000#", "deactivate": "##67#", "check": "*#67#", "published_by_operator": true },
      { "type": "unreachable", "activate": "**62*848000000#", "deactivate": "##62#", "check": "*#62#", "published_by_operator": true }
    ],
    "remove_all_at_once": "##002#",
    "voicemail_back": { "codes": ["**61*1222#", "**67*1222#", "**62*1222#"], "text": "Para volver a tener el buzón de voz, tu operador lo activa con:" },
    "operator_cost": "Cada llamada desviada es una llamada desde tu teléfono a tu línea de Lera, y se cobra según tu tarifa.",
    "source": "https://ayuda.jazztel.com/movil/servicios/1743-desvio-de-llamadas"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_phone_numbersRenvoie les numéros de l’espace avec leurs agents assignés, pays autorisés et statut.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_phone_numbers \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": [
    {
      "id": "cmk...",
      "label": "Centralita",
      "e164": "+34600333444",
      "provider": "sip",
      "status": "active",
      "inboundAgentId": "cmk1a2b3c...",
      "outboundAgentId": "cmk4d5e6f..."
    }
  ]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/check_phone_numberDiagnostique un numéro : connexion, agent entrant assigné et publication de cet agent.

Paramètres

NomDescription
phone_number_idstring(body)Id du numéro. Renvoyé par list_phone_numbers.
e164string(body)Numéro au format E.164, avec indicatif pays (+34600111222).

Requête

curl -X POST https://leracore.com/api/v1/tools/check_phone_number \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "phone_number_id": "cmk1a2b3c...",
  "e164": "+34600111222"
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/import_phone_numberImporte un numéro que vous possédez déjà (Twilio, Telnyx ou SIP) pour que Lera réponde.

Paramètres

NomDescription
e164* obligatoirestring(body)Numéro au format E.164, avec indicatif pays (+34600111222).
providerstring(body)D’où vient le numéro : Twilio, Telnyx ou un standard SIP.Valeurs: twilio · telnyx · sip · custom
labelstring(body)Alias pour reconnaître le numéro dans le panneau.

Requête

curl -X POST https://leracore.com/api/v1/tools/import_phone_number \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "e164": "+34600111222",
  "provider": "twilio",
  "label": "texto de ejemplo"
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/request_inbound_lineAttribue tout de suite une ligne d’entrée au workspace, pour y renvoyer le numéro de l’entreprise. La première du compte est incluse ; chaque ligne supplémentaire a un abonnement mensuel, déduit du solde aujourd’hui puis chaque mois.

Paramètres

NomDescription
agent_idstring(body)Agent vocal publié qui répond aux appels de la ligne. Obligatoire s’il y en a plusieurs publiés.
labelstring(body)Alias de la ligne, pour la reconnaître dans le panneau.
accept_line_feeboolean(body)Obligatoire pour une ligne supplémentaire : vous acceptez son abonnement mensuel (monthly_fee_eur), déduit de votre solde dès aujourd’hui. Sans lui, la réponse est line_fee_not_accepted avec le prix et rien n’est attribué : répéter la requête n’en achète pas deux.

Requête

curl -X POST https://leracore.com/api/v1/tools/request_inbound_line \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "label": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "lera_line": "+34848000000",
    "included": false,
    "monthly_fee_eur": 3,
    "next_step": "Dale los códigos para desviar su número a esta línea con get_forwarding_codes."
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/assign_inbound_agentDéfinit quel agent répond aux appels entrants d’un numéro. Passez null pour le laisser sans agent.

Paramètres

NomDescription
phone_number_id* obligatoirestring(body)Id du numéro. Renvoyé par list_phone_numbers.
agent_idstring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/assign_inbound_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "phone_number_id": "cmk1a2b3c...",
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "e164": "+34600333444",
    "inboundAgentId": "cmk1a2b3c..."
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/assign_outbound_agentDéfinit quel agent passe les appels sortants depuis un numéro. Passez null pour le laisser sans agent.

Paramètres

NomDescription
phone_number_id* obligatoirestring(body)Id du numéro. Renvoyé par list_phone_numbers.
agent_idstring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/assign_outbound_agent \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "phone_number_id": "cmk1a2b3c...",
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "e164": "+34600333444",
    "outboundAgentId": "cmk1a2b3c..."
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/reconnect_phone_numberRetente la connexion d’un numéro aux appels entrants. À utiliser si le diagnostic l’indique déconnecté.

Paramètres

NomDescription
phone_number_idstring(body)Id du numéro. Renvoyé par list_phone_numbers.
e164string(body)Numéro au format E.164, avec indicatif pays (+34600111222).

Requête

curl -X POST https://leracore.com/api/v1/tools/reconnect_phone_number \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "phone_number_id": "cmk1a2b3c...",
  "e164": "+34600111222"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "e164": "+34600333444",
    "inbound_ready": true
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/release_inbound_lineLibère une ligne d’entrée : elle ne reçoit plus d’appels et n’est plus facturée. Le mois déjà payé n’est pas remboursé. Si elle avait reçu des appels, elle reste réservée 30 jours au même compte.

Paramètres

NomDescription
e164string(body)La ligne d’entrée, au format E.164. Facultatif si vous passez phone_number_id ou si le workspace n’en a qu’une.
phone_number_idstring(body)Id du numéro. Renvoyé par list_phone_numbers.

Requête

curl -X POST https://leracore.com/api/v1/tools/release_inbound_line \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "e164": "+34600111222",
  "phone_number_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "released": "+34848000000",
    "kept_for_you": true
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
Flux conversationnel
LECTUREPOST /api/v1/tools/check_transfersIndique quels transferts ce compte peut réellement effectuer. À vérifier avant toute promesse.

Paramètres

NomDescription
agent_idstring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/check_transfers \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/get_agent_flowRenvoie le flux par nœuds du brouillon ainsi que les fonctions disponibles. À lire avant toute modification.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_agent_flow \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/attach_function_to_nodePropose une fonction à une étape précise du flux. Dans un agent de flux, créer la fonction ne suffit pas.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
node_id* obligatoirestring(body)Id du nœud du flux. Renvoyé par get_agent_flow.
function_name* obligatoirestring(body)Nom de la fonction de l’agent. Renvoyé par list_agent_functions.
run_on_enterboolean(body)Exécuter la fonction À L’ENTRÉE du nœud, sans attendre le modèle.

Requête

curl -X POST https://leracore.com/api/v1/tools/attach_function_to_node \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "node_id": "cmk1a2b3c...",
  "function_name": "texto de ejemplo",
  "run_on_enter": true
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "nodeId": "consulta",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/patch_nodeModifie un seul nœud du flux sans toucher au reste : son prompt, son type, son modèle ou ses bases.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
node_id* obligatoirestring(body)Id du nœud du flux. Renvoyé par get_agent_flow.
promptstring(body)Instructions de l’agent : ce qu’il fait, demande et répond.
static_textstring(body)Phrase fixe dite telle quelle, sans génération. L’option la plus rapide.
instruction_modestring(body)Si la phrase fixe ou le prompt du nœud l’emporte.Valeurs: prompt · static
typestring(body)Type de nœud. Entre dialogue avec outils et dialogue simple.Valeurs: conversation · subagent
namestring(body)Nouveau nom du nœud. Il est injecté dans le prompt : soignez-le.
llm_modelstring(body)Modèle pour ce nœud seulement, là où c’est vraiment utile.
is_globalboolean(body)Rend le nœud accessible depuis n’importe quelle étape.
global_conditionstring(body)Quand ce nœud global se déclenche, du point de vue de l’appelant.
global_cooldownnumber(body)Étapes à passer avant que ce global se redéclenche.
knowledge_base_idsarray<string>(body)Ids des bases de connaissances assignées à l’agent. Liste vide pour toutes les retirer.
kb_configobject(body)Réglage fin de la recherche pour ce nœud. Écrase celui de l’agent.
agent_swapobject(body)Nœud agent_swap uniquement : à quel agent passer la conversation et comment (version, nœud d’entrée, analyse, voix, langue, historique, message d’attente). Fusionné avec ses réglages actuels.
thinking_soundboolean(body)

Requête

curl -X POST https://leracore.com/api/v1/tools/patch_node \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "node_id": "cmk1a2b3c...",
  "prompt": "texto de ejemplo",
  "static_text": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "nodeId": "cierre",
    "fields": [
      "prompt"
    ],
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/patch_transferModifie le transfert d’un agent : destination, extension, transfert froid ou accompagné, et l’attente.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
node_idstring(body)Id du nœud du flux. Renvoyé par get_agent_flow.
targetstring(body)Où va l’appel : un numéro E.164 ou une adresse SIP du standard.
destination_promptstring(body)Au lieu d’une destination fixe, décrit où va chaque cas. Exclusif avec target.
extensionstring(body)Extension composée au décrochage. Uniquement en mode pont.
extra_targetsarray<object>(body)Destinations de secours si la première ne répond pas.
announce_next_targetboolean(body)S’il prévient l’appelant avant d’essayer la destination suivante.
next_target_messagestring(body)Phrase de cet avertissement. Vide, l’agent la rédige.
transfer_typestring(body)Si l’appel est remis ou si le cas est présenté avant.Valeurs: cold · warm · agentic
cold_transfer_modestring(body)Comment l’appel est remis : à l’opérateur, ou en pont.Valeurs: sip_refer · sip_invite
caller_idstring(body)Quel numéro voit la personne qui reçoit l’appel transféré.Valeurs: trunk · caller
ring_duration_msnumber(body)Durée de sonnerie avant d’abandonner la destination.
speak_during_executionboolean(body)Si l’agent parle pendant l’exécution, pour que l’attente ne soit pas du silence.
transfer_messagestring(body)Phrase dite juste avant de transférer l’appel.
human_detectionboolean(body)Vérifier qu’une personne a décroché avant de présenter le cas.
hold_musicstring(body)Ce qu’entend l’appelant pendant l’attente du transfert.Valeurs: none · hold_music · office_ambience · keyboard_typing
handoff_privatestring(body)Ce que l’agent dit à la personne AVANT de transférer.
handoff_publicstring(body)Ce qui est dit devant l’appelant lors du transfert.
allow_unvalidated_targetboolean(body)Accepter une destination ni numéro ni SIP, comme une extension du standard.

Requête

curl -X POST https://leracore.com/api/v1/tools/patch_transfer \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "node_id": "cmk1a2b3c...",
  "target": "texto de ejemplo"
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/update_agent_flowRemplace le graphe complet du brouillon et passe l’agent en mode flux. Pour un seul nœud, utilisez patch_node.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
conversation_flow* obligatoireobject(body)Le graphe complet : nœud initial et liste. Il remplace le flux précédent.

Requête

curl -X POST https://leracore.com/api/v1/tools/update_agent_flow \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "conversation_flow": {}
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/detach_function_from_nodeCesse de proposer une fonction sur ce nœud. Elle n’est pas supprimée de l’agent.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
node_id* obligatoirestring(body)Id du nœud du flux. Renvoyé par get_agent_flow.
function_name* obligatoirestring(body)Nom de la fonction de l’agent. Renvoyé par list_agent_functions.

Requête

curl -X POST https://leracore.com/api/v1/tools/detach_function_from_node \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "node_id": "cmk1a2b3c...",
  "function_name": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "nodeId": "consulta",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
Fonctions et agenda
LECTUREPOST /api/v1/tools/list_agent_functionsRenvoie les fonctions personnalisées d’un agent avec leur méthode, leur URL et leurs paramètres.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_agent_functions \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_calcom_event_typesListe les types d’événement d’un compte Cal.com pour en choisir un. Lecture seule : rien n’est stocké.

Paramètres

NomDescription
api_key* obligatoirestring(body)La clé Cal.com de l’utilisateur. Jamais renvoyée en lecture.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_calcom_event_types \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "eventTypes": [
      {
        "id": 123456,
        "title": "Consulta 30 min",
        "length": 30
      }
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_calendar_functionsRenvoie le connecteur d’agenda d’un agent et son type d’événement. Ne renvoie jamais la clé Cal.com.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_calendar_functions \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "agentId": "cmk1a2b3c...",
    "connected": true,
    "functions": [
      {
        "name": "reservar_cita",
        "kind": "book",
        "provider": "calcom"
      }
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/add_agent_functionAjoute une fonction : pendant l’appel, l’agent envoie une requête signée à votre URL. 10 maximum par agent.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
name* obligatoirestring(body)Identifiant de la fonction : minuscules, sans espaces.
description* obligatoirestring(body)Quand l’agent doit utiliser cette fonction.
url* obligatoirestring(body)URL de votre système. Elle doit être en https et joignable de l’extérieur.
methodstring(body)Méthode HTTP utilisée pour appeler votre URL. POST par défaut.Valeurs: GET · POST · PUT · PATCH · DELETE
headersarray<object>(body)Vos propres en-têtes. content-type et ceux commençant par x-lera- ne sont pas admis.
parametersarray<object>(body)Données recueillies pendant l’appel et envoyées dans la requête.
speak_during_executionboolean(body)Si l’agent parle pendant l’exécution, pour que l’attente ne soit pas du silence.
wait_messagestring(body)Phrase dite par l’agent pendant l’exécution. Vide utilise celle du moteur.
wait_after_msnumber(body)Millisecondes que la fonction doit prendre avant de dire la phrase d’attente. 1000 conseillé.
thinking_soundboolean(body)
speak_after_executionboolean(body)Si l’agent parle après l’exécution. Avec false, le tour se ferme sauf échec.
mock_responsestring(body)Réponse de test pour le panneau. En appel réel, votre URL est appelée.
response_capturesarray<object>(body)Champs de votre réponse enregistrés comme variables.
timeout_msnumber(body)Attente maximale de votre système, en millisecondes.

Requête

curl -X POST https://leracore.com/api/v1/tools/add_agent_function \
  -H "Authorization: Bearer lr_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": []
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/add_agent_messagePermet à l’agent d’envoyer un SMS, un e-mail ou un WhatsApp pendant l’appel. L’e-mail est envoyé par Lera ; le SMS et le WhatsApp exigent votre propre fournisseur.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
name* obligatoirestring(body)
channel* obligatoirestring(body)Valeurs: sms · email · whatsapp
descriptionstring(body)
body_modestring(body)Valeurs: static · prompt · template
body* obligatoirestring(body)
subjectstring(body)
template_keystring(body)Modèle sectoriel de départ. Renvoyés par list_agent_templates.
tostring(body)Valeurs: caller · variable · fixed
to_varstring(body)
to_fixedstring(body)

Requête

curl -X POST https://leracore.com/api/v1/tools/add_agent_message \
  -H "Authorization: Bearer lr_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"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "channel": "sms"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/connect_calendarConnecte Cal.com à un agent pour consulter les disponibilités et réserver pendant l’appel.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
api_key* obligatoirestring(body)La clé Cal.com de l’utilisateur. Jamais renvoyée en lecture.
event_type_id* obligatoirestring(body)Type d’événement Cal.com réservé. Renvoyé par list_calcom_event_types.
timezonestring(body)Fuseau utilisé pour lire les créneaux et réserver.
availability_wait_messagestring(body)Phrase pendant la recherche de créneaux. Vide, celle du moteur.
book_wait_messagestring(body)Phrase pendant la réservation. Vide, celle du moteur.

Requête

curl -X POST https://leracore.com/api/v1/tools/connect_calendar \
  -H "Authorization: Bearer lr_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"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "eventTypeId": "123456",
    "functions": [
      "consultar_disponibilidad",
      "reservar_cita"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/set_post_call_actionsDéfinit ce qui se passe à la fin de l’appel : envoyer un message ou appeler une de vos fonctions, avec une condition facultative sur l’analyse.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
actions* obligatoirearray<object>(body)

Requête

curl -X POST https://leracore.com/api/v1/tools/set_post_call_actions \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "actions": []
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "count": 2
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/update_agent_functionModifie une fonction par son nom. Seuls les champs fournis changent ; pour renommer, supprimez et recréez.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
name* obligatoirestring(body)Nom de la fonction à modifier.
descriptionstring(body)Quand l’agent doit utiliser cette fonction.
urlstring(body)URL de votre système. Elle doit être en https et joignable de l’extérieur.
methodstring(body)Méthode HTTP utilisée pour appeler votre URL. POST par défaut.Valeurs: GET · POST · PUT · PATCH · DELETE
headersarray<object>(body)Vos propres en-têtes. content-type et ceux commençant par x-lera- ne sont pas admis.
parametersarray<object>(body)Données recueillies pendant l’appel et envoyées dans la requête.
speak_during_executionboolean(body)Si l’agent parle pendant l’exécution, pour que l’attente ne soit pas du silence.
wait_messagestring(body)Phrase dite par l’agent pendant l’exécution. Vide utilise celle du moteur.
wait_after_msnumber(body)Millisecondes que la fonction doit prendre avant de dire la phrase d’attente. 1000 conseillé.
thinking_soundboolean(body)
speak_after_executionboolean(body)Si l’agent parle après l’exécution. Avec false, le tour se ferme sauf échec.
mock_responsestring(body)Réponse de test pour le panneau. En appel réel, votre URL est appelée.
response_capturesarray<object>(body)Champs de votre réponse enregistrés comme variables.
timeout_msnumber(body)Attente maximale de votre système, en millisecondes.

Requête

curl -X POST https://leracore.com/api/v1/tools/update_agent_function \
  -H "Authorization: Bearer lr_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"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/remove_agent_functionSupprime une fonction de l’agent et la retire de toute étape du flux qui l’utilisait.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
name* obligatoirestring(body)Nom de la fonction à supprimer.

Requête

curl -X POST https://leracore.com/api/v1/tools/remove_agent_function \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "name": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functionName": "consultar_pedido",
    "functions": []
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/remove_calendar_functionsDéconnecte l’agenda d’un agent. Pensez à publier ensuite.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/remove_calendar_functions \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
Base de connaissances
LECTUREPOST /api/v1/tools/discover_siteDécouvre les pages d’un site via son sitemap pour choisir lesquelles ajouter. Lecture seule.

Paramètres

NomDescription
url* obligatoirestring(body)URL de votre système. Elle doit être en https et joignable de l’extérieur.

Requête

curl -X POST https://leracore.com/api/v1/tools/discover_site \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://tu-sistema.example.com/consultar"
}'

Réponses

CodeDescription
200
{
  "result": {
    "pages": [
      {
        "url": "https://example.com/precios",
        "title": "Precios"
      }
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_knowledgeRenvoie les fiches de connaissance du projet (titre et réponse). Un agent ne les utilise que dans les nœuds de flux qui les référencent ; ce qu’il consulte pendant la conversation, ce sont ses bases de connaissances (list_knowledge_bases).

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_knowledge \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_knowledge_basesRenvoie les bases de connaissances du projet avec leur statut et leurs documents.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_knowledge_bases \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/test_knowledge_searchTeste une question contre la base de connaissances comme l’agent la chercherait : ce qui est recherché, quels segments sortent avec leur ressemblance, et lesquels arriveraient à l’agent ou sont laissés de côté et pourquoi. Ne modifie rien.

Paramètres

NomDescription
question* obligatoirestring(body)La question, écrite comme la personne la dirait.
agent_idstring(body)L’agent dont les bases et les réglages sont utilisés (ceux de son brouillon).
node_idstring(body)Agents de flux uniquement : le nœud dont les bases s’ajoutent à celles de l’agent.
knowledge_base_idsarray<string>(body)Sans agent_id : les bases à tester, avec les réglages par défaut.

Requête

curl -X POST https://leracore.com/api/v1/tools/test_knowledge_search \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "question": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "pregunta": "¿Qué horario tenéis el sábado?",
    "consulta": "¿Qué horario tenéis el sábado?",
    "condensada": false,
    "canal": "voz",
    "topK": 3,
    "minScore": 0.28,
    "bases": 1,
    "fragmentos": [
      {
        "documento": "Horario del sábado",
        "fuenteId": "cmk...",
        "baseId": "cmk...",
        "puntuacion": 0.61,
        "entra": true,
        "texto": "La piscina abre los sábados de 9:00 a 14:00."
      },
      {
        "documento": "Precios",
        "fuenteId": "cmk...",
        "baseId": "cmk...",
        "puntuacion": 0.19,
        "entra": false,
        "fuera": "parecido_bajo",
        "texto": "La entrada cuesta 5 euros."
      }
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/add_knowledgeAjoute une fiche de connaissance (titre et réponse). Seuls les nœuds de flux qui la référencent la lisent : pour qu’un agent sache quelque chose, ajoutez un document à sa base avec add_knowledge_source.

Paramètres

NomDescription
title* obligatoirestring(body)Titre qui l’identifie et par lequel on la cherche.
answer* obligatoirestring(body)L’information donnée par l’agent en répondant.
keywordsarray<string>(body)Mots par lesquels cette entrée est trouvée.

Requête

curl -X POST https://leracore.com/api/v1/tools/add_knowledge \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "title": "texto de ejemplo",
  "answer": "texto de ejemplo",
  "keywords": []
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "entryId": "cmk...",
    "title": "Horario",
    "action": "add"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/add_knowledge_sourceAjoute un document à une base : du texte ou une page web, relue automatiquement toutes les 12 heures.

Paramètres

NomDescription
knowledge_base_id* obligatoirestring(body)Id de la base. Renvoyé par list_knowledge_bases.
kind* obligatoirestring(body)Si le document est du texte collé ou une page web.Valeurs: text · url
titlestring(body)Titre qui l’identifie et par lequel on la cherche.
textstring(body)Le contenu collé, quand le document est du texte.
urlstring(body)URL de votre système. Elle doit être en https et joignable de l’extérieur.

Requête

curl -X POST https://leracore.com/api/v1/tools/add_knowledge_source \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "knowledge_base_id": "cmk1a2b3c...",
  "kind": "text",
  "title": "texto de ejemplo",
  "text": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "id": "cmk...",
    "kind": "text",
    "title": "Precios",
    "status": "processing"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/analyze_websiteLit le site de l’entreprise et en extrait nom, activité, services, FAQ, ton et un accueil suggéré.

Paramètres

NomDescription
url* obligatoirestring(body)URL de votre système. Elle doit être en https et joignable de l’extérieur.

Requête

curl -X POST https://leracore.com/api/v1/tools/analyze_website \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://tu-sistema.example.com/consultar"
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/create_knowledge_baseCrée une base de connaissances vide. Les documents s’ajoutent ensuite et elle s’assigne à un agent.

Paramètres

NomDescription
name* obligatoirestring(body)Nom de la base de connaissances.

Requête

curl -X POST https://leracore.com/api/v1/tools/create_knowledge_base \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "name": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "id": "cmk...",
    "name": "Web de la clínica",
    "status": "empty"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/update_knowledgeModifie une entrée de connaissance par son id. Seuls les champs fournis changent.

Paramètres

NomDescription
id* obligatoirestring(body)Id de l’entrée. Renvoyé par list_knowledge.
titlestring(body)Titre qui l’identifie et par lequel on la cherche.
answerstring(body)L’information donnée par l’agent en répondant.
keywordsarray<string>(body)Mots par lesquels cette entrée est trouvée.
statusstring(body)Si l’entrée est publiée ou en brouillon.Valeurs: draft · published

Requête

curl -X POST https://leracore.com/api/v1/tools/update_knowledge \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "cmk1a2b3c...",
  "title": "texto de ejemplo",
  "answer": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "entryId": "cmk...",
    "title": "Horario",
    "action": "update"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/remove_knowledgeSupprime une fiche de connaissance par son id. Pour retirer un document d’une base de connaissances, remove_knowledge_source.

Paramètres

NomDescription
id* obligatoirestring(body)Id de l’entrée. Renvoyé par list_knowledge.

Requête

curl -X POST https://leracore.com/api/v1/tools/remove_knowledge \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "entryId": "cmk...",
    "action": "remove"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/remove_knowledge_sourceRetire un document d’une base et supprime ses fragments : l’agent ne peut plus s’en servir.

Paramètres

NomDescription
knowledge_base_id* obligatoirestring(body)Id de la base. Renvoyé par list_knowledge_bases.
source_id* obligatoirestring(body)Id du document dans la base. Renvoyé par list_knowledge_bases.

Requête

curl -X POST https://leracore.com/api/v1/tools/remove_knowledge_source \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "knowledge_base_id": "cmk1a2b3c...",
  "source_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "id": "cmk..."
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
Variables et webhook de pré-appel
LECTUREPOST /api/v1/tools/get_pre_call_webhookRenvoie la configuration du webhook de pré-appel. Des en-têtes, seuls les noms sont renvoyés.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_pre_call_webhook \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/add_call_variableAjoute une variable d’appel, utilisable comme {{nom}} dans l’accueil, les instructions et les fonctions.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
name* obligatoirestring(body)Nom de la variable, utilisé comme {{nom}}.
descriptionstring(body)Ce que contient la variable, pour que l’agent sache l’utiliser.
default_valuestring(body)Valeur prise par la variable si l’appel n’en fournit pas.

Requête

curl -X POST https://leracore.com/api/v1/tools/add_call_variable \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "name": "texto de ejemplo",
  "description": "texto de ejemplo",
  "default_value": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "variableName": "nombre_cliente",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/test_pre_call_webhookDéclenche le webhook avec un numéro d’exemple et montre la réponse de votre système, sans appel.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
from_numberstring(body)Numéro d’exemple utilisé pour le test.

Requête

curl -X POST https://leracore.com/api/v1/tools/test_pre_call_webhook \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "from_number": "+34600111222"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "respondio": true,
    "ms": 412,
    "intentos": 1,
    "variables_que_devuelve": [
      "nombre_cliente",
      "ultimo_pedido"
    ],
    "problemas": []
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/set_pre_call_webhookDéfinit l’URL interrogée avant de décrocher, pour que l’accueil connaisse déjà le nom de l’appelant.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
url* obligatoirestring(body)URL de votre système. Elle doit être en https et joignable de l’extérieur.
budget_msnumber(body)Limite TOTALE d’attente. C’est du silence : ne l’augmentez pas sans raison.
channelsarray<string>(body)À quelles portes il interroge : entrant, widget web ou sortant.
allowarray<string>(body)Ce que votre système peut renvoyer. Par défaut, seulement des variables.
on_failurestring(body)Que faire si votre endpoint ne répond pas : prendre l’appel ou non.Valeurs: continue · reject

Requête

curl -X POST https://leracore.com/api/v1/tools/set_pre_call_webhook \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "url": "https://tu-sistema.example.com/consultar",
  "budget_ms": 1000,
  "channels": []
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/update_call_variableModifie une variable d’appel par son nom. Seuls les champs fournis changent.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
name* obligatoirestring(body)Nom de la variable à modifier.
descriptionstring(body)Ce que contient la variable.
default_valuestring(body)Valeur prise par la variable si l’appel n’en fournit pas.

Requête

curl -X POST https://leracore.com/api/v1/tools/update_call_variable \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "name": "texto de ejemplo",
  "description": "texto de ejemplo",
  "default_value": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "variableName": "nombre_cliente",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/remove_call_variableSupprime une variable d’appel d’un agent.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.
name* obligatoirestring(body)Nom de la variable à supprimer.

Requête

curl -X POST https://leracore.com/api/v1/tools/remove_call_variable \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c...",
  "name": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "agentId": "cmk1a2b3c...",
    "variableName": "nombre_cliente",
    "functions": [
      "consultar_pedido"
    ]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/remove_pre_call_webhookRetire le webhook de pré-appel. L’agent ne sait plus qui appelle avant de décrocher.

Paramètres

NomDescription
agent_id* obligatoirestring(body)Id de l’agent. Renvoyé par list_agents.

Requête

curl -X POST https://leracore.com/api/v1/tools/remove_pre_call_webhook \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "agent_id": "cmk1a2b3c..."
}'

Réponses

CodeDescription
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

400Requête invalide
403Interdit
Liste d’exclusion
LECTUREPOST /api/v1/tools/list_optout_numbersRenvoie les numéros exclus des appels sortants.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_optout_numbers \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": {
    "numbers": [{
      "e164": "+34600111222",
      "reason": "pidió no recibir más llamadas",
      "createdAt": "2026-08-14T09:12:00.000Z"
    }]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/tools/add_optout_numberExclut un numéro des appels sortants : l’agent ne le rappellera jamais.

Paramètres

NomDescription
e164* obligatoirestring(body)Numéro au format E.164, avec indicatif pays (+34600111222).
reasonstring(body)Pourquoi le numéro est exclu. C’est enregistré.

Requête

curl -X POST https://leracore.com/api/v1/tools/add_optout_number \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "e164": "+34600111222",
  "reason": "texto de ejemplo"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "e164": "+34600111222"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERPOST /api/v1/tools/remove_optout_numberRetire un numéro de la liste d’exclusion : il redevient appelable.

Paramètres

NomDescription
e164* obligatoirestring(body)Numéro au format E.164, avec indicatif pays (+34600111222).

Requête

curl -X POST https://leracore.com/api/v1/tools/remove_optout_number \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "e164": "+34600111222"
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "e164": "+34600111222"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
Compte et canal web
LECTUREPOST /api/v1/tools/get_billing_summaryRenvoie la consommation du mois (minutes de voix, et chats et messages de l’agent de chat), le solde et les limites. Dans un projet enfant, le solde arrive vide.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_billing_summary \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": {
    "isBillingChild": false,
    "balanceCents": 4210,
    "minutesUsed": 312.5,
    "chatsThisMonth": 41,
    "chatMessagesUsed": 268
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/get_web_embed_codeRenvoie le code (<script>) pour mettre votre agent sur votre site. Avec voice_agent_id le visiteur peut appeler ; avec chat_agent_id il peut écrire ; avec les deux, il choisit depuis le même bouton. Il contient un emplacement pour votre clé publique, à copier depuis Réglages → API Keys → Public Keys.

Paramètres

NomDescription
voice_agent_idstring(body)L’agent vocal qui prend l’appel depuis le site. Facultatif si vous donnez chat_agent_id.
chat_agent_idstring(body)L’agent de chat qui répond par écrit. Facultatif si vous donnez voice_agent_id.
agent_idstring(body)Un agent quelconque : il va au canal de son type (voix ou chat). Un raccourci quand vous n’en mettez qu’un.

Requête

curl -X POST https://leracore.com/api/v1/tools/get_web_embed_code \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": {
    "agents": {
      "voice": { "id": "cmk...", "name": "Recepción", "kind": "voice", "published": true },
      "chat": { "id": "cmq...", "name": "Chat recepción", "kind": "chat", "published": true }
    },
    "snippet": "<script src=\"https://leracore.com/widget/lera-widget.v1.js\" type=\"module\" data-public-key=\"TU_CLAVE_PUBLICA\" data-voice-agent-id=\"cmk...\" data-chat-agent-id=\"cmq...\" data-theme-color=\"#0033A0\"></script>",
    "where_is_the_key": "Ajustes -> API Keys -> pestaña Public Keys",
    "keys": [{ "name": "Web pública", "prefix": "lr_pk_a1b2c3d4", "allowedOrigins": ["https://example.com"] }]
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_integrationsRenvoie les intégrations du projet et leur statut. Aujourd’hui, le webhook post-appel.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_integrations \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": [
    {
      "id": "cmk...",
      "type": "post_call_webhook",
      "status": "connected",
      "displayName": "Webhook de mi ERP"
    }
  ]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREPOST /api/v1/tools/list_widget_keysRenvoie les clés du canal web avec leurs sites autorisés et leur dernière utilisation.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/tools/list_widget_keys \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "result": [
    {
      "id": "cmk...",
      "name": "Web pública",
      "prefix": "lr_pk_a1b2c3d4",
      "allowedOrigins": [
        "https://example.com"
      ],
      "requireCaptcha": false,
      "lastUsedAt": "2026-09-05T18:22:00.000Z"
    }
  ]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPOST /api/v1/tools/set_post_call_webhookDéfinit l’URL vers laquelle Lera envoie chaque appel terminé, avec résumé, transcription et données extraites.

Paramètres

NomDescription
url* obligatoirestring(body)URL de votre système. Elle doit être en https et joignable de l’extérieur.
enabledboolean(body)Activer ou désactiver l’envoi sans perdre l’URL. true par défaut.

Requête

curl -X POST https://leracore.com/api/v1/tools/set_post_call_webhook \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://tu-sistema.example.com/consultar",
  "enabled": true
}'

Réponses

CodeDescription
200
{
  "result": {
    "ok": true,
    "id": "cmk...",
    "type": "webhook",
    "status": "enabled",
    "url": "https://tu-sistema.example.com/llamadas"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
Comptes partenaires
LECTUREGET /api/v1/partner/clientsChaque client du compte partenaire avec ses minutes, ses chats et messages (chats fermés et réponses de l’agent), les appels que son agent a passés à une personne par une ligne Lera avec leur montant (transfers et transfer_fee_cents, déjà compris dans cost_cents) et son coût de la période demandée, ou du mois en cours si vous n’en demandez aucune, pour le refacturer. Le solde appartient au compte ; ce qui est détaillé par client, c’est la consommation. La clé doit être émise depuis le compte racine : une clé créée dans un client répond 403 not_a_partner_root. Dans le panneau, la même chose se trouve sous Paramètres → Clients.

Paramètres

NomDescription
fromstring(query)Début de la période, en ISO 8601. Sans lui, le mois en cours. Pour facturer un mois clos, indiquez-le.
tostring(query)Fin de la période, en ISO 8601 et exclusive. Sans elle, maintenant.

Requête

curl "https://leracore.com/api/v1/partner/clients?from=...&to=..." \
  -H "Authorization: Bearer lr_sk_..."

Réponses

CodeDescription
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",
    "external_id": "erp-4821",
    "phone_number": "+34600333444",
    "minutes": 128.4,
    "chats": 41,
    "chat_messages": 268,
    "cost_cents": 1794,
    "transfers": 6,
    "transfer_fee_cents": 180,
    "white_label": true,
    "max_concurrent_calls": 3,
    "monthly_cost_limit_cents": 5000,
    "monthly_minute_limit": null,
    "monthly_message_limit": null,
    "monthly_limit_action": "notify"
  }]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/partner/clientsCréez un client dans votre compte partenaire depuis votre propre système, sans passer par le panneau. En envoyant external_id, l’appel devient idempotent : vous pouvez réessayer sans créer de doublons ; si cet identifiant existe déjà, la réponse est 200 avec created=false et le client existant. Le client dépend de votre compte, partage votre solde et apparaît dans votre console avec sa consommation détaillée. La clé doit être une clé de gestion émise depuis le compte racine.

Paramètres

NomDescription
name* obligatoirestring(body)Nom du client, tel que vous le verrez dans votre console.
external_idstring(body)L’identifiant de ce client dans VOTRE système. Si vous l’envoyez, la création est idempotente : répéter l’appel renvoie le client existant au lieu d’en créer un autre.
contact_emailstring(body)E-mail de contact du client (celui de l’entreprise cliente, pas le vôtre).
contact_first_namestring(body)Prénom de la personne de contact du client.
contact_last_namestring(body)Nom de la personne de contact du client.
included_minutesinteger(body)Son forfait mensuel en MINUTES, pour la voix. Elles se renouvellent seules chaque mois au jour de début du service. Le définir passe « une fois épuisé » à block.
included_messagesinteger(body)Son forfait mensuel en MESSAGES, pour le chat : un message est une réponse de l’agent. À part des minutes. Le définir passe le chat à block.
included_transfersinteger(body)Appels passés à une personne par une ligne d’entrée inclus par mois, dans l’agent vocal : ils partagent son jour de début. Une fois épuisés, l’agent continue de les passer et on vous prévient ; chaque appel en plus compte en dépassement. Seuls comptent les appels par une ligne d’entrée fournie par nous ; par le numéro propre du client, non.
cycle_startstring(body)Jour de début du service (ISO 8601). Par défaut, aujourd’hui. Vaut pour la voix et le chat, sauf si vous envoyez messages_cycle_start.
messages_cycle_startstring(body)Jour de début du service du chat (ISO 8601), s’il n’est pas le même que celui de la voix.

Requête

curl -X POST https://leracore.com/api/v1/partner/clients \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "created": true,
  "client": {
    "workspace_id": "cmk...",
    "name": "Colegio de Medicos",
    "slug": "colegio-de-medicos",
    "status": "ACTIVE",
    "external_id": "erp-4821",
    "contact_email": "secretaria@colegio.example",
    "contact_first_name": "Ana",
    "contact_last_name": "Pérez",
    "phone_number": null,
    "minutes": 0,
    "chats": 0,
    "chat_messages": 0,
    "cost_cents": 0,
    "white_label": true,
    "max_concurrent_calls": null,
    "monthly_cost_limit_cents": null,
    "monthly_minute_limit": null,
    "monthly_message_limit": null,
    "monthly_limit_action": "notify"
  }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREGET /api/v1/partner/clients/{workspace_id}Un client précis avec tout ce qui est réglé (ses plafonds, ce qui se passe une fois épuisé, son forfait et ses packs de minutes et de messages, marque blanche, identifiant et e-mail) et son activité en plus de sa dépense : appels totaux, des 7 derniers jours et le dernier. C’est ce qui dit qu’un pilote est vivant, ce que le coût ne montre pas. Un espace hors de votre racine répond 404.

Paramètres

NomDescription
fromstring(query)Début de la période, en ISO 8601. Sans lui, le mois en cours.
tostring(query)Fin de la période, en ISO 8601 et exclusive. Sans elle, maintenant.

Requête

curl "https://leracore.com/api/v1/partner/clients/{workspace_id}?from=...&to=..." \
  -H "Authorization: Bearer lr_sk_..."

Réponses

CodeDescription
200
{
  "workspace_id": "cmk...",
  "name": "Empresa Ejemplo",
  "slug": "empresa-ejemplo",
  "status": "ACTIVE",
  "external_id": "erp-4821",
  "contact_email": "secretaria@empresa.example",
  "phone_number": "+34600333444",
  "minutes": 128.4,
  "chats": 41,
  "chat_messages": 268,
  "cost_cents": 1794,
  "transfers": 6,
  "transfer_fee_cents": 180,
  "white_label": true,
  "max_concurrent_calls": null,
  "monthly_cost_limit_cents": 5000,
  "monthly_minute_limit": 500,
  "monthly_message_limit": 1000,
  "monthly_transfer_limit": 10,
  "monthly_limit_action": "block",
  "messages_limit_action": "block",
  "paused": false,
  "minutes_plan": {
    "included_minutes": 500,
    "cycle_start": "2026-09-15T00:00:00.000Z",
    "cycle": { "from": "2026-09-15T00:00:00.000Z", "to": "2026-10-15T00:00:00.000Z" },
    "used_this_cycle": 312.5,
    "plan_left": 187.5,
    "pack_left": 200,
    "overage": 0,
    "remaining": 387.5,
    "percent_used": 44.6,
    "exhausted": false,
    "on_exhausted": "block"
  },
  "messages_plan": {
    "included_messages": 1000,
    "cycle_start": "2026-09-15T00:00:00.000Z",
    "cycle": { "from": "2026-09-15T00:00:00.000Z", "to": "2026-10-15T00:00:00.000Z" },
    "used_this_cycle": 418,
    "plan_left": 582,
    "pack_left": 0,
    "overage": 0,
    "remaining": 582,
    "percent_used": 41.8,
    "exhausted": false,
    "on_exhausted": "block"
  },
  "transfers_plan": {
    "included_transfers": 10,
    "cycle_start": "2026-09-15T00:00:00.000Z",
    "cycle": { "from": "2026-09-15T00:00:00.000Z", "to": "2026-10-15T00:00:00.000Z" },
    "used_this_cycle": 6,
    "plan_left": 4,
    "pack_left": 0,
    "overage": 0,
    "remaining": 4,
    "percent_used": 60,
    "exhausted": false,
    "on_exhausted": "notify"
  },
  "period": { "from": "2026-09-01T00:00:00.000Z", "to": "2026-09-07T12:00:00.000Z" },
  "calls_total": 214,
  "calls_last_7_days": 31,
  "last_call_at": "2026-09-07T11:42:00.000Z"
}

application/json; charset=utf-8

400Requête invalide
403Interdit
METTRE À JOURPATCH /api/v1/partner/clients/{workspace_id}Modifie ce qui est réglé pour un client : son forfait en minutes et en messages, son plafond en euros, ce qui se passe une fois épuisé (block ou notify), la pause, la marque blanche, ses lignes et ses infos. Seul ce que vous envoyez change. Renvoie le client comme GET.

Paramètres

NomDescription
included_minutesinteger | null(body)Son forfait en MINUTES par cycle, pour la voix. null le retire.
included_messagesinteger | null(body)Son forfait en MESSAGES par cycle, pour le chat. null le retire : sans messages mensuels ni pack de messages, son chat n’a pas de plafond propre.
included_transfersinteger | null(body)Appels passés à une personne par une ligne d’entrée inclus par cycle, dans l’agent vocal (son cycle est cycle_start). Jamais coupés : une fois épuisés, l’agent continue de les passer, on vous prévient et chaque appel en plus est un dépassement. null les retire. Par le numéro propre du client, ils ne comptent pas.
cycle_startstring | null(body)Jour de début du service (ISO 8601) : ses minutes se renouvellent ce jour-là chaque mois, et ses messages aussi sauf si vous envoyez messages_cycle_start. null revient au mois calendaire.
messages_cycle_startstring | null(body)Jour de début du service du chat (ISO 8601) : ses messages se renouvellent ce jour-là chaque mois. null revient au mois calendaire.
monthly_cost_limit_centsinteger | null(body)Plafond de DÉPENSES en centimes d’euro par mois calendaire, voix et chat ensemble : le maximum que ce client peut vous coûter sur Lera. Ce n’est ni included_minutes ni included_messages. null le retire.
on_exhaustedstring(body)Ce qui se passe quand il épuise le sien (forfait + pack) ou atteint le plafond de dépenses : block arrête de répondre ; notify continue et vous prévient par e-mail. Vaut pour la voix et le chat, sauf si vous envoyez messages_on_exhausted. Dans le chat, block n’ouvre plus de conversations et laisse finir celles déjà ouvertes. Sans effet sur les transferts inclus, qui continuent toujours.Valeurs: block · notify
messages_on_exhaustedstring(body)La même chose pour le chat seul, s’il ne fait pas comme la voix : block n’ouvre plus de chats ; notify continue et vous prévient.
pausedboolean(body)true le met en pause (s’il ne vous paie plus) : son agent ne répond plus jusqu’à réactivation.
max_concurrent_callsinteger | null(body)Combien d’appels simultanés au maximum. null : pas de plafond propre.
external_idstring | null(body)Son id dans votre système. Unique parmi vos clients : si un autre l’a, 409 external_id_taken.
contact_emailstring | null(body)E-mail de contact du client.
contact_first_namestring(body)Prénom de la personne de contact du client.
contact_last_namestring(body)Nom de la personne de contact du client.
namestring(body)Nom du client.

Requête

curl -X POST https://leracore.com/api/v1/partner/clients/{workspace_id} \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "workspace_id": "cmk...",
  "monthly_cost_limit_cents": 5000,
  "monthly_minute_limit": 500,
  "monthly_message_limit": 1000,
  "monthly_limit_action": "block",
  "messages_limit_action": "block",
  "monthly_transfer_limit": 10,
  "paused": false,
  "minutes_plan": { "included_minutes": 500, "remaining": 387.5, "on_exhausted": "block" },
  "messages_plan": { "included_messages": 1000, "remaining": 582, "on_exhausted": "block" },
  "transfers_plan": { "included_transfers": 10, "remaining": 4, "on_exhausted": "notify" }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREGET /api/v1/partner/clients/{workspace_id}/minute-packsL’état de ses minutes et l’historique de son pack de minutes : achats (pack), corrections (adjustment) et ce qu’ont consommé ses appels (consumption ; minutes est ce qui est sorti du pack et call_minutes la durée). Les chats vont dans le pack de messages (message-packs). Les 100 derniers.

Paramètres

Aucun paramètre.

Requête

curl "https://leracore.com/api/v1/partner/clients/{workspace_id}/minute-packs" \
  -H "Authorization: Bearer lr_sk_..."

Réponses

CodeDescription
200
{
  "minutes_plan": { "included_minutes": 500, "pack_left": 200, "remaining": 387.5, "on_exhausted": "block" },
  "movements": [
    { "id": "cmk...", "kind": "pack", "minutes": 200, "call_minutes": null, "overage_minutes": null, "reference": "factura-77", "note": null, "created_at": "2026-10-01T09:00:00.000Z" }
  ]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/partner/clients/{workspace_id}/minute-packsLe client vous a payé un pack de minutes : il s’utilise après son forfait et n’expire pas. Acheter un pack réarme les alertes de 80 % et d’épuisement.

Paramètres

NomDescription
minutes* obligatoireinteger(body)Minutes du pack (positives). Pour retirer, négatives avec kind adjustment.
referencestring(body)L’id du paiement dans votre système. Rend l’opération idempotente : la répéter répond 200 avec duplicate=true sans ajouter deux fois.
kindstring(body)pack (par défaut) ou adjustment pour corriger.Valeurs: pack · adjustment
notestring(body)Une note à vous. Son client ne la voit pas.

Requête

curl -X POST https://leracore.com/api/v1/partner/clients/{workspace_id}/minute-packs \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "duplicate": false,
  "minutes_plan": { "included_minutes": 500, "pack_left": 400, "remaining": 587.5, "on_exhausted": "block" }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
LECTUREGET /api/v1/partner/clients/{workspace_id}/message-packsL’état de ses messages de chat et l’historique de son pack de messages : achats (pack), corrections (adjustment) et ce qu’ont consommé ses chats (consumption ; messages est ce qui est sorti du pack et chat_messages le nombre de réponses de l’agent). Un message est une réponse de l’agent : le message d’accueil fixe ne compte pas. Les 100 derniers.

Paramètres

Aucun paramètre.

Requête

curl "https://leracore.com/api/v1/partner/clients/{workspace_id}/message-packs" \
  -H "Authorization: Bearer lr_sk_..."

Réponses

CodeDescription
200
{
  "messages_plan": { "included_messages": 1000, "pack_left": 1000, "remaining": 1582, "on_exhausted": "block" },
  "movements": [
    { "id": "cmk...", "kind": "pack", "messages": 1000, "chat_messages": null, "overage_messages": null, "reference": "cobro-123", "note": null, "created_at": "2026-10-01T09:00:00.000Z" }
  ]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/partner/clients/{workspace_id}/message-packsLe client vous a payé un pack de messages pour son chat : il s’utilise après ses messages du mois et n’expire pas. À part des minutes. Acheter un pack réarme les alertes de messages de 80 % et d’épuisement.

Paramètres

NomDescription
messages* obligatoireinteger(body)Messages du pack (positifs). Pour retirer, négatifs avec kind adjustment.
referencestring(body)L’id du paiement dans votre système. Rend l’opération idempotente pour les messages : si un même paiement inclut minutes et messages, envoyez les deux packs avec la même reference.
kindstring(body)pack (par défaut) ou adjustment pour corriger.Valeurs: pack · adjustment
notestring(body)Une note à vous. Son client ne la voit pas.

Requête

curl -X POST https://leracore.com/api/v1/partner/clients/{workspace_id}/message-packs \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "duplicate": false,
  "messages_plan": { "included_messages": 1000, "pack_left": 1000, "remaining": 1582, "on_exhausted": "block" }
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/partner/clients/{workspace_id}/linesAttribue à votre client sa ligne d’entrée, vers laquelle il renvoie son numéro habituel. C’est vous qui gérez la téléphonie de vos clients : ils voient leur ligne et comment renvoyer, rien de plus. Une ligne par compte est incluse et les suivantes ont un abonnement mensuel, à votre charge. Les codes de renvoi, selon l’opérateur, avec get_forwarding_codes et l’en-tête X-Lera-Client. workspace_id accepte aussi son external_id.

Paramètres

NomDescription
agent_idstring(body)L’agent vocal publié qui répond. Inutile si le client n’en a qu’un.
labelstring(body)Un nom pour la ligne (par exemple, le site).
accept_line_feeboolean(body)Obligatoire pour une ligne supplémentaire : vous acceptez son abonnement mensuel (line_fee_cents), déduit de votre solde dès aujourd’hui. Sans lui, 400 line_fee_not_accepted : répéter la requête n’en achète pas deux.

Requête

curl -X POST https://leracore.com/api/v1/partner/clients/{workspace_id}/lines \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "assigned": "+34848000000",
  "line_fee_cents": 300,
  "next_line_is_extra": true,
  "next_line_blocked_reason": null,
  "lines": [
    { "e164": "+34848000000", "label": null, "agent_id": "agt_...", "included": false, "release_at": null, "release_reason": null }
  ]
}

application/json; charset=utf-8

400Requête invalide
403Interdit
SUPPRIMERDELETE /api/v1/partner/clients/{workspace_id}/lines/{e164}Libère une ligne de votre client. Si elle n’a jamais reçu d’appel, elle est libérée aussitôt ; sinon, elle n’est pas réattribuée pendant 30 jours au cas où un renvoi y pointerait encore. Que votre client retire son renvoi.

Paramètres

Aucun paramètre. Envoyez un objet vide.

Requête

curl -X POST https://leracore.com/api/v1/partner/clients/{workspace_id}/lines/{e164} \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "released": "+34848000000",
  "line_fee_cents": 300,
  "next_line_is_extra": true,
  "next_line_blocked_reason": null,
  "lines": []
}

application/json; charset=utf-8

400Requête invalide
403Interdit
CRÉERPOST /api/v1/partner/clients/{workspace_id}/sessionsOuvre le panneau à votre client sans inscription. Demandez-le depuis votre serveur (jamais depuis le navigateur : il porte votre clé) et redirigez la personne vers url. Le lien sert UNE fois et expire au bout de 5 minutes. workspace_id accepte aussi son external_id.

Paramètres

NomDescription
email* obligatoirestring(body)L’e-mail de la personne qui se connecte. Sans utilisateur, il est créé uniquement dans ce client. S’il a déjà accès à un autre compte Lera, 409 email_in_use.
namestring(body)Son nom, si l’utilisateur est créé.
rolestring(body)member (par défaut) : Lecteur, lecture seule. editor : Éditeur, modifie aussi les textes de ses agents et ses bases de connaissances, teste et publie ; jamais le modèle, la voix, les fonctions ni la téléphonie. Vous gérez son équipe et ses clés. Aucun ne voit vos autres clients ni votre console.Valeurs: member · editor

Requête

curl -X POST https://leracore.com/api/v1/partner/clients/{workspace_id}/sessions \
  -H "Authorization: Bearer lr_sk_..." \
  -H "Content-Type: application/json" \
  -d '{}'

Réponses

CodeDescription
200
{
  "url": "https://leracore.com/app/enter?token=...",
  "expires_at": "2026-10-03T10:05:00.000Z",
  "user_created": true,
  "role": "member"
}

application/json; charset=utf-8

400Requête invalide
403Interdit
Catalogue des opérations
LECTUREGET /api/v1/toolsRenvoie le catalogue des opérations avec leur schéma d’entrée, pour les découvrir depuis le code.

Paramètres

Aucun paramètre.

Requête

curl "https://leracore.com/api/v1/tools" \
  -H "Authorization: Bearer lr_sk_..."

Réponses

CodeDescription
200
{
  "tools": [{
    "name": "list_agents",
    "description": "...",
    "input_schema": { "type": "object", "properties": {} }
  }]
}

application/json; charset=utf-8

400Requête invalide
403Interdit