﻿openapi: 3.0.0
info:
  title: APIs Admin do Open Finance Brasil
  description: As API's administrativas são recursos que podem ser consumidos apenas pelo diretório para avaliação e controle da qualidade dos serviços fornecidos pelas instituições financeiras
  version: 2.0.0-beta.2
  contact:
    url: 'https://servicedesk.openbankingbrasil.org.br/Login.jsp?navLanguage=pt-BR'
servers:
  - url: 'http://api.banco.com.br/open-banking/admin/v1'
tags:
- name: "Metrics"
paths:
  /metrics:
    get:
      tags:
        - Metrics
      summary: Obtém as métricas de disponibilidade das APIs
      description: "Obtém as métricas de disponibilidade das APIs"
      operationId: "getMetrics"
      parameters:
        - $ref: "#/components/parameters/page"
        - $ref: "#/components/parameters/pageSize"
        - in: query
          name: period
          schema:
            type: string
            enum:
              - CURRENT
              - ALL
          required: false
          description: |
            Período a ser consultado
              * `CURRENT` - Métricas do dia atual.
              * `ALL` - Métricas de todo o período disponível (últimos 7 dias).
      responses:
        '200':
          description: Dados das métricas
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseMetricsList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
        '529':
          $ref: '#/components/responses/SiteIsOverloaded'
        default:
          $ref: '#/components/responses/Default'
components:
  schemas:
    ResponseMetricsList:
      type: object
      required:
        - data
        - links
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ResponseMetricsListData'
        links:
          $ref: '#/components/schemas/Links'
        meta:
          $ref: '#/components/schemas/Meta'
    ResponseMetricsListData:
      type: object
      required:
        - endpoint
        - requestTime
        - availability
        - invocations
        - averageResponse
        - averageTps
        - peakTps
        - errors
        - rejections
      properties:
        endpoint:
          type: string
          maxLength: 2000
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
          description: URL do endpoint
        requestTime:
          type: string
          maxLength: 20
          description: Data e hora que as métricas foram requisitadas.
          format: date-time
        availability:
          $ref: '#/components/schemas/AvailabilityMetrics'
        invocations:
          $ref: '#/components/schemas/InvocationMetrics'
        averageResponse:
          $ref: '#/components/schemas/AverageMetrics'
        averageTps:
          $ref: '#/components/schemas/AverageTPSMetrics'
        peakTps:
          $ref: '#/components/schemas/PeakTPSMetrics'
        errors:
          $ref: '#/components/schemas/ErrorMetrics'
        rejections:
          $ref: '#/components/schemas/RejectionMetrics'
    AvailabilityMetrics:
      type: object
      required:
        - uptime
        - downtime
      properties:
        uptime:
          type: object
          required:
            - generalUptimeRate
            - uptimeRate
          properties:
            generalUptimeRate:
              type: string
              minLength: 8
              maxLength: 8
              pattern: '^\d{1}\.\d{6}$'
              description: Taxa de disponibilidade (considerando todos os serviços ativos ao mesmo tempo).
            uptimeRate:
              type: string
              minLength: 8
              maxLength: 8
              pattern: '^\d{1}\.\d{6}$'
              description: Taxa de disponibilidade do endpoint.
        downtime:
          type: object
          required:
            - generalDowntime
            - scheduledOutage
            - partialDowntime
          properties:
            generalDowntime:
              type: integer
              description: Quantidade de segundos de downtime (considerando qualquer api em downtime).
            scheduledOutage:
              type: integer
              description: Quantidade de segundos de indisponibilidade agendada.
            partialDowntime:
              type: integer
              description: Quantidade de segundos de indisponibilidade do endpoint.
    InvocationMetrics:
      type: object
      required:
        - currentDay
        - previousDays
      properties:
        currentDay:
          type: integer
          description: Número de chamadas no dia atual.
        previousDays:
          type: array
          maxItems: 7
          description: Número de chamadas nos dias anteriores. O primeiro item do array é referente ao dia anterior ao corrente, e assim por diante. Devem ser retornados no máximo sete dias caso estejam disponíveis.​
          items:
            type: integer
    AverageMetrics:
      type: object
      required:
        - currentDay
        - previousDays
      properties:
        currentDay:
          type: integer
          description: Tempo médio de resposta em milissegundos para chamadas no dia atual.
        previousDays:
          type: array
          maxItems: 7
          description: Tempo médio de resposta em milissegundos para chamadas nos dias anteriores. O primeiro item do array é referente ao dia anterior ao corrente, e assim por diante. Devem ser retornados no máximo sete dias caso estejam disponíveis.​
          items:
            type: integer
    AverageTPSMetrics:
      type: object
      required:
        - currentDay
        - previousDays
      properties:
        currentDay:
          type: integer
          description: Número médio de chamadas por segundo no dia.
        previousDays:
          type: array
          maxItems: 7
          description: Número médio de chamadas por segundo nos dias anteriores. O primeiro item do array é referente ao dia anterior ao corrente, e assim por diante. Devem ser retornados no máximo sete dias caso estejam disponíveis.​
          items:
            type: integer
    PeakTPSMetrics:
      type: object
      required:
        - currentDay
        - previousDays
      properties:
        currentDay:
          type: integer
          description: Pico de chamadas por segundo no dia.
        previousDays:
          type: array
          maxItems: 7
          description: Pico de chamadas por segundo nos dias anteriores. O primeiro item do array é referente ao dia anterior ao corrente, e assim por diante. Devem ser retornados no máximo sete dias caso estejam disponíveis.
          items:
            type: integer
    ErrorMetrics:
      type: object
      required:
        - currentDay
        - previousDays
      properties:
        currentDay:
          type: integer
          description: Número de chamadas com erro no dia atual.
        previousDays:
          type: array
          maxItems: 7
          description: Número de chamadas com erro nos dias anteriores. O primeiro item do array é referente ao dia anterior ao corrente, e assim por diante. Devem ser retornados no máximo sete dias caso estejam disponíveis.
          items:
            type: integer
    RejectionMetrics:
      type: object
      required:
        - currentDay
        - previousDays
      properties:
        currentDay:
          type: integer
          description: Número de chamadas rejeitadas no dia atual.
        previousDays:
          type: array
          maxItems: 7
          description: Número de chamadas rejeitadas nos dias anteriores. O primeiro item do array é referente ao dia anterior ao corrente, e assim por diante. Devem ser retornados no máximo sete dias caso estejam disponíveis.​
          items:
            type: integer
    Links:
      type: object
      properties:
        self:
          type: string
          description: URL da página atualmente requisitada
          maxLength: 2000
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
          example: 'https://api.banco.com.br/open-banking/admin/v1/resource'
        first:
          type: string
          description: URL da primeira página de registros
          maxLength: 2000
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
          example: 'https://api.banco.com.br/open-banking/admin/v1/resource'
        prev:
          type: string
          description: URL da página anterior de registros
          maxLength: 2000
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
        next:
          type: string
          description: URL da próxima página de registros
          maxLength: 2000
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
        last:
          type: string
          description: URL da última página de registros
          maxLength: 2000
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
          example: 'https://api.banco.com.br/open-banking/admin/v1/resource'
    Meta:
      type: object
      properties:
        totalRecords:
          type: integer
          description: Total de registros encontrados
          example: 1
        totalPages:
          type: integer
          description: Total de páginas para os registros encontrados
          example: 1
      required:
        - totalRecords
        - totalPages
    ResponseErrorMetaSingle:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 13
          items:
            type: object
            required:
              - code
              - title
              - detail
            properties:
              code:
                description: Código de erro específico do endpoint
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              title:
                description: Título legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              detail:
                description: Descrição legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 2048
        meta:
          type: object
          description: Meta informações referente à API requisitada.
          required:
            - requestDateTime
          properties:
            requestDateTime:
              description: 'Data e hora da consulta, conforme especificação RFC-3339, formato UTC.'
              type: string
              maxLength: 20
              format: date-time
              example: '2021-05-21T08:30:00Z'
    ResponseError:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 13
          items:
            type: object
            required:
              - code
              - title
              - detail
            properties:
              code:
                description: Código de erro específico do endpoint
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              title:
                description: Título legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              detail:
                description: Descrição legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 2048
        meta:
          type: object
          description: Meta informações referente à API requisitada.
          required:
            - totalRecords
            - totalPages
          properties:
            totalRecords:
              type: integer
              format: int32
              description: Número total de registros no resultado
              example: 1
            totalPages:
              type: integer
              format: int32
              description: Número total de páginas no resultado
              example: 1
  parameters:
    page:
      name: page
      in: query
      description: Número da página que está sendo requisitada (o valor da primeira página é 1).
      schema:
        type: integer
        format: int32​
        default: 1
        minimum: 1
        maximum: 2147483647
    pageSize:
      name: page-size
      in: query
      description: Quantidade total de registros por páginas.
      schema:
        type: integer
        format: int32​
        default: 25
        minimum: 1
        maximum: 1000
  responses:
    BadRequest:
      description: A requisição foi malformada, omitindo atributos obrigatórios, seja no payload ou através de atributos na URL.​
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    NotFound:
      description: O recurso solicitado não existe ou não foi implementado.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    MethodNotAllowed:
      description: O consumidor tentou acessar o recurso com um método não suportado.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    TooManyRequests:
      description: A operação foi recusada, pois muitas solicitações foram feitas dentro de um determinado período ou o limite global de requisições concorrentes foi atingido.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    InternalServerError:
      description: Ocorreu um erro no gateway da API ou no microsserviço.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    GatewayTimeout:
      description: GATEWAY TIMEOUT - A requisição não foi atendida dentro do tempo limite estabelecido.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    SiteIsOverloaded:
      description: O site está sobrecarregado e a operação foi recusada, pois foi atingido o limite máximo de TPS global, neste momento.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseErrorMetaSingle'
    Default:
      description: '\-'
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
        