---
title: "Upsert User Tenant Profile"
method: POST
path: "/v1/user/{distinct_id}/tenant/{tenant_id}/"
---

# Upsert User Tenant Profile

`POST /v1/user/{distinct_id}/tenant/{tenant_id}/`

Adds or updates the per-tenant profile for a user. Fields you set here override the user's global profile when the workflow is triggered with `tenant_id`. Body accepts the same shape as [Create / Update Users](/reference/create-update-users).

## Path parameters

- `distinct_id` string, required
- `tenant_id` string, required

## Request body

- object — Per-tenant profile payload. Same channel and property keys as [Create / Update Users](/reference/create-update-users). Any key set here becomes the per-tenant override; keys omitted here fall through to the global profile at send time.
  - `$email` string[] — List of email addresses to set on the per-tenant profile.
  - `$sms` string[] — List of phone numbers for SMS on the per-tenant profile.
  - `$whatsapp` string[] — List of phone numbers for WhatsApp on the per-tenant profile.
  - `$inbox` string[] — List of inbox identifiers on the per-tenant profile.
  - `$androidpush` string[] — Android push tokens on the per-tenant profile. Use this to isolate device tokens per tenant / app install.
  - `$iospush` string[] — iOS push tokens on the per-tenant profile.
  - `$webpush` object[] — Web push subscription objects on the per-tenant profile.
  - `$slack` object[] — Slack channel configuration on the per-tenant profile. Same shape as the global profile — email + access_token, user_id + access_token, channel + access_token, or incoming_webhook.
  - `$ms_teams` object[] — Microsoft Teams channel configuration on the per-tenant profile. Same shape as the global profile.
  - `$timezone` string — IANA timezone for the per-tenant profile.
  - `$preferred_language` string — Preferred language code for the per-tenant profile.
  - `$locale` string — Locale for the per-tenant profile.

## Response `201`

201 - Created. The response is the full user object with the merged (effective) profile at the top level and the per-tenant override under `tenant`.

- object
  - `distinct_id` string — The user identifier the operation applied to.
  - `properties` object — Merged (effective) properties — global properties layered with per-tenant overrides.
  - `created_at` string, date-time — Timestamp when the user was originally created.
  - `updated_at` string, date-time — Timestamp when the user was last updated (global or per-tenant).
  - `tenant` object — The per-tenant override block for the tenant the request targeted. Contains only the fields explicitly set at the tenant level, not the merged view.
    - `tenant_id` string — Tenant this override belongs to.
    - `properties` object — Properties explicitly set on the per-tenant profile.

## Other responses

- `400` — 400 - Bad Request. Returned when `user_tenancy_mode` is `exclusive` and the user is already associated with a different tenant.
- `404` — 404 - Not Found. Returned when the tenant does not exist.

---

[API](https://skmtc.net/suprsend/apis/suprsend-api.md) · [All operations](https://skmtc.net/suprsend/apis/suprsend-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/suprsend/suprsend-api/revisions/9a5a2cd152ae/schema)
