---
title: "Demo access with funnel preferences"
method: POST
path: "/v1/web-users/demo/preferences"
tags: ["Web Users"]
---

# Demo access with funnel preferences

`POST /v1/web-users/demo/preferences`

Returns a Firebase custom token and modelId for the demo. When `Authorization: Bearer <Firebase ID token>` is sent (e.g. client anonymous auth), the same Firebase UID is used: existing web_users row is updated with preferences instead of creating a second user. Without a valid token, creates a server-side anonymous Firebase user (legacy). Only ethnicity and age are used to pick among isDemo models: age 18 → young band, 20 or 30 → mid band, 40 → mature band. Body, voice, and temperament are stored on the web user but ignored for matching.

## Headers

- `authorization` string, required

## Request body

- DemoWithPreferencesDto
  - `ethnicity` 'caucasian' | 'asian' | 'arab' | 'latina' | 'african', required — Used with age to pick the demo model; other body/voice fields are ignored.
  - `age` '18' | '20' | '30' | '40', required — Maps to three demo age bands: 18 → young; 20 and 30 → mid; 40 → mature.
  - `body` 'xs' | 's' | 'm' | 'l'
  - `butt` 'xs' | 's' | 'm' | 'l'
  - `breast` 'xs' | 's' | 'm' | 'l'
  - `voice` 'innocent' | 'standard' | 'seductress' | 'dominant'
  - `temperament` 'submissive' | 'romantic' | 'provocative' | 'dominant'

## Response `200`

Demo initialized with preferences

- InitDemoResponseDto
  - `firebaseCustomToken` string, required — Firebase custom token for anonymous auth
  - `modelId` string, required — Selected demo model ID

## Other responses

- `404` — No demo model for that ethnicity and age band (isDemo, not deleted)

---

[API](https://skmtc.dev/miaai/apis/backend-template-api.md) · [All operations](https://skmtc.dev/miaai/apis/backend-template-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/miaai/backend-template-api/revisions/2a8d88a5124f/schema)
