---
title: "Register Viewer"
method: POST
path: "/v2/auth/register-viewer"
tags: ["v2 - Viewer Auth"]
---

# Register Viewer

`POST /v2/auth/register-viewer`

## Request

- Base URL: `https://api.jubjubapp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.jubjubapp.com/v2/auth/register-viewer`
- Auth: HTTP bearer

Register a streaming viewer or agent — creates Firebase user + JubJub profile.

PUBLIC: No Firebase auth required (viewer doesn't have Firebase yet).
The caller proves control of `wallet_address` with a SIWE signature over
a nonce this server issued; nothing below runs until that proof holds.

Idempotent: if a profile already holds this wallet, returns the existing
profile without modification — legitimately, because the signature just
proved the caller controls that wallet.

## Request body

- RegisterViewerRequest
  - `wallet_address` string, required: EVM address the caller controls
  - `email` string, nullable: Email if available
  - `wallet_type` string, nullable: 'external', 'smart_wallet' or 'embedded'
  - `signature` string, required: EIP-191 signature over the SIWE message
  - `nonce` string, required: Nonce previously issued by /v2/auth/wallet-nonce
  - `display_name` string, nullable: Optional display name

## Response `200`

Successful Response

- RegisterViewerResponse
  - `profile_id` string, required
  - `wallet_address` string, required
  - `created` boolean, required
  - `message` string, required
  - `firebase_custom_token` string, nullable
  - `session_token` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/jubjubapp/apis/jubjub-api.md) - [All operations](https://skmtc.dev/jubjubapp/apis/jubjub-api/llms.txt) - [OpenAPI document](https://skmtc.dev/jubjubapp/apis/jubjub-api/revisions/353157b296f2?raw)
