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" }