DRAFT — Preliminary version, do not share. · Version préliminaire, ne pas partager.

Public API

La Public API est l'API REST qui se trouve derrière le Hub et la CLI fun : une seule API, avec un seul token, pour gérer votre parc, vos données, vos alertes et les accès. Cette page présente l'URL de base, la manière de vous authentifier, l'emplacement des spécifications OpenAPI, ainsi qu'une cartographie des opérations par domaine.

URL de base et versions

Élément Valeur
URL de base https://api.fundamentum-iot.com
v1 Chemins sous /v1/projects/{projectId}/... : appareils et parcs, acheminement des données, alertes
v2 Chemins sous /v2/... : organisations, projets, contrôle d'accès, registres, fonctions, Insight, licences

Les deux versions sont actuelles et complémentaires : chaque domaine relève de l'une d'elles. Utilisez le même token pour les deux.

Authentification

Envoyez un token bearer OAuth2 avec chaque requête :

GET /v2/users/introspect HTTP/1.1
Host: api.fundamentum-iot.com
Authorization: Bearer $TOKEN

Le token est soit un token utilisateur (obtenu avec fun login ou votre propre client OAuth), soit un token de compte de service pour les intégrations. Consultez Authentification.

Une erreur 401 signifie que le token est absent, expiré ou destiné à un autre environnement. Une erreur 403 avec un token valide signifie que votre rôle ne dispose pas de la permission requise. Les informations d'identification des appareils (JWT d'appareil, clé de provisionnement) ne sont jamais acceptées ici.

Spécifications OpenAPI et Swagger UI

Version Spécification Swagger UI
v1 /v1/api/swagger.json (également /v1/openapi.yaml) Swagger UI v1
v2 /v2/api/openapi.json (également /v2/openapi.json et /v2/openapi.yaml) Swagger UI v2

Chaque domaine ci-dessous renvoie vers sa section dans Swagger UI, où vous pouvez vous connecter et tester des requêtes. Les deux spécifications sont au format OpenAPI 3.1. Elles constituent la référence pour chaque champ, paramètre et réponse ; cette page ne fait que les résumer.

Domaines

Appareils et parcs

Domaine Swagger UI Chemins principaux
Appareils v1 · Device devices, devices/summaries, devices/{deviceId}/authentication
États v1 · Device devices/{deviceId}/states, last-states, state-types
Heartbeats v1 · Heartbeat devices/{deviceId}/heartbeats, last-heartbeats, registries/{registryId}/heartbeats, heartbeats, device-types/{deviceTypeId}/heartbeats/config
Types d'appareils et micrologiciel v1 · Device Type device-types, device-types/{deviceTypeId}/versions (une version correspond à une publication de micrologiciel), versions/{versionId}/files
Commandes v1 · Commands device/{deviceId}/commands/{shortName}, registries/{registryId}/batch-commands (lots et leur rapport)
Actions v1 · Action action-types, registries/{registryId}/actions, actions/{actionId}:cancel, :retry, devices/{deviceId}/actions
Capabilities et encodeurs v1 · Capability capabilities, capabilities/{capabilityId}/encoders, encoders, encoder-protocols
Transferts de fichiers v1 · FileTransfers transfers, transfers/{transferId}/files, history, :execute, :cancel
Registres v1 registries, registries/{registryId}/topics, registries/{registryId}/configuration

Le terminal distant et la redirection de ports sont disponibles depuis le Hub et la CLI fun. Ils ne font pas partie des spécifications publiées. Consultez Terminal distant et redirection de ports.

Données

Domaine Swagger UI Chemins principaux
Topics v1 · PubSub pub-sub-topics, pub-sub-topics/scopeable, pub-sub-topics/{scopeableTopic}/scoped
Connecteurs v1 · PubSub connectors, connectors/{connectorId}/links, connectors/{connectorId}/status
Messages HTTPS entrants v1 · PubSub POST connectors/{connectorId}/links/{linkId}/publish
Fonctions cloud v2 · Functions /v2/projects/{project_id}/functions, executions, file (téléversement), :invoke
Insight v2 · Insight /v2/projects/{project_id}/instances, pipelines (:submit, :cancel), tables, utilisateurs

Consultez Topics, Connecteurs, Flux entrants, Fonctions cloud et Interroger vos données avec Insight.

Alertes

Domaine Swagger UI Chemins principaux
Règles d'alerte et alertes v1 · Alert alert-rules, alert-rules/{alertRuleId}/alerts, devices/{deviceId}/alerts, alerts/{alertId}:resolve
Notifications v2 · Projects: Alert Notifier /v2/projects/{project_id}/alert-rules/{alert_rule_id}/notifiers
Utilisateurs notifiables v1 · Alert notifiable

Consultez Alertes.

Gouvernance

Domaine Swagger UI Chemins principaux
Organisations v2 · Organizations /v2/organizations
Projets v2 · Projects /v2/organizations/{organization_id}/projects
Registres v2 /v2/projects/{project_id}/registries, registries/{registry_id}/device_types (quotas), registries/{registry_id}/topics
Utilisateurs et invitations v2 · Projects: Users/Invitations /v2/projects/{project_id}/users
Rôles et permissions v2 · Authorization: Containers /v2/projects/{project_id}/containers, avec leurs actions, roles et permissions
Comptes de service v2 · Service Accounts /v2/projects/{project_id}/service-accounts, avec les rôles et les tokens
Licences v2 · Licenses /v2/projects/{project_id}/licenses, utilisateurs de licence et de site
Feature flags v2 · Features Flags /v2/projects/{project_id}/features/{code}
Utilisateur courant v2 · Users GET /v2/users/introspect

Un registre créé via la v2 prend un name et une fenêtre de provisionnement (provisioning_start_at, provisioning_end_at, horodatages RFC 3339). Les appareils ne peuvent y être provisionnés qu'à l'intérieur de cette fenêtre. Ses quotas, c'est-à-dire le nombre d'appareils de chaque type d'appareil pouvant y être provisionnés, sont définis avec POST /v2/projects/{project_id}/registries/{registry_id}/device_types :

{
  "ids": {
    "<device-type-id>": { "provisioning_quantity": 100 }
  }
}

Consultez Licences et Rôles et permissions.

Appeler l'API

Avec la CLI fun, chaque opération est disponible sous la forme fun api <version> <group> <operation> :

fun api refresh
fun api v1 device list-devices --project-id <project-id> --data-only
fun api v2 registries list-registries --project-id <project-id>

Avec curl :

curl -H "Authorization: Bearer $TOKEN" \
  "https://api.fundamentum-iot.com/v1/projects/<project-id>/devices?page=1&item_per_page=25"

Les réponses, les erreurs, la pagination et les filtres suivent les Conventions.

Générer un client

Pointez n'importe quel générateur OpenAPI 3.1 vers l'URL de la spécification. Par exemple, avec OpenAPI Generator :

curl -o fundamentum-v2.json https://api.fundamentum-iot.com/v2/api/openapi.json
openapi-generator-cli generate -i fundamentum-v2.json -g python -o ./fundamentum-client

Générez un client par version, ou fusionnez-les dans votre build. Configurez le client pour qu'il envoie Authorization: Bearer <token>.

Étapes suivantes