---
title: "Upsert hosted tenant user metadata"
method: POST
path: "/tenant/users/upsert"
---

# Upsert hosted tenant user metadata

`POST /tenant/users/upsert`

## Request

- Base URL: `https://api.gravityads.dev` (the document declares no server; this is the origin it was published from)
- URL: `https://api.gravityads.dev/tenant/users/upsert`
- Auth: HTTP bearer

## Request body

- object
  - `id` string, required
  - `email_hash` string
  - `oidc_sub` string
  - `sso_provider_id` string: Registered provider for an explicit tenant SSO subject binding.
  - `feishu_open_id` string
  - `display_name` string
  - `status` string

## Response `200`

Tenant user upsert result

- object
  - `status` 'tenant_user_upserted' | 'tenant_user_upsert_unconfigured' | 'tenant_user_upsert_failed' | 'tenant_user_upsert_degraded', required
  - `source` string
  - `tenant_id` string, required
  - `user_count` integer, required
  - `users` object[], required
    - `id` string
    - `tenant_id` string
    - `email_hash_prefix` string
    - `oidc_sub` string
    - `feishu_open_id` string
    - `display_name` string
    - `status` string
    - `created_at` string
    - `roles` string[]
  - `role_count` integer, required
  - `roles` object[], required
    - `id` string
    - `name` string
    - `description` string
  - `database_url_configured` boolean
  - `hosted_auth_context` object
  - `raw_secrets_returned` false, required
  - `user_id` string

---

[API](https://skmtc.dev/gravityads/apis/gravityads-api.md) · [All operations](https://skmtc.dev/gravityads/apis/gravityads-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gravityads/apis/gravityads-api/revisions/124cd07d534d?raw)
