---
title: "Create profile"
method: POST
path: "/api/v2/server-side-api/profile/"
tags: ["Profile"]
---

# Create profile

`POST /api/v2/server-side-api/profile/`

Creates a new end user of your app in Adapty.

## Headers

- `adapty-customer-user-id` string
- `adapty-profile-id` string
- `adapty-platform` string

## Request body

- ProfileRequest
  - `first_name` string, nullable — Your end user's first name
  - `last_name` string, nullable — Your end user's last name
  - `gender` 'f' | 'm' | 'o', nullable — Your end user's gender
  - `email` string, email, nullable — Your end user's email
  - `phone_number` string, nullable — Your end user's phone number
  - `birthday` string, date, nullable — Your end user's birthday
  - `ip_country` string, nullable — Country of the end user as a two-letter ISO 3166-1 alpha-2 code, for example `FR`
  - `ip_v4_address` string, nullable — IPv4 address of the end user
  - `store_country` string, nullable — Country of the end user's app store as a two-letter ISO 3166-1 alpha-2 code, for example `US`
  - `store` 'app_store' | 'play_store' | 'stripe' | 'adapty' | 'paddle', nullable — The platform the user uses to make purchases in your app
  - `store_account_token` string, uuid, nullable — Store account token
  - `att_status` 0 | 1 | 2 | 3, nullable — Apple App Tracking Transparency status (0=not determined, 1=restricted, 2=denied, 3=authorized)
  - `analytics_disabled` boolean, nullable — Option to opt out of external analytics
  - `custom_attributes` CustomAttribute[] — Allows setting up to 30 custom attributes for the profile
    - `key` string, required — The key must be a string with no more than 30 characters. Only letters, numbers, dashes, points, and underscores allowed
    - `value` union, required — The attribute value must be no more than 50 characters. Only strings and floats are allowed as values
      - string
      - number
  - `installation_meta` InstallationMeta, required
    - `device_id` string, uuid, required — Unique device identifier
    - `device` string, nullable — Device information
    - `locale` string, nullable — Device locale
    - `os` string, nullable — Operating system information
    - `platform` 'iOS' | 'macOS' | 'iPadOS' | 'Android' | 'visionOS' | 'web', nullable — Platform (iOS, Android, etc.)
    - `timezone` string, nullable — Device timezone
    - `user_agent` string, nullable — User agent string
    - `app_build` string, nullable — App build version
    - `app_version` string, nullable — App version
    - `adapty_sdk_version` string, nullable — Adapty SDK version
    - `idfa` string, nullable — iOS Identifier for Advertisers
    - `idfv` string, nullable — iOS Identifier for Vendor
    - `advertising_id` string, nullable — Android advertising ID
    - `android_id` string, nullable — Android device ID
    - `android_app_set_id` string, nullable — Android app set ID

## Response `200`

Profile created successfully

- ProfileResponse
  - `data` Profile, required
    - `app_id` string, uuid, required — The internal ID of your app
    - `profile_id` string, uuid, required — Adapty profile ID
    - `customer_user_id` string, nullable, required — The ID of your user in your system
    - `total_revenue_usd` number, float, required — A float value representing the total revenue in USD earned in the profile
    - `segment_hash` string, required — Internal parameter
    - `timestamp` integer, required — Response time in milliseconds, needs for resolve a race condition
    - `custom_attributes` CustomAttribute[], required — A maximum of 30 custom attributes to the profile are allowed to be set
      - `key` string, required — The key must be a string with no more than 30 characters. Only letters, numbers, dashes, points, and underscores allowed
      - `value` union, required — The attribute value must be no more than 50 characters. Only strings and floats are allowed as values
        - string
        - number
    - `access_levels` AccessLevel[], required — Array of Access level objects. Empty array if the customer has no access levels
      - `access_level_id` string — Access level identifier
      - `store` string — Store where the access level was purchased
      - `store_product_id` string — Product ID in the store
      - `store_base_plan_id` string, nullable — Base plan ID in the store
      - `store_transaction_id` string — Transaction ID in the store
      - `store_original_transaction_id` string — Original transaction ID in the store
      - `offer` OfferDTO
        - `category` 'introductory' | 'promotional' | 'offer_code' | 'win_back', required — Offer category
        - `type` 'free_trial' | 'pay_as_you_go' | 'pay_up_front', required — Offer type
        - `id` string, nullable — Offer ID
      - `starts_at` string, date-time, nullable — When the access level starts
      - `purchased_at` string, date-time — When the access level was purchased
      - `originally_purchased_at` string, date-time — When the access level was originally purchased
      - `expires_at` string, date-time, nullable — When the access level expires
      - `renewal_cancelled_at` string, date-time, nullable — When renewal was cancelled
      - `billing_issue_detected_at` string, date-time, nullable — When billing issue was detected
      - `is_in_grace_period` boolean — Whether the access level is in grace period
      - `cancellation_reason` string, nullable — Reason for cancellation
    - `subscriptions` Subscription[], required — Array of Subscription objects. Empty array if the customer has no subscriptions
      - `store` string — Store where the subscription was purchased
      - `store_product_id` string — Product ID in the store
      - `store_base_plan_id` string, nullable — Base plan ID in the store
      - `store_transaction_id` string — Transaction ID in the store
      - `store_original_transaction_id` string — Original transaction ID in the store
      - `offer` OfferDTO
        - `category` 'introductory' | 'promotional' | 'offer_code' | 'win_back', required — Offer category
        - `type` 'free_trial' | 'pay_as_you_go' | 'pay_up_front', required — Offer type
        - `id` string, nullable — Offer ID
      - `environment` string — Environment (Sandbox, Production)
      - `purchased_at` string, date-time — When the subscription was purchased
      - `originally_purchased_at` string, date-time — When the subscription was originally purchased
      - `expires_at` string, date-time, nullable — When the subscription expires
      - `renewal_cancelled_at` string, date-time, nullable — When renewal was cancelled
      - `billing_issue_detected_at` string, date-time, nullable — When billing issue was detected
      - `is_in_grace_period` boolean — Whether the subscription is in grace period
      - `cancellation_reason` string, nullable — Reason for cancellation
    - `non_subscriptions` NonSubscription[], required — Array of Non-Subscription objects. Empty array if the customer has no purchases
      - `purchase_id` string, uuid — Unique purchase identifier
      - `store` string — Store where the purchase was made
      - `store_product_id` string — Product ID in the store
      - `store_base_plan_id` string, nullable — Base plan ID in the store
      - `store_transaction_id` string — Transaction ID in the store
      - `store_original_transaction_id` string — Original transaction ID in the store
      - `purchased_at` string, date-time — When the purchase was made
      - `environment` string — Environment (Sandbox, Production)
      - `is_refund` boolean — Whether this is a refund
      - `is_consumable` boolean — Whether this is a consumable purchase

## Other responses

- `401` — Unauthorized
- `500` — Internal server error

---

[API](https://skmtc.dev/adapty/apis/adapty-server-side-api.md) · [All operations](https://skmtc.dev/adapty/apis/adapty-server-side-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/adapty/adapty-server-side-api/revisions/abdc1c773a17/schema)
