openapi: 3.2.0 info: title: Samu Meetings API version: 1.0.1 description: Documentación de la API de Samu.ai servers: - url: https://api.samu.ai tags: - name: Meetings paths: /api/meeting: post: summary: Crea una nueva meeting a partir de la información de la llamada proporcionada. El video tardara unos minutos en ser subido. Se devuelve el id de la nueva meeting. tags: - Meetings security: - ApiKeyAuth: [] requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nombre de la llamada eventId: type: string description: ID de la llamada en el provider. De no proporcionarse, se creará de forma automática. required: false provider: $ref: '#/components/schemas/Provider' description: El origen de la llamada (meets, zoom, etc) required: true hostEmail: type: string description: Email del host de la llamada. Debe ser un mail perteneciente a un usuario registrado en samu. conferenceId: type: string description: ID de la conferencia en el provider. De no proporcionarse, se creará de forma automática. dateFrom: type: string format: date-time description: Fecha de inicio de la llamada required: true dateTo: type: string format: date-time description: Fecha de fin de la llamada. De no proporcionarse, se usará la fecha de inicio. required: false media: type: string description: Link al video de la llamada en formato .mp4 o mp3 accesible públicamente. Samu descargara ese archivo y lo subira a nuestro servidor para procesarlo required: true users: type: array description: Lista de usuarios participantes en la llamada además del host. Puede ser un array vacío. Deben ser emails de usuarios registrados en samu. items: type: object properties: providerId: type: string description: ID del usuario en el provider name: type: string description: Nombre del usuario lastName: type: string description: Apellido del usuario email: type: string description: Email del usuario phone: type: string description: Teléfono del usuario stakeholders: type: array description: Lista de stakeholders de la llamada. Puede ser un array vacío. items: type: object properties: providerId: type: string description: ID del stakeholder en el provider name: type: string description: Nombre del stakeholder lastName: type: string description: Apellido del stakeholder email: type: string description: Email del stakeholder phone: type: string description: Teléfono del stakeholder transcription: description: Transcripción de la llamada. De no proporcionarse, se creará de forma automática a partir del video/audio proporcionado. required: false $ref: '#/components/schemas/Transcription' location: type: object description: Ubicación geográfica de la reunión required: false properties: latitude: type: number description: Latitud de la ubicación example: 37.7897442 longitude: type: number description: Longitud de la ubicación example: -122.3998086 responses: '200': description: Meeting creada exitosamente content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': description: Error en la solicitud content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /api/meeting/{id}: put: summary: Actualiza una meeting existente tags: - Meetings security: - ApiKeyAuth: [] parameters: - in: path name: id required: true schema: type: string description: ID de la meeting requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nombre de la llamada hostEmail: type: string description: Email del host de la llamada. Debe ser un mail perteneciente a un usuario registrado en samu. stakeholders: type: array description: Lista de stakeholders de la llamada. Puede ser un array vacío. items: type: object properties: providerId: type: string description: ID del stakeholder en el provider name: type: string description: Nombre del stakeholder lastName: type: string description: Apellido del stakeholder email: type: string description: Email del stakeholder phone: type: string description: Teléfono del stakeholder dateFrom: type: string format: date-time description: Fecha de inicio de la llamada dateTo: type: string format: date-time description: Fecha de fin de la llamada. De no proporcionarse, se usará la fecha de inicio. responses: '200': description: Meeting actualizada exitosamente content: application/json: schema: $ref: '#/components/schemas/SuccessResponse' '400': description: Error en la solicitud content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' get: summary: Obtiene la información de una meeting específica tags: - Meetings security: - ApiKeyAuth: [] parameters: - in: path name: id required: true schema: type: string description: ID de la meeting responses: '200': description: Información de la meeting content: application/json: schema: $ref: '#/components/schemas/Meeting' '400': description: Error en la solicitud content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Meeting no encontrada content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /api/meeting/{id}/transcription: get: summary: Obtiene la transcripción de una meeting específica tags: - Meetings security: - ApiKeyAuth: [] parameters: - in: path name: id required: true schema: type: string description: ID de la meeting responses: '200': description: Transcripción de la meeting content: application/json: schema: type: array items: $ref: '#/components/schemas/MeetingTranscriptionLine' '400': description: Error en la solicitud content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /api/meetings: get: summary: Obtiene un listado de meetings en un rango de fechas tags: - Meetings security: - ApiKeyAuth: [] parameters: - in: query name: dateFrom required: true schema: type: string format: date-time description: Fecha de inicio del rango - in: query name: dateTo required: true schema: type: string format: date-time description: Fecha de fin del rango (máximo 366 días desde dateFrom) - in: query name: limit required: false schema: type: integer minimum: 1 maximum: 500 default: 500 description: Cantidad máxima de meetings a devolver - in: query name: offset required: false schema: type: integer minimum: 0 maximum: 10000 default: 0 description: Cantidad de meetings a saltear (paginación) responses: '200': description: Listado de meetings. El header X-Total-Count indica el total de meetings en el rango (sin paginar). headers: X-Total-Count: schema: type: integer description: Total de meetings en el rango de fechas content: application/json: schema: type: array items: $ref: '#/components/schemas/Meeting' '400': description: Error en la solicitud content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Too Many Requests - Rate limit excedido components: schemas: MeetingTranscriptionLine: type: object properties: text: type: string description: Texto del mensaje date: type: string format: date-time description: Marca de tiempo del mensaje speaker: type: string description: Nombre del hablante SuccessResponse: type: object properties: status: type: string example: ok Provider: type: string description: El origen de la llamada (meets, zoom, etc) enum: - GOOGLE - HUBSPOT - MICROSOFT - ZOOM - AIRCALL - ANURA - LAYER7 - OFFLINE - IVR - MOBILE ErrorResponse: type: object properties: status: type: string example: error message: type: string example: Error message Meeting: type: object properties: id: type: string description: ID de Samu de la llamada name: type: string description: Nombre de la llamada eventId: type: string description: ID del evento en meet/teams provider: $ref: '#/components/schemas/Provider' description: El origen de la llamada (meets, zoom, etc) hostEmail: type: string description: Email del host de la llamada conferenceId: type: string description: ID de la conferencia en el provider stakeholders: type: array description: Lista de stakeholders de la llamada. Puede ser un array vacío. items: type: string description: ID del stakeholder en el provider dateFrom: type: string format: date-time description: Fecha de inicio de la llamada dateTo: type: string format: date-time description: Fecha de fin de la llamada media: type: string description: Link al video de la llamada en formato .mp4 o mp3 accesible públicamente. Samu descargara ese archivo y lo subira a nuestro servidor para procesarlo duration: type: integer description: Duración de la llamada en segundos users: type: array description: Lista de usuarios participantes en la llamada además del host. Puede ser un array vacío. items: type: string description: ID del usuario en el provider score: type: object properties: evaluables: type: object description: Evaluables de la llamada score: type: number description: Puntuación de la llamada feedback: type: string extractor: type: object description: Información extraida por Samu de la llamada callType: type: - object - 'null' description: Tipo de llamada asignado a la reunión properties: _id: type: string name: type: string deal: type: object description: Información de la oportunidad de la llamada en el CRM properties: id: type: string description: ID de la oportunidad en el CRM name: type: string description: Nombre de la oportunidad amount: type: number description: Monto de la oportunidad stage: type: string description: Etapa de la oportunidad Transcription: type: object properties: messages: type: array items: type: object properties: id: type: string description: ID del mensaje text: type: string description: Texto del mensaje participantId: type: integer description: ID del participante startAt: type: number description: Fecha/hora de inicio del mensaje endAt: type: number description: Fecha/hora de fin del mensaje participants: type: object additionalProperties: type: string description: Nombre del participante securitySchemes: ApiKeyAuth: type: apiKey in: header name: apiKey description: API key de la cuenta