Documentation
Tout ce qu'il faut pour connecter une application front à un coffre : stockage JSON, sessions multijoueurs et temps réel. La référence API complète (Swagger) détaille chaque endpoint.
1. Le coffre
Chaque application dispose d'un coffre identifié par un token
axm_…. Ce token part dans le header X-API-Key de chaque requête ;
il n'y a ni cookie ni session. Créez un coffre depuis votre
espace connecté et copiez son token.
2. Stocker : lire & écrire le payload
Le coffre contient un seul document JSON (objet ou tableau, structure libre).
const API = 'https://hub.exemple.fr/api';
const TOKEN = 'axm_votre_token_ici';
// Lire
const { payload } = await fetch(`${API}/storages`, {
headers: { 'X-API-Key': TOKEN },
}).then(r => r.json());
// Écrire (REMPLACE tout le payload, ce n'est pas un merge)
await fetch(`${API}/storages`, {
method: 'POST',
headers: { 'X-API-Key': TOKEN, 'Content-Type': 'application/json' },
body: JSON.stringify({ score: 42 }),
});
| 200 | {"payload": {...}} — les données du coffre |
| 401 | Header X-API-Key absent |
| 403 | Origine refusée, ou écriture sur un coffre verrouillé |
| 404 | Token inconnu, ou coffre désactivé |
| 422 | Corps non-JSON, ou payload scalaire |
3. Restreindre les origines
Par défaut un coffre répond à toutes les origines. Ajoutez des règles d'accès
(url exacte, wildcard https://*.monjeu.fr, ou regex) sur la page du coffre pour
limiter les sites autorisés. Le CORS est géré automatiquement par le hub.
4. Sessions & temps réel
Pour le multijoueur, ouvrez une session (partie/lobby). Le créateur en devient l'admin et le premier participant ; les autres rejoignent avec l'id de session. Chaque membre reçoit un secret à conserver.
// Créer une session (→ admin + 1er participant)
const s = await fetch(`${API}/sessions`, {
method: 'POST',
headers: { 'X-API-Key': TOKEN, 'Content-Type': 'application/json' },
body: JSON.stringify({ ownerId: 'client-abc', owner: { pseudo: 'Alice' } }),
}).then(r => r.json());
// → s.session.id (à partager), s.participant.secret, s.ownerSecret
// Rejoindre (password requis si la session en a un)
const j = await fetch(`${API}/sessions/${s.session.id}/join`, {
method: 'POST',
headers: { 'X-API-Key': TOKEN, 'Content-Type': 'application/json' },
body: JSON.stringify({ pseudo: 'Bob' }),
}).then(r => r.json());
// → j.participant.secret (à conserver, jamais renvoyé une 2e fois)
Chaque session gère deux payloads : un partagé (lu par tous,
écrit par l'admin via GET/PUT /sessions/{id}) et un perso par
participant (lu/écrit par lui-même, ou par l'admin si le coffre l'autorise, via
GET/PUT /sessions/{id}/participants/{id}). L'admin peut aussi
DELETE la session, lister tous les payloads (GET /participants) et
expulser un participant (DELETE /participants/{id}) si le coffre l'autorise ;
détail complet dans la référence Swagger.
Le temps réel (si activé sur le coffre) passe par trois canaux :
| public | Diffusion à toute la session (tout membre publie). |
| admin | Privé entre l'admin et un participant. |
| inbox | Message direct vers un participant. |
// S'abonner : le hub ne délivre un ticket que pour vos canaux autorisés
const sub = await fetch(`${API}/sessions/${sessionId}/realtime/subscribe`, {
headers: { 'X-API-Key': TOKEN, 'X-Participant-Secret': secret },
}).then(r => r.json());
new EventSource(sub.subscribeUrl).onmessage = (e) => {
const { channel, event, data, from } = JSON.parse(e.data);
// router sur channel + event ; `from` = id du participant, ou "admin"
};
// Publier sur le canal public
await fetch(`${API}/sessions/${sessionId}/realtime/publish`, {
method: 'POST',
headers: { 'X-API-Key': TOKEN, 'X-Participant-Secret': secret, 'Content-Type': 'application/json' },
body: JSON.stringify({ channel: 'public', event: 'chat.message', data: { text: 'coucou' } }),
});
Guide d'intégration détaillé (sessions, participants, mots de passe, expiration) : voir la référence API.
5. Documentation pour IA
Vous faites développer votre app par un assistant IA (Claude, Copilot…) ? Collez le
guide ci-dessous dans son contexte (ou dans un CLAUDE.md / AGENTS.md
du projet front) : il contient tout ce qu'il faut pour lire/écrire des données et faire
du temps réel avec ce coffre, sans accès au code du hub. L'URL de ce hub y est déjà
renseignée. Toujours disponible en texte brut sur /llms.txt.