Aller au contenu principal

Créer ou mettre à jour un utilisateur

Créer et mettre à jour un utilisateur sont la même opération et partagent le même corps UpsertUserRequest. POST …/users crée l'utilisateur — ou le met à jour si l'email existe déjà. PUT …/users/{uid} met à jour un utilisateur connu par son UID. Les deux renvoient 200.

Avant de commencer, assurez-vous d'avoir un jeton d'accès valide — voir la Vue d'ensemble pour les détails d'authentification.

Étape 1 — Vérifier si l'utilisateur existe

Utilisez la référence de recherche pour rechercher l'utilisateur par email ou par nom. Une correspondance signifie que vous mettrez à jour un utilisateur existant ; aucune correspondance signifie que vous en créerez un nouveau.

Étape 2 — Rassembler les UID à attribuer

Collectez les UID de groupe et de permission que vous souhaitez attribuer à l'utilisateur. Consultez la référence de recherche pour savoir comment les récupérer depuis les points de terminaison des groupes et des permissions.

Étape 3 — Envoyer la requête

Créer ou upsert par email

POST /v2/organizations/DEMO/users
import requests

BASE_URL = "https://api.stonal.io/users"
TOKEN = "<access_token>"

resp = requests.post(
f"{BASE_URL}/v2/organizations/DEMO/users",
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"email": "john.doe@example.com",
"firstName": "John",
"lastName": "Doe",
"userGroupUids": ["019619df-4768-76b7-81e3-2c56d374df46"],
"permissions": [{"uid": "019619df-4767-730f-8d31-143712a08141"}],
},
)
print(resp.status_code, resp.json())

Mettre à jour par UID

PUT /v2/organizations/DEMO/users/019619df-4768-76b7-81e3-2c56d374df46
import requests

BASE_URL = "https://api.stonal.io/users"
TOKEN = "<access_token>"

resp = requests.put(
f"{BASE_URL}/v2/organizations/DEMO/users/019619df-4768-76b7-81e3-2c56d374df46",
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"email": "john.doe@example.com",
"firstName": "John",
"lastName": "Doe",
"userGroupUids": ["019619df-4768-76b7-81e3-2c56d374df46"],
"permissions": [{"uid": "019619df-4767-730f-8d31-143712a08141"}],
},
)
print(resp.status_code, resp.json())

Corps de la requête

{
"email": "john.doe@example.com",
"firstName": "John",
"lastName": "Doe",
"fromExternalIdp": false,
"allAssets": false,
"userGroupUids": ["019619df-4768-76b7-81e3-2c56d374df46"],
"permissions": [
{ "uid": "019619df-4767-730f-8d31-143712a08141" },
{ "uid": "019619df-4768-76b3-8ab3-4414dcf29ff1" }
]
}

Référence des champs

ChampRequisTypeNotes
emailstringUnique ; immuable à la mise à jour
firstNamestring
lastNamestring
uidstringIdentifie l'utilisateur lors de la mise à jour
passwordstring≥ 8 caractères ; majuscule + minuscule + chiffre + caractère spécial
fromExternalIdpbooleanContrôle l'email d'activation (voir l'avertissement)
allAssetsbooleanAccorde tous les objets au lieu de lister les permissions ASSET
userGroupUidsstring[]UID des groupes
permissions{ uid }[]UID des permissions
Emails d'activation de compte et fromExternalIdp

L'indicateur fromExternalIdp est ce qui contrôle si Stonal envoie au nouvel utilisateur un email d'activation de compte (le message « Définissez votre mot de passe STONAL »). C'est le seul paramètre qui régit ce comportement pour l'API — le commutateur SSO du frontend de l'organisation n'a aucun effet dessus.

  • fromExternalIdp: false (la valeur par défaut) — le compte est créé avec un mot de passe local et l'utilisateur reçoit l'email d'activation afin de pouvoir définir ou confirmer son mot de passe. Si vous omettez le champ, sa valeur par défaut est false, donc l'email est envoyé.
  • fromExternalIdp: true — le compte est traité comme fédéré : aucun email d'activation n'est envoyé et l'utilisateur doit s'authentifier via son fournisseur d'identité externe (SSO).

Si vos utilisateurs se connectent via SSO et que vous ne voulez pas qu'ils reçoivent l'email « Définissez votre mot de passe STONAL », vous devez explicitement passer "fromExternalIdp": true dans l'appel de création. Le laisser à false (ou l'omettre) pour des utilisateurs SSO est la cause la plus courante d'emails d'activation inattendus.

Mettre à jour ou créer

  • PUT requiert le uid de l'utilisateur dans le chemin de l'URL.
  • L'email ne peut pas être modifié sur un utilisateur existant.
  • Il n'y a aucune mise à jour partielle — envoyez l'ensemble complet des champs que vous voulez sur l'utilisateur.
  • Les permissions et userGroupUids fournis remplacent ceux existants ; tout groupe ou permission précédemment attribué non inclus dans la nouvelle requête sera supprimé.

Exemple complet de bout en bout

Cet exemple parcourt trois recherches pour collecter les UID, puis crée un utilisateur.

1. Trouver le groupe à attribuer

GET /v1/organizations/DEMO/groups

Réponse abrégée :

{
"content": [
{ "uid": "019619df-4768-76b7-81e3-2c56d374df46", "name": "Analysts" }
]
}

UID de groupe à utiliser : 019619df-4768-76b7-81e3-2c56d374df46

2. Trouver la permission de profil

GET /v1/organizations/DEMO/users/permissions?type=PROFILE

Réponse abrégée :

{
"content": [
{ "uid": "019619df-4767-730f-8d31-143712a08141", "name": "Standard profile" }
]
}

UID de la permission de profil : 019619df-4767-730f-8d31-143712a08141

3. Trouver la permission de portefeuille

GET /v1/organizations/DEMO/users/permissions?type=ASSET&subType=PORTFOLIO

Réponse abrégée :

{
"content": [
{ "uid": "019619df-4768-76b3-8ab3-4414dcf29ff1", "name": "All portfolios" }
]
}

UID de la permission de portefeuille : 019619df-4768-76b3-8ab3-4414dcf29ff1

4. Créer l'utilisateur

Les trois UID issus des recherches alimentent directement le corps de la requête :

POST /v2/organizations/DEMO/users
{
"email": "john.doe@example.com",
"firstName": "John",
"lastName": "Doe",
"fromExternalIdp": false,
"allAssets": false,
"userGroupUids": ["019619df-4768-76b7-81e3-2c56d374df46"],
"permissions": [
{ "uid": "019619df-4767-730f-8d31-143712a08141" },
{ "uid": "019619df-4768-76b3-8ab3-4414dcf29ff1" }
]
}

5. Réponse

200 OK

L'utilisateur est créé (ou mis à jour si l'email existait déjà) et attribué au groupe Analysts avec le profil standard et les permissions sur tous les portefeuilles.

Réponses

  • 200 — utilisateur créé ou mis à jour avec succès.

Les API Stonal renvoient une enveloppe d'erreur cohérente : { "type", "title", "detail" }. Les échecs de validation (422) remplacent detail par un tableau errors détaillant chaque champ.

StatuttypeSignification
400tag:InvalidBody / tag:InvalidContentTypeLe corps de la requête ou le type de contenu est invalide
401tag:UnauthenticatedJeton d'authentification manquant ou expiré
403tag:ForbiddenAccessLe jeton n'a pas la permission d'accéder à cette ressource
422tag:ValidationErrorUn ou plusieurs champs ont échoué à la validation (voir errors[])
500tag:InternalErrorErreur serveur inattendue
{
"type": "tag:ValidationError",
"title": "Invalid request",
"errors": [
{ "field": "email", "detail": "Email is required" }
]
}