Aller au contenu principal

API REST SmartDoc (/api/v1/)

L'API REST SmartDoc fournit un acces CRUD complet a toutes les entites de documentation. Tous les endpoints requierent une authentification par cle API.

Authentification

Toutes les requetes doivent inclure la cle API dans l'en-tete Authorization :

curl -H "Authorization: Bearer sk-smartdoc-VOTRE_CLE_ICI" \
https://smartdoc.mspsmart.ca/api/v1/companies

URL de base

https://smartdoc.mspsmart.ca/api/v1/

Documentation interactive

La documentation Swagger UI est disponible a :

https://smartdoc.mspsmart.ca/api/v1/docs/

Elle permet de visualiser tous les endpoints et de les tester directement depuis le navigateur.


Endpoints communs

Chaque entite expose jusqu'a 5 endpoints standards :

MethodeEndpointDescriptionScope requis
GET/{entite}Lister avec paginationread-only
GET/{entite}/{id}Obtenir par IDread-only
POST/{entite}Creerread-write
PATCH/{entite}/{id}Modifierread-write
DELETE/{entite}/{id}Supprimerfull-access

Endpoints speciaux

MethodeEndpointDescription
GET/search?q=keywordRecherche cross-entites
GET/whoamiInformations sur la cle API

Parametres de liste (GET)

Tous les endpoints de liste acceptent les parametres suivants :

ParametreTypeDefautDescription
pagenumber1Numero de page
limitnumber25Elements par page (max: 100)
sort_bystringvarieColonne de tri
sort_orderasc | descdescOrdre de tri
searchstringRecherche textuelle (ILIKE)
company_idUUIDFiltrer par compagnie
statusstringFiltrer par statut

Exemple

curl -H "Authorization: Bearer sk-smartdoc-..." \
"https://smartdoc.mspsmart.ca/api/v1/assets?page=1&limit=10&search=server&sort_by=name&sort_order=asc"

Format de reponse

Liste

{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"tenantId": "...",
"name": "Serveur principal",
"status": "active",
"createdAt": "2026-01-15T10:30:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 142,
"totalPages": 6
}
}

Element unique

{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"tenantId": "...",
"name": "Serveur principal",
"hostname": "SRV-PROD-01",
"status": "active"
}
}

Erreur

{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}

Reference des entites

Contenu

Documents (/api/v1/documents)

Gestion des documents de documentation client.

ChampTypeDescription
idUUIDIdentifiant unique
companyIdUUIDCompagnie associee
titlestringTitre du document
descriptionstringDescription
contentstringContenu HTML
statusstringStatut (draft, published, archived)
accessLevelstringNiveau d'acces
documentTypeIdUUIDType de document
folderIdUUIDDossier parent
tagsstring[]Tags associes
viewCountnumberNombre de consultations
createdAtdatetimeDate de creation

Tri possible : title, created_at, updated_at, status Recherche : title, description

Types de documents (/api/v1/document-types)

Definitions des categories de documents.

ChampTypeDescription
idUUIDIdentifiant unique
namestringNom du type
slugstringIdentifiant URL
categorystringCategorie
iconstringIcone
colorstringCouleur
sortOrdernumberOrdre d'affichage

Articles KB (/api/v1/kb-articles)

Articles de la base de connaissances.

ChampTypeDescription
idUUIDIdentifiant unique
companyIdUUIDCompagnie
titlestringTitre de l'article
contentstringContenu HTML
statusstringStatut
categoryIdUUIDCategorie KB
isPublicbooleanVisible publiquement
isFeaturedbooleanMis en avant

Categories KB (/api/v1/kb-categories)

Categories de la base de connaissances.

Changelogs (/api/v1/changelogs)

Historique des modifications d'infrastructure.


Securite

Identifiants (/api/v1/credentials)

Coffre-fort d'identifiants. Les champs sensibles (password_encrypted, notes_encrypted, etc.) ne sont jamais exposes via l'API.

ChampTypeDescription
idUUIDIdentifiant unique
companyIdUUIDCompagnie
namestringNom de l'identifiant
credentialTypestringType (password, api_key, ssh_key, etc.)
usernamestringNom d'utilisateur
urlstringURL de connexion
statusstringStatut (active, expired, revoked)
passwordStrengthstringForce du mot de passe
accessCountnumberNombre d'acces
Champs chiffres exclus

Les champs contenant des secrets chiffres (password_encrypted, notes_encrypted, totp_secret_encrypted, etc.) ne sont jamais retournes par l'API pour des raisons de securite.

VPN (/api/v1/vpn)

Configurations VPN (sans mots de passe/PSK chiffres).

WiFi (/api/v1/wifi)

Reseaux WiFi (sans mots de passe chiffres).


IT Assets

Actifs (/api/v1/assets)

Inventaire complet des actifs IT.

ChampTypeDescription
idUUIDIdentifiant unique
companyIdUUIDCompagnie
namestringNom de l'actif
hostnamestringNom d'hote
serialNumberstringNumero de serie
assetTagstringEtiquette d'actif
statusstringStatut
locationstringEmplacement
ipAddressesstring[]Adresses IP
macAddressesstring[]Adresses MAC
specsobjectSpecifications materielles
warrantyExpirydateExpiration de garantie

Tri : name, hostname, created_at, updated_at, status Recherche : name, hostname, serial_number, asset_tag

Types d'actifs (/api/v1/asset-types)

Definitions des categories d'actifs.

Certificats (/api/v1/certificates)

Certificats SSL/TLS (sans cles privees chiffrees).

ChampTypeDescription
idUUIDIdentifiant unique
namestringNom
domainstringDomaine
commonNamestringCN du certificat
issuerstringAutorite de certification
validFromdateDate de debut
validUntildateDate d'expiration

Applications (/api/v1/applications)

Licences logicielles (sans cles de licence chiffrees).

ChampTypeDescription
idUUIDIdentifiant unique
namestringNom du logiciel
vendorstringEditeur
versionstringVersion
licenseSeatsnumberNombre de licences
licenseSeatsUsednumberLicences utilisees
expiryDatedateDate d'expiration
costnumberCout

Numeros de serie (/api/v1/serials)

Garanties et suivi materiel (sans numeros de serie chiffres).

Racks (/api/v1/racks)

Disposition physique des equipements serveur.

ChampTypeDescription
idUUIDIdentifiant unique
namestringNom du rack
locationNamestringEmplacement
totalUnitsnumberUnites totales
usedUnitsFrontnumberUnites utilisees (avant)
usedUnitsRearnumberUnites utilisees (arriere)
powerCapacityWattsnumberCapacite electrique

Reseau

Diagrammes reseau (/api/v1/network-diagrams)

Topologies et schemas visuels.

ChampTypeDescription
idUUIDIdentifiant unique
namestringNom du diagramme
diagramTypestringType de diagramme
engineTypestringMoteur de rendu
thumbnailUrlstringMiniature

Organisation

Compagnies (/api/v1/companies)

Gestion des compagnies clientes.

ChampTypeDescription
idUUIDIdentifiant unique
namestringNom de la compagnie
identifierstringIdentifiant interne
statusstringStatut
phonestringTelephone
websitestringSite web
citystringVille

Tri : name, created_at, updated_at, status Recherche : name, identifier

Tags (/api/v1/tags)

Systeme de tags transversal.

Dossiers (/api/v1/folders)

Arborescence de dossiers pour organiser les entites.

Relations entre entites (ex : un document lie a un actif).

Accords (/api/v1/agreements)

Contrats de service et ententes.


Processus et monitoring

Processus (/api/v1/processes)

Procedures et listes de taches.

Sites web (/api/v1/websites)

Monitoring de sites web.

ChampTypeDescription
idUUIDIdentifiant unique
namestringNom
urlstringURL a surveiller
isMonitoredbooleanSurveillance active
isUpbooleanEtat actuel
httpStatusnumberCode HTTP
responseTimeMsnumberTemps de reponse (ms)
sslValidTodateExpiration SSL
domainExpiresAtdateExpiration du domaine

Photos (/api/v1/photos)

Bibliotheque de medias.


Recherche globale

L'endpoint de recherche permet de chercher simultanement dans plusieurs types d'entites :

curl -H "Authorization: Bearer sk-smartdoc-..." \
"https://smartdoc.mspsmart.ca/api/v1/search?q=firewall&entity_types=assets,documents"

Parametres

ParametreTypeDescription
qstringTerme de recherche (obligatoire)
entity_typesstringTypes d'entites (separes par virgule). Defaut : tous
limitnumberMax resultats par type (defaut : 10, max : 50)

Types recherchables

documents, kb-articles, assets, credentials, companies, certificates, websites

Reponse

{
"data": [
{ "type": "assets", "id": "...", "name": "Firewall Fortinet", "createdAt": "..." },
{ "type": "documents", "id": "...", "name": "Guide Firewall", "createdAt": "..." }
],
"total": 5
}

Endpoint Whoami

Verifie les informations associees a votre cle API :

curl -H "Authorization: Bearer sk-smartdoc-..." \
https://smartdoc.mspsmart.ca/api/v1/whoami
{
"data": {
"tenantId": "550e8400-...",
"scope": "read-write",
"companyFilter": { "mode": "all", "companyIds": [] },
"entities": ["companies", "documents", "assets", "..."]
}
}

Codes d'erreur

Code HTTPSignification
200Succes
201Creation reussie
204Suppression reussie
400Requete invalide (validation Zod)
401Cle API manquante ou invalide
403Portee insuffisante (ex : read-only essaie de creer)
404Ressource non trouvee
429Limite de requetes depassee
500Erreur serveur

Exemples complets

Lister les actifs d'une compagnie

curl -H "Authorization: Bearer sk-smartdoc-..." \
"https://smartdoc.mspsmart.ca/api/v1/assets?company_id=UUID&limit=50&sort_by=name&sort_order=asc"

Creer un document

curl -X POST \
-H "Authorization: Bearer sk-smartdoc-..." \
-H "Content-Type: application/json" \
-d '{
"companyId": "550e8400-...",
"title": "Guide de deploiement",
"content": "<h1>Deploiement</h1><p>Etapes...</p>",
"status": "draft"
}' \
https://smartdoc.mspsmart.ca/api/v1/documents

Modifier un actif

curl -X PATCH \
-H "Authorization: Bearer sk-smartdoc-..." \
-H "Content-Type: application/json" \
-d '{"status": "retired", "location": "Depot"}' \
https://smartdoc.mspsmart.ca/api/v1/assets/550e8400-...

Supprimer un tag

curl -X DELETE \
-H "Authorization: Bearer sk-smartdoc-..." \
https://smartdoc.mspsmart.ca/api/v1/tags/550e8400-...