Introduction
API REST multi-tenant pour la gestion d'associations africaines (tontines, ONG, mutuelles, syndicats).
Identification du tenant
Toutes les routes /api/v1/* (sauf register, login et login/select-tenant) nécessitent le header X-Tenant-Slug :
X-Tenant-Slug: mon-association
Le slug est l'identifiant unique de l'association, choisi lors de l'inscription.
Format de réponse uniforme
Toutes les réponses suivent ce format :
{
"success": true,
"message": "Description lisible.",
"data": {},
"meta": { "timestamp": "2026-04-27T10:00:00+00:00", "version": "v1" }
}
En cas d'erreur, le champ errors s'ajoute et data vaut null.
Codes d'erreur
| Code | Signification |
|---|---|
| 200 | Succès |
| 201 | Ressource créée |
| 401 | Token manquant ou expiré |
| 403 | Accès interdit (tenant suspendu) |
| 404 | Ressource ou tenant introuvable |
| 422 | Validation échouée |
| 429 | Trop de requêtes (100/min API · 10/min auth) |
| 500 | Erreur serveur interne |
This documentation aims to provide all the information you need to work with our API.
<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
Obtenez votre token via POST /api/v1/auth/login, puis passez-le en header : Authorization: Bearer {token}
Authentication
Se déconnecter
requires authentication
Révoque tous les tokens Sanctum de l'utilisateur connecté (toutes les sessions).
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/auth/logout" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/auth/logout"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/auth/logout';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Déconnexion réussie):
{
"success": true,
"message": "Déconnexion réussie.",
"data": null,
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Token manquant ou expiré):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Profil et permissions
requires authentication
Retourne le profil complet de l'utilisateur connecté et la liste de ses permissions dans le contexte du tenant courant.
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/auth/me" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/auth/me"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/auth/me';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Succès):
{
"success": true,
"message": "Utilisateur courant.",
"data": {
"user": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"tenant_id": "660e8400-e29b-41d4-a716-446655440000",
"first_name": "Kofi",
"last_name": "Mensah",
"email": "kofi@example.com",
"phone": "+22997000000",
"avatar_url": null,
"locale": "fr",
"is_active": true,
"last_login_at": "2026-04-27T10:00:00+00:00",
"roles": [
{
"name": "admin",
"guard_name": "web"
}
]
},
"permissions": [
"manage-members",
"manage-cotisations",
"view-reports"
]
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Token manquant ou expiré):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Rafraîchir le token
requires authentication
Révoque le token courant et émet un nouveau token Sanctum valide 24h. Utile pour prolonger une session sans redemander les credentials.
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/auth/refresh" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/auth/refresh"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/auth/refresh';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Token rafraîchi):
{
"success": true,
"message": "Token rafraîchi.",
"data": {
"token": "3|assovix_newFreshToken789xyz"
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Token manquant ou expiré):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Créer un compte association
Crée simultanément un nouveau tenant (association) et son premier utilisateur
avec le rôle admin. Retourne un token Sanctum immédiatement utilisable.
Ce endpoint ne nécessite pas le header X-Tenant-Slug car le tenant n'existe pas encore.
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/auth/register" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"association_name\": \"Tontine Les Amis\",
\"association_type\": \"tontine\",
\"slug\": \"tontine-les-amis\",
\"country\": \"BJ\",
\"currency\": \"XOF\",
\"first_name\": \"Kofi\",
\"last_name\": \"Mensah\",
\"email\": \"kofi@example.com\",
\"phone\": \"+22997000000\",
\"password\": \"Secret@2026!\",
\"password_confirmation\": \"Secret@2026!\"
}"
const url = new URL(
"https://api-assovix.gestiem.com/api/v1/auth/register"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"association_name": "Tontine Les Amis",
"association_type": "tontine",
"slug": "tontine-les-amis",
"country": "BJ",
"currency": "XOF",
"first_name": "Kofi",
"last_name": "Mensah",
"email": "kofi@example.com",
"phone": "+22997000000",
"password": "Secret@2026!",
"password_confirmation": "Secret@2026!"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/auth/register';
$response = $client->post(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'association_name' => 'Tontine Les Amis',
'association_type' => 'tontine',
'slug' => 'tontine-les-amis',
'country' => 'BJ',
'currency' => 'XOF',
'first_name' => 'Kofi',
'last_name' => 'Mensah',
'email' => 'kofi@example.com',
'phone' => '+22997000000',
'password' => 'Secret@2026!',
'password_confirmation' => 'Secret@2026!',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (201, Inscription réussie):
{
"success": true,
"message": "Inscription réussie.",
"data": {
"token": "1|assovix_K2c3QTLQgDywEmIa0qaXL1ivbosnIr4",
"user": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"tenant_id": "660e8400-e29b-41d4-a716-446655440000",
"first_name": "Kofi",
"last_name": "Mensah",
"email": "kofi@example.com",
"phone": "+22997000000",
"avatar_url": null,
"locale": "fr",
"is_active": true,
"last_login_at": null
},
"tenant": {
"id": "660e8400-e29b-41d4-a716-446655440000",
"name": "Tontine Les Amis",
"association_type": "tontine",
"slug": "tontine-les-amis",
"country": "BJ",
"currency": "XOF",
"plan": "free",
"status": "trial",
"trial_ends_at": "2026-05-11T10:00:00+00:00"
}
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (422, Slug déjà utilisé):
{
"success": false,
"message": "Données invalides.",
"data": null,
"errors": {
"slug": [
"The slug has already been taken."
]
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (422, Email invalide):
{
"success": false,
"message": "Données invalides.",
"data": null,
"errors": {
"email": [
"The email field must be a valid email address."
]
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (422, Mot de passe trop court):
{
"success": false,
"message": "Données invalides.",
"data": null,
"errors": {
"password": [
"The password field must be at least 8 characters."
]
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Se connecter
Authentifie un utilisateur sans header X-Tenant-Slug. Le système
identifie automatiquement l'association en croisant email et password.
- Cas standard (un seul match) : retourne un token Sanctum, l'utilisateur, le tenant et les permissions.
- Cas ambigu (l'email existe dans plusieurs associations actives) : retourne
un
login_intentcourt-vie (5 min) et la liste des associations à choisir. Aucun token Sanctum n'est émis tant que la sélection n'est pas faite viaPOST /api/v1/auth/login/select-tenant.
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/auth/login" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"kofi@example.com\",
\"password\": \"Secret@2026!\"
}"
const url = new URL(
"https://api-assovix.gestiem.com/api/v1/auth/login"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "kofi@example.com",
"password": "Secret@2026!"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/auth/login';
$response = $client->post(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'kofi@example.com',
'password' => 'Secret@2026!',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Connexion directe (un seul tenant)):
{
"success": true,
"message": "Connexion réussie.",
"data": {
"token": "2|assovix_4xK2c3QTLQgDywEmIa0qaXL1ivbosnIr4",
"user": {
"id": "550e8400-...",
"email": "kofi@example.com",
"is_active": true
},
"tenant": {
"id": "660e8400-...",
"name": "Tontine Les Amis",
"slug": "tontine-les-amis"
},
"permissions": [
"manage-members"
]
},
"meta": {
"timestamp": "2026-05-04T10:00:00+00:00",
"version": "v1"
}
}
Example response (200, Sélection d'association requise):
{
"success": true,
"message": "Plusieurs associations correspondent. Sélectionnez-en une.",
"data": {
"requires_tenant_selection": true,
"login_intent": "lit_9f3a2b81e4c64d9bb9a1d0e2f1c8b3a7",
"expires_at": "2026-05-04T10:05:00+00:00",
"associations": [
{
"id": "660e8400-...",
"name": "Tontine Les Amis",
"slug": "tontine-les-amis",
"association_type": "tontine",
"logo_url": null,
"country": "BJ"
}
]
},
"meta": {
"timestamp": "2026-05-04T10:00:00+00:00",
"version": "v1"
}
}
Example response (422, Identifiants incorrects):
{
"success": false,
"message": "Données invalides.",
"data": null,
"errors": {
"email": [
"Identifiants incorrects."
]
},
"meta": {
"timestamp": "2026-05-04T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Sélectionner une association après login multi-tenant
Consomme un login_intent émis par POST /auth/login quand l'email
matche plusieurs associations, et retourne un token Sanctum complet
pour le tenant choisi. Le login_intent est one-shot : un second
appel échoue. TTL 5 min.
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/auth/login/select-tenant" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"login_intent\": \"lit_9f3a2b81e4c64d9bb9a1d0e2f1c8b3a7\",
\"tenant_id\": \"660e8400-e29b-41d4-a716-446655440000\"
}"
const url = new URL(
"https://api-assovix.gestiem.com/api/v1/auth/login/select-tenant"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"login_intent": "lit_9f3a2b81e4c64d9bb9a1d0e2f1c8b3a7",
"tenant_id": "660e8400-e29b-41d4-a716-446655440000"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/auth/login/select-tenant';
$response = $client->post(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'login_intent' => 'lit_9f3a2b81e4c64d9bb9a1d0e2f1c8b3a7',
'tenant_id' => '660e8400-e29b-41d4-a716-446655440000',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Sélection réussie):
{
"success": true,
"message": "Connexion réussie.",
"data": {
"token": "3|assovix_freshTokenForSelectedTenant",
"user": {
"id": "550e8400-...",
"email": "kofi@example.com"
},
"tenant": {
"id": "660e8400-...",
"name": "Tontine Les Amis",
"slug": "tontine-les-amis"
},
"permissions": [
"manage-members"
]
},
"meta": {
"timestamp": "2026-05-04T10:00:30+00:00",
"version": "v1"
}
}
Example response (422, Intent expiré ou inconnu):
{
"success": false,
"message": "Données invalides.",
"data": null,
"errors": {
"login_intent": [
"Lien expiré, recommencez la connexion."
]
},
"meta": {
"timestamp": "2026-05-04T10:05:30+00:00",
"version": "v1"
}
}
Example response (422, Tenant non autorisé pour cet intent):
{
"success": false,
"message": "Données invalides.",
"data": null,
"errors": {
"tenant_id": [
"Sélection invalide."
]
},
"meta": {
"timestamp": "2026-05-04T10:00:30+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Tenant (Admin)
Lister les tenants
requires authentication
Retourne la liste paginée de tous les tenants (25 par page), triée par date de création décroissante.
Filtres disponibles : status et search (recherche dans name et slug).
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/admin/tenants?status=active&search=tontine&page=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/admin/tenants"
);
const params = {
"status": "active",
"search": "tontine",
"page": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/admin/tenants';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'status' => 'active',
'search' => 'tontine',
'page' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Liste paginée):
{
"success": true,
"message": "Liste des tenants.",
"data": [
{
"id": "660e8400-e29b-41d4-a716-446655440000",
"name": "Tontine Les Amis",
"slug": "tontine-les-amis",
"country": "BJ",
"currency": "XOF",
"plan": "free",
"status": "trial",
"trial_ends_at": "2026-05-11T10:00:00+00:00",
"created_at": "2026-04-27T10:00:00+00:00"
}
],
"meta": {
"current_page": 1,
"last_page": 3,
"per_page": 25,
"total": 72,
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Non authentifié):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Créer un tenant
requires authentication
Crée manuellement un nouveau tenant sans créer d'utilisateur associé. Réservé au super admin de la plateforme.
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/admin/tenants" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"ONG Solidarité Bénin\",
\"slug\": \"ong-solidarite-benin\",
\"country\": \"SN\",
\"currency\": \"XOF\",
\"plan\": \"free\",
\"status\": \"trial\"
}"
const url = new URL(
"https://api-assovix.gestiem.com/api/admin/tenants"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "ONG Solidarité Bénin",
"slug": "ong-solidarite-benin",
"country": "SN",
"currency": "XOF",
"plan": "free",
"status": "trial"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/admin/tenants';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'ONG Solidarité Bénin',
'slug' => 'ong-solidarite-benin',
'country' => 'SN',
'currency' => 'XOF',
'plan' => 'free',
'status' => 'trial',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (201, Tenant créé):
{
"success": true,
"message": "Tenant créé.",
"data": {
"id": "770e8400-e29b-41d4-a716-446655440000",
"name": "ONG Solidarité Bénin",
"slug": "ong-solidarite-benin",
"country": "SN",
"currency": "XOF",
"plan": "free",
"status": "trial",
"created_at": "2026-04-27T10:00:00+00:00"
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Non authentifié):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (422, Slug dupliqué):
{
"success": false,
"message": "Données invalides.",
"data": null,
"errors": {
"slug": [
"The slug has already been taken."
]
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Modifier un tenant
requires authentication
Met à jour les informations d'un tenant existant. Seuls les champs envoyés sont modifiés (comportement PATCH sur PUT).
Example request:
curl --request PUT \
"https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Tontine Les Amis v2\",
\"country\": \"CI\",
\"currency\": \"XOF\",
\"plan\": \"starter\",
\"locale\": \"fr\"
}"
const url = new URL(
"https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Tontine Les Amis v2",
"country": "CI",
"currency": "XOF",
"plan": "starter",
"locale": "fr"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Tontine Les Amis v2',
'country' => 'CI',
'currency' => 'XOF',
'plan' => 'starter',
'locale' => 'fr',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Tenant mis à jour):
{
"success": true,
"message": "Tenant mis à jour.",
"data": {
"id": "660e8400-e29b-41d4-a716-446655440000",
"name": "Tontine Les Amis v2",
"slug": "tontine-les-amis",
"country": "CI",
"currency": "XOF",
"plan": "starter",
"status": "trial"
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Non authentifié):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (404, Tenant introuvable):
{
"success": false,
"message": "Ressource introuvable.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Suspendre un tenant
requires authentication
Passe le statut du tenant à suspended.
Les utilisateurs du tenant recevront une erreur 403 sur chaque requête.
Example request:
curl --request PUT \
"https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000/suspend" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000/suspend"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PUT",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000/suspend';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Tenant suspendu):
{
"success": true,
"message": "Tenant suspendu.",
"data": {
"id": "660e8400-e29b-41d4-a716-446655440000",
"name": "Tontine Les Amis",
"slug": "tontine-les-amis",
"status": "suspended"
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Non authentifié):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (404, Tenant introuvable):
{
"success": false,
"message": "Ressource introuvable.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Activer un tenant
requires authentication
Passe le statut du tenant à active.
Rétablit l'accès complet à l'API pour les utilisateurs du tenant.
Example request:
curl --request PUT \
"https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000/activate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000/activate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PUT",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000/activate';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Tenant activé):
{
"success": true,
"message": "Tenant activé.",
"data": {
"id": "660e8400-e29b-41d4-a716-446655440000",
"name": "Tontine Les Amis",
"slug": "tontine-les-amis",
"status": "active"
},
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Non authentifié):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (404, Tenant introuvable):
{
"success": false,
"message": "Ressource introuvable.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Supprimer un tenant
requires authentication
Soft-delete du tenant. Les données sont conservées en base (deleted_at non null).
Cette action est réversible via une restauration manuelle.
Example request:
curl --request DELETE \
"https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/admin/tenants/660e8400-e29b-41d4-a716-446655440000';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Tenant supprimé):
{
"success": true,
"message": "Tenant supprimé.",
"data": null,
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (401, Non authentifié):
{
"success": false,
"message": "Non authentifié.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Example response (404, Tenant introuvable):
{
"success": false,
"message": "Ressource introuvable.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-04-27T10:00:00+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Member Groups
Liste des groupes
requires authentication
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/member-groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/member-groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/member-groups';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Créer un groupe
requires authentication
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/member-groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Bureau\",
\"description\": \"Rerum non doloribus aspernatur ad eius molestiae accusantium.\",
\"color\": \"#059669\",
\"parent_id\": null
}"
const url = new URL(
"https://api-assovix.gestiem.com/api/v1/member-groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Bureau",
"description": "Rerum non doloribus aspernatur ad eius molestiae accusantium.",
"color": "#059669",
"parent_id": null
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/member-groups';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Bureau',
'description' => 'Rerum non doloribus aspernatur ad eius molestiae accusantium.',
'color' => '#059669',
'parent_id' => null,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Modifier un groupe
requires authentication
Example request:
curl --request PUT \
"https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"vwgshl\",
\"description\": \"Rerum non doloribus aspernatur ad eius molestiae accusantium.\",
\"color\": \"#057Fce\",
\"parent_id\": \"a00372d2-8e4a-326e-8cb5-f40c121e1465\"
}"
const url = new URL(
"https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "vwgshl",
"description": "Rerum non doloribus aspernatur ad eius molestiae accusantium.",
"color": "#057Fce",
"parent_id": "a00372d2-8e4a-326e-8cb5-f40c121e1465"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'vwgshl',
'description' => 'Rerum non doloribus aspernatur ad eius molestiae accusantium.',
'color' => '#057Fce',
'parent_id' => 'a00372d2-8e4a-326e-8cb5-f40c121e1465',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Supprimer un groupe
requires authentication
Refusé si le groupe contient des membres (actifs ou supprimés).
Example request:
curl --request DELETE \
"https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Membres d'un groupe
requires authentication
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000/members" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000/members"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/member-groups/550e8400-e29b-41d4-a716-446655440000/members';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Members
Statistiques des membres
requires authentication
Retourne le total, la répartition par statut et par groupe, les nouveaux ce mois/année.
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/members/stats" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/stats"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/stats';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Exporter les membres en CSV
requires authentication
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/members/export?status=active&group_id=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/export"
);
const params = {
"status": "active",
"group_id": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/export';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'status' => 'active',
'group_id' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Télécharger le template CSV d'import
requires authentication
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/members/template" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/template"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/template';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Importer des membres depuis CSV
requires authentication
Importe des membres depuis un fichier CSV. Max 1000 lignes. Colonnes requises : first_name, last_name. Toutes les autres sont optionnelles.
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/members/import" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "file=@/tmp/phpp1mf123miqh60k0Ndre" const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/import"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/import';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'file',
'contents' => fopen('/tmp/phpp1mf123miqh60k0Ndre', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Liste des membres
requires authentication
Retourne la liste paginée des membres du tenant courant. Supporte la recherche, le filtrage et le tri.
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/members?search=Kofi&status=active&group_id=&sponsor_id=&joined_from=2026-01-01&joined_to=2026-12-31&sort=member_number&order=asc&per_page=25" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members"
);
const params = {
"search": "Kofi",
"status": "active",
"group_id": "",
"sponsor_id": "",
"joined_from": "2026-01-01",
"joined_to": "2026-12-31",
"sort": "member_number",
"order": "asc",
"per_page": "25",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Kofi',
'status' => 'active',
'group_id' => '',
'sponsor_id' => '',
'joined_from' => '2026-01-01',
'joined_to' => '2026-12-31',
'sort' => 'member_number',
'order' => 'asc',
'per_page' => '25',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Créer un membre
requires authentication
Crée un nouveau membre. Le numéro de membre est généré automatiquement. Envoyer les fichiers en multipart/form-data.
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/members" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "first_name=Kofi"\
--form "last_name=Mensah"\
--form "email=kofi@example.com"\
--form "phone=+22997000000"\
--form "gender=M"\
--form "birth_date=1990-01-15"\
--form "address=wgshlz"\
--form "city=aedjxa"\
--form "country=BJ"\
--form "profession=izxgnx"\
--form "status=pending"\
--form "group_id="\
--form "sponsor_id=4b9c5595-1c58-3e6a-9a54-8e9361992634"\
--form "joined_at=2026-05-04T13:50:09"\
--form "notes=architecto"\
--form "photo=@/tmp/phplpmhm1q3qb1be2fPotQ" \
--form "id_card=@/tmp/phpld6dgoqkoiso5PfQU1Z" const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('first_name', 'Kofi');
body.append('last_name', 'Mensah');
body.append('email', 'kofi@example.com');
body.append('phone', '+22997000000');
body.append('gender', 'M');
body.append('birth_date', '1990-01-15');
body.append('address', 'wgshlz');
body.append('city', 'aedjxa');
body.append('country', 'BJ');
body.append('profession', 'izxgnx');
body.append('status', 'pending');
body.append('group_id', '');
body.append('sponsor_id', '4b9c5595-1c58-3e6a-9a54-8e9361992634');
body.append('joined_at', '2026-05-04T13:50:09');
body.append('notes', 'architecto');
body.append('photo', document.querySelector('input[name="photo"]').files[0]);
body.append('id_card', document.querySelector('input[name="id_card"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'first_name',
'contents' => 'Kofi'
],
[
'name' => 'last_name',
'contents' => 'Mensah'
],
[
'name' => 'email',
'contents' => 'kofi@example.com'
],
[
'name' => 'phone',
'contents' => '+22997000000'
],
[
'name' => 'gender',
'contents' => 'M'
],
[
'name' => 'birth_date',
'contents' => '1990-01-15'
],
[
'name' => 'address',
'contents' => 'wgshlz'
],
[
'name' => 'city',
'contents' => 'aedjxa'
],
[
'name' => 'country',
'contents' => 'BJ'
],
[
'name' => 'profession',
'contents' => 'izxgnx'
],
[
'name' => 'status',
'contents' => 'pending'
],
[
'name' => 'group_id',
'contents' => ''
],
[
'name' => 'sponsor_id',
'contents' => '4b9c5595-1c58-3e6a-9a54-8e9361992634'
],
[
'name' => 'joined_at',
'contents' => '2026-05-04T13:50:09'
],
[
'name' => 'notes',
'contents' => 'architecto'
],
[
'name' => 'photo',
'contents' => fopen('/tmp/phplpmhm1q3qb1be2fPotQ', 'r')
],
[
'name' => 'id_card',
'contents' => fopen('/tmp/phpld6dgoqkoiso5PfQU1Z', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Détail d'un membre
requires authentication
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Modifier un membre
requires authentication
Example request:
curl --request PUT \
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "first_name=vwgshl"\
--form "last_name=zaedjx"\
--form "email=rosenbaum.javonte@example.com"\
--form "phone=xgnxor"\
--form "gender=F"\
--form "birth_date=2026-03-12"\
--form "address=wgshlz"\
--form "city=aedjxa"\
--form "country=uu"\
--form "profession=izxgnx"\
--form "group_id=5b0c0231-0539-3fcd-86ff-38b36e835b89"\
--form "sponsor_id=4b9c5595-1c58-3e6a-9a54-8e9361992634"\
--form "joined_at=2026-05-04T13:50:09"\
--form "notes=architecto"\
--form "photo=@/tmp/phptoen5fts82a3cVdrNtV" \
--form "id_card=@/tmp/phppnn0durqe4jueR6lxOg" const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('first_name', 'vwgshl');
body.append('last_name', 'zaedjx');
body.append('email', 'rosenbaum.javonte@example.com');
body.append('phone', 'xgnxor');
body.append('gender', 'F');
body.append('birth_date', '2026-03-12');
body.append('address', 'wgshlz');
body.append('city', 'aedjxa');
body.append('country', 'uu');
body.append('profession', 'izxgnx');
body.append('group_id', '5b0c0231-0539-3fcd-86ff-38b36e835b89');
body.append('sponsor_id', '4b9c5595-1c58-3e6a-9a54-8e9361992634');
body.append('joined_at', '2026-05-04T13:50:09');
body.append('notes', 'architecto');
body.append('photo', document.querySelector('input[name="photo"]').files[0]);
body.append('id_card', document.querySelector('input[name="id_card"]').files[0]);
fetch(url, {
method: "PUT",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'first_name',
'contents' => 'vwgshl'
],
[
'name' => 'last_name',
'contents' => 'zaedjx'
],
[
'name' => 'email',
'contents' => 'rosenbaum.javonte@example.com'
],
[
'name' => 'phone',
'contents' => 'xgnxor'
],
[
'name' => 'gender',
'contents' => 'F'
],
[
'name' => 'birth_date',
'contents' => '2026-03-12'
],
[
'name' => 'address',
'contents' => 'wgshlz'
],
[
'name' => 'city',
'contents' => 'aedjxa'
],
[
'name' => 'country',
'contents' => 'uu'
],
[
'name' => 'profession',
'contents' => 'izxgnx'
],
[
'name' => 'group_id',
'contents' => '5b0c0231-0539-3fcd-86ff-38b36e835b89'
],
[
'name' => 'sponsor_id',
'contents' => '4b9c5595-1c58-3e6a-9a54-8e9361992634'
],
[
'name' => 'joined_at',
'contents' => '2026-05-04T13:50:09'
],
[
'name' => 'notes',
'contents' => 'architecto'
],
[
'name' => 'photo',
'contents' => fopen('/tmp/phptoen5fts82a3cVdrNtV', 'r')
],
[
'name' => 'id_card',
'contents' => fopen('/tmp/phppnn0durqe4jueR6lxOg', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Supprimer un membre (soft delete)
requires authentication
Example request:
curl --request DELETE \
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Restaurer un membre supprimé
requires authentication
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/restore" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/restore"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/restore';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Changer le statut d'un membre
requires authentication
Example request:
curl --request PUT \
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/status" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"active\",
\"reason\": \"Cotisations à jour\"
}"
const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/status"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"status": "active",
"reason": "Cotisations à jour"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/status';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'status' => 'active',
'reason' => 'Cotisations à jour',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Télécharger la carte membre PDF
requires authentication
Génère et retourne la carte membre au format PDF (A6 paysage). Le QR code intégré pointe vers l'endpoint de vérification publique.
Example request:
curl --request GET \
--get "https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/card" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/card"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/card';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200, Carte PDF):
file {"description": "Fichier PDF de la carte membre"}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Régénérer le token QR code de la carte
requires authentication
Invalide l'ancien QR code et génère un nouveau token.
Example request:
curl --request POST \
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/card/regenerate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "X-Tenant-Slug: demo" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/card/regenerate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"X-Tenant-Slug": "demo",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-assovix.gestiem.com/api/v1/members/550e8400-e29b-41d4-a716-446655440000/card/regenerate';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'X-Tenant-Slug' => 'demo',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"success": false,
"message": "Erreur serveur.",
"data": null,
"errors": [],
"meta": {
"timestamp": "2026-05-04T13:50:09+00:00",
"version": "v1"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.