通过 Adapty Mail API 发送邮件和交易数据

Adapty Mail API 让你无需通过 Adapty SDK 中转,直接从服务器向 Adapty Mail 发送用户画像和交易数据。以下场景适合使用它:

  • 在 Adapty Mail 中尚未建立用户群时添加订阅者。
  • 复用其他应用中已有的订阅者群体。
  • 以后端作为数据来源,通过服务端对服务端的方式向 Adapty Mail 推送数据。
Note

API 还是 SDK? 大多数应用通过 Adapty SDK 向 Adapty Mail 发送数据,SDK 会自动收集邮箱和购买记录——详见将 Adapty 连接到 Adapty Mail。如果你的应用没有集成 Adapty SDK、数据已存储在服务器端,或需要从其他来源导入订阅者,则选择 API。你也可以将 API 与其他接入方式同时使用。Adapty Mail 以邮箱地址作为用户匹配依据。两个来源上报相同的邮箱地址会合并到同一用户画像;两个不同的邮箱地址则会创建独立的用户画像,即使 customer_user_id 相同也不例外。

开始之前

Warning

在发送数据之前,请先完成 Adapty Mail 的配置——包括创建营销活动、市场细分(如有需要)、网页付费墙以及已上线的流程。Adapty Mail 仅向配置完成后创建的用户画像发送邮件;此前已发送的用户画像不会收到任何邮件。请先参阅Adapty Mail 入门指南完成配置,再回到此处继续操作。

你还需要准备好 API 密钥和基础 URL:

  • Secret API key:在 Adapty Mail 中,进入 Settings > Project,复制 Secret key。该密钥与项目绑定,API 通过它识别数据所属的项目。
  • Base URL:所有请求均发送至 https://api-mail.adapty.io。
  • Authentication:在 Authorization 请求头中以 Bearer {your_secret_api_key} 的形式传入密钥。
Important

在收集用户邮箱并发送至 Adapty Mail 之前,请务必获得用户的明确同意。您有责任遵守 GDPR、CAN-SPAM 以及所在市场的相关法规。

发送用户画像

用户画像包含用户的邮箱和属性。要创建或更新用户画像,请向 /api/v1/profile/save/ 发送 POST 请求。

以下三个字段为必填项:

  • 由你的应用或后端维护的稳定 external_profile_id
  • Adapty Mail 用于发送营销活动邮件的 email
  • external_created_at —— 用户创建时间,可用于市场细分
Important

请始终传入稳定的 external_profile_id,不要使用匿名 ID 或每次安装时生成的值。Adapty Mail 依靠它将邮件、点击和购买行为关联到同一个用户画像。

如果同一用户还通过另一个入口点接入 Adapty Mail,请发送 customer_user_id——与该来源发送的用户 ID 相同。对于 Adapty SDK,这是你传给 Adapty.identify() 的值;FunnelFox 则发送它自己持有的那个。它不决定用户最终落到哪个用户画像上,邮箱地址才是决定因素。它的作用是提供第二种查找用户画像的方式:携带它的交易事件无需邮箱即可完成解析,删除操作也可以用它来代替邮箱地址进行指定。

curl --request POST \
  --url 'https://api-mail.adapty.io/api/v1/profile/save/' \
  --header 'Authorization: Bearer {your_secret_api_key}' \
  --header 'Content-Type: application/json' \
  --data '{
    "external_profile_id": "user_12345",
    "external_created_at": "2026-06-01T10:30:00Z",
    "email": "jane@example.com",
    "country": "US",
    "custom_attributes": {
      "plan": "trial"
    }
  }'
Note

country 和 store_country 使用两位字母的 ISO 3166-1 alpha-2 代码——填 US,而非 USA 或 United States。其他任何值都将被拒绝。

device_info 描述用户的设备信息。该对象是可选的,但只要传入此对象,就必须包含 platform 字段。

字段可选市场细分筛选备注
platform否是
device是是设备型号。
os是是
locale是是
app_version是是按版本号排序比较,因此 1.10.0 高于 1.9.0。
timezone是否设置用户接收邮件的时间。若不填,Adapty Mail 默认按 UTC 处理,发送时间窗口(08:00–21:00)将以 UTC 为准,而非用户本地时区。

所有可用字段请参阅 Save profile 参考文档。

发送交易事件

Note

拥有邮箱的用户画像即可进入 never purchased 流程。其他所有流程还需要交易事件。

除 never purchased 之外的所有流程都依赖购买历史。在处理购买、续订和取消订阅时,同步发送用户画像的交易事件,这样 Adapty Mail 才能将其归入正确的流程。交易事件同时也支持收入归因。只有在你仅运行 never purchased 营销活动时,才可以跳过这一步。

要记录一笔交易,请向 /api/v1/profile/transaction-event/save/ 发送 POST 请求。使用与用户画像相同的 external_profile_id,这样 Adapty Mail 才能将该交易关联到正确的用户。

curl --request POST \
  --url 'https://api-mail.adapty.io/api/v1/profile/transaction-event/save/' \
  --header 'Authorization: Bearer {your_secret_api_key}' \
  --header 'Content-Type: application/json' \
  --data '{
    "event_type": "subscription_started",
    "event_id": "evt_abc123",
    "event_datetime": "2026-06-10T14:20:05Z",
    "external_profile_id": "user_12345",
    "store": "app_store",
    "store_product_id": "premium_monthly",
    "store_transaction_id": "1000000123456789",
    "store_original_transaction_id": "1000000123456789",
    "purchased_at": "2026-06-10T14:20:00Z",
    "originally_purchased_at": "2026-06-10T14:20:00Z",
    "price_usd": "9.99"
  }'

请参阅 保存交易事件 参考文档,了解所有可用字段。

您可以在用户画像创建之前发送交易记录。Adapty Mail 会暂时保存该事件,待下次包含相同 external_profile_id 的保存操作执行时,再将其关联到对应的用户画像。

删除用户画像

如需履行数据删除请求,请将用户画像的标识符发送至 /api/v1/profile/delete/。Adapty Mail 将清除该用户画像的个人数据并取消其已计划的邮件。

curl --request POST \
  --url 'https://api-mail.adapty.io/api/v1/profile/delete/' \
  --header 'Authorization: Bearer {your_secret_api_key}' \
  --header 'Content-Type: application/json' \
  --data '{
    "external_profile_id": "user_12345"
  }'

通过 external_profile_id、customer_user_id 或 email 识别用户画像——至少发送其中一个。Adapty Mail 会清除已存储的数据,但不会屏蔽该地址:如果数据源再次发送,系统会创建一个没有历史记录的新用户画像。如需永久将某人排除在外,请从源头停止发送其数据。

删除请求超时后,你无法确认请求是否已成功送达,因此可能会重新发送。当你通过 external_profile_id 或 customer_user_id 识别用户画像时,第二次调用是安全的——它会成功执行但不会产生任何变化。而仅携带 email 的第二次调用会返回 404,因为第一次删除操作已清除了原本可匹配的邮箱地址。删除用户画像 参考文档列出了所有响应状态码。

将事件映射到流程

发送与实际发生情况对应的 event_type。Adapty Mail 会根据用户画像的事件历史推断其当前状态,并将其路由到匹配的流程。

event_type发送时机流程
subscription_started用户开始新订阅。活跃 — 无再触达流程
subscription_renewed订阅自动续期。活跃 — 无再触达流程
subscription_renewal_reactivated用户重新开启自动续订。活跃 — 无再触达流程
non_subscription_purchase用户完成一次性购买。活跃 — 无再触达流程
subscription_renewal_cancelled用户关闭自动续订(订阅在到期前仍有效)。续订已取消
billing_issue_detected续订付款失败。账单问题
entered_grace_period付款失败,但用户仍处于宽限期内。账单问题
subscription_expired订阅到期,访问权限终止。已过期
subscription_refunded订阅购买已退款。已退款
non_subscription_purchase_refunded一次性购买已退款。已退款