POST /api/v1/profile/save/

Lưu hồ sơ người dùng

Tạo hoặc cập nhật hồ sơ người dùng trong Adapty Mail. Hồ sơ người dùng chứa email và các thuộc tính mà Adapty Mail sử dụng để xác định người nhận và xây dựng phân khúc.

Xác định mỗi người dùng bằng một external_profile_id ổn định. Gửi cùng một external_profile_id lần nữa sẽ cập nhật hồ sơ người dùng hiện có thay vì tạo bản trùng lặp.

Request body

external_profile_idstringrequired

Mã định danh ổn định cho người dùng, do ứng dụng hoặc backend của bạn quản lý. Sử dụng lại cùng một giá trị cho các yêu cầu để Adapty Mail liên kết email, lượt click và giao dịch mua với một hồ sơ người dùng. Không bao giờ sử dụng mã định danh ẩn danh hoặc mã định danh theo từng lần cài đặt.

external_created_atstringrequired

Thời điểm tạo người dùng, theo định dạng ISO 8601 (ví dụ: "2026-06-01T10:30:00Z"). Bạn có thể sử dụng ngày này trong các phân khúc.

emailstringrequired

Địa chỉ email của người dùng. Adapty Mail gửi các chiến dịch đến địa chỉ này. Địa chỉ chỉ được ghi một lần: được đặt khi hồ sơ người dùng được tạo và các lần lưu sau sẽ không ghi đè lên nó.

customer_user_idstring

Mã định danh của người dùng trong hệ thống của bạn, nếu bạn có và Adapty cũng biết. Adapty Mail sử dụng nó để nhận ra một người cũng tiếp cận thông qua Adapty SDK, để hai nguồn chia sẻ một hồ sơ người dùng thay vì tạo ra một bản trùng lặp gửi mail cho cùng một người hai lần.

first_namestring

Tên của người dùng.

last_namestring

Họ của người dùng.

genderstring

Giới tính của người dùng.

birthdaystring

Ngày sinh của người dùng, theo định dạng ISO 8601 (ví dụ: "1990-05-21").

countrystring

Quốc gia của người dùng dưới dạng mã hai chữ cái ISO 3166-1 alpha-2 (ví dụ: US).

store_countrystring

Khu vực cửa hàng của người dùng dưới dạng mã hai chữ cái ISO 3166-1 alpha-2 (ví dụ: US).

email_consentboolean

Câu trả lời của người dùng về việc nhận email marketing: true nếu họ đồng ý, false nếu họ từ chối. Adapty Mail không gửi email marketing đến hồ sơ người dùng có câu trả lời là false, và cũng không gửi yêu cầu xác nhận double opt-in. Các email giao dịch khác vẫn được gửi đến. Bỏ qua trường này để giữ nguyên câu trả lời đã lưu. Một hồ sơ người dùng chưa có câu trả lời sẽ nhận email marketing.

custom_attributesobject

Các cặp khóa-giá trị tùy ý (giá trị chuỗi hoặc số) để đính kèm vào hồ sơ người dùng. Sử dụng chúng để xây dựng các phân khúc — ví dụ: plan, signup_source, hoặc trial_days.

device_infoobject
platformstringrequired

Nền tảng mà người dùng đang sử dụng, ví dụ: iOS hoặc Android.

devicestring

Mẫu thiết bị, ví dụ: iPhone15,2.

osstring

Phiên bản hệ điều hành, ví dụ: 17.5.

localestring

Ngôn ngữ địa phương của người dùng, ví dụ: en-US. Adapty Mail sử dụng thông tin này để quyết định bản dịch nào của chiến dịch đã được bản địa hóa sẽ được gửi. Người dùng không có ngôn ngữ địa phương sẽ nhận email bằng tiếng Anh.

timezonestring

Múi giờ của người dùng, ví dụ: America/New_York.

app_versionstring

Phiên bản ứng dụng của bạn mà người dùng đang chạy, ví dụ: 3.1.0.

Responses

Hồ sơ người dùng đã được lưu thành công. Nội dung phản hồi là một đối tượng rỗng.

Schema
object
Example
{}

Xác thực thất bại — một trường bắt buộc bị thiếu hoặc không hợp lệ. field_name cho biết trường nào bị lỗi.

Schema

Phản hồi lỗi tiêu chuẩn. Mọi lỗi đều trả về trạng thái 4XX với cấu trúc này.

errorsarray of object
messagestring

Mô tả lỗi có thể đọc được.

error_codestring

Mã định danh lỗi dành cho máy đọc.

status_codeinteger

Mã trạng thái HTTP cho lỗi này.

field_namestring

Trường yêu cầu gây ra lỗi, hoặc null nếu lỗi không liên quan đến trường cụ thể nào.

Example
{
  "errors": [
    {
      "message": "Field required",
      "error_code": "base_error",
      "status_code": 400,
      "field_name": "email"
    }
  ]
}

Thiếu hoặc secret API key không hợp lệ.

Schema

Phản hồi lỗi tiêu chuẩn. Mọi lỗi đều trả về trạng thái 4XX với cấu trúc này.

errorsarray of object
messagestring

Mô tả lỗi có thể đọc được.

error_codestring

Mã định danh lỗi dành cho máy đọc.

status_codeinteger

Mã trạng thái HTTP cho lỗi này.

field_namestring

Trường yêu cầu gây ra lỗi, hoặc null nếu lỗi không liên quan đến trường cụ thể nào.

Example
{
  "errors": [
    {
      "message": "Secret key doesn't exist",
      "error_code": "secret_key_does_not_exist_error",
      "status_code": 403,
      "field_name": null
    }
  ]
}