DocumentationOuvrir Moon AI
Parcourir la documentation

Comptes des membres par l’API

Lire le compte d’un membre, le déconnecter, réinitialiser sa double authentification, le désactiver, gérer son départ et les exigences des comptes par l’API.

Sur cette page

Ces routes agissent sur le compte Moon AI d’un membre, au-delà de son adhésion. Les plus fortes (adresse, double authentification, mot de passe, désactivation) ne valent que pour un compte géré : un compte dont l’adresse est d’un domaine vérifié par l’organisation, ou qui a été créé par sa connexion unique ou son annuaire. Sur un compte qui appartient à la personne, elles répondent 409 not_managed_account.

Toutes les routes sont sous https://chat.realmoon.ai/api/v1/orgs/{org_id}. Les actions sur un compte suivent les règles des membres : jamais le créateur de la clé, le propriétaire, un administrateur, ni un membre qui a plus de droits que la clé (403 forbidden). La personne concernée reçoit un e-mail pour chaque action, quand l’envoi d’e-mails est configuré.

Lire le compte d’un membreLien vers la section Lire le compte d’un membre

GET /members/{user_id}/account · members:read

JSON
{
  "managed": true,
  "managed_reason": "domain",
  "member_status": "active",
  "account": {
    "name": "Camille Martin",
    "email": "camille.martin@ecole.fr",
    "status": "active",
    "disabled_by_org": false,
    "sign_in": ["password", "google"],
    "two_factor": { "enabled": true, "method": "totp", "backup_codes_remaining": 8 },
    "last_active_at": 1762332000,
    "created_at": 1756684800,
    "sessions_revoked_at": null,
    "two_factor_required": true
  },
  "devices": [
    { "kind": "cli", "label": "Moon CLI", "created_at": 1762300000, "last_active_at": 1762330000, "expires_at": 1764892000, "ip": "203.0.113.x" },
    { "kind": "web", "label": "Chrome · Windows", "created_at": 1762331000, "last_active_at": 1762331000, "expires_at": null, "ip": "2001:0db8:0001::" }
  ],
  "verified_domains": ["ecole.fr"],
  "blocked": null,
  "can": { "sign_out_org": true, "sign_out_account": true, "edit": true, "reset_2fa": true, "password_reset": true, "disable": true, "enable": false, "offboard": true, "transfer_private": true }
}
ChampDescription
managed_reasondomain, sso, scim ou null (compte de la personne).
account.statusStatut du compte sur la plateforme ; disabled_by_org dit s’il a été désactivé par cette organisation.
account.sign_inMoyens de connexion : password, les fournisseurs liés, sso.
devicesSessions Moon CLI ouvertes sur l’organisation et, pour un compte géré, navigateurs connectés, adresse IP masquée. null quand la clé ne peut pas déconnecter ce membre.
canCe que la clé peut faire sur ce compte.

Déconnecter un membreLien vers la section Déconnecter un membre

POST /members/{user_id}/account/sign-out · members:write

ChampTypeObligatoireDescription
scopechaînenonorganization (par défaut) : les sessions ne peuvent plus agir dans l’organisation ; les autres workspaces restent ouverts. account : toutes les sessions du compte, partout (compte géré ; demande aussi security:read ou security:write).

Réponse : {"scope": "organization", "signed_out": true, "cli_revoked": 2} (sessions Moon CLI fermées), ou {"scope": "account", "signed_out": true}.

Réinitialiser la double authentificationLien vers la section Réinitialiser la double authentification

POST /members/{user_id}/account/reset-2fa · security:write · compte géré

Retire l’application d’authentification, le code par e-mail et les codes de secours ; la personne la configure de nouveau à sa prochaine connexion. Toutes ses sessions sont fermées. Réponse : {"reset": true, "had_two_factor": true}.

Envoyer un code de réinitialisation du mot de passeLien vers la section Envoyer un code de réinitialisation du mot de passe

POST /members/{user_id}/account/password-reset · security:write · compte géré

Envoie à la personne un code à 6 chiffres valable 15 minutes ; il n’est jamais montré à l’organisation. Réponse : {"sent": true, "email_hint": "c***@ecole.fr"}.

StatutcodeCause
409sso_requiredLa connexion unique est obligatoire pour ce compte : il n’a pas de mot de passe.
429rate_limitedUn code a déjà été demandé pour cette personne dans les 10 dernières minutes, même si l’envoi avait échoué.
502errorL’e-mail n’a pas pu partir.
503smtp_unavailableL’envoi d’e-mails n’est pas configuré.

Changer le nom ou l’adresseLien vers la section Changer le nom ou l’adresse

PATCH /members/{user_id}/account · security:write · compte géré

ChampTypeObligatoireDescription
namechaînenon1 à 128 caractères.
emailchaînenonUne adresse d’un domaine vérifié par l’organisation.

Réponse : {"changed": ["email", "name"], "name": "…", "email": "…"}. Une nouvelle adresse ferme toutes les sessions et devra être confirmée à la prochaine connexion ; l’ancienne et la nouvelle adresse sont prévenues.

StatutcodeCause
400invalid_requestRien à modifier, nom vide ou trop long, adresse invalide.
400email_domain_not_verifiedL’adresse n’est pas d’un domaine vérifié par l’organisation.
409email_takenL’adresse est déjà utilisée par un autre compte.

Désactiver et réactiver un compteLien vers la section Désactiver et réactiver un compte

POST /members/{user_id}/account/disable · security:write · compte géré

La personne ne peut plus se connecter nulle part ; elle reste membre. Toutes ses sessions sont fermées. Réponse : {"disabled": true, "disabled_at": 1762339200}.

POST /members/{user_id}/account/enable · security:write · compte géré

Lève une désactivation faite par cette organisation, et seulement celle-là. Réponse : {"disabled": false}.

StatutcodeCause
409not_activeLe compte n’est pas actif (désactivation).
409owns_workspaceLe compte possède un autre workspace d’équipe avec des membres : transférez-le d’abord.
409not_disabled_by_orgLe compte n’a pas été désactivé par cette organisation (réactivation).
409invalid_requestL’organisation n’aurait plus d’administrateur actif.

Départ d’un membreLien vers la section Départ d’un membre

Lister ce qu’il possèdeLien vers la section Lister ce qu’il possède

GET /members/{user_id}/resources · members:read

JSON
{
  "resources": {
    "agents": { "total": 2, "shared": 2 },
    "knowledge": { "total": 5, "shared": 3 },
    "notes": { "total": 12, "shared": 1 },
    "prompts": { "total": 4, "shared": 4 },
    "tools": { "total": 0, "shared": 0 }
  },
  "managed": true,
  "kinds": ["agents", "knowledge", "notes", "prompts", "tools"]
}

Transférer, retirer, désactiverLien vers la section Transférer, retirer, désactiver

POST /members/{user_id}/offboard · members:write

Fait dans l’ordre : le transfert des ressources, le retrait de l’organisation, la désactivation du compte. Tout est vérifié avant le premier changement.

ChampTypeObligatoireDescription
transfer_tochaîneavec kindsUn membre actif qui reçoit les ressources.
kindslistenonagents, knowledge, notes, prompts, tools.
include_privatebooléennonTransférer aussi les ressources non partagées (compte géré ; demande security:read ou security:write). Sinon, seules les ressources partagées partent.
removebooléennontrue par défaut : retirer le membre de l’organisation.
disable_accountbooléennonDésactiver le compte (compte géré ; demande security:read ou security:write).
cURL
curl https://chat.realmoon.ai/api/v1/orgs/$ORG_ID/members/$USER_ID/offboard \
  -H "Authorization: Bearer $MOONAI_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"transfer_to": "<id du successeur>", "kinds": ["knowledge", "prompts"], "remove": true}'
Python
import os
import requests

BASE = f"https://chat.realmoon.ai/api/v1/orgs/{os.environ['ORG_ID']}"
HEADERS = {"Authorization": f"Bearer {os.environ['MOONAI_ADMIN_KEY']}"}

r = requests.post(
    f"{BASE}/members/{os.environ['USER_ID']}/offboard",
    headers=HEADERS,
    json={"transfer_to": os.environ["SUCCESSOR_ID"], "kinds": ["knowledge", "prompts"], "remove": True},
    timeout=60,
)
r.raise_for_status()
print(r.json())
JavaScript
const BASE = `https://chat.realmoon.ai/api/v1/orgs/${process.env.ORG_ID}`;
const r = await fetch(`${BASE}/members/${process.env.USER_ID}/offboard`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.MOONAI_ADMIN_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ transfer_to: process.env.SUCCESSOR_ID, kinds: ['knowledge', 'prompts'], remove: true }),
});
if (!r.ok) throw new Error(await r.text());
console.log(await r.json());

Réponse : {"transferred": {"knowledge": 3, "prompts": 4}, "removed": true, "account_disabled": false} (avec disabled_at quand le compte a été désactivé). Les ressources transférées gardent leurs partages. Le retrait envoie l’événement member.removed.

StatutcodeCause
400invalid_requestRien à faire, kinds sans transfer_to, aucun type connu, transfert à la personne elle-même.
409invalid_targettransfer_to n’est pas un membre actif.
409not_managed_accountinclude_private ou disable_account sur un compte qui appartient à la personne.
409invalid_requestL’organisation n’aurait plus d’administrateur actif.

Exigences des comptesLien vers la section Exigences des comptes

Lire les exigencesLien vers la section Lire les exigences

GET /security/requirements · security:read

JSON
{
  "settings": { "require_2fa": true, "grace_until": 1763000000, "max_session_hours": 168, "sessions_valid_after": null, "updated_at": 1762339200, "updated_by": "3f2b9c1d-7e4a-4b8c-9d0e-1f2a3b4c5d6e" },
  "limits": { "grace_days_max": 90, "session_hours_min": 1, "session_hours_max": 2160 },
  "sso": { "configured": true, "active": true, "enforced": false },
  "verified_domains": ["ecole.fr"],
  "members": { "active": 120, "compliant": 97, "missing": 23 }
}

Un membre est conforme quand il a activé la double authentification, ou qu’il se connecte par la connexion unique obligatoire de l’organisation.

Modifier les exigencesLien vers la section Modifier les exigences

PUT /security/requirements · security:write

ChampTypeObligatoireDescription
require_2fabooléennonExiger la double authentification. false retire l’exigence et le délai.
grace_daysentiernonDélai de grâce de 0 à 90 jours, compté à partir de maintenant. 0 ou absent à l’activation : exigence immédiate.
max_session_hoursentiernonDurée maximale d’une session, de 1 à 2 160 heures ; null retire la limite.

Envoyez au moins un champ ; un champ absent ne change pas. La réponse a la forme de la lecture, sans members. Exiger la double authentification tout de suite répond 409 actor_without_2fa quand le créateur de la clé ne l’a pas activée lui-même. Un membre sans double authentification une fois le délai passé ne peut plus travailler dans l’organisation (403 org_2fa_required).

Lister les membres non conformesLien vers la section Lister les membres non conformes

GET /security/requirements/members · security:read

Paramètres : filter (missing, par défaut, ou all), page, limit. Chaque élément : user_id, name, email, last_active_at, two_factor. La réponse ajoute settings, active_members, compliant et missing.

Déconnecter tout le mondeLien vers la section Déconnecter tout le monde

POST /security/sign-out-all · security:write

Plus aucune session ouverte avant maintenant n’agit dans l’organisation : chacun se reconnecte, y compris le créateur de la clé. La clé, elle, continue de fonctionner. Réponse : {"signed_out": true, "valid_after": 1762339200}.

Ce que l’organisation demande au créateur de la cléLien vers la section Ce que l’organisation demande au créateur de la clé

GET /me/requirements · aucune portée

Rend require_2fa, two_factor_enabled, two_factor_missing, grace_until, blocked, can_switch_out et max_session_hours pour la personne qui a créé la clé.

Voir aussiLien vers la section Voir aussi

Moon AI

Moon AI en action

0:00

À découvrir

Captures de chat.realmoon.ai du 29 octobre 2026, avec des données fictives.

Moon AI

Vos préférences

Aucun suivi publicitaire.

Ce site ne dépose aucun cookie publicitaire ni cookie de mesure d’audience : notre serveur compte les visites sans cookie. Votre thème et la fermeture de l’information sur les cookies sont mémorisés sur cet appareil.

L’application Moon AI possède ses propres réglages de confidentialité.