type: object
description: |
    User → client grant — records a Bigscreen account's approval of a specific
    OAuth client and the scopes it consented to. Mirrors `OAuthClientDatabase.OAuthGrantRow`.
    Created or updated via the consent flow at `POST /admin/oauth/my_grant`.
required: [uniqueId, oauthGrantId, userId, clientId, scopes, grantedAt]
properties:
    uniqueId:
        type: string
        description: Internal grant row id.
    oauthGrantId:
        type: string
        description: Public grant identifier exposed to the consent UI.
    userId:
        type: string
        description: Bigscreen account id that approved the grant.
    clientId:
        type: string
        description: OAuth client this grant authorizes.
    scopes:
        type: array
        items: { type: string }
        description: Scopes the user has approved for this client.
    grantedAt:
        type: integer
        format: int64
        description: Unix ms when the grant was first created.
    updatedAt:
        type: integer
        format: int64
        description: Unix ms of the most recent grant update.
    revokedAt:
        type: [integer, "null"]
        format: int64
        description: Unix ms when the grant was revoked, if any.
example:
    uniqueId: "oag_01HXKV4ABCDEFGH9KLMN0PQRS"
    oauthGrantId: "g_01HXKV4ABCDEFGH9KLMN0PQRS"
    userId: "acct_01HXJ4Q12345"
    clientId: "arda-internal"
    scopes: ["openid", "profile"]
    grantedAt: 1747088000000
    updatedAt: 1747088000000
    revokedAt: null
