openapi: 3.0.0
info:
  description: "<p>Predice el desempeño crediticio futuro para una cuenta específica aprobada previamente. Contiene un conjunto de Scores para cada cuenta representados por un puntaje numérico en un rango definido.. <br/><br><img src='https://developer.circulodecredito.com.mx/sites/default/files/2024-01/Logo-Swaggers.png' height='70' width='270'/></p><br/>"
  version: 1.0.0
  title: Loan Amount Estimator V1.2
  termsOfService: https://developer.circulodecredito.com.mx/terms-use
  contact:
    email: api@circulodecredito.com.mx
  license:
    name: 'Derechos reservados Circulo de Crédito 2020'
    url: 'http://www.circulodecredito.com.mx'
servers:
  - url: 'https://services.circulodecredito.com.mx/v2/lae'
paths:
  '/':
    options:
      summary: ''
      description: ''
      tags:
        - 'Loan Amount Estimator.'
      responses:
        '200':
          description: 'OK'
        '403':
          description: 'FORBIDDEN'
  '/persona':
    post:
      summary: 'Consulta por datos generales de la persona.'
      description: 'Consulta por datos generales de la persona.'
      tags: 
        - 'Loan Amount Estimator'
      operationId: 'getLAEByPerson'
      parameters:
        - name: x-signature
          in: header
          description: Firma generada con la llave privada
          required: true
          style: simple
          schema:
            type: string
        - name: x-api-key
          in: header
          description: ConsumerKey obtenido desde el portal de desarrolladores
          required: true
          style: simple
          schema:
            type: string
        - name: username
          in: header
          description: Usuario de Círculo de Crédito
          required: true
          style: simple
          schema:
            type: string
        - name: password
          in: header
          description: Contraseña de Círculo de Crédito
          required: true
          style: simple
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PeticionPersona'
        required: true
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Respuesta'
        204:
          description: NO CONTENT
          content: {}
        400:
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "400"
                  mensaje: El campo [nombre_campo] es requerido
                - codigo: "400"
                  mensaje: El código postal no corresponde al estado.
                - codigo: "400.4"
                  mensaje: Petición incorrecta el x-signature es requerido.
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "401.1"
                  mensaje: Acceso no autorizado, x-api-key no válida.
                - codigo: "401.1"
                  mensaje: Las credenciales de acceso no son correctas.
                - codigo: "401.2"
                  mensaje: Acceso no autorizado.
                - codigo: "401.3"
                  mensaje: Acceso no autorizado, no tiene el producto asociado.
                - codigo: "401.4"
                  mensaje: Acceso no autorizado, no tiene acceso al recurso.
        403:
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                  - codigo: "403"
                    mensaje: Acceso denegado
                  - codigo: "403.1"
                    mensaje: No se pudo autenticar, x-signature no es válida.
                  - codigo: "403.2"
                    mensaje: No se pudo autenticar.
        404:
          description: NOT FOUND
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "404.1"
                  mensaje: No se encontró a la persona.
        405:
          description: METHOD NOT ALLOWED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                  errores:
                  - codigo: "405.1"
                    mensaje: Método no permitido.
        415:
          description: UNSUPPORTED MEDIA TYPE.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "415.1"
                  mensaje: Medios no admitidos
        429:
          description: TOO MANY REQUESTS
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "429.1"
                  mensaje: Se han enviado demasiadas solicitudes. Se debe esperar antes de realizar una nueva solicitud.
        500:
          description: INTERNAL SERVER ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "500"
                  mensaje: Ocurrio un error al procesar tu solicitud.
                - codigo: "500.1"
                  mensaje: Ocurrio un problema, inténtelo nuevamente más tarde.
        503:
          description: SERVICE UNAVAILABLE
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                  - codigo: "503.1"
                    mensaje: Servicio no disponible.
      deprecated: false
      x-codegen-request-body-name: getLAEByPerson
  '/folioConsulta':
    post:
      summary: 'Consulta por folio consulta a la persona.'
      description: 'Consulta por folio consulta a la persona.'
      tags: 
        - 'Loan Amount Estimator'
      operationId: 'getLAEByFolioConsulta'
      parameters:
        - name: x-signature
          in: header
          description: Firma generada con la llave privada
          required: true
          style: simple
          schema:
            type: string
        - name: x-api-key
          in: header
          description: ConsumerKey obtenido desde el portal de desarrolladores
          required: true
          style: simple
          schema:
            type: string
        - name: username
          in: header
          description: Usuario de Círculo de Crédito
          required: true
          style: simple
          schema:
            type: string
        - name: password
          in: header
          description: Contraseña de Círculo de Crédito
          required: true
          style: simple
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PeticionFolioConsulta'
        required: true
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Respuesta'
        204:
          description: NO CONTENT
          content: {}
        400:
          description: BAD REQUEST
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "400"
                  mensaje: El campo [nombre_campo] es requerido
                - codigo: "400"
                  mensaje: El código postal no corresponde al estado.
                - codigo: "400.4"
                  mensaje: Petición incorrecta el x-signature es requerido.
        401:
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "401.1"
                  mensaje: Acceso no autorizado, x-api-key no válida.
                - codigo: "401.1"
                  mensaje: Las credenciales de acceso no son correctas.
                - codigo: "401.2"
                  mensaje: Acceso no autorizado.
                - codigo: "401.3"
                  mensaje: Acceso no autorizado, no tiene el producto asociado.
                - codigo: "401.4"
                  mensaje: Acceso no autorizado, no tiene acceso al recurso.
        403:
          description: FORBIDDEN
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                  - codigo: "403"
                    mensaje: Acceso denegado
                  - codigo: "403.1"
                    mensaje: No se pudo autenticar, x-signature no es válida.
                  - codigo: "403.2"
                    mensaje: No se pudo autenticar.
        404:
          description: NOT FOUND
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "404.1"
                  mensaje: No se encontró a la persona.
        405:
          description: METHOD NOT ALLOWED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                  errores:
                  - codigo: "405.1"
                    mensaje: Método no permitido.
        415:
          description: UNSUPPORTED MEDIA TYPE.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "415.1"
                  mensaje: Medios no admitidos
        429:
          description: TOO MANY REQUESTS
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "429.1"
                  mensaje: Se han enviado demasiadas solicitudes. Se debe esperar antes de realizar una nueva solicitud.
        500:
          description: INTERNAL SERVER ERROR
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "500"
                  mensaje: Ocurrio un error al procesar tu solicitud.
                - codigo: "500.1"
                  mensaje: Ocurrio un problema, inténtelo nuevamente más tarde.
        503:
          description: SERVICE UNAVAILABLE
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                  - codigo: "503.1"
                    mensaje: Servicio no disponible.
      deprecated: false
      x-codegen-request-body-name: getLAEByFolioConsulta
components:
  schemas:
    Error:
      type: object
      description: error
      properties:
        codigo:
          type: string
          example: 400.1
          description: Código de error.
        mensaje:
          type: string
          example: El campo "{Campo}" es requerido.
          description: Mensaje de error.
    Errores:
      type: object
      properties:
        errors:
          type: array
          description: List of errors.
          items:
            $ref: '#/components/schemas/Error'
      description: A list of errors.
    CatalogoRazones:
      type: 'string'
      description: 'Código de la razón por la que se genera el valor del score. Ver tabla Razones Score<table><thead><tr><th>Clave</th><th>Significado</th><th>Descripción</th></tr></thead><tbody><tr><td>SC</td><td>Error</td><td>No se calculó el Score por servicio, temporalmente no disponible o tiempo de espera demasiado largo.</td><tr><td>C0</td><td>Valid Score</td><td>Valor default, score válido.</td><tr><td>C3</td><td>Fallecido</td><td>El titular del expediente encontrado está marcado como fallecido.</td><tr><td>C4</td><td>Datos Insuficientes</td><td>El expediente no tiene suficiente información para calcular el score o la información en el expediente no ha sido actualizada en los últimos 24 meses.</td><tr><td>C5</td><td>Fraude</td><td>Fraude cometido por el cliente en cualquiera de las cuentas.</td><tr><td>C6</td><td>Segmentation not determined (other possible causes specified in SDK documentation).</td><td>No se puede identificar el tipo de producto (Tarjeta Bancaria o Tarjeta Departamental).</td><tr><td>C7</td><td>Account of interest is closed too recent or updated.</td><td>La cuenta de interés esta cerrada, no tiene al menos 6 meses de historia o no se encuentra actualizada.</td><tr><td>C8</td><td>Dispute, fraud, lost/stolen in trade line of interest.</td><td>La cuenta de interés se encuentra extraviada o robada, en aclaración o presenta fraude no atribuible al consumidor.</td><tr><td>C9</td><td>Delinquency on trade line of interest.</td><td>La cuenta de interés presenta morosidad.</td></tbody></table>'
      enum:
        - 'SC'
        - 'C0'
        - 'C3'
        - 'C4'
        - 'C5'
        - 'C6'
        - 'C7'
        - 'C8'
        - 'C9'
      example: 'C6'
    CatalogoEstados:
      type: 'string'
      description: 'Estado en que se ubica el domicilio <table><thead><tr><th>Clave</th><th>Estado</th></tr></thead><tbody><tr><td>AGS</td><td>AGUASCALIENTES</td></tr><tr><td>BC</td><td>BAJA CALIFORNIA NORTE</td></tr><tr><td>BCS</td><td>BAJA CALIFORNIA SUR</td></tr><tr><td>CAMP</td><td>CAMPECHE</td></tr><tr><td>CDMX</td><td>CIUDAD DE MÉXICO</td></tr><tr><td>CHIS</td><td>CHIAPAS</td></tr><tr><td>CHIH</td><td>CHIHUAHUA</td></tr><tr><td>COAH</td><td>COHAHUILA</td></tr><tr><td>COL</td><td>COLIMA</td></tr><tr><td>DF</td><td>DISTRITO FEDERAL</td></tr><tr><td>DGO</td><td>DURANGO</td></tr><tr><td>GTO</td><td>GUANAJUATO</td></tr><tr><td>GRO</td><td>GUERRERO</td></tr><tr><td>HGO</td><td>HIDALGO</td></tr><tr><td>JAL</td><td>JALISCO</td></tr><tr><td>MEX</td><td>MÉXICO</td></tr><tr><td>MICH</td><td>MICHOCÁN</td></tr><tr><td>MOR</td><td>MORELOS</td></tr><tr><td>NAY</td><td>NAYARIT</td></tr><tr><td>NL</td><td>NUEVO LEÓN</td></tr><tr><td>OAX</td><td>OXACA</td></tr><tr><td>PUE</td><td>PUEBLA</td></tr><tr><td>QRO</td><td>QUERÉTARO</td></tr><tr><td>QROO</td><td>QUINTANA ROO</td></tr><tr><td>SLP</td><td>SAN LUIS POTOSÍ</td></tr><tr><td>SIN</td><td>SINALOA</td></tr><tr><td>SON</td><td>SONORA</td></tr><tr><td>TAB</td><td>TABASCO</td></tr><tr><td>TAMP</td><td>TAMAULIPAS</td></tr><tr><td>TLAX</td><td>TLAXCALA</td></tr><tr><td>VER</td><td>VERACRUZ</td></tr><tr><td>YUC</td><td>YUCATÁN</td></tr><tr><td>ZAC</td><td>ZACATECAS</td></tr></tbody></table>'
      minLength: 0
      maxLength: 4
      example: 'JAL'
      enum:
        - 'AGS'
        - 'BC'
        - 'BCS'
        - 'CAMP'
        - 'COAH'
        - 'COL'
        - 'CHIS'
        - 'CHIH'
        - 'DF'
        - 'CDMX'
        - 'DGO'
        - 'GTO'
        - 'GRO'
        - 'HGO'
        - 'JAL'
        - 'MEX'
        - 'MICH'
        - 'MOR'
        - 'NAY'
        - 'NL'
        - 'OAX'
        - 'PUE'
        - 'QRO'
        - 'QROO'
        - 'SLP'
        - 'SIN'
        - 'SON'
        - 'TAB'
        - 'TAMP'
        - 'TLAX'
        - 'VER'
        - 'YUC'
        - 'ZAC'
    CatalogoSegmento:
      type: 'string'
      description: '<table><thead><tr><th>Clave</th><th>Descripción</th></tr></thead><tbody><tr><td>PP</td><td>PRESTAMO PERSONAL</td></tr><tr><td>TC</td><td>TARJETA DE CREDITO</td></tr><tr><td>TD</td><td>TARJETA DEPARTAMENTAL</td></tr></tbody></table>'
      maxLength: 2
      enum:
        - 'PP'
        - 'TC'
        - 'TD'
      example: 'PP'
    CatalogoTipoDomicilio:
      type: 'string'
      description: '<table><thead><tr><th>Clave</th><th>Descripción</th></tr></thead><tbody><tr><td>N</td><td>Negocio</td></tr><tr><td>O</td><td>Domicilio del otorgante</td></tr><tr><td>C</td><td>Casa</td></tr><tr><td>P</td><td>Apartado Postal</td></tr><tr><td>E</td><td>Empleo</td></tr></tbody></table>'
      maxLength: 1
      example: 'C'
      enum:
        - 'N'
        - 'O'
        - 'C'
        - 'P'
        - 'E'
    DomicilioPeticion:
      type: 'object'
      required:
      - direccion
      - estado
      - CP
      description: 'Datos del domicilio de la persona a consultar'
      properties:
        direccion:
          type: string
          maxLength: 80
          pattern: (^[A-Za-záéíóúÁÉÍÓÚñÑüÜ0-9\\,.\- ]+)$
          description: Reportar el nombre de la calle, número exterior, número interior. Deben considerarse avenida,cerrada, manzana, lote, edificio,departamento etc. Debe contener por lo menos dos cadenas de caracteres para que el registro sea válido, de lo contrario el registro será rechazado.
          example: "PASADISO ENCONTRADO 58"
        coloniaPoblacion:
          maxLength: 65
          type: string
          pattern: (^[A-Za-záéíóúÁÉÍÓÚñÑüÜ0-9\\,.\- ]+)$
          description: Reportar la colonia a la cual pertenece la dirección contenida en el elemento dirección.
          example: "MONTEVIDEO"
        delegacionMunicipio:
          type: string
          maxLength: 65
          pattern: (^[A-Za-záéíóúÁÉÍÓÚñÑüÜ0-9\\,.\- ]+)$
          description: Reportar la delegación o municipio a la cual pertenece la dirección contenida en el elemento Dirección.
          example: "GUSTAVO A MADERO"
        ciudad:
          type: string
          maxLength: 65
          pattern: (^[A-Za-záéíóúÁÉÍÓÚñÑüÜ0-9\\,.\- ]+)$
          description: Reportar la ciudad a la cual pertenece la dirección contenida en el elemento Dirección.
          example: "CIUDAD DE MÉXICO"
        estado:
          $ref: '#/components/schemas/CatalogoEstados'
        CP:
          type: string
          pattern: (^[0-9]+)$
          minLength: 5
          maxLength: 5
          description: El código postal reportado debe estar compuesto por 5 dígitos. Para que el código postal sea válido deberá corresponder al estado reportado.
          example: "07730"
    Persona:
      type: 'object'
      description: 'Datos generales de la persona a consultar.'
      required:
        - 'apellidoPaterno'
        - 'primerNombre'
        - 'fechaNacimiento'
      properties:
        primerNombre: 
          type: string
          maxLength: 50
          pattern: (^[\sA-Za-z0-9\u00C0-\u017F]+)$
          example: "Roberto"
        segundoNombre: 
          type: string
          maxLength: 50
          pattern: (^[\sA-Za-z0-9\u00C0-\u017F]+)$
          example: "Miguel"
        apellidoPaterno:
          type: string
          maxLength: 30
          pattern: (^[\sA-Za-z0-9\u00C0-\u017F]+)$
          example: "SAHAGUN"
        apellidoMaterno:
          type: string
          maxLength: 30
          pattern: (^[\sA-Za-z0-9\u00C0-\u017F]+)$
          example: "ZARAGOZA"
        fechaNacimiento:
          type: string
          pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$
          example: '2001-01-01'
        RFC:
          type: string
          maxLength: 13
          pattern: ^([A-Za-z0-9]){0,13}$
          example: "FLGJ881030M85"
        domicilio:
          $ref: '#/components/schemas/DomicilioPeticion'
    PeticionFolioConsulta:
      type: 'object'
      required:
        - 'folioOtorgante'
        - 'segmento'
        - 'folioConsulta'
      properties:
        folioOtorgante:
          type: 'string'
          pattern: (^[\sA-Za-z0-9\u00C0-\u017F]+)$
          maxLength: 25
          example: "12345"
        segmento:
           $ref: '#/components/schemas/CatalogoSegmento'
        folioConsulta:
          type: 'string'
          pattern: (^[\sA-Za-z0-9\u00C0-\u017F]+)$
          description: 'Folio de la consulta'
          example: '389992433'
    PeticionPersona:
      type: 'object'
      required:
        - 'folioOtorgante'
        - 'segmento'
        - 'persona'
      properties: 
        folioOtorgante:
          type: 'string'
          pattern: (^[\sA-Za-z0-9\u00C0-\u017F]+)$
          maxLength: 25
          example: "12345"
        segmento:
           $ref: '#/components/schemas/CatalogoSegmento'
        persona:
          $ref: '#/components/schemas/Persona'
    Respuesta:
      type: 'object'
      properties:
        folioOtorgante:
          type: 'string'
          example: '12345'
        folioConsultaLAE:
          type: 'string'
          example: '389992433'
        scores:
          type: array
          items:
            type: object
            properties:
              numero: 
                type: 'string'
                example: '1'
              valor: 
                type: 'string'
                example: '1203'
              minimo: 
                type: 'string'
                example: '1500'
              maximo: 
                type: 'string'
                example: '99999'
        reasonCode: 
           $ref : '#/components/schemas/CatalogoRazones'