Doc fonctionnelle : décrit le quoi et le pourquoi (point de vue utilisateur / chef de projet).
SYELLA est notre distributeur (CSP Microsoft). Son portail Marketplace tourne sur la plateforme CloudCockpit, qui expose une API REST. L'enjeu pour Isi-APP : ne plus maintenir les tarifs Microsoft dans Excel mais les récupérer à la source pour alimenter les devis, puis, à terme, rapprocher les abonnements des clients et éventuellement automatiser les commandes.
Un écran d'administration — /admin/syella — permet dès aujourd'hui de tester l'API avec un
couple d'identifiants et de lire la documentation de la plateforme sans quitter Isi-APP.
| Domaine | Contenu |
|---|---|
| Catalogue & tarifs | Offres CSP Microsoft, prix de revente marges incluses |
| Clients | Clients finaux du revendeur, leurs licences, leurs domaines |
| Abonnements | Quantités, dates de terme, renouvellements à venir, éligibilités |
| Facturation | Factures et lignes de facture (licences, one-time, usage) |
| Commandes | Création de commande — en écriture, hors périmètre des clés actuelles |
| Audit | Journal des opérations réalisées sur le portail et via l'API |
/admin/syellaRéservé aux développeurs (la page manipule les identifiants d'API du partenaire, qui ne sont pas cloisonnés par entité). Deux onglets :
Bac à sable — saisie du Client ID, du Client Secret et du header X-Tenant, puis :
curl
équivalente ;Documentation — à quoi sert l'API, le flux d'authentification, les familles d'endpoints, les conventions (pagination, énumérations, codes d'erreur), la trajectoire d'intégration envisagée et les liens vers la documentation officielle.
GET) sont proposés, et le client HTTP refuse
tout autre verbe. Aucune commande ne peut partir depuis cet écran.csp, reseller, customerL'API attribue un rôle au contexte des identifiants, et chaque endpoint déclare les rôles qui y ont accès. Nos clés sont un contexte revendeur, donc une partie du catalogue est structurellement hors d'atteinte :
| Appel | Rôles autorisés |
|---|---|
| Revendeurs, Profil MPN, Tous les abonnements | csp seulement — inaccessible avec nos clés |
| Liste des clients, Journaux d'audit | csp, reseller |
| Synthèse tableau de bord, Prix de revente d'une offre | csp, reseller, customer |
| Providers, Instances, Catalogue des offres, Factures… | aucune restriction déclarée |
L'écran affiche ces rôles à côté de chaque appel et prévient explicitement quand un appel est réservé
au csp : un refus sur ceux-là est normal, ce n'est pas un défaut de configuration.
| Profil | Accès à /admin/syella |
|---|---|
Développeur (liste isDeveloper()) |
✅ |
| Administrateur ISI non développeur | ❌ 403 |
| Session d'assistance (impersonation client) | ❌ 403 — la garde suit l'acteur, pas l'assistant connecté |
| Autre profil | ❌ arrêté par le middleware isi-admin |
client_id / client_secret) sont émises par SYELLA : la création d'un « API
Access » est réservée au CSP.X-Tenant (piège à connaître)La valeur attendue est le domaine du portail : syella.cloudcockpit.com — confirmé par SYELLA le
30/07/2026, et valeur par défaut de l'écran. Si un jour nous passons en marque blanche avec notre
propre domaine, c'est ce nouveau domaine qu'il faudra mettre (variable SYELLA_TENANT).
Toute autre valeur — ou l'absence du header — fait répondre à la plateforme
500 DependencyResolutionException sur tous les endpoints, avant même la vérification de
l'authentification. Un 500 sur toute la ligne se lit donc « mauvais tenant », pas « panne » ; à
l'inverse un 401 indique que le tenant est bon et que seul le token est en cause.
Chaque appel émis par Isi-APP porte un X-Correlation-Id, et l'écran affiche l'identifiant de
corrélation renvoyé par la plateforme : c'est ce qu'il faut communiquer au support SYELLA pour faire
retrouver un appel dans leurs journaux.
apiAccess) mais l'API refuse tous les appels
en 401, en indiquant que l'issuer du tenant Azure imposé par sa propre documentation est
invalide, et qu'un de ses schémas d'authentification n'a pas d'audience configurée. Rien à
corriger côté Isi-APP : l'écran affiche le motif exact et le Correlation Id à leur transmettre ;invoiceType ;Doc technique associée :
.claude/technical-docs/integrations/syella-cloudcockpit-api.md.