Démarrer#
De la clé au premier appel en cinq minutes, puis le chemin vers la production.
1. Obtenir une clé de bac à sable#
Les clés sont émises par ELRM. Demandez une clé bac à sable à votre interlocuteur (ou à support@elrm.app) : vous recevez un lien à usage unique qui affiche le jeton une seule fois. Copiez-le dans un coffre à secrets, il ne peut pas être récupéré ensuite, seulement remplacé.
Une clé de bac à sable commence par pk_test_, une clé de production par pk_live_. Le jeton complet a la forme :
pk_test_3f9a1c2b7d4e.Wq8dL0zj0m3kV1cZ5nQ7Yx2pB4tR6sA9uH8gF1eD0iK
└──────┬──────┘ └──────────────────┬──────────────────┘
identifiant secret
2. Premier appel#
curl "https://developer.elrm.app/sandbox/v1/formations/sessions?available_only=true&limit=5" \
-H "Authorization: Bearer pk_test_…"
import httpx
client = httpx.Client(
base_url="https://developer.elrm.app/sandbox/v1",
headers={"Authorization": "Bearer pk_test_…"},
)
sessions = client.get("/formations/sessions", params={"available_only": True, "limit": 5}).json()
for s in sessions["items"]:
print(s["numero"], s["date_debut"], s["available_slots"])
const BASE = "https://developer.elrm.app/sandbox/v1";
const headers = { Authorization: "Bearer pk_test_…" };
const res = await fetch(`${BASE}/formations/sessions?available_only=true&limit=5`, { headers });
const { items } = await res.json();
for (const s of items) console.log(s.numero, s.date_debut, s.available_slots);
<?php
$ch = curl_init("https://developer.elrm.app/sandbox/v1/formations/sessions?available_only=true&limit=5");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer pk_test_…"],
]);
$sessions = json_decode(curl_exec($ch), true);
foreach ($sessions["items"] as $s) {
echo $s["numero"], " ", $s["date_debut"], " ", $s["available_slots"], PHP_EOL;
}
Réponse (extrait) :
{
"items": [
{
"numero": "S-2026-0412",
"formation_label": "CACES® R482, Engins de chantier",
"date_debut": "2026-09-14",
"date_fin": "2026-09-18",
"horaires": "8h30 – 17h00",
"centre_label": "Centre de Gennevilliers",
"is_caces": true,
"caces_recommendation": "R482",
"caces_categories": ["A", "C1"],
"statut": "planifiee",
"capacite_max": 8,
"available_slots": 5
}
],
"total": 27,
"limit": 5,
"offset": 0
}
Chaque réponse porte un en-tête X-Trace-Id. Si quelque chose ne va pas, c'est la valeur à nous transmettre.
3. Vérifier sa clé#
Une clé est rattachée à un client : le vôtre. Tout ce qui est nominatif (dossiers, apprenants, documents, analyses) porte implicitement sur lui, sans identifiant à passer dans les URLs. Pour vérifier que la clé configurée est la bonne :
curl https://developer.elrm.app/sandbox/v1/me -H "Authorization: Bearer pk_test_…"
{ "id": "5b3c2f4e-…", "nom": "CERTALIS", "siret": "…" }
Sur le bac à sable, c'est un client fictif créé pour vous, avec la même remise que votre client réel.
4. Construire l'intégration#
Suivez les guides dans l'ordre :
- Consulter le catalogue, formations, offres aux prix remisés, sessions ouvertes.
- De l'analyse du besoin au dossier, le cœur du parcours.
- Inscrire et répartir les apprenants.
- Suivre un dossier, événements, documents.
Avant d'écrire la moindre requête POST, lisez Idempotence et concurrence : dix lignes qui évitent les doublons de dossiers après un timeout.
5. Passer en production#
Quand votre intégration est validée sur le bac à sable :
- Demandez une clé production (
pk_live_…) à ELRM, avec les mêmes portées. - Remplacez l'URL de base :
https://developer.elrm.app/sandbox/v1→https://prod.elrm.app/api/v1/partner. Les chemins sont identiques. - Vérifiez avec
GET /me: en production, c'est votre vrai client.
Une clé pk_test_ refusée en production répond 401 comme n'importe quelle clé inconnue. C'est voulu : l'API ne donne pas d'indice sur la raison d'un refus. Si vous voyez des 401 juste après une mise en production, vérifiez d'abord le préfixe de votre clé.