> ## Documentation Index
> Fetch the complete documentation index at: https://developers.googa.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Troca client credentials por um token escopado ao HistorinhAI — planejado

> **Planejado — ainda não implementado.** Hoje o HistorinhAI **não** emite token próprio: a única credencial de parceiro que ele reconhece é o token emitido pela Platform API (`POST https://api.googa.com.br/v1/oauth2/token`, ver [Platform — OAuth2](/platform/reference/oauth2/troca-client-credentials-por-um-token-de-acesso-de-parceiro)), verificado neste projeto com a chave pública do Platform. Este emissor próprio foi deliberadamente adiado para uma revisão dedicada, dado o que está em jogo no produto que trata dado de criança.
Quando existir: mesmo grant `client_credentials` do OAuth 2.0 (RFC 6749 §4.4) da Platform API, exposto sob o domínio próprio do HistorinhAI — defesa em profundidade, não duplicação acidental: a credencial emitida aqui só carregará escopos deste produto, com par de chaves próprio, de modo que comprometer uma credencial de NovelAI/NovelAudio não dê acesso a este endpoint, e vice-versa.
O único escopo definido no desenho é `historinhai:engagement:read` — não há escopo de escrita, porque não há endpoint de escrita nesta API.



## OpenAPI

````yaml /historinhai/openapi.yaml post /oauth2/token
openapi: 3.1.0
info:
  title: Googa HistorinhAI API — Parceiro
  version: 1.0.0
  summary: >-
    Superfície de API específica do HistorinhAI para um parceiro de distribuição
    (ex: uma operadora). Deliberadamente pequena: por desenho de arquitetura,
    nenhum dado identificável de criança atravessa esta API. Entitlements,
    status de assinante e billing são resolvidos pela Googa Platform API
    (`api.googa.com.br`) — não repetidos aqui.
  description: >-
    Hoje só o app oficial (Web/PWA — não há apps nativos) consome o HistorinhAI,
    autenticando diretamente contra o Supabase do produto. Esta API é o contrato
    para um parceiro integrar sem acesso direto ao banco de dados de crianças.


    **Status:** nenhuma das duas operações deste arquivo está implementada.
    Hoje, a credencial de parceiro que o HistorinhAI aceita (no endpoint interno
    de entitlements, roteado pela Platform) é o token emitido **pela Platform
    API** (`https://api.googa.com.br`), verificado aqui com a chave pública do
    projeto Platform. O emissor próprio descrito abaixo e o `GET
    /engagement/summary` são **planejados — ainda não implementados**, e estão
    marcados como tal em cada operação.

    Leia [Visão geral do HistorinhAI](/historinhai/overview) antes de
    implementar contra este contrato — em especial a seção "O que esta API
    deliberadamente não expõe", que documenta a regra de arquitetura por trás do
    tamanho reduzido desta especificação: o HistorinhAI trata dados de crianças
    (LGPD + ECA) e roda em um projeto Supabase isolado dos demais produtos Googa
    (ver [Modelo de autenticação sobre
    Supabase](/architecture/supabase-auth-model)).
  contact:
    name: Googa — Suporte a parceiros
    email: developers@googa.com.br
  license:
    name: Uso restrito — ver Política de Uso da API
    url: https://developers.googa.com.br/security/api-usage-policy
servers:
  - url: https://api.historinhai.com.br/v1
    description: Produção (proposto)
  - url: https://sandbox.historinhai.com.br/v1
    description: Sandbox (proposto) — dados fictícios, sem impacto em billing real
security:
  - partnerOAuth2: []
tags:
  - name: OAuth2
    description: Emissão de credencial de parceiro escopada ao HistorinhAI.
  - name: Engagement
    description: >-
      Métrica de engajamento agregada e anonimizada — sem granularidade de
      criança.
paths:
  /oauth2/token:
    post:
      tags:
        - OAuth2
      summary: >-
        Troca client credentials por um token escopado ao HistorinhAI —
        planejado
      description: >-
        **Planejado — ainda não implementado.** Hoje o HistorinhAI **não** emite
        token próprio: a única credencial de parceiro que ele reconhece é o
        token emitido pela Platform API (`POST
        https://api.googa.com.br/v1/oauth2/token`, ver [Platform —
        OAuth2](/platform/reference/oauth2/troca-client-credentials-por-um-token-de-acesso-de-parceiro)),
        verificado neste projeto com a chave pública do Platform. Este emissor
        próprio foi deliberadamente adiado para uma revisão dedicada, dado o que
        está em jogo no produto que trata dado de criança.

        Quando existir: mesmo grant `client_credentials` do OAuth 2.0 (RFC 6749
        §4.4) da Platform API, exposto sob o domínio próprio do HistorinhAI —
        defesa em profundidade, não duplicação acidental: a credencial emitida
        aqui só carregará escopos deste produto, com par de chaves próprio, de
        modo que comprometer uma credencial de NovelAI/NovelAudio não dê acesso
        a este endpoint, e vice-versa.

        O único escopo definido no desenho é `historinhai:engagement:read` — não
        há escopo de escrita, porque não há endpoint de escrita nesta API.
      operationId: issueHistorinhaiPartnerToken
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - grant_type
                - client_id
                - client_secret
              properties:
                grant_type:
                  type: string
                  enum:
                    - client_credentials
                client_id:
                  type: string
                  example: algar-historinhai-a1b2c3
                client_secret:
                  type: string
                  format: password
                scope:
                  type: string
                  description: Único valor suportado hoje.
                  example: historinhai:engagement:read
      responses:
        '200':
          description: Token emitido.
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                  token_type:
                    type: string
                    enum:
                      - Bearer
                  expires_in:
                    type: integer
                    example: 600
                  scope:
                    type: string
                    example: historinhai:engagement:read
        '401':
          $ref: '#/components/responses/Unauthorized'
      security: []
components:
  responses:
    Unauthorized:
      description: Credenciais ausentes, inválidas ou expiradas.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      description: >-
        Mesmo formato de erro (estilo OAuth2, RFC 6749 §5.2) usado pela Platform
        API.
      properties:
        error:
          type: string
          example: invalid_request
        error_description:
          type: string
          example: Janela de período inválida
  securitySchemes:
    partnerOAuth2:
      type: oauth2
      description: >-
        Client credentials, escopado ao HistorinhAI — ver `/oauth2/token` acima
        (**planejado**: hoje o emissor que existe é o da Platform API, em
        `https://api.googa.com.br/v1/oauth2/token`).
      flows:
        clientCredentials:
          tokenUrl: https://api.historinhai.com.br/v1/oauth2/token
          scopes:
            historinhai:engagement:read: Consultar métrica de engajamento agregada do período

````