openapi: 3.0.0
info:
  contact: {}
  description: Catálogo público de cartas de consórcio contempladas da contemplei.
    Somente leitura, sem autenticação e com CORS aberto a qualquer origem. Toda
    resposta vem no envelope { data, meta }.
  title: contemplei — API pública do catálogo
  version: "1"
servers:
  - url: https://contemplei.app
paths:
  /v1/anuncios/compartilhado/{slug}:
    get:
      description: Devolve a carta associada a um link de compartilhamento (slug curto
        gerado pelo vendedor), com crédito, entrada, parcela e administradora.
        Valores monetários em centavos (BRL). Sem autenticação.
      operationId: AnunciosController_compartilhado_v1
      parameters:
        - in: path
          name: slug
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: "#/components/schemas/AnuncioCompartilhadoDto"
                  meta:
                    $ref: "#/components/schemas/ResponseMetaDto"
                required:
                  - data
                  - meta
                type: object
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Slug sem carta correspondente
        "429":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Limite de requisições por IP excedido; Retry-After e
            RateLimit-Reset informam quando tentar de novo
      summary: Carta por link compartilhado
      tags:
        - anuncios
  /v1/anuncios/publico:
    get:
      description: "Lista paginada das cartas à venda. Filtros: segmentos (imoveis,
        moveis, servicos; lista separada por vírgula), administradoraIds,
        creditoMin/creditoMax, entradaMin/entradaMax, parcelaMin/parcelaMax
        (centavos), cetMin/cetMax, ordenarPor, ordem, page e pageSize (máximo
        100). Envelope { data, meta } com meta.total, meta.page e meta.pageSize.
        Sem autenticação."
      operationId: AnunciosController_catalogoPublico_v1
      parameters:
        - deprecated: true
          in: query
          name: segmento
          required: false
          schema:
            enum:
              - imoveis
              - moveis
              - servicos
            type: string
        - deprecated: true
          in: query
          name: administradoraId
          required: false
          schema:
            format: uuid
            type: string
        - in: query
          name: segmentos
          required: false
          schema:
            items:
              enum:
                - imoveis
                - moveis
                - servicos
              type: string
            type: array
        - in: query
          name: administradoraIds
          required: false
          schema:
            items:
              type: string
            type: array
        - description: Trecho do código exibido no card do anúncio. Busca parcial e sem
            diferenciar maiúsculas. No catálogo público só alcança anúncios
            publicados.
          in: query
          name: codigo
          required: false
          schema:
            type: string
        - in: query
          name: subcategorias
          required: false
          schema:
            items:
              enum:
                - residencial
                - comercial
                - rural
                - lote
                - automovel
                - motocicleta
                - caminhao
                - maquinario
                - viagens
                - educacao
                - estetica
                - outros
              type: string
            type: array
        - in: query
          name: status
          required: false
          schema:
            items:
              enum:
                - disponivel
                - com_reserva
              type: string
            type: array
        - in: query
          name: creditoMin
          required: false
          schema:
            type: number
        - in: query
          name: creditoMax
          required: false
          schema:
            type: number
        - in: query
          name: entradaMin
          required: false
          schema:
            type: number
        - in: query
          name: entradaMax
          required: false
          schema:
            type: number
        - in: query
          name: parcelaMin
          required: false
          schema:
            type: number
        - in: query
          name: parcelaMax
          required: false
          schema:
            type: number
        - in: query
          name: creditoAlvoCents
          required: false
          schema:
            type: number
        - in: query
          name: entradaAlvoCents
          required: false
          schema:
            type: number
        - in: query
          name: parcelaAlvoCents
          required: false
          schema:
            type: number
        - in: query
          name: cetMin
          required: false
          schema:
            type: number
        - in: query
          name: cetMax
          required: false
          schema:
            type: number
        - in: query
          name: favoritos
          required: false
          schema:
            type: boolean
        - in: query
          name: destaque
          required: false
          schema:
            type: boolean
        - in: query
          name: ordenarPor
          required: false
          schema:
            enum:
              - credito
              - entrada
              - prazo
              - createdAt
              - cet
              - custoCredito
            type: string
        - in: query
          name: ordem
          required: false
          schema:
            enum:
              - asc
              - desc
            type: string
        - in: query
          name: page
          required: false
          schema:
            default: 1
            type: number
        - in: query
          name: pageSize
          required: false
          schema:
            default: 20
            maximum: 100
            type: number
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      $ref: "#/components/schemas/AnuncioPublicoResumoDto"
                    type: array
                  meta:
                    allOf:
                      - $ref: "#/components/schemas/PaginatedResponseMetaDto"
                      - $ref: "#/components/schemas/AderenciaMetaExtraDto"
                required:
                  - data
                  - meta
                type: object
          description: ""
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Filtro ou paginação inválidos
        "429":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Limite de requisições por IP excedido; Retry-After e
            RateLimit-Reset informam quando tentar de novo
      summary: Catálogo público de cartas contempladas
      tags:
        - anuncios
      x-paginated: true
      x-paginated-meta: AderenciaMetaExtraDto
  /v1/anuncios/publico/arena:
    get:
      description: Lista paginada das cartas ofertáveis com crédito, entrada, parcela,
        CET e administradora lado a lado, para comparação. Aceita os mesmos
        filtros e paginação do catálogo público (valores em centavos, pageSize
        máximo 100). Envelope { data, meta } paginado. Sem autenticação.
      operationId: AnunciosController_arenaPublica_v1
      parameters:
        - deprecated: true
          in: query
          name: segmento
          required: false
          schema:
            enum:
              - imoveis
              - moveis
              - servicos
            type: string
        - deprecated: true
          in: query
          name: administradoraId
          required: false
          schema:
            format: uuid
            type: string
        - in: query
          name: segmentos
          required: false
          schema:
            items:
              enum:
                - imoveis
                - moveis
                - servicos
              type: string
            type: array
        - in: query
          name: administradoraIds
          required: false
          schema:
            items:
              type: string
            type: array
        - description: Trecho do código exibido no card do anúncio. Busca parcial e sem
            diferenciar maiúsculas. No catálogo público só alcança anúncios
            publicados.
          in: query
          name: codigo
          required: false
          schema:
            type: string
        - in: query
          name: subcategorias
          required: false
          schema:
            items:
              enum:
                - residencial
                - comercial
                - rural
                - lote
                - automovel
                - motocicleta
                - caminhao
                - maquinario
                - viagens
                - educacao
                - estetica
                - outros
              type: string
            type: array
        - in: query
          name: status
          required: false
          schema:
            items:
              enum:
                - disponivel
                - com_reserva
              type: string
            type: array
        - in: query
          name: creditoMin
          required: false
          schema:
            type: number
        - in: query
          name: creditoMax
          required: false
          schema:
            type: number
        - in: query
          name: entradaMin
          required: false
          schema:
            type: number
        - in: query
          name: entradaMax
          required: false
          schema:
            type: number
        - in: query
          name: parcelaMin
          required: false
          schema:
            type: number
        - in: query
          name: parcelaMax
          required: false
          schema:
            type: number
        - in: query
          name: creditoAlvoCents
          required: false
          schema:
            type: number
        - in: query
          name: entradaAlvoCents
          required: false
          schema:
            type: number
        - in: query
          name: parcelaAlvoCents
          required: false
          schema:
            type: number
        - in: query
          name: cetMin
          required: false
          schema:
            type: number
        - in: query
          name: cetMax
          required: false
          schema:
            type: number
        - in: query
          name: favoritos
          required: false
          schema:
            type: boolean
        - in: query
          name: destaque
          required: false
          schema:
            type: boolean
        - in: query
          name: ordenarPor
          required: false
          schema:
            enum:
              - credito
              - entrada
              - prazo
              - createdAt
              - cet
              - custoCredito
            type: string
        - in: query
          name: ordem
          required: false
          schema:
            enum:
              - asc
              - desc
            type: string
        - in: query
          name: page
          required: false
          schema:
            default: 1
            type: number
        - in: query
          name: pageSize
          required: false
          schema:
            default: 20
            maximum: 100
            type: number
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      $ref: "#/components/schemas/AnuncioArenaDto"
                    type: array
                  meta:
                    allOf:
                      - $ref: "#/components/schemas/PaginatedResponseMetaDto"
                      - $ref: "#/components/schemas/AderenciaMetaExtraDto"
                required:
                  - data
                  - meta
                type: object
          description: ""
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Filtro ou paginação inválidos
        "429":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Limite de requisições por IP excedido; Retry-After e
            RateLimit-Reset informam quando tentar de novo
      summary: "Arena: cartas à venda em formato de tabela comparativa"
      tags:
        - anuncios
      x-paginated: true
      x-paginated-meta: AderenciaMetaExtraDto
  /v1/anuncios/publico/carta/{seoSlug}:
    get:
      description: Devolve a carta indexável identificada pelo seoSlug da página
        pública /carta/{seoSlug}/, com crédito, entrada, parcelas, CET e
        administradora. Valores monetários em centavos (BRL). Sem autenticação.
      operationId: AnunciosController_cartaPorSeoSlug_v1
      parameters:
        - in: path
          name: seoSlug
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: "#/components/schemas/AnuncioIndexavelDto"
                  meta:
                    $ref: "#/components/schemas/ResponseMetaDto"
                required:
                  - data
                  - meta
                type: object
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Slug sem carta correspondente
        "429":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Limite de requisições por IP excedido; Retry-After e
            RateLimit-Reset informam quando tentar de novo
      summary: Detalhe de uma carta pelo slug da página
      tags:
        - anuncios
  /v1/anuncios/publico/indexaveis:
    get:
      description: "Lista paginada das cartas que têm página própria em
        /carta/{seoSlug}/, com slug, status e data de atualização, para
        indexação e sitemaps. Parâmetros: page e pageSize (máximo 100). Envelope
        { data, meta } paginado. Sem autenticação."
      operationId: AnunciosController_indexaveis_v1
      parameters:
        - in: query
          name: page
          required: false
          schema:
            default: 1
            type: number
        - in: query
          name: pageSize
          required: false
          schema:
            default: 100
            maximum: 100
            type: number
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      $ref: "#/components/schemas/AnuncioIndexavelDto"
                    type: array
                  meta:
                    $ref: "#/components/schemas/PaginatedResponseMetaDto"
                required:
                  - data
                  - meta
                type: object
          description: ""
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Paginação inválida
        "429":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Limite de requisições por IP excedido; Retry-After e
            RateLimit-Reset informam quando tentar de novo
      summary: Cartas com página pública própria
      tags:
        - anuncios
      x-paginated: true
  /v1/anuncios/publico/mercado:
    get:
      description: "Devolve ágio mínimo, médio e máximo (%) e a quantidade de cartas
        comparáveis à combinação informada. Parâmetros obrigatórios: segmento,
        administradoraId e creditoCents (centavos); excludeAnuncioId opcional.
        Envelope { data, meta } simples. Sem autenticação."
      operationId: AnunciosController_mercadoPublico_v1
      parameters:
        - in: query
          name: segmento
          required: true
          schema:
            enum:
              - imoveis
              - moveis
              - servicos
            type: string
        - in: query
          name: administradoraId
          required: true
          schema:
            format: uuid
            type: string
        - in: query
          name: creditoCents
          required: true
          schema:
            type: number
        - in: query
          name: excludeAnuncioId
          required: false
          schema:
            format: uuid
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: "#/components/schemas/MercadoAnuncioResponseDto"
                  meta:
                    $ref: "#/components/schemas/ResponseMetaDto"
                required:
                  - data
                  - meta
                type: object
          description: ""
        "400":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Parâmetro obrigatório ausente ou inválido
        "429":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Limite de requisições por IP excedido; Retry-After e
            RateLimit-Reset informam quando tentar de novo
      summary: Ágio de mercado de cartas comparáveis
      tags:
        - anuncios
  /v1/anuncios/publico/{externalId}:
    get:
      description: Devolve o resumo público da carta identificada pelo externalId (o
        id devolvido nas listagens), com crédito, entrada, parcelas e
        administradora. Valores monetários em centavos (BRL). Sem autenticação.
      operationId: AnunciosController_detalhePublico_v1
      parameters:
        - in: path
          name: externalId
          required: true
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: "#/components/schemas/AnuncioPublicoResumoDto"
                  meta:
                    $ref: "#/components/schemas/ResponseMetaDto"
                required:
                  - data
                  - meta
                type: object
          description: ""
        "404":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Identificador sem carta publicada correspondente
        "429":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponseDto"
          description: Limite de requisições por IP excedido; Retry-After e
            RateLimit-Reset informam quando tentar de novo
      summary: Resumo público de uma carta pelo identificador
      tags:
        - anuncios
components:
  schemas:
    AderenciaContagemDto:
      properties:
        aderentes:
          type: number
        fora:
          type: number
        perto:
          type: number
      required:
        - aderentes
        - perto
        - fora
      type: object
    AderenciaDto:
      properties:
        bloco:
          enum:
            - aderente
            - perto
            - fora
          type: string
        creditoDesvioCents:
          type: number
        entradaDesvioCents:
          nullable: true
          type: number
        entradaNivel:
          enum:
            - aderente
            - perto
            - fora
          nullable: true
          type: string
        parcelaDesvioCents:
          nullable: true
          type: number
        parcelaNivel:
          enum:
            - aderente
            - perto
            - fora
          nullable: true
          type: string
      required:
        - bloco
        - creditoDesvioCents
        - entradaNivel
        - entradaDesvioCents
        - parcelaNivel
        - parcelaDesvioCents
      type: object
    AderenciaMetaExtraDto:
      properties:
        aderencia:
          $ref: "#/components/schemas/AderenciaContagemDto"
        juncoes:
          items:
            $ref: "#/components/schemas/JuncaoSugeridaDto"
          type: array
      type: object
    AdministradoraRegraItemDto:
      properties:
        descricao:
          type: string
        tema:
          type: string
        veredito:
          enum:
            - permitido
            - com_condicoes
            - nao_permitido
          type: string
      required:
        - tema
        - veredito
        - descricao
      type: object
    AnuncioArenaDto:
      properties:
        aderencia:
          allOf:
            - $ref: "#/components/schemas/AderenciaDto"
          nullable: true
        administradoraHasLogo:
          type: boolean
        administradoraId:
          format: uuid
          type: string
        administradoraLogoVersion:
          nullable: true
          type: string
        administradoraNome:
          type: string
        calculos:
          $ref: "#/components/schemas/AnuncioCalculosDto"
        codigo:
          type: string
        cover:
          allOf:
            - $ref: "#/components/schemas/CartaImagemCoverDto"
          nullable: true
        creditoCents:
          type: number
        destaque:
          type: boolean
        entradaCents:
          type: number
        grupo:
          type: string
        id:
          format: uuid
          type: string
        parcelaSemSeguroCents:
          type: number
        politicaCancelamento:
          type: string
        prazoRestanteMeses:
          type: number
        publicadoEm:
          format: date-time
          nullable: true
          type: string
        regrasAdministradora:
          $ref: "#/components/schemas/AnuncioRegrasAdministradoraDto"
        regrasUtilizacao:
          type: string
        saldoDevedorCents:
          type: number
        segmento:
          enum:
            - imoveis
            - moveis
            - servicos
          type: string
        seguroMensalCents:
          type: number
        seoSlug:
          type: string
        shareSlug:
          type: string
        status:
          enum:
            - rascunho
            - aguardando_validacao
            - publicado
            - reservado
            - vendido
            - arquivado
          type: string
        subcategoria:
          enum:
            - residencial
            - comercial
            - rural
            - lote
            - automovel
            - motocicleta
            - caminhao
            - maquinario
            - viagens
            - educacao
            - estetica
            - outros
          nullable: true
          type: string
        taxaAnaliseCents:
          type: number
        taxaTransferenciaCents:
          type: number
        valorPagoCorrigidoCents:
          type: number
      required:
        - shareSlug
        - codigo
        - segmento
        - cover
        - grupo
        - administradoraNome
        - administradoraId
        - administradoraHasLogo
        - administradoraLogoVersion
        - creditoCents
        - entradaCents
        - prazoRestanteMeses
        - parcelaSemSeguroCents
        - seguroMensalCents
        - saldoDevedorCents
        - valorPagoCorrigidoCents
        - taxaTransferenciaCents
        - taxaAnaliseCents
        - regrasUtilizacao
        - politicaCancelamento
        - regrasAdministradora
        - calculos
        - id
        - seoSlug
        - destaque
        - aderencia
        - status
        - publicadoEm
      type: object
    AnuncioCalculosDto:
      properties:
        cetMensal:
          nullable: true
          type: number
        custoMensal:
          nullable: true
          type: number
        entradaPct:
          type: number
        financeiroCoerente:
          type: boolean
        parcelaComSeguroCents:
          type: number
        sinalCents:
          type: number
        taxaPlataformaCents:
          type: number
      required:
        - entradaPct
        - sinalCents
        - parcelaComSeguroCents
        - taxaPlataformaCents
        - custoMensal
        - cetMensal
        - financeiroCoerente
      type: object
    AnuncioCompartilhadoDto:
      properties:
        administradoraHasLogo:
          type: boolean
        administradoraId:
          format: uuid
          type: string
        administradoraLogoVersion:
          nullable: true
          type: string
        administradoraNome:
          type: string
        calculos:
          $ref: "#/components/schemas/AnuncioCalculosDto"
        codigo:
          type: string
        cover:
          allOf:
            - $ref: "#/components/schemas/CartaImagemCoverDto"
          nullable: true
        creditoCents:
          type: number
        entradaCents:
          type: number
        grupo:
          type: string
        parcelaSemSeguroCents:
          type: number
        politicaCancelamento:
          type: string
        prazoRestanteMeses:
          type: number
        regrasAdministradora:
          $ref: "#/components/schemas/AnuncioRegrasAdministradoraDto"
        regrasUtilizacao:
          type: string
        saldoDevedorCents:
          type: number
        segmento:
          enum:
            - imoveis
            - moveis
            - servicos
          type: string
        seguroMensalCents:
          type: number
        shareSlug:
          type: string
        subcategoria:
          enum:
            - residencial
            - comercial
            - rural
            - lote
            - automovel
            - motocicleta
            - caminhao
            - maquinario
            - viagens
            - educacao
            - estetica
            - outros
          nullable: true
          type: string
        taxaAnaliseCents:
          type: number
        taxaTransferenciaCents:
          type: number
        valorPagoCorrigidoCents:
          type: number
      required:
        - shareSlug
        - codigo
        - segmento
        - cover
        - grupo
        - administradoraNome
        - administradoraId
        - administradoraHasLogo
        - administradoraLogoVersion
        - creditoCents
        - entradaCents
        - prazoRestanteMeses
        - parcelaSemSeguroCents
        - seguroMensalCents
        - saldoDevedorCents
        - valorPagoCorrigidoCents
        - taxaTransferenciaCents
        - taxaAnaliseCents
        - regrasUtilizacao
        - politicaCancelamento
        - regrasAdministradora
        - calculos
      type: object
    AnuncioIndexavelDto:
      properties:
        aderencia:
          allOf:
            - $ref: "#/components/schemas/AderenciaDto"
          nullable: true
        administradoraHasLogo:
          type: boolean
        administradoraId:
          format: uuid
          type: string
        administradoraLogoVersion:
          nullable: true
          type: string
        administradoraNome:
          type: string
        calculos:
          $ref: "#/components/schemas/AnuncioCalculosDto"
        codigo:
          type: string
        cover:
          allOf:
            - $ref: "#/components/schemas/CartaImagemCoverDto"
          nullable: true
        createdAt:
          format: date-time
          type: string
        creditoCents:
          type: number
        destaque:
          type: boolean
        entradaCents:
          type: number
        grupo:
          type: string
        id:
          format: uuid
          type: string
        parcelaSemSeguroCents:
          type: number
        politicaCancelamento:
          type: string
        prazoRestanteMeses:
          type: number
        regrasAdministradora:
          $ref: "#/components/schemas/AnuncioRegrasAdministradoraDto"
        regrasUtilizacao:
          type: string
        saldoDevedorCents:
          type: number
        segmento:
          enum:
            - imoveis
            - moveis
            - servicos
          type: string
        seguroMensalCents:
          type: number
        seoSlug:
          type: string
        shareSlug:
          type: string
        status:
          enum:
            - rascunho
            - aguardando_validacao
            - publicado
            - reservado
            - vendido
            - arquivado
          type: string
        subcategoria:
          enum:
            - residencial
            - comercial
            - rural
            - lote
            - automovel
            - motocicleta
            - caminhao
            - maquinario
            - viagens
            - educacao
            - estetica
            - outros
          nullable: true
          type: string
        taxaAnaliseCents:
          type: number
        taxaTransferenciaCents:
          type: number
        updatedAt:
          format: date-time
          type: string
        valorPagoCorrigidoCents:
          type: number
      required:
        - shareSlug
        - codigo
        - segmento
        - cover
        - grupo
        - administradoraNome
        - administradoraId
        - administradoraHasLogo
        - administradoraLogoVersion
        - creditoCents
        - entradaCents
        - prazoRestanteMeses
        - parcelaSemSeguroCents
        - seguroMensalCents
        - saldoDevedorCents
        - valorPagoCorrigidoCents
        - taxaTransferenciaCents
        - taxaAnaliseCents
        - regrasUtilizacao
        - politicaCancelamento
        - regrasAdministradora
        - calculos
        - id
        - seoSlug
        - destaque
        - aderencia
        - status
        - createdAt
        - updatedAt
      type: object
    AnuncioPublicoResumoDto:
      properties:
        aderencia:
          allOf:
            - $ref: "#/components/schemas/AderenciaDto"
          nullable: true
        administradoraHasLogo:
          type: boolean
        administradoraId:
          format: uuid
          type: string
        administradoraLogoVersion:
          nullable: true
          type: string
        administradoraNome:
          type: string
        calculos:
          $ref: "#/components/schemas/AnuncioCalculosDto"
        codigo:
          type: string
        cover:
          allOf:
            - $ref: "#/components/schemas/CartaImagemCoverDto"
          nullable: true
        creditoCents:
          type: number
        destaque:
          type: boolean
        entradaCents:
          type: number
        grupo:
          type: string
        id:
          format: uuid
          type: string
        parcelaSemSeguroCents:
          type: number
        politicaCancelamento:
          type: string
        prazoRestanteMeses:
          type: number
        regrasAdministradora:
          $ref: "#/components/schemas/AnuncioRegrasAdministradoraDto"
        regrasUtilizacao:
          type: string
        saldoDevedorCents:
          type: number
        segmento:
          enum:
            - imoveis
            - moveis
            - servicos
          type: string
        seguroMensalCents:
          type: number
        seoSlug:
          type: string
        shareSlug:
          type: string
        subcategoria:
          enum:
            - residencial
            - comercial
            - rural
            - lote
            - automovel
            - motocicleta
            - caminhao
            - maquinario
            - viagens
            - educacao
            - estetica
            - outros
          nullable: true
          type: string
        taxaAnaliseCents:
          type: number
        taxaTransferenciaCents:
          type: number
        valorPagoCorrigidoCents:
          type: number
      required:
        - shareSlug
        - codigo
        - segmento
        - cover
        - grupo
        - administradoraNome
        - administradoraId
        - administradoraHasLogo
        - administradoraLogoVersion
        - creditoCents
        - entradaCents
        - prazoRestanteMeses
        - parcelaSemSeguroCents
        - seguroMensalCents
        - saldoDevedorCents
        - valorPagoCorrigidoCents
        - taxaTransferenciaCents
        - taxaAnaliseCents
        - regrasUtilizacao
        - politicaCancelamento
        - regrasAdministradora
        - calculos
        - id
        - seoSlug
        - destaque
        - aderencia
      type: object
    AnuncioRegrasAdministradoraDto:
      properties:
        itens:
          items:
            $ref: "#/components/schemas/AdministradoraRegraItemDto"
          type: array
        segmento:
          enum:
            - imoveis
            - moveis
            - servicos
          type: string
      required:
        - segmento
        - itens
      type: object
    CartaImagemCoverDto:
      properties:
        height:
          type: number
        id:
          format: uuid
          type: string
        larguras:
          items:
            type: number
          type: array
        lqip:
          type: string
        versao:
          type: number
        width:
          type: number
      required:
        - id
        - width
        - height
        - lqip
        - larguras
        - versao
      type: object
    ErrorResponseDto:
      properties:
        code:
          description: Código estável do erro (BAD_REQUEST, NOT_FOUND, TOO_MANY_REQUESTS,
            VALIDATION, INTERNAL)
          example: NOT_FOUND
          type: string
        details:
          additionalProperties: true
          description: Detalhes adicionais do erro, quando houver
          type: object
        message:
          description: Mensagem legível; em erros de validação, as violações separadas por
            vírgula
          example: anuncio não encontrado
          type: string
        requestId:
          description: Identificador da requisição (mesmo valor do header X-Request-Id),
            para suporte
          example: 9f1c2a4e-7b3d-4c58-a1e2-0d6f8b9c3e11
          type: string
        statusCode:
          description: Status HTTP da resposta
          example: 404
          type: number
      required:
        - statusCode
        - code
        - message
      type: object
    JuncaoSugeridaDto:
      properties:
        aderencia:
          $ref: "#/components/schemas/AderenciaDto"
        administradoraId:
          type: string
        administradoraNome:
          type: string
        anuncioCodigos:
          items:
            type: string
          type: array
        anuncioIds:
          items:
            type: string
          type: array
        cetMensal:
          type: number
        creditoTotalCents:
          type: number
        entradaTotalCents:
          type: number
        excedenteCents:
          type: number
        parcelaTotalCents:
          type: number
        quantidadeCotas:
          type: number
        segmento:
          enum:
            - imoveis
            - moveis
            - servicos
          type: string
      required:
        - anuncioIds
        - anuncioCodigos
        - administradoraId
        - administradoraNome
        - segmento
        - creditoTotalCents
        - entradaTotalCents
        - parcelaTotalCents
        - cetMensal
        - excedenteCents
        - quantidadeCotas
        - aderencia
      type: object
    MercadoAnuncioResponseDto:
      properties:
        agioPctMax:
          nullable: true
          type: number
        agioPctMedia:
          nullable: true
          type: number
        agioPctMin:
          nullable: true
          type: number
        amostra:
          type: number
        totalUsuarios:
          type: number
      required:
        - amostra
        - agioPctMin
        - agioPctMedia
        - agioPctMax
        - totalUsuarios
      type: object
    PaginatedResponseMetaDto:
      properties:
        page:
          type: number
        pageSize:
          type: number
        success:
          type: boolean
        total:
          type: number
      required:
        - success
        - total
        - page
        - pageSize
      type: object
    ResponseMetaDto:
      properties:
        success:
          type: boolean
      required:
        - success
      type: object
