openapi: 3.0.0
info:
  version: 6.21.0
  title: SelphID-SDK Rest API
  description: |
    API REST de la solución biométrica para autenticación y prueba de vida pasiva.

    La autenticación JWT opcional puede habilitarse en el arranque desde `config.json` o mediante las variables de entorno `FACEPHI_SELPHID_REST_AUTH_*`.
    Cuando está habilitada, `GET /api/v1/selphid/version` y `GET /api/v1/selphid/health` permanecen públicos, mientras que el resto de los endpoints requieren un JWT válido.

#servers:
#  - url: https://example.io/v1

components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: Nombre de la cabecera de la clave de API por defecto. Puede sobrescribirse en el arranque con `auth_api_key_header_name`.

  schemas:

    ImageBuffer:
      type: string
      example: /9j/4AAQSkZJRgABAQEAtAC0AAD...
      description: Búfer en bruto de imagen en .png, .jpg o .bmp, codificado en base64.

    ImageToken:
      type: string
      example: BAEBAQLKOJ3E+kPbKqfpJtRHZN5vb...
      description: Imagen tokenizada, codificada en base64.

    Token:
      type: string
      example: BAEBAQLKOJ3E+kPbKqfpJtRHZN5vb...
      description: Búfer en bruto de imagen en .png, .jpg o .bmp, codificado en base64, o imagen tokenizada, codificada en base64.

    FacialTemplate:
      type: string
      example: BAEBGgEroySjGz2C9iIki35J/FA...
      description: Búfer de plantilla biométrica, obtenido mediante GetFacialTemplate(), codificado en base64.

    FacialTemplateRaw:
      type: string
      example: BAEBAQHjF08R/Fbogyt7nysPd/K...
      description: Búfer de plantilla biométrica, obtenido mediante GetFacialTemplateRaw(), codificado en base64.

    UpdatedTemplateRaw:
      type: boolean
      description: El templateRaw se ha actualizado en la operación de extracción.
      example: true

    FacialTemplateId:
      type: string
      example: user-1678
      description: El nombre de una plantilla facial en una galería.

    DocumentToken:
      type: string
      example: BQABAQGc2xyGocf4XuscMiY...
      description: Datos de documento tokenizados (OCR, faceImage, frontImage, backImage), codificados en base64.

    AudioBuffer:
      type: string
      example: /9j/4AAQSkZJRgABAQEAtAC0AAD...
      description: Búfer en bruto de audio en WAV, OPUS/OGG, MP3 o AAC, codificado en base64. El audio puede estar cifrado o no.

    ExtraData:
      type: string
      description: Datos tokenizados para llamar al servicio Api Tracking tras la operación, codificados en base64.
      example: BQABAQGkJhiCqQjKYUZyDM...

    PersonalDataInfo:
      type: object
      description: Diccionario clave/valor con los datos personales del usuario, para su envío al servicio Api Tracking. Solo se tendrá en cuenta si el campo _extraData_ no está vacío.
      properties:
        name:
          type: string
          example: "John"
        surname:
          type: string
          example: "Williams"
        nationality:
          type: string
          example: "USA"
        documentNumber:
          type: string
          example: "XXX-0000-1111-FFF"
        birthDate:
          type: string
          example: "08-Feb-1932"
        birthPlace:
          type: string
          example: "Flushing, Nueva York, United States"
        address:
          type: string
          example: "21st, Roadmap Street"
        city:
          type: string
          example: "San Francisco"
        issuer:
          type: string
          example: "California X45-ROI-1065"
        issueDate:
          type: string
          example: "4-Jun-2018"
        expiryDate:
          type: string
          example: "4-Jun-2023"
        fullName:
          type: string
          example: "John Towner Williams"
        gender:
          type: string
          example: "Male"
        nfcKey:
          type: string
          example: "45-YUM-177856-FQNWK"
        numSupport:
          type: string
          example: "266593665453"
        mrz:
          type: string
          example: "P<UTOERIKSSON<<JOHN<WILLIAMS<<<<<<<<<<<<<<<<<<<45-YUM-177856-FQNWK-266593665453<<<<<10"

    TimeStamp:
      type: string
      description: Un valor de fecha y hora en formato "%Y-%m-%dT%H:%M:%SZ".
      example: "2022-01-14T10:42:05.521922Z"

    TokenTimeStamp:
      type: string
      description: El valor interno de fecha y hora del token en formato "%Y-%m-%dT%H:%M:%SZ".
      example: "2022-01-14T10:42:05.521922Z"

    XCoord:
      type: number
      description: Coordenada X.
      example: 546

    YCoord:
      type: number
      description: Coordenada Y.
      example: 224

    MinFaceSize:
      type: integer
      description: Tamaño mínimo en píxeles que debe tener un rostro para ser detectado.
      example: 35

    MinIOD:
      type: integer
      description: Distancia interocular mínima en píxeles que debe tener un rostro para ser detectado.
      example: 35

    MinFaceRel:
      type: number
      description: Tamaño mínimo, en proporción al tamaño de la imagen, que debe tener un rostro para ser detectado.
      example: 0.04
      minimum: 0
      maximum: 1

    MaxPoseDegrees:
      type: number
      description: Diferencia máxima de ángulo (en grados) entre dos poses para considerarse válida en procesos de autenticación.
      example: 30
      minimum: 0
      maximum: 180

    FalseDetectRate:
      type: number
      description: Nivel de tolerancia de falso rechazo en el motor de extracción. No se recomienda usar este valor si no está seguro de sus efectos.
      example: 0.02
      minimum: 0
      maximum: 1

    IOD:
      type: number
      description: Distancia interocular.
      example: 118

    Rectangle:
      type: object
      description: Un área delimitada de una imagen.
      properties:
        x:
          type: number
          description: Coordenada X de la esquina superior izquierda.
          example: 546
        y:
          type: number
          description: Coordenada Y de la esquina superior izquierda.
          example: 224
        width:
          type: number
          description: Anchura del área.
          example: 200
        height:
          type: number
          description: Altura del área.
          example: 300

    Analytics:
      type: boolean
      description: Obtiene analíticas adicionales en el motor de extracción.
      example: true

    TemplateRawExtraction:
      type: boolean
      description: El motor de extracción generará la plantilla en bruto.
      example: true

    Similarity:
      type: number
      description: Similitud entre dos plantillas faciales (0-Ninguna, 1-Idéntica).
      example: 0.994729161

    MinSimilarity:
      type: number
      description: Similitud mínima tolerable en búsquedas 1:N.
      example: 0.7
      minimum: 0
      maximum: 1

    AuthThreshold:
      type: number
      description: Valor mínimo en una autenticación para considerarla positiva.
      example: 60
      minimum: 0
      maximum: 100

    Age:
      type: number
      description: Aproximación de la edad de la persona.
      example: 45

    Succeed:
      type: boolean
      description: Indica si la operación se ha realizado correctamente o no.
      example: true

    ValidTimeStamp:
      type: boolean
      description: En las operaciones de autenticación, prueba de vida y extracción que implican templateRaws, indica si el tiempo de vida de la plantilla es válido. Véase "options:elapsedAllowedSeconds". En las operaciones que no implican plantillas en bruto, siempre será true.
      example: true

    MaxCandidates:
      type: integer
      description: Número máximo de candidatos requeridos en búsquedas 1:N.
      example: 5

    GalleryIndex:
      type: integer
      description: El índice de una plantilla facial en una galería.
      minimum: 0
      example: 3

    GalleryId:
      type: string
      description: El nombre de una galería de plantillas faciales.
      example: "my.facial.gallery"

    LongDetail:
      type: boolean
      description: Si es true, el resultado del endpoint incluirá información adicional. Si se omite, el valor por defecto será false.
      example: true

    ElapsedSeconds:
      type: integer
      description: Tiempo de vida máximo de un templateRaw (en segundos) para considerarse válido en operaciones de autenticación o prueba de vida. Si es 0 (por defecto), no hay límite.
      minimum: 0
      example: 3600

    FutureSeconds:
      type: integer
      description: Tiempo de vida futuro máximo de un templateRaw (en segundos) para considerarse válido en operaciones de autenticación o prueba de vida. La plantilla puede haberse creado en un dispositivo con una fecha futura respecto al dispositivo que la consume. Si es 0 (por defecto), no se aceptará ningún templateRaw con una fecha futura.
      minimum: 0
      example: 3600

    IntervalSeconds:
      type: integer
      description: Intervalo de tiempo en segundos, utilizado normalmente para comprobar las marcas de tiempo de templateRaw.
      minimum: 0
      example: 3600

    VoiceProbability:
      type: number
      description: Probabilidad de coincidencia de voz
      example: 0.7
      minimum: 0
      maximum: 1

    EventSource:
      type: string
      example: "event.source.externalTool"
      description: El origen de un evento en el servicio Api Tracking.

    TrackingStatus:
      type: number
      description: Estado devuelto por el servicio Api Tracking, o -1 si no se requiere seguimiento.
      example: 201

    TrackingMessage:
      type: string
      description: Mensaje devuelto por el servicio Api Tracking, o vacío si no se requiere seguimiento.
      example: "EvaluatePassiveLivenesWithImageBuffer: Ok"

    FacialDetectionType:
      type: string
      description: Tipos de detección facial en el motor de extracción.
      example: "Frontal"
      enum:
        - Frontal
        - FrontalFast

    FacialAuthenticationStatus:
      type: string
      description: Posibles resultados de una operación de autenticación.
      example: "Positive"
      enum:
        - None
        - Negative
        - Uncertain
        - Positive
        - NoneBecausePoseExceed
        - NoneBecauseInvalidExtractions

    FacialAuthenticationDetail:
      type: string
      description: Detalle de la calidad de una operación de autenticación.
      example: "PositiveLowSecurityLevel"
      enum:
        - None
        - PositiveLowSecurityLevel
        - PositiveMediumSecurityLevel
        - PositiveHighSecurityLevel

    LivenessDepth:
      type: string
      description: Qué pipelines de prueba de vida deben utilizarse.
      example: "Full"
      enum:
        - None
        - Partial
        - Full

    NoLiveMainCause:
      type: string
      description: Causa principal de alto nivel del diagnóstico NoLive.
      example: "FPadFailed"
      enum:
        - FPadFailed
        - FMadFailed
        - MultipleFailed
        - Unknown

    FPadStatus:
      type: string
      description: Estado de la detección facial de ataques de presentación (fPAD).
      example: "Failed"
      enum:
        - NotEvaluated
        - Passed
        - Failed
        - Error

    FMadStatus:
      type: string
      description: Estado de la detección facial de ataques de manipulación (fMAD).
      example: "Passed"
      enum:
        - NotEvaluated
        - Passed
        - Failed
        - Error

    FPadScore:
      type: number
      description: Puntuación fPAD normalizada, si está disponible
      example: 0.2
      minimum: 0
      maximum: 1

    FMadScore:
      type: number
      description: Puntuación fMAD normalizada, si está disponible
      example: 0.8
      minimum: 0
      maximum: 1

    CoercionScore:
      type: number
      description: Puntuación de coerción normalizada, si está disponible
      example: 0.8
      minimum: 0
      maximum: 1

    NoLiveReasonMessage:
      type: string
      description: Mensaje del motivo legible por humanos, para registros/backoffice.
      example: "The FPAD module has rejected the image"

    FacialLivenessDiagnostic:
      type: string
      description: Posibles resultados de una operación de prueba de vida.
      example: "NoLive"
      enum:
        - None
        - Spoof
        - Uncertain
        - Live
        - NoneBecauseBadQuality
        - NoneBecauseFaceTooClose
        - NoneBecauseFaceNotFound
        - NoneBecauseFaceTooSmall
        - NoneBecauseAngleTooLarge
        - NoneBecauseImageDataError
        - NoneBecauseInternalError
        - NoneBecauseImagePreprocessError
        - NoneBecauseTooManyFaces
        - NoneBecauseFaceTooCloseToBorder
        - NoneBecauseFaceCropped
        - NoneBecauseLicenseError
        - NoneBecauseFaceOccluded
        - NoLive
        - NoneBecauseEyesClosed
        - NoneBecauseEyesOccluded
        - NoneBecauseTokenDataError
        - NoneBecauseTokenSecurity

    NoLiveDetails:
      type: object
      description: Detalles para el caso FacialLivenessDiagnostic::NoLive
      properties:
        mainCause:
          $ref: '#/components/schemas/NoLiveMainCause'
        fPadStatus:
          $ref: '#/components/schemas/FPadStatus'
        fPadScore:
          $ref: '#/components/schemas/FPadScore'
        fMadStatus:
          $ref: '#/components/schemas/FMadStatus'
        fMadScore:
          $ref: '#/components/schemas/FMadScore'
        coercionScore:
          $ref: '#/components/schemas/CoercionScore'          
        reasonMessage:
          $ref: '#/components/schemas/NoLiveReasonMessage'

    FacialGlasses:
      type: string
      description: La persona de la imagen lleva gafas (y de qué tipo).
      example: "Eye"
      enum:
        - None
        - Eye
        - Sun

    FacialGender:
      type: string
      description: El género facial de la persona en la imagen.
      example: "Male"
      enum:
        - None
        - Male
        - Female

    FacialMask:
      type: number
      description: La probabilidad de mascarilla facial.
      example: 0.89
      minimum: 0
      maximum: 1

    FaceConfidence:
      type: number
      description: Confianza predicha del rostro.
      example: 0.99
      minimum: 0
      maximum: 1

    FacialQuality:
      type: string
      description: Una métrica que indica con qué precisión se comportará una plantilla en el reconocimiento.
      example: "Good"
      enum:
        - None
        - Bad
        - Regular
        - Good

    TrackingFamily:
      type: string
      description: Familia con la que registrar los eventos de Api Tracking.
      example: "OnBoarding"
      enum:
        - OnBoarding
        - Authentication

    OperationResultStatus:
      type: string
      description: Resultado de una operación en el lado del cliente, para el registro en Api Tracking.
      example: "Succeeded"
      enum:
        - Succeeded
        - Denied
        - Error
        - Live
        - Cancelled

    OperationResultReason:
      type: string
      description: Detalle del resultado de una operación en el lado del cliente, para el registro en Api Tracking.
      example: "None"
      enum:
        - None
        - InternalError
        - CancelledByUser
        - Timeout
        - DocumentValidationNotPassed
        - DocumentValidationError
        - AuthenticationNotPassed
        - AuthenticationError
        - LivenessNotPassed
        - LivenessError

    TokenType:
      type: string
      description: Posibles resultados de un búfer de token de entrada.
      example: "tokenImage"
      enum:
        - jpg
        - png
        - bmp
        - templateRaw
        - tokenImage
        - tokenGeneric
        - unknown
        - unsupported

    HealthStatus:
      type: string
      description: Resultado del servicio de estado (indica si el SDK está activo o no).
      example: "Healthy"
      enum:
        - Healthy
        - No healthy

    SdkDuration:
      type: number
      description: Duración de la operación en milisegundos.
      example: 1234

    OCRData:
      type: string
      description: Cadena con un diccionario Json clave/valor con los campos de OCR detectados en un documento.
      example:
        "{ \"Back/INPUT/Issuer\": \"ESP\",
        \"Back/MRZ/DateOfBirth\": \"01/08/1974\",
        \"Back/MRZ/DateOfExpiry\": \"18/04/2023\",
        \"Back/MRZ/DocumentCode\": \"ID\",
        \"Back/MRZ/DocumentNumber\": \"99999999X\",
        \"Back/MRZ/FirstName\": \"JOSE JAVIER\",
        \"Back/MRZ/FullName\": \"JOSE JAVIER PEREZ PEREZ\",
        \"Back/MRZ/Gender\": \"M\",
        \"Back/MRZ/IDCardNumber\": \"ANR145111\",
        \"Back/MRZ/Issuer\": \"ESP\",
        \"Back/MRZ/LastName\": \"PEREZ PEREZ\",
        \"Back/MRZ/MrzText\": \"IDESPANR999999999999999X<<<<<<\n888888888888888ESP<<<<<<<<<<<9\nPEREZ<PEREZ<<JOSE<JAVIER<<<<<<\n\",
        \"Back/MRZ/Nationality\": \"ESP\",
        \"Back/MRZ/NfcKey\": \"ANR11111111\",
        \"Back/MRZ/PrimaryID\": \"PEREZ PEREZ\",
        \"Back/MRZ/SecondaryID\": \"JOSE JAVIER\",
        \"Back/MRZ/Verified\": \"YES\",
        \"DocumentModel\": \"DNI Digital\" } "

    SecurityData:
      type: string
      description: Cadena con un diccionario clave/valor con información de seguridad.
      example:
        "{ \"Security Key1\": \"Security value 1\",
        \"Security Key2\": \"Security value 2\",
        \"Security Key3\": \"Security value 3\",
        \"Security Key4\": \"Security value 4\" }"

    TokenBuffer:
      type: object
      description: Un búfer en bruto de imagen o token.
      properties:
        tokenBuffer:
          $ref: '#/components/schemas/Token'
      required:
        - tokenBuffer

    ExtractImage:
      type: object
      description: Una imagen en bruto, utilizada para la extracción.
      properties:
        image:
          $ref: '#/components/schemas/ImageBuffer'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - image

    ExtractTemplate:
      type: object
      description: Una plantilla en bruto, utilizada para la extracción.
      properties:
        faceTemplate:
          $ref: '#/components/schemas/FacialTemplate'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - faceTemplate

    ExtractTemplateImage:
      type: object
      description: Una plantilla en bruto, utilizada para la extracción de imagen.
      properties:
        faceTemplate:
          $ref: '#/components/schemas/FacialTemplate'
      required:
        - faceTemplate

    FacialAuthenticationImages:
      type: object
      description: Dos imágenes en bruto, utilizadas para la autenticación.
      properties:
        image1:
          $ref: '#/components/schemas/ImageBuffer'
        image2:
          $ref: '#/components/schemas/ImageBuffer'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - image1
        - image2

    FacialAuthenticationImageTemplate:
      type: object
      description: Una imagen en bruto y una plantilla facial, utilizadas para la autenticación. Además, admite _extraData_ y _personalDataInfo_, para el registro en Api Tracking.
      properties:
        image1:
          $ref: '#/components/schemas/ImageBuffer'
        faceTemplate1:
          $ref: '#/components/schemas/FacialTemplateRaw'
        extraData:
          $ref: '#/components/schemas/ExtraData'
        personalDataInfo:
          $ref: '#/components/schemas/PersonalDataInfo'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - image1
        - faceTemplate1

    FacialAuthenticationTemplates:
      type: object
      description: Dos plantillas faciales, utilizadas para la autenticación. Además, admite _extraData_ y _personalDataInfo_, para el registro en Api Tracking.
      properties:
        faceTemplate1:
          $ref: '#/components/schemas/FacialTemplateRaw'
        faceTemplate2:
          $ref: '#/components/schemas/FacialTemplateRaw'
        extraData:
          $ref: '#/components/schemas/ExtraData'
        personalDataInfo:
          $ref: '#/components/schemas/PersonalDataInfo'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - faceTemplate1
        - faceTemplete2

    DocumentExtractionData:
      type: object
      description: Un documento tokenizado y, además, un _extraData_ para el registro en Api Tracking.
      properties:
        token:
          $ref: '#/components/schemas/DocumentToken'
        extraData:
          $ref: '#/components/schemas/ExtraData'
      required:
        - token

    DocumentAuthenticationImage:
      type: object
      description: Un documento tokenizado y un búfer de imagen, utilizados para la autenticación. Además, admite _extraData_, para el registro en Api Tracking.
      properties:
        documentTemplate:
          $ref: '#/components/schemas/DocumentToken'
        image1:
          $ref: '#/components/schemas/ImageBuffer'
        extraData:
          $ref: '#/components/schemas/ExtraData'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - documentTemplate
        - image1

    DocumentAuthenticationTemplate:
      type: object
      description: Un documento tokenizado y una plantilla de imagen, utilizados para la autenticación. Además, admite _extraData_, para el registro en Api Tracking.
      properties:
        documentTemplate:
          $ref: '#/components/schemas/DocumentToken'
        faceTemplate1:
          $ref: '#/components/schemas/FacialTemplateRaw'
        extraData:
          $ref: '#/components/schemas/ExtraData'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - documentTemplate
        - faceTemplate1

    PassiveLivenessImage:
      type: object
      description: Una imagen en bruto, utilizada para la prueba de vida pasiva. Además, admite _extraData_, para el registro en Api Tracking.
      properties:
        image:
          $ref: '#/components/schemas/ImageBuffer'
        extraData:
          $ref: '#/components/schemas/ExtraData'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - image

    PassiveLivenessToken:
      type: object
      description: Una imagen tokenizada, utilizada para la prueba de vida pasiva. Además, admite _extraData_, para el registro en Api Tracking.
      properties:
        tokenImage:
          $ref: '#/components/schemas/ImageToken'
        extraData:
          $ref: '#/components/schemas/ExtraData'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - tokenImage

    GalleryImage:
      type: object
      description: Una imagen en bruto, utilizada para la inscripción en una galería 1:N.
      properties:
        image:
          $ref: '#/components/schemas/ImageBuffer'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - image

    GalleryTemplate:
      type: object
      description: Una plantilla facial, utilizada para la inscripción en una galería 1:N.
      properties:
        facialTemplate:
          $ref: '#/components/schemas/FacialTemplate'
      required:
        - facialTemplate

    IdentifyImage:
      type: object
      description: Una imagen en bruto, utilizada para la búsqueda en una galería 1:N.
      properties:
        image:
          $ref: '#/components/schemas/ImageBuffer'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - image

    IdentifyTemplate:
      type: object
      description: Una plantilla facial, utilizada para la búsqueda en una galería 1:N.
      properties:
        facialTemplate:
          $ref: '#/components/schemas/FacialTemplate'
        options:
          $ref: '#/components/schemas/SdkOptions'
      required:
        - facialTemplate

    CustomAuthentication:
      type: object
      description: Datos para registrar un evento externo de autenticación en la plataforma Api Tracking. Además, admite búferes de imagen.
      properties:
        authStatus:
          $ref: '#/components/schemas/FacialAuthenticationStatus'
        similarity:
          $ref: '#/components/schemas/Similarity'
        eventSource:
          $ref: '#/components/schemas/EventSource'
        image1:
          $ref: '#/components/schemas/ImageBuffer'
        image2:
          $ref: '#/components/schemas/ImageBuffer'
        extraData:
          $ref: '#/components/schemas/ExtraData'
      required:
        - authStatus
        - similarity
        - extraData

    CustomLiveness:
      type: object
      description: Datos para registrar un evento externo de prueba de vida en la plataforma Api Tracking. Además, admite el búfer de imagen.
      properties:
        family:
          $ref: '#/components/schemas/TrackingFamily'
        diagnostic:
          $ref: '#/components/schemas/FacialLivenessDiagnostic'
        eventSource:
          $ref: '#/components/schemas/EventSource'
        image:
          $ref: '#/components/schemas/ImageBuffer'
        extraData:
          $ref: '#/components/schemas/ExtraData'
      required:
        - family
        - diagnostic
        - extraData

    CustomVoiceAuthentication:
      type: object
      description: Datos para registrar un evento externo de autenticación por voz en la plataforma Api Tracking. Además, admite los búferes de pista de audio.
      properties:
        probability:
          $ref: '#/components/schemas/VoiceProbability'
        eventSource:
          $ref: '#/components/schemas/EventSource'
        extraData:
          $ref: '#/components/schemas/ExtraData'
      required:
        - probability
        - extraData

    CustomFinish:
      type: object
      description: Datos para registrar eventos externos de cierre y finalización de operación en la plataforma Api Tracking.
      properties:
        status:
          $ref: '#/components/schemas/OperationResultStatus'
        reason:
          $ref: '#/components/schemas/OperationResultReason'
        extraData:
          $ref: '#/components/schemas/ExtraData'
      required:
        - status
        - reason
        - extraData

    CustomFinishFamily:
      type: object
      description: Datos para registrar eventos externos de cierre y finalización de operación en la plataforma Api Tracking.
      properties:
        family:
          $ref: '#/components/schemas/TrackingFamily'
        status:
          $ref: '#/components/schemas/OperationResultStatus'
        reason:
          $ref: '#/components/schemas/OperationResultReason'
        extraData:
          $ref: '#/components/schemas/ExtraData'
      required:
        - status
        - reason
        - extraData

    CustomOCR:
      type: object
      description: Datos para registrar un evento externo de OCR en la plataforma Api Tracking.
      properties:
        jsonData:
          $ref: '#/components/schemas/OCRData'
        eventSource:
          $ref: '#/components/schemas/EventSource'
        extraData:
          $ref: '#/components/schemas/ExtraData'
      required:
        - jsonData
        - extraData

    CustomSecurity:
      type: object
      description: Datos para registrar un evento externo de seguridad en la plataforma Api Tracking.
      properties:
        jsonData:
          $ref: '#/components/schemas/SecurityData'
        succeed:
          $ref: '#/components/schemas/Succeed'
        eventSource:
          $ref: '#/components/schemas/EventSource'
        extraData:
          $ref: '#/components/schemas/ExtraData'
      required:
        - jsonData
        - succeed
        - eventSource
        - extraData

    SdkOptions:
      type: object
      description: Opciones para personalizar el uso de los motores de extracción e identificación. Su uso es opcional y ninguna opción es obligatoria. Si se omiten, se usarán los valores por defecto.
      properties:
        longDetail:
          $ref: '#/components/schemas/LongDetail'
        elapsedAllowedSeconds:
          $ref: '#/components/schemas/ElapsedSeconds'
        futureAllowedSeconds:
          $ref: '#/components/schemas/FutureSeconds'
        facialDetection:
          $ref: '#/components/schemas/FacialDetectionType'
        minFaceAbsPx:
          $ref: '#/components/schemas/MinFaceSize'
        minFaceRel:
          $ref: '#/components/schemas/MinFaceRel'
        minIodPx:
          $ref: '#/components/schemas/MinIOD'
        maxPoseDegrees:
          $ref: '#/components/schemas/MaxPoseDegrees'
        minFacialQuality:
          $ref: '#/components/schemas/FacialQuality'
        analyticsDetection:
          $ref: '#/components/schemas/Analytics'
        templateRawExtraction:
          $ref: '#/components/schemas/TemplateRawExtraction'
        falseDetectRate:
          $ref: '#/components/schemas/FalseDetectRate'
        maxCantidates:
          $ref: '#/components/schemas/MaxCandidates'
        minSimilarity:
          $ref: '#/components/schemas/MinSimilarity'
        authThreshold:
          $ref: '#/components/schemas/AuthThreshold'
        livenessDepth:
          $ref: '#/components/schemas/LivenessDepth'

    FacialExtractionResult:
      type: object
      description: El resultado de una operación de extracción.
      properties:
        facialTemplate:
          $ref: '#/components/schemas/FacialTemplate'
        facialTemplateRaw:
          $ref: '#/components/schemas/FacialTemplateRaw'
        updatedTemplateRaw:
          $ref: '#/components/schemas/UpdatedTemplateRaw'
        face:
          $ref: '#/components/schemas/Rectangle'
        leftEye:
          description: Ubicación del centro del ojo izquierdo.
          type: object
          properties:
            x:
              $ref: '#/components/schemas/XCoord'
            y:
              $ref: '#/components/schemas/YCoord'
        rightEye:
          description: Ubicación del centro del ojo derecho.
          type: object
          properties:
            x:
              $ref: '#/components/schemas/XCoord'
            y:
              $ref: '#/components/schemas/YCoord'
        chin:
          description: Ubicación de la barbilla.
          type: object
          properties:
            x:
              $ref: '#/components/schemas/XCoord'
            y:
              $ref: '#/components/schemas/YCoord'
        nose:
          description: Ubicación de la nariz.
          type: object
          properties:
            x:
              $ref: '#/components/schemas/XCoord'
            y:
              $ref: '#/components/schemas/YCoord'
        leftMouth:
          description: Ubicación del punto izquierdo de la boca.
          type: object
          properties:
            x:
              $ref: '#/components/schemas/XCoord'
            y:
              $ref: '#/components/schemas/YCoord'
        rightMouth:
          description: Ubicación del punto derecho de la boca.
          type: object
          properties:
            x:
              $ref: '#/components/schemas/XCoord'
            y:
              $ref: '#/components/schemas/YCoord'
        iod:
          $ref: '#/components/schemas/IOD'
        yaw:
          description: Ángulo facial de guiñada (yaw) en grados.
          type: number
          example: 2.4
        pitch:
          description: Ángulo facial de cabeceo (pitch) en grados.
          type: number
          example: -4.32
        roll:
          description: Ángulo facial de alabeo (roll) en grados.
          type: number
          example: 0.7
        glasses:
          $ref: '#/components/schemas/FacialGlasses'
        age:
          $ref: '#/components/schemas/Age'
        gender:
          $ref: '#/components/schemas/FacialGender'
        mask:
          $ref: '#/components/schemas/FacialMask'
        faceConfidence:
          $ref: '#/components/schemas/FaceConfidence'
        facialQuality:
          $ref: '#/components/schemas/FacialQuality'
        validTimeStamp:
          $ref: '#/components/schemas/ValidTimeStamp'
        tokenTimeStamp:
          $ref: '#/components/schemas/TokenTimeStamp'
        sdkDuration:
          $ref: '#/components/schemas/SdkDuration'

    ExtractionImageResult:
      type: object
      description: El resultado de una operación de extracción de imagen.
      properties:
        image:
          $ref: '#/components/schemas/ImageBuffer'

    FacialAuthenticationResult:
      type: object
      description: El resultado de una operación de autenticación. **extractionQuery** y **extractionTarget** solo se añadirán si **options:longDetail=true**.
      properties:
        authStatus:
          $ref: '#/components/schemas/FacialAuthenticationStatus'
        similarity:
          $ref: '#/components/schemas/Similarity'
        validTimeStamp:
          $ref: '#/components/schemas/ValidTimeStamp'
        tokenTimeStamp:
          $ref: '#/components/schemas/TokenTimeStamp'
        trackingStatus:
          $ref: '#/components/schemas/TrackingStatus'
        trackingMessage:
          $ref: '#/components/schemas/TrackingMessage'
        sdkDuration:
          $ref: '#/components/schemas/SdkDuration'
        extractionQuery:
          $ref: '#/components/schemas/FacialExtractionResult'
        extractionTarget:
          $ref: '#/components/schemas/FacialExtractionResult'

    DocumentExtractionResult:
      type: object
      description: El resultado de una operación de extracción de documento.
      properties:
        documentData:
          $ref: '#/components/schemas/OCRData'
        imageData:
          type: object
          properties:
            faceImage:
              type: string
              description: Los datos en bruto de la imagen del rostro del documento, codificados en base64.
            documentFrontImage:
              type: string
              description: Los datos en bruto de la imagen del anverso del documento, codificados en base64.
            documentBackImage:
              type: string
              description: Los datos en bruto de la imagen del reverso del documento, codificados en base64.
          additionalProperties:
            type: string
          description: Diccionario de cadenas clave/valor con las imágenes detectadas en el documento.
          example:
            faceImage: /9j/4AAQSkZJRgABAQAAAQABAAD/...
            documentFrontImage: /9j/4AAQSkZJRgABAQAAAQABAAD/...
            documentBackImage: /9j/4AAQSkZJRgABAQAAAQABAAD/...
        validTimeStamp:
          $ref: '#/components/schemas/ValidTimeStamp'
        tokenTimeStamp:
          $ref: '#/components/schemas/TokenTimeStamp'
        trackingStatus:
          $ref: '#/components/schemas/TrackingStatus'
        trackingMessage:
          $ref: '#/components/schemas/TrackingMessage'
        sdkDuration:
          $ref: '#/components/schemas/SdkDuration'

    PassiveLivenessResult:
      type: object
      description: El resultado de una operación de prueba de vida pasiva.
      properties:
        diagnostic:
          $ref: '#/components/schemas/FacialLivenessDiagnostic'
        noLiveDetails:
          $ref: '#/components/schemas/NoLiveDetails'
        validTimeStamp:
          $ref: '#/components/schemas/ValidTimeStamp'
        tokenTimeStamp:
          $ref: '#/components/schemas/TokenTimeStamp'
        trackingStatus:
          $ref: '#/components/schemas/TrackingStatus'
        trackingMessage:
          $ref: '#/components/schemas/TrackingMessage'
        sdkDuration:
          $ref: '#/components/schemas/SdkDuration'

    EnrollResult:
      type: object
      description: El resultado de la inscripción de una plantilla en una galería.
      properties:
        galleryIndex:
          $ref: '#/components/schemas/GalleryIndex'
        facialTemplate:
          $ref: '#/components/schemas/FacialTemplate'
        sdkDuration:
          $ref: '#/components/schemas/SdkDuration'

    SearchResult:
      type: object
      description: El resultado de la búsqueda de una plantilla en una galería.
      properties:
        galleryIndex:
          $ref: '#/components/schemas/GalleryIndex'
        templateId:
          $ref: '#/components/schemas/FacialTemplateId'
        similarity:
          $ref: '#/components/schemas/Similarity'
        facialAuthenticationStatus:
          $ref: '#/components/schemas/FacialAuthenticationStatus'
        facialAuthenticationDetail:
          $ref: '#/components/schemas/FacialAuthenticationDetail'
        sdkDuration:
          $ref: '#/components/schemas/SdkDuration'

    Galleries:
      type: object
      description: El contenido de todas las galerías abiertas.
      properties:
        galleries:
            type: array
            items:
              $ref: '#/components/schemas/GalleryId'

    FacialTemplateIds:
      type: object
      description: Una lista de templateId.
      properties:
        templateIds:
            type: array
            items:
              $ref: '#/components/schemas/FacialTemplateId'

    HealthResult:
      type: object
      description: El resultado de una comprobación de estado.
      properties:
        message:
          $ref: '#/components/schemas/HealthStatus'

    TrackingResult:
      type: object
      description: El resultado de una operación de Api Tracking.
      properties:
        trackingStatus:
          $ref: '#/components/schemas/TrackingStatus'
        trackingMessage:
          $ref: '#/components/schemas/TrackingMessage'

    TokenTypeResult:
      type: object
      description: El resultado de la identificación del token.
      properties:
        type:
          $ref: '#/components/schemas/TokenType'

    ConfigParams:
      type: object
      description: Los parámetros de configuración del SDK y del servicio. La configuración de autenticación JWT se omite intencionadamente.
      properties:
        FACEPHI_SELPHID_DEBUGPATH_KEY:
          type: string
          example: "./SelphIDDebug.log"
          description: Ruta y archivo donde se escriben los registros de SelphID.
        FACEPHI_SELPHID_FACIALAUTHENTICATION_THRESHOLD:
          type: string
          example: "65"
          description: Umbral para la autenticación facial.
        FACEPHI_SELPHID_FACIALEXTRACTOR_NUM_THREADS:
          type: string
          example: "4"
          description: Número de núcleos asignados a las operaciones de extracción/autenticación.
        FACEPHI_SELPHID_FACIALLIVENESS_DEPTH:
          type: string
          example: "partial"
          description: Modo del pipeline del motor de prueba de vida.
        FACEPHI_SELPHID_FACIALLIVENESS_IAD:
          type: string
          example: "enable"
          description: Estado de los filtros del detector de ataques de inyección (IAD) de prueba de vida.
        FACEPHI_SELPHID_FACIALLIVENESS_PATH_KEY:
          type: string
          example: "/home/install/selpid-sdk/data"
          description: Ruta donde se instalan los modelos y otros datos del pipeline.
        FACEPHI_SELPHID_FACIALLIVENESS_THRESHOLD:
          type: string
          example: "50"
          description: Umbral para las operaciones de prueba de vida.
        FACEPHI_SELPHID_FACIAL_LICPATH_KEY:
          type: string
          example: "/license.lic"
          description: Ruta de la licencia.
        FACEPHI_SELPHID_FUTURE_TIME_ALLOWED:
          type: string
          example: "0"
          description: Valor global para aceptar templateRaws con fechas futuras.
        FACEPHI_SELPHID_GALLERY_REMOVE_METHOD:
          type: string
          example: "erase"
          description: Método de eliminación para galerías 1:N.
        FACEPHI_SELPHID_USAGEPATH_KEY:
          type: string
          example: "./SelphIDUsage.db"
          description: Ruta de la base de datos de uso.
        client_max_body_size:
          type: integer
          example: 100
          description: Tamaño máximo de los datos de la solicitud (Mb).
        connection_timeout:
          type: integer
          example: 0
          description: Tiempo de espera máximo para las conexiones (0=infinito).
        keep_alive_request_number:
          type: integer
          example: 0
          description: Cómo puede usarse una conexión en términos de tiempo de espera y número máximo de solicitudes.
        logger_level:
          type: string
          example: "off"
          description: Nivel de registro (logger).
        logger_max_files:
          type: integer
          example: 7
          description: Número máximo de archivos utilizados en la rotación del registro.
        logger_path:
          type: string
          example: "./logs"
          description: Ruta donde se almacenan los registros del servicio.
        logger_rotation:
          type: string
          example: "daily"
          description: Estrategia de rotación del registro (logger).
        number_of_threads:
          type: integer
          example: 1
          description: Número de núcleos asignados a las solicitudes concurrentes.
        port:
          type: integer
          example: 6982
          description: Puerto de escucha del servicio.

    BadRequestResult:
      type: object
      description: Resultado cuando llegan parámetros incorrectos en la solicitud.
      properties:
        status:
          type: number
          example: 400
        error:
          type: string
          example: "BadRequest"
        timeStamp:
          $ref: '#/components/schemas/TimeStamp'

    ExceptionResult:
      type: object
      description: Se ha producido un error en la llamada al backend de SelphID-SDK.
      properties:
        status:
          type: number
          example: 500
        error:
          type: string
          example: "SelphID-SDK Exception"
        exception:
          type: string
          example: "ErrorFacialTemplate"
        timeStamp:
          $ref: '#/components/schemas/TimeStamp'

security:
  - BearerAuth: []
  - ApiKeyAuth: []

paths:
  /api/v1/selphid/extract:
    post:
      description: Extrae la plantilla facial y las características a partir de un búfer de imagen.

      tags:
        - Extract

      requestBody:
        description: Json con la imagen de entrada en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExtractImage'

      responses:
        '200':
          description: Resultado de la extracción facial.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialExtractionResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/extract/template:
    post:
      description: Extrae la plantilla facial y las características a partir de una plantilla en bruto.

      tags:
        - Extract

      requestBody:
        description: Json con la plantilla de entrada en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExtractTemplate'

      responses:
        '200':
          description: Resultado de la extracción facial.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialExtractionResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/extract/template/image:
    post:
      description: Extrae la imagen en una plantilla facial.

      tags:
        - Extract

      requestBody:
        description: Json con la plantilla de entrada en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExtractTemplateImage'

      responses:
        '200':
          description: Resultado de la extracción facial.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExtractionImageResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/authenticate-facial/images:
    post:
      description: Autentica dos plantillas faciales, obtenidas a partir de dos búferes de imagen.

      tags:
        - Authentication

      requestBody:
        description: Json con las imágenes de entrada en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FacialAuthenticationImages'

      responses:
        '200':
          description: Resultado de la autenticación facial.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialAuthenticationResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/authenticate-facial/image/template:
    post:
      description: Autentica dos plantillas faciales; la primera obtenida a partir de un búfer de imagen.

      tags:
        - Authentication

      requestBody:
        description: Json con la imagen y la plantilla de entrada en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FacialAuthenticationImageTemplate'

      responses:
        '200':
          description: Resultado de la autenticación facial.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialAuthenticationResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/authenticate-facial/templates:
    post:
      description: Autentica dos plantillas faciales.

      tags:
        - Authentication

      requestBody:
        description: Json con las plantillas de entrada en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FacialAuthenticationTemplates'

      responses:
        '200':
          description: Resultado de la autenticación facial.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialAuthenticationResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/document/extract:
    post:
      description: Extrae datos en bruto (OCR e imágenes) de un documento tokenizado.

      tags:
        - Onboarding

      requestBody:
        description: Json con el documento tokenizado en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentExtractionData'

      responses:
        '200':
          description: Resultado de la extracción de documento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentExtractionResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/authenticate-facial/document/face-image:
    post:
      description: Autentica dos plantillas faciales. La primera se obtiene de un documento tokenizado y la segunda de un búfer de imagen.

      tags:
        - Onboarding

      requestBody:
        description: Json con el documento tokenizado y un búfer de imagen, en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentAuthenticationImage'

      responses:
        '200':
          description: Resultado de la autenticación facial.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialAuthenticationResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/authenticate-facial/document/face-template:
    post:
      description: Autentica dos plantillas faciales. La primera se obtiene de un documento tokenizado.

      tags:
        - Onboarding

      requestBody:
        description: Json con el documento tokenizado y una plantilla de imagen, en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentAuthenticationTemplate'

      responses:
        '200':
          description: Resultado de la autenticación facial.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialAuthenticationResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/passive-liveness/evaluate:
    post:
      description: Evalúa la prueba de vida pasiva de una imagen en bruto.

      tags:
        - Passive Liveness

      requestBody:
        description: Json con un búfer de imagen, en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PassiveLivenessImage'

      responses:
        '200':
          description: Resultado de la prueba de vida pasiva.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PassiveLivenessResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/passive-liveness/evaluate/token:
    post:
      description: Evalúa la prueba de vida pasiva de una imagen tokenizada.

      tags:
        - Passive Liveness

      requestBody:
        description: Json con una imagen tokenizada, en formato base64.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PassiveLivenessToken'

      responses:
        '200':
          description: Resultado de la prueba de vida pasiva.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PassiveLivenessResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/authentication:
    post:
      description: Envía un evento externo personalizado de autenticación a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de autenticación.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomAuthentication'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/authentication/finish:
    post:
      description: Envía eventos externos personalizados de cierre y finalización de la operación de autenticación a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de cierre de la operación.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomFinish'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/onboarding:
    post:
      description: Envía un evento externo personalizado de onboarding a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de autenticación.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomAuthentication'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/onboarding/finish:
    post:
      description: Envía eventos externos personalizados de cierre y finalización de la operación de onboarding a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de cierre de la operación.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomFinish'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/ocr:
    post:
      description: Envía un evento externo personalizado de OCR a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de OCR.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomOCR'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/ocr/finish:
    post:
      description: Envía eventos externos personalizados de cierre y finalización de la operación de OCR a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de cierre de la operación.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomFinish'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/security:
    post:
      description: Envía un evento externo personalizado de seguridad a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de seguridad.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomSecurity'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/security/finish:
    post:
      description: Envía eventos externos personalizados de cierre y finalización de la operación de seguridad a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de cierre de la operación.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomFinish'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'


  /api/v1/selphid/custom-event/liveness:
    post:
      description: Envía un evento externo personalizado de prueba de vida a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de prueba de vida.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomLiveness'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/liveness/finish:
    post:
      description: Envía eventos externos personalizados de cierre y finalización de la operación de prueba de vida a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de cierre de la operación.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomFinishFamily'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/custom-event/voice/authentication:
    post:
      description: Envía un evento externo personalizado de autenticación por voz a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de prueba de vida.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomVoiceAuthentication'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'


  /api/v1/selphid/custom-event/voice/authentication/finish:
    post:
      description: Envía eventos externos personalizados de cierre y finalización de la operación de autenticación por voz a la plataforma Api Tracking.

      tags:
        - Custom Events

      requestBody:
        description: Json con los datos de cierre de la operación.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomFinish'

      responses:
        '200':
          description: Resultado del seguimiento del evento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackingResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/enroll/{galleryId}/{templateId}:
    post:
      description: Inscribe en una galería una plantilla facial obtenida a partir de una imagen.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true
      - in: path
        name: templateId
        schema:
          $ref: '#/components/schemas/FacialTemplateId'
        required: true

      requestBody:
        description: Json con los datos de imagen.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GalleryImage'

      responses:
        '200':
          description: Resultado de la inscripción.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrollResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/enroll/template/{galleryId}/{templateId}:
    post:
      description: Inscribe una plantilla facial en una galería.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true
      - in: path
        name: templateId
        schema:
          $ref: '#/components/schemas/FacialTemplateId'
        required: true

      requestBody:
        description: Json con la plantilla facial.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GalleryTemplate'

      responses:
        '200':
          description: Resultado de la inscripción.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrollResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/{galleryId}:
    post:
      description: Busca en una galería una plantilla facial obtenida a partir de una imagen.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true

      requestBody:
        description: Json con los datos de imagen utilizados en la búsqueda.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentifyImage'

      responses:
        '200':
          description: Un array de plantillas que coinciden con la imagen de entrada.
          content:
            application/json:
              schema:
                  type: array
                  items:
                    $ref: '#/components/schemas/SearchResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/template/{galleryId}:
    post:
      description: Busca una plantilla facial en una galería.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true

      requestBody:
        description: Json con la plantilla facial utilizada en la búsqueda.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdentifyTemplate'

      responses:
        '200':
          description: Un array de plantillas que coinciden con la imagen de entrada.
          content:
            application/json:
              schema:
                  type: array
                  items:
                    $ref: '#/components/schemas/SearchResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/obsolete/{galleryId}/{intervalSeconds}:
    get:
      description: Lista todas las plantillas faciales anteriores a un intervalo de tiempo determinado.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true
      - in: path
        name: intervalSeconds
        schema:
          $ref: '#/components/schemas/IntervalSeconds'
        required: true

      responses:
        '200':
          description: Un array de templateIDs cuya marca de tiempo es anterior al intervalo proporcionado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialTemplateIds'

        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

    delete:
      description: Elimina todas las plantillas faciales anteriores a un intervalo de tiempo determinado.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true
      - in: path
        name: intervalSeconds
        schema:
          $ref: '#/components/schemas/IntervalSeconds'
        required: true

      responses:
        '200':
          description: Un array con los IDs de todas las plantillas eliminadas, cuya marca de tiempo es anterior al intervalo proporcionado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FacialTemplateIds'

        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/galleries:
    get:
      description: Obtiene una lista de todas las galerías abiertas.

      tags:
        - Gallery 1:n

      responses:
        '200':
          description: Un array de IDs de galería.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Galleries'

        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/remove/{galleryId}/{index}:
    delete:
      description: Elimina una plantilla facial de una galería, usando su índice.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true

      - in: path
        name: index
        schema:
          $ref: '#/components/schemas/GalleryIndex'
        required: true

      responses:
        '200':
          description: Indica si el elemento se ha podido eliminar o no.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Succeed'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/removeid/{galleryId}/{templateId}:
    delete:
      description: Elimina una plantilla facial de una galería, usando su Id.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true

      - in: path
        name: templateId
        schema:
          $ref: '#/components/schemas/FacialTemplateId'
        required: true

      responses:
        '200':
          description: Indica si el elemento se ha podido eliminar o no.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Succeed'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/clear/{galleryId}:
    delete:
      description: Vacía una galería.

      tags:
        - Gallery 1:n

      parameters:
      - in: path
        name: galleryId
        schema:
          $ref: '#/components/schemas/GalleryId'
        required: true

      responses:
        '200':
          description: Indica si la galería se ha podido eliminar o no.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Succeed'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/identify/clear/all:
    delete:
      description: Vacía todas las galerías.

      tags:
        - Gallery 1:n

      responses:
        '200':
          description: Indica si todas las galerías se han podido eliminar o no.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Succeed'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/health:
    get:
      description: Comprueba si el servicio está activo.
      security: []

      tags:
        - Management

      responses:
        '200':
          description: Un mensaje con el estado de salud del servicio.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthResult'
        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/version:
    get:
      description: Comprueba la versión de selphId-sdk.
      security: []

      tags:
        - Management

      responses:
        '200':
          description: Un mensaje con la descripción.
          content:
            application/json:
              schema:
                type: string
                example: "SelphID SDK 4.6.0\n - Module 1 Version: 2.3.3\n - Module 2 Version: 1.0\n - Module 3 Version: 1.35.0\n\nCopyright @ 2023 FacePhi. All rights reserved.\n"

        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'

        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/config:
    get:
      description: Obtiene los parámetros de configuración actuales de selphId-sdk y del servicio. La configuración de autenticación JWT se omite intencionadamente en esta respuesta.

      tags:
        - Management

      responses:
        '200':
          description: Un objeto con los parámetros de configuración actuales.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigParams'

        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'

        '500':
          description: Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

    post:
      description: Establece los parámetros de configuración de selphId-sdk y del servicio. **Importante:** no todos los parámetros de configuración pueden modificarse en tiempo de ejecución. La configuración de autenticación JWT es solo de arranque y este endpoint la rechaza.

      tags:
        - Management

      requestBody:
        description: Un objeto con los parámetros de configuración necesarios.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfigParams'

      responses:
        '200':
          description: Un mensaje con la descripción.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: "The configuration has been set."

        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'

        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

  /api/v1/selphid/tokeninfo:
    post:
      description: Obtiene el tipo de una imagen o token de entrada.

      tags:
        - Management

      requestBody:
        description: Json con los datos de imagen o token.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenBuffer'

      responses:
        '200':
          description: Un mensaje con la descripción.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenTypeResult'

        '400':
          description: Parámetros incorrectos en la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResult'
        '500':
          description:   Se ha producido un error en la llamada al backend de SelphID-SDK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResult'

