Tous les endpoints de cette section sont scopés au workspace sauf indication contraire.

En-têtes : Authorization: Bearer {token-workspace}


Utilisateurs

GET /api/users

Retourne une liste paginée des utilisateurs du workspace. Supporte le filtrage et le tri.

Paramètres de requête

Paramètre Description
filter[name] Filtrer par nom
filter[email] Filtrer par email
filter[phone] Filtrer par téléphone
filter[term] Recherche plein texte
sort Champ de tri : id, name, email, created_at, updated_at. Préfixer par - pour ordre décroissant (ex. -created_at)
per_page Résultats par page (défaut : 20)
page Numéro de page

Réponse 200 — réponse paginée

{
  "data": [
    {
      "id": 3,
      "name": "Bob Smith",
      "email": "bob@acme.com",
      "phone": "+33 1 00 00 00 00",
      "mobile_phone": null,
      "created_at": "2024-01-20T12:00:00Z",
      "updated_at": "2024-06-01T08:00:00Z"
    }
  ],
  "current_page": 1,
  "last_page": 1,
  "per_page": 20,
  "total": 1
}

GET /api/users/{id}

Retourne un seul utilisateur. Requiert la permission groupe admin.

Réponse 200 — objet utilisateur

Réponse 403 — non autorisé


Rôles

GET /api/roles

Retourne tous les rôles définis dans le workspace.

Réponse 200

[
  { "id": 1, "name": "manager", "permissions_count": 12 },
  { "id": 2, "name": "agent", "permissions_count": 5 }
]

GET /api/roles/{id}

Retourne un seul rôle avec sa liste complète de permissions.

Réponse 200

{
  "id": 1,
  "name": "manager",
  "permissions_count": 12,
  "permissions": ["customer.view", "customer.create", "customer.update", ...]
}

Organisations

GET /api/organisations

Retourne toutes les organisations du workspace.

Réponse 200 — tableau d'objets organisation


GET /api/organisations/{id}

Retourne une seule organisation par son ID.

Réponse 200 — objet organisation


PUT /api/organisations/{id}

Met à jour les détails d'une organisation.

Réponse 201 — objet organisation mis à jour


Invitations utilisateurs

Les invitations sont gérées depuis l'API centrale (envoi vers le domaine central) pour les actions inter-workspace, ou depuis l'API workspace pour la gestion au niveau du workspace.

GET /api/user-invites (workspace)

Liste toutes les invitations en attente dans le workspace.

Réponse 200 — tableau d'objets invitation


POST /api/user-invites (workspace)

Envoie une invitation à un utilisateur pour rejoindre le workspace.

Corps de la requête

Champ Type Requis Description
email string oui Adresse email de l'invité
group string oui Groupe utilisateur : admin ou user
role string oui Nom du rôle (doit exister dans le workspace)
customer_id integer oui (si group=user) Client auquel l'utilisateur sera lié

Réponse 201

{
  "id": 8,
  "group": "user",
  "email": "nouvelutilisateur@exemple.com",
  "role": "agent",
  "customer_id": 12
}

Réponse 403 — impossible de créer des invitations admin sans la permission requise


DELETE /api/user-invites/{id} (workspace)

Annule une invitation en attente.

Réponse 200

{ "response": "element deleted" }

GET /api/user-invites/pending (central)

Retourne toutes les invitations en attente envoyées à l'email de l'utilisateur authentifié, tous workspaces confondus. Utilisez cet endpoint sur le domaine central.

En-têtes : Authorization: Bearer {token-central}

Réponse 200 — tableau d'objets invitation (token visible)


GET /api/user-invites/{token}/inspect (central, non authentifié)

Récupère les informations publiques d'une invitation spécifique sans nécessiter d'authentification. Utile pour pré-remplir les formulaires d'inscription ou de connexion.

Réponse 200

{
  "invite": { "id": 8, "email": "nouvelutilisateur@exemple.com", "group": "user" },
  "workspace": { "name": "Acme Corp" },
  "exists": false
}

Réponse 400 — invitation expirée ou plus en attente


POST /api/user-invites/{token}/accept (central)

Accepte une invitation. L'utilisateur authentifié est ajouté au workspace avec le rôle invité.

En-têtes : Authorization: Bearer {token-central}

Réponse 200

{
  "message": "You have been successfully added to the workspace.",
  "workspace": { ... }
}

POST /api/user-invites/{token}/decline (central)

Décline une invitation.

En-têtes : Authorization: Bearer {token-central}

Réponse 200

{ "response": "invite declined" }