POST /api/v1/profile/save/

Enregistrer un profil

Crée ou met à jour un profil dans Adapty Mail. Un profil contient l'adresse e-mail de l'utilisateur et les attributs qu'Adapty Mail utilise pour identifier les destinataires et construire des segments.

Identifiez chaque utilisateur par un external_profile_id stable. Envoyer le même external_profile_id à nouveau met à jour le profil existant plutôt que d'en créer un doublon.

Request body

external_profile_idstringrequired

Identifiant stable pour l'utilisateur, géré par votre application ou votre backend. Réutilisez la même valeur dans toutes les requêtes afin qu'Adapty Mail associe les e-mails, les clics et les achats à un seul profil. N'utilisez jamais un identifiant anonyme ou propre à une installation.

external_created_atstringrequired

La date de création de l'utilisateur, au format ISO 8601 (par exemple, "2026-06-01T10:30:00Z"). Vous pouvez utiliser cette date dans les segments.

emailstringrequired

L'adresse e-mail de l'utilisateur. Adapty Mail envoie les campagnes à cette adresse. L'adresse est en écriture unique : elle est définie lors de la création du profil et les enregistrements ultérieurs ne l'écrasent pas.

customer_user_idstring

L'identifiant de l'utilisateur dans votre propre système, si vous en avez un qu'Adapty connaît également. Adapty Mail l'utilise pour reconnaître une personne qui l'atteint également via le SDK, afin que les deux sources partagent un seul profil au lieu de produire un doublon qui envoie un e-mail à la même personne deux fois.

first_namestring

Le prénom de l'utilisateur.

last_namestring

Le nom de famille de l'utilisateur.

genderstring

Le genre de l'utilisateur.

birthdaystring

La date de naissance de l'utilisateur, au format ISO 8601 (par exemple, "1990-05-21").

countrystring

Le pays de l'utilisateur sous forme de code ISO 3166-1 alpha-2 à deux lettres en majuscules (par exemple, US).

store_countrystring

La région du store de l'utilisateur sous forme de code ISO 3166-1 alpha-2 à deux lettres en majuscules (par exemple, US).

custom_attributesobject

Paires clé-valeur arbitraires (valeurs de type chaîne ou nombre) à associer au profil. Utilisez-les pour créer des segments — par exemple, plan, signup_source ou trial_days.

device_infoobject
platformstringrequired

La plateforme sur laquelle se trouve l'utilisateur, par exemple iOS ou Android.

devicestring

Modèle de l'appareil, par exemple iPhone15,2.

osstring

Version du système d'exploitation, par exemple 17.5.

localestring

La langue et région de l'utilisateur, par exemple en-US.

timezonestring

Le fuseau horaire de l'utilisateur, par exemple America/New_York.

app_versionstring

Version de votre application utilisée par l'utilisateur, par exemple 3.1.0.

Responses

Profil enregistré avec succès. Le corps de la réponse est un objet vide.

Schema
object
Example
{}

Échec de la validation — un champ obligatoire est manquant ou invalide. field_name indique quel champ est concerné.

Schema

Réponse d'erreur standard. Chaque échec renvoie un statut 4XX avec cette structure.

errorsarray of object
messagestring

Description de l'erreur lisible par un humain.

error_codestring

Identifiant d'erreur lisible par une machine.

status_codeinteger

Code de statut HTTP pour cette erreur.

field_namestring

Le champ de la requête à l'origine de l'erreur, ou null si l'erreur n'est pas liée à un champ spécifique.

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

Clé API secrète manquante ou invalide.

Schema

Réponse d'erreur standard. Chaque échec renvoie un statut 4XX avec cette structure.

errorsarray of object
messagestring

Description de l'erreur lisible par un humain.

error_codestring

Identifiant d'erreur lisible par une machine.

status_codeinteger

Code de statut HTTP pour cette erreur.

field_namestring

Le champ de la requête à l'origine de l'erreur, ou null si l'erreur n'est pas liée à un champ spécifique.

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