ONIR CMS
Référence

API

API server-to-server, isolée par organisation et limitée par scopes. Les clés sont créées dans le backoffice par un administrateur et ne doivent jamais être exposées dans un navigateur.

Ouvrir Swagger

Créer une clé

Dans le backoffice : Clés API → Créer une clé API. Le secret est affiché une seule fois. Une clé est limitée à l’organisation active de l’administrateur qui la crée ; elle ne change jamais d’organisation.

curl "https://cms-backoffice.onirtech.com/api/v1/fiches?limit=25" \
  -H "Authorization: Bearer onir_live_..."

Rechercher des fiches

GET /api/v1/fiches
Authorization: Bearer onir_live_...

?q=Antananarivo
&templateKey=partenaires-onir-cms
&createdFrom=2026-01-01T00:00:00.000Z
&createdTo=2026-12-31T23:59:59.999Z
&includeArchived=false
&limit=25
&sort=createdAt:desc
&cursor=...

Filtres disponibles :

  • q : recherche plein texte dans les données de la fiche ;
  • templateKey, templateVersion : modèle de fiche ;
  • createdFrom, createdTo : dates ISO 8601 ;
  • prospectId, conversationId, linkId : UUID ;
  • includeArchived : true pour inclure les fiches archivées ;
  • limit : 1 à 100, défaut 25 ;
  • sort : createdAt:desc ou createdAt:asc ;
  • cursor : curseur opaque retourné dans pagination.nextCursor.

Lire une fiche

GET /api/v1/fiches/:id
Authorization: Bearer onir_live_...

Médias — photothèque et liens

Scopes : medias:read et medias:write. La liste acceptetype=photo|lien, active, chatbotId, q,limit, sort et cursor.

GET  /api/v1/medias?type=photo&active=true&chatbotId=...
POST /api/v1/medias
     Content-Type: application/json
     { "libelle": "Visuel accueil", "url": "https://...", "actif": true }

POST /api/v1/medias
     Content-Type: multipart/form-data
     fichier=@image.webp, libelle=Visuel accueil, chatLinkIds=...

PATCH  /api/v1/medias/:id
DELETE /api/v1/medias/:id

Une photo renvoie aussi fileUrl vers/api/v1/medias/:id/file, à appeler avec la même clé API. Les URL et clés de stockage internes ne sont jamais exposées.

Connaissances

Scopes : connaissances:read et connaissances:write. La liste accepte active, chatbotId, q, limit,sort et cursor.

GET  /api/v1/connaissances?chatbotId=...
POST /api/v1/connaissances
     { "titre": "Délais", "contenu": "…", "chatLinkIds": [] }

GET    /api/v1/connaissances/:id
PATCH  /api/v1/connaissances/:id
DELETE /api/v1/connaissances/:id

Isolation et limites

Toutes les requêtes sont automatiquement filtrées par l’organisation de la clé. Un accès à une fiche d’une autre organisation renvoie 404 pour ne pas révéler son existence.

Limite par clé : 60 requêtes/minute et 1 000 requêtes/heure. En cas de dépassement :429 avec Retry-After.

Erreurs

{
  "error": {
    "code": "invalid_api_key",
    "message": "Clé d’API invalide"
  }
}

Codes possibles : invalid_api_key, insufficient_scope,invalid_request, not_found, rate_limited,internal_error.