> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dados.rio/llms.txt
> Use this file to discover all available pages before exploring further.

# Recomendações anônimas

> Recomendações sem autenticação, com scoring neutro. cluster_hint aceita bairro ou faixa etária para leve personalização.



## OpenAPI

````yaml https://raw.githubusercontent.com/prefeitura-rio/app-catalogo/refs/heads/main/docs/openapi-v3.json get /api/public/recommendations
openapi: 3.0.0
info:
  description: >-
    Discovery layer unificada da Prefeitura do Rio de Janeiro. Indexa serviços
    públicos, cursos, vagas e oportunidades MEI com busca full-text e
    recomendação personalizada por perfil de cidadão.
  title: app-catalogo
  contact:
    name: Prefeitura do Rio de Janeiro
    url: https://github.com/prefeitura-rio/app-catalogo
  version: '1.0'
servers:
  - url: https://services.staging.app.dados.rio/catalogo
    description: Staging
  - url: https://services.pref.rio/catalogo
    description: Produção
security: []
paths:
  /api/public/recommendations:
    get:
      tags:
        - recomendações
      summary: Recomendações anônimas
      description: >-
        Recomendações sem autenticação, com scoring neutro. cluster_hint aceita
        bairro ou faixa etária para leve personalização.
      parameters:
        - description: 'Bairro ou faixa etária (ex: Tijuca, 25-34)'
          name: cluster_hint
          in: query
          schema:
            type: string
        - description: 'Tipos: service, course, job, mei_opportunity'
          name: types
          in: query
          explode: true
          schema:
            type: array
            items:
              type: string
        - description: 'Máximo de itens, max 50 (default: 10)'
          name: limit
          in: query
          schema:
            type: integer
        - description: 'Contexto: homepage, after_search, profile'
          name: context
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models.RecommendationResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: string
components:
  schemas:
    models.RecommendationResponse:
      type: object
      properties:
        context:
          $ref: '#/components/schemas/models.RecommendationContext'
        items:
          type: array
          items:
            $ref: '#/components/schemas/models.RankedItem'
        personalized:
          type: boolean
    models.RecommendationContext:
      type: string
      enum:
        - homepage
        - after_search
        - profile
      x-enum-varnames:
        - ContextHomepage
        - ContextAfterSearch
        - ContextProfile
    models.RankedItem:
      type: object
      properties:
        bairros:
          type: array
          items:
            type: string
        id:
          type: string
        image_url:
          type: string
        modalidade:
          type: string
        organization:
          type: string
        score:
          type: number
        score_breakdown:
          type: object
          additionalProperties:
            type: number
            format: float64
        short_desc:
          type: string
        source:
          $ref: '#/components/schemas/models.ItemSource'
        tags:
          type: array
          items:
            type: string
        title:
          type: string
        type:
          $ref: '#/components/schemas/models.ItemType'
        url:
          type: string
    models.ItemSource:
      type: string
      enum:
        - salesforce
        - courses
        - jobs
        - mei
        - app-go-api
        - typesense
      x-enum-comments:
        SourceAppGoAPI: 'fonte composta: courses + jobs + mei'
        SourceTypesense: 'temporário: Carta de Serviços até migração para SalesForce'
      x-enum-descriptions:
        - ''
        - ''
        - ''
        - ''
        - 'fonte composta: courses + jobs + mei'
        - 'temporário: Carta de Serviços até migração para SalesForce'
      x-enum-varnames:
        - SourceSalesForce
        - SourceCourses
        - SourceJobs
        - SourceMEI
        - SourceAppGoAPI
        - SourceTypesense
    models.ItemType:
      type: string
      enum:
        - service
        - course
        - job
        - mei_opportunity
      x-enum-varnames:
        - TypeService
        - TypeCourse
        - TypeJob
        - TypeMEIOpportunity

````