openapi: 3.0.0
info:
  description: "<p>La API de FICO® Score determina la probabilidad de incumplimiento de un acreditado en los próximos doce meses. A mayor puntaje de score, menor es el riesgo.<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: FICO® Score
  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/sandbox/v2/ficoscore'
paths:
  '/' :
    post:
      summary: ''
      description: ''
      tags: 
        - 'Score Datos Generales'
      operationId: '/'
      parameters:
        - name: x-api-key
          in: header
          description: ConsumerKey obtenido desde el portal de desarrolladores
          required: true
          style: simple
          schema:
            type: string

      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestScoreDG'
        required: true
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseScore'
        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.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: ScoreDG
  '/folio':
    post:
      summary: ''
      description: ''
      tags: 
        - 'ScoreFolio'
      operationId: '/folio'
      parameters:
        - name: x-api-key
          in: header
          description: ConsumerKey obtenido desde el portal de desarrolladores
          required: true
          style: simple
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestScoreFolio'
        required: true
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseScore'
        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.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ó el Folio.
        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: ScoreFolio
components:
  schemas:
    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>BCN</td><td>BAJA CALIFORNIA NORTE</td></tr><tr><td>BCS</td><td>BAJA CALIFORNIA SUR</td></tr><tr><td>CAM</td><td>CAMPECHE</td></tr><tr><td>CHS</td><td>CHIAPAS</td></tr><tr><td>CHI</td><td>CHIHUAHUA</td></tr><tr><td>COA</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>EM</td><td>ESTADO DE MEXICO</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>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>OAXACA</td></tr><tr><td>PUE</td><td>PUEBLA</td></tr><tr><td>QRO</td><td>QUERÉTARO</td></tr><tr><td>QR</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>TAM</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>"
      example: "DF"
      enum:
        - "AGS"
        - "BC"
        - "BCS"
        - "CAMP"
        - "COAH"
        - "COL"
        - "CHIS"
        - "CHIH"
        - "DF"
        - "DGO"
        - "GTO"
        - "GRO"
        - "HGO"
        - "JAL"
        - "MEX"
        - "MICH"
        - "MOR"
        - "NAY"
        - "NL"
        - "OAX"
        - "PUE"
        - "QRO"
        - "QROO"
        - "SLP"
        - "SIN"
        - "SON"
        - "TAB"
        - "TAMP"
        - "TLAX"
        - "VER"
        - "YUC"
        - "ZAC"
        - "CDMX"
    RequestScoreDG: 
      type: object
      description: 'Cuerpo de la petición para obtener respuesta del servicio'
      required:
        - folio
        - persona
      properties:
        folio:
          oneOf:
            - type: string
            - type: integer
          maxLength: 25
          example: 1736967881
          pattern: '^[0-9\s]+$'

        persona:
          type: object
          required:
            - nombres
            - apellidoPaterno
            - apellidoMaterno
            - fechaNacimiento
            - domicilio
          properties:
            nombres:
              type: string
              pattern: '^[A-Za-z\s]+$'
              maxLength: 30
              example: "Juan"
            segundoNombre:
              type: string
              pattern: '^[A-Za-z\\s]*$'
              maxLength: 30
              nullable: true
              example: null
            apellidoPaterno:
              type: string
              maxLength: 30
              pattern: '^[A-Za-z\s]+$'
              example: "Prueba"
            apellidoMaterno:
              type: string
              maxLength: 30
              pattern: '^[A-Za-z\s]+$'
              example: "Cuatro"
            apellidoAdicional:
              type: string
              maxLength: 30
              pattern: '^[A-Za-z\s]+$'
              example: null
            fechaNacimiento:
              type: string
              example: '1980-01-04'
            RFC:
              type: string
              maxLength: 13
              example: "PUSJ800104H2O"
            CURP:
              type: string
              maxLength: 18
              example: null
            nacionalidad:
              type: string
            residencia:
              type: string
            estadoCivil:
              type: string
            sexo:
              type: string
            claveElectorIFE:
              type: string
            numeroDependientes:
              type: string
            fechaDefuncion:
              type: string
            domicilio:
              $ref: '#/components/schemas/Domicilio'
    Domicilio:
      type: 'object'
      description: 'Datos del domicilio de la persona a consultar'
      required:
      - direccion
      - coloniaPoblacion
      - delegacionMunicipio
      - ciudad
      - estado
      - CP
      properties:
        direccion:
          type: string
          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: "INSURGENTES SUR 1004"
        coloniaPoblacion:
          type: string
          description: Reportar la colonia a la cual pertenece la dirección contenida en el elemento dirección.
          example: "INSURGENTES"
        delegacionMunicipio:
          type: string
          description: Reportar la delegación o municipio a la cual pertenece la dirección contenida en el elemento Dirección.
          example: "BENITO JUAREZ"
        ciudad:
          type: string
          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
          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: "11230"
          minLength: 5
          maxLength: 5
        fechaResidencia:
          type: string
          example: '2018-12-20'
          nullable: true
          description: 'Fecha en la cual se registró el domicilio.'
        numeroTelefono:
          type: string
          example: '2018-12-20'
          nullable: true
          description: 'Fecha en la cual se registró el domicilio.'
        tipoDomicilio:
          type: string
          nullable: true
        tipoAsentamiento:
           type: number
           nullable: true
        fechaRegistroDomicilio:
           type: string
           example: '2018-12-20'
           nullable: true
           description: 'Fecha en la cual se registró el domicilio.'
        tipoAltaDomicilio:
           type: number
           example: 1
           nullable: true
           description: 'Los valores posibles: 0 = Alta de crédito 1 = Consulta expediente'
        idDomicilio:
            type: string
            nullable: true
            example: 316110890
            description: 'Identificador único del domicilio'
    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
      description: Si existen errores, se listarán.
      properties:
        errores:
          items:
            $ref: '#/components/schemas/Error'
    RequestScoreFolio:
      type: object
      description: 'Cuerpo de la petición para obtener respuesta del servicio'
      required:
        - folioConsulta
        - folioOtorgante
      properties:
        folioConsulta:
          type: string
          maxLength: 50
          pattern: ^([0-9]){0,15}$
          example: "390038369"
        folioOtorgante:
          type: string
          maxLength: 50
          pattern: ^([A-Za-z0-9]){0,50}$
          example: "1234"
    ResponseScore:
      type: object
      description: Si existen información se entregara en esta estructura de datos.
      properties:
        folio:
          type: string
          maxLength: 25
          example: "123"
        folioConsulta:
          type: string
          maxLength: 50
          pattern: ^([A-Za-z0-9]){0,50}$
          example: "324567279"
        score:
          type: object
          properties:
            nombreScore:
              type: string
            valor:
              type: integer
            razones: 
              type: array
              items : 
                type: string
          example: 
              nombreScore: "FICO"
              valor: 482
              razones: ["K0","J0","E2","D8"]