Créer une organisation

POST /v1/organizations · autorisation organizations:write

Crée une organisation dans l'environnement. La réponse contient un ETag. Un événement organization.created est publié et la modification est consignée dans le journal d'audit de gestion.

Requête

Champ Type Obligatoire Description
Idempotency-Key header non Facultatif. 16 à 64 caractères [A-Za-z0-9_-] ; répéter la même clé avec la même requête renvoie la même réponse.
name string oui Nom d'affichage, 1 à 256 caractères, sans caractères de contrôle.
slug string non 3 à 64 caractères a-z, 0-9 et tirets simples ; unique dans l'environnement. Dérivé du nom lorsqu'il est omis.
external_id string | null non Votre propre identifiant, jusqu'à 255 caractères ; unique dans l'environnement. null le supprime.
metadata object | null non Objet JSON, 16 KiB au maximum, 5 niveaux et 100 clés de premier niveau. Renvoyé uniquement par l'API de gestion.
brand_color string | null non Couleur de marque #RRGGBB ; enregistrée en majuscules. null la supprime.
max_memberships integer | null non Plafond d'adhésions, au minimum 1 ; null signifie illimité.
default_zoneinfo string | null non Fuseau horaire IANA par défaut (par exemple Europe/Istanbul), utilisé pour l'inscription, l'invitation, le SSO à la volée et SCIM dans le contexte de l'organisation lorsque le navigateur ou le fournisseur d'identité n'en fournit aucun. null le supprime (la valeur par défaut de l'environnement s'applique).

Corps de la requête :

{
  "name": "Acme Corp",
  "slug": "acme",
  "external_id": "crm-4821",
  "metadata": {
    "tier": "gold"
  },
  "brand_color": "#1F6FEB"
}

Réponse

201 Created avec la nouvelle organisation.

{
  "id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
  "name": "Acme Corp",
  "slug": "acme",
  "external_id": "crm-4821",
  "status": "active",
  "metadata": {
    "tier": "gold"
  },
  "brand_color": "#1F6FEB",
  "max_memberships": null,
  "default_zoneinfo": null,
  "created_via": "admin_api",
  "disabled_at": null,
  "deletion_requested_at": null,
  "deletion_due_at": null,
  "created_at": "2026-10-12T09:30:00.123456Z",
  "updated_at": "2026-10-12T09:30:00.123456Z",
  "version": 1
}

Erreurs

HTTP code Quand
400 unknown_field Le corps contient un champ absent du schéma ou en lecture seule (id, status…).
401 unauthenticated L'identifiant d'authentification est absent, invalide ou révoqué.
403 insufficient_permissions L'identifiant ne dispose pas de l'autorisation requise.
403 quota_exceeded La limite d'organisations du forfait de l'environnement (organizations_per_environment_max) est atteinte.
409 slug_taken Le slug est utilisé par une autre organisation.
409 slug_reserved Le slug est un mot réservé ou l'ancien slug d'une autre organisation (réservé pendant 90 jours).
409 external_id_taken L'external_id est utilisé par une autre organisation.
422 validation_failed Un champ est invalide (name, slug, external_id, metadata, brand_color, max_memberships, default_zoneinfo).
422 idempotency_key_reuse L'Idempotency-Key a déjà été utilisé avec une requête différente.
429 rate_limited La limite de débit a été dépassée ; réessayez après la période indiquée par Retry-After.
503 service_unavailable Un service dont dépend l'API est temporairement indisponible ; réessayez après la période indiquée par Retry-After.

Exemple

curl -X POST "https://api.eu.keenauth.com/v1/organizations" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Acme Corp","slug":"acme"}'