> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zelto.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Cargar una llamada

> PON una llamada en la forma canónica de Zelto (el valor predeterminado), o una carga útil webhook Vapi/Retell nativa seleccionada con el `X-Zelto-Provider` cabecera. La entrega se reconoce inmediatamente y se procesa de forma asíncrona en una conversación + transcripción. Deduplicado por el identificador de llamada: la re-carga de la misma llamada la actualiza en su lugar y nunca se carga dos veces. `status-update`) son aceptados e ignorados.



## OpenAPI

````yaml /es/docs-openapi.json post /webhooks/calls
openapi: 3.1.0
info:
  title: API REST de Zelto
  version: v1
  description: >-
    Acceso programático a tu organización de Zelto. Cada endpoint está limitado
    a la organización a la que pertenece la clave de API. Crea una clave en
    Configuración → Integraciones → Carga de llamadas por API.
servers:
  - url: https://api.zelto.ai
    description: Producción
security:
  - bearerAuth: []
tags:
  - name: Agentes
    description: Bots de voz y chat normalizados mediante el flujo de ingestión de Zelto.
  - name: Conversaciones
    description: >-
      Llamadas, chats y mensajes de voz, junto con sus transcripciones y
      grabaciones.
  - name: Métricas del cliente
    description: >-
      Evaluaciones proporcionadas por el cliente y asociadas a una llamada.
      Requiere que las métricas estén habilitadas.
  - name: Revisiones
    description: Estado de revisión humana de las conversaciones.
  - name: Colas de revisión
    description: Agrupa y dirige conversaciones para revisarlas por lotes.
  - name: Empresas
    description: Clientes o marcas para los que trabajan tus agentes, y sus logos.
  - name: Hallazgos
    description: >-
      Problemas estructurados descubiertos durante el análisis, con
      conversaciones y comentarios opcionales.
  - name: Experimentos
    description: >-
      Medición prospectiva de dos versiones de prompt enrutadas externamente
      mediante resultados de monitores independientes.
  - name: Organizaciones
    description: >-
      Aprovisionamiento de organizaciones sin interfaz. Requiere una clave de
      API de administrador o servicio.
paths:
  /webhooks/calls:
    servers:
      - url: https://ingest.zelto.ai
        description: Endpoint de ingestión de AWS
    post:
      tags:
        - Conversations
      summary: Cargar una llamada
      description: >-
        PON una llamada en la forma canónica de Zelto (el valor predeterminado),
        o una carga útil webhook Vapi/Retell nativa seleccionada con el
        `X-Zelto-Provider` cabecera. La entrega se reconoce inmediatamente y se
        procesa de forma asíncrona en una conversación + transcripción.
        Deduplicado por el identificador de llamada: la re-carga de la misma
        llamada la actualiza en su lugar y nunca se carga dos veces.
        `status-update`) son aceptados e ignorados.
      operationId: uploadCall
      parameters:
        - name: X-Zelto-Provider
          in: header
          required: false
          description: >-
            Qué esquema utiliza el cuerpo de la solicitud. `zelto` (la forma
            canónica CallIngest, también utilizada por `livekit`). Nativo `vapi`
            / `retell` También se aceptan cargas webhook.
          schema:
            type: string
            enum:
              - zelto
              - vapi
              - retell
              - livekit
            default: zelto
      requestBody:
        required: true
        description: >-
          Cuando `X-Zelto-Provider` es `zelto` (u omitido), el cuerpo canónico
          CallIngest. Cuando `vapi` / `retell`, la carga útil nativa de webhook
          de ese proveedor.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CallIngest'
      responses:
        '200':
          description: >-
            Aceptado para su procesamiento. También devuelto para entregas
            duplicadas y eventos caídos (no terminales).
          content:
            application/json:
              schema:
                type: object
                required:
                  - received
                properties:
                  received:
                    type: boolean
        '400':
          $ref: '#/components/responses/ValidationFailed'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    CallIngest:
      type: object
      required:
        - call
      description: >-
        Forma canónica de la llamada de Zelto ( `X-Zelto-Provider: zelto`).
        Proveer también `agent.externalId` (encontrar-o-crear) o `agentId`
        (Agregarse a un agente existente).
      properties:
        agent:
          type: object
          description: >-
            Encuentra o crea un agente por tu propia identificación. Requerido a
            menos que `agentId` es dado.
          properties:
            externalId:
              type: string
              minLength: 1
            name:
              type: string
              minLength: 1
              maxLength: 255
              description: Se usa solo cuando se crea el agente por primera vez.
        agentId:
          type: string
          format: uuid
          description: >-
            Adjuntar a un agente de Zelto existente. Tiene prioridad sobre
            `agent.externalId`.
        version:
          type: string
          minLength: 1
          maxLength: 255
          description: >-
            Etiqueta del despliegue que atendió la llamada. Opcional para
            ingesta; envíala en cada llamada para experimentos fiables.
            Distingue mayúsculas y admite de 1 a 255 caracteres sin espacios en
            los extremos. El mismo agente y etiqueta reutilizan una versión; una
            nueva la crea al procesar la primera llamada. Conserva el ID del
            agente y cambia la etiqueta al modificar el prompt o pipeline.
            Mantén la etiqueta original en reintentos. Es un campo de nivel
            superior, no metadata.version. Consulta /es/docs/agent-versions.
        companyExternalId:
          type: string
          minLength: 1
          maxLength: 255
          description: >-
            Su ID estable por llamada para el cliente o marca a la que pertenece
            esta llamada. Cuando las Compañías están habilitadas, Zelto lo
            asigna a una compañía; de lo contrario, la compañía predeterminada
            del agente se usa cuando está disponible.
        call:
          type: object
          required:
            - externalId
          properties:
            externalId:
              type: string
              minLength: 1
              description: >-
                Tu identificador de llamada. Clave de Dedup re-subiendo el mismo
                identificador actualiza la llamada en su lugar.
            startedAt:
              type: string
              format: date-time
            endedAt:
              type: string
              format: date-time
            durationSeconds:
              type: integer
              minimum: 0
              description: Derivado de startAt/endAt cuando se omite.
            endedReason:
              type: string
              maxLength: 100
            cost:
              type: number
              minimum: 0
              description: Costo en dólares.
            recordingUrl:
              type: string
              maxLength: 2048
            recordingUploadId:
              type: string
              format: uuid
              description: >-
                Id. opaca devuelta por POST /v1/grabación-cargas después de la
                carga directa de una grabación local. Mutuamente exclusivo con
                grabaciónUrl.
            customer:
              type: object
              properties:
                number:
                  type: string
                  maxLength: 50
                  description: >-
                    Número de llamada entrante; se utiliza para resolver un
                    receptor.
                name:
                  type: string
                  maxLength: 255
        transcript:
          type: object
          required:
            - turns
          properties:
            turns:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/CallIngestTurn'
        systemPrompt:
          type: string
          description: >-
            Prompt real de la versión que atendió la llamada. Si se omite, se
            usa un turno inicial system. Se captura al observar la versión por
            primera vez o completa un prompt ausente después; no reemplaza una
            captura existente. La etiqueta de versión por sí sola no proporciona
            el prompt.
        metadata:
          type: object
          additionalProperties: true
          description: Metadatos de forma libre almacenados en la conversación.
        versionConfig:
          allOf:
            - $ref: '#/components/schemas/AgentVersionConfig'
          description: >-
            Contexto de la versión que atendió la llamada. Requiere el campo
            version. Se captura al observar la versión; no sobrescribe una
            configuración ya guardada. Use config al registrar mediante POST
            /v1/agents/{id}/versions.
    CallIngestTurn:
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - user
            - assistant
            - system
            - tool
        content:
          type: string
          minLength: 1
        startSeconds:
          type: number
          minimum: 0
        endSeconds:
          type: number
          minimum: 0
        words:
          type: array
          description: >-
            Temporización de audio a nivel de palabra opcional utilizada para la
            reproducción de transcripciones sincronizadas.
          items:
            type: object
            required:
              - word
              - startSeconds
            properties:
              word:
                type: string
                minLength: 1
              startSeconds:
                type: number
                minimum: 0
              endSeconds:
                type: number
                minimum: 0
    AgentVersionConfig:
      type: object
      additionalProperties: true
      description: >-
        Contexto completo de la versión como objeto JSON, hasta 64 KiB
        serializados en UTF-8. Puede incluir llm, stt, tts, herramientas,
        flujos, recuperación y parámetros propios. Solo registra contexto; no
        despliega ni ejecuta esta configuración. No incluya secretos.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: >-
            Mensaje de error legible por humanos, por ejemplo, no autorizado o
            validación fallida.
        message:
          type: string
        details:
          type: object
          additionalProperties: true
  responses:
    ValidationFailed:
      description: El cuerpo de la solicitud ha fallado en la validación.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Clave API no válida o faltante.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Envía `Authorization: Bearer YOUR_API_KEY`. La clave corresponde a una
        sola organización.

````