---
title: Пользователи в админке
description: registerUser, профиль, аватар, гео — что видит Platform admin.
---

# Пользователи в админке

После Auth пользователь попадает в админку Platform через членство `application_users` (не через «сырой» список Auth).

## Обязательно

После signup/signin вызовите:

```ts
await platform.registerUser({
  platform: "web", // или android / ios / …
});
```

Без этого (и без других JWT-вызовов вроде `registerDevice` / `getMyEntitlements`) пользователь **не появится** в списке «Пользователи».

## Профиль: имя и аватар

Передавайте публичный URL аватара и имя — они сразу видны в админке (список + карточка).

```ts
// при регистрации или сразу после
await platform.registerUser({
  platform: "android",
  display_name: "Иван",
  avatar_url: "https://cdn.example.com/avatars/u1.jpg",
  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
  acquisition_source: "google_play",
});

// когда пользователь сменил аватар / имя в приложении
await platform.updateUserProfile({
  display_name: "Иван П.",
  avatar_url: "https://cdn.example.com/avatars/u1-new.jpg",
});
```

Flutter:

```dart
await platform.registerUser(
  platform: 'android',
  displayName: 'Иван',
  avatarUrl: 'https://cdn.example.com/avatars/u1.jpg',
  timezone: 'Europe/Moscow',
);

await platform.updateUserProfile(
  displayName: 'Иван П.',
  avatarUrl: 'https://cdn.example.com/avatars/u1-new.jpg',
);
```

### Auth metadata

Если пишете аватар в Supabase Auth:

```ts
await supabase.auth.updateUser({
  data: { avatar_url: "https://…", full_name: "Иван" },
});
await platform.updateUserProfile({}); // подтянет metadata в application_users
```

Ключи metadata: `avatar_url` / `picture` / `avatar`, имя — `full_name` / `name` / `display_name`.

`avatar_url` должен быть **публичным** `https://…` (или `data:image/…`), не локальный путь на устройстве.

## Гео (страна / город / timezone)

При первом контакте с API Platform заполняет:

| Поле | Источник |
| --- | --- |
| `country_code`, `city` | IP запроса (Cloudflare или GeoIP) |
| `timezone` | IP или поле `timezone` из SDK |
| `acquisition_source` | только если передали в `registerUser` |

В админке показывается флаг страны. Поля first-seen **не перетираются** при каждой поездке/смене VPN.

**VPN:** GeoIP видит страну **выхода** VPN, не «домашнюю» страну пользователя. Надёжно восстановить дом по IP нельзя.

## HTTP

```http
POST /v1/applications/{app_code}/users/register
Authorization: Bearer YOUR_ACCESS_TOKEN

{
  "platform": "web",
  "display_name": "Иван",
  "avatar_url": "https://…",
  "timezone": "Europe/Moscow",
  "acquisition_source": "organic"
}
```

```http
PATCH /v1/applications/{app_code}/users/me
Authorization: Bearer YOUR_ACCESS_TOKEN

{
  "display_name": "Иван П.",
  "avatar_url": "https://…"
}
```

Далее: [Чеклист](/guides/checklist) · [Справка API](/sdk/api-reference)
