Documentation API
L'API Wasate Cloud permet d'intégrer notre plateforme à vos outils. REST classique, JSON, authentification simple par clé API.
Introduction
L'API Wasate Cloud expose les fonctionnalités suivantes :
- Inscription et activation de comptes via le workflow PIN à deux facteurs
- Transferts WeTransfer-like : création, listing, gestion
- Galeries clients : création, tokens de partage, viewer public (4 thèmes + lightbox), notifications email de consultation/téléchargement
- Bureau portable (Wasate Connect) : enrôlement d'appareils multi-OS, synchronisation, révocation
- Connexion « Continuer avec Google » (sign-in OAuth, scopes basiques) + import depuis un autre cloud (Dropbox, OneDrive)
- Compte : préférences de notification, demande d'upgrade de stockage (4 €/To)
- Webhooks entrants (paiements bancaires) et sortants (Zapier, automatisations)
Base URL : https://wasate.fr
Authentification
Trois mécanismes d'authentification selon le type d'endpoint :
1. Session utilisateur (cookies)
Pour les endpoints utilisés depuis le frontend web. Connexion via /app/login, cookie de session HttpOnly + Secure.
2. Clé API (header)
Pour les intégrations serveur-à-serveur. Créez une clé depuis la console superadmin, puis :
curl -H "Authorization: Bearer wsc_abc123_xxxxxxxxxxxxx" \
https://wasate.fr/api/your-endpoint
Format de la clé : wsc_[8 chars prefix]_[48 chars secret]. La clé n'est affichée qu'une seule fois à la création.
3. Webhook HMAC
Pour les webhooks entrants, signature HMAC-SHA256 du body avec le secret configuré.
Gestion des erreurs
Toutes les erreurs retournent un JSON avec un champ error contenant un code court :
{
"error": "invalid_email"
}
Codes HTTP utilisés :
400— Bad Request (champ invalide, format incorrect)401— Unauthorized (clé API absente ou invalide)403— Forbidden (rôle insuffisant)404— Not Found409— Conflict (email déjà utilisé, demande en cours, etc.)429— Too Many Requests (rate limit)500— Internal Server Error
Rate limits
Limites par défaut, par IP :
/api/register,/api/account/request: 5 requêtes / minute/api/auth/*: 10 requêtes / minute- Autres endpoints publics : 60 requêtes / minute
- Endpoints authentifiés via clé API : selon le
rate_limitdéfini sur la clé (60 par défaut)
Endpoints publics
POST /api/contact
Envoi d'un message via le formulaire de contact public.
Body JSON :
{
"email": "client@example.com",
"name": "Marie Dupont",
"subject": "general",
"message": "Bonjour, j'aimerais en savoir plus sur..."
}
Réponse : 200 OK avec { "status": "received" }
GET /api/status
État global du service. Aucune information sensible.
Réponse :
{
"status": "ok",
"service": "wasate-cloud",
"time": "2026-05-22T14:30:00+00:00"
}
POST /api/newsletter
Inscription à la newsletter.
{ "email": "contact@example.com" }
POST /api/account/request
Soumet une demande d'inscription. Le compte sera créé après validation manuelle par un administrateur.
{
"first_name": "Marie",
"last_name": "Dupont",
"email": "marie@example.com",
"phone": "+33 6 12 34 56 78",
"account_type": "client_pro",
"plan": "solo_pro",
"captcha_token": "..."
}
account_type : client, client_pro, ou distributor
Webhook : paiement reçu
Endpoint exposé par Wasate Cloud, appelé par votre passerelle bancaire ou Zapier après réception d'un virement SEPA.
POST /api/webhook/payment
Headers requis : X-Wasate-Signature: <hmac-sha256-hex>
Body :
{
"reference": "WAS-MARIEDUPONT",
"amount": 8.00,
"currency": "EUR",
"date": "2026-05-22T10:00:00Z"
}
Signature HMAC
Pour les webhooks entrants, la signature est calculée ainsi :
// Node.js
const crypto = require('crypto');
const signature = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
// Envoyer dans header X-Wasate-Signature
Bureau portable (Wasate Connect)
L'agent Wasate Connect relie un ordinateur au cloud du client et synchronise ses dossiers. Chaque appareil est enrôlé via un code à usage unique généré depuis l'espace client, échangé contre un mot de passe d'application Nextcloud révocable — le mot de passe principal n'est jamais transmis.
Installation en une commande (Linux, macOS, Raspberry Pi, Docker, serveur headless) :
curl -fsSL https://wasate.fr/connect.sh | WASATE_CODE=xxxxx bash
POST /connect/enroll
Public. Échange un code d'enrôlement contre des identifiants de synchronisation. Appelé par l'agent depuis la machine du client.
Body :
{
"code": "xxxxx",
"device_name": "PC bureau",
"os": "linux"
}
Réponse 200 :
{
"server_url": "https://wasate.fr/app",
"webdav_url": "https://wasate.fr/app/remote.php/dav/files/USER/",
"username": "USER",
"password": "<mot de passe d'application>",
"sync_folder": "Wasate",
"device_id": 12
}
Erreurs : 403 invalid_or_expired_code, 400 code_required.
POST /connect/heartbeat
Public. L'agent signale qu'il est en ligne, authentifié par possession de son mot de passe d'application.
{ "password": "<mot de passe d'application>" }
GET /api/workspace/devices
Session requise. Liste les appareils de l'utilisateur (statut en ligne, OS, dernière activité).
POST /api/workspace/devices
Session requise. Crée un enrôlement et renvoie un code à usage unique (valable 1 h).
{ "name": "PC bureau", "os": "linux" } → { "code": "xxxxx", "expires_in": 3600 }
DELETE /api/workspace/devices/{id}
Session requise. Révoque un appareil : son mot de passe d'application est invalidé immédiatement.
Galeries publiques (viewer)
Endpoints publics qui servent une galerie partagée via son token (lien /galerie.html?t={token}, 4 thèmes + lightbox). Galerie protégée par mot de passe → l'envoyer une fois sur /auth pour obtenir un grant à rejouer sur les autres appels.
GET /g/{token}
Métadonnées (titre, description, thème) ou { "status": "password_required" }.
POST /g/{token}/auth
Body password. Renvoie { "grant": "…" } (valable 2 h) pour les galeries protégées.
GET /g/{token}/items
Liste des médias (images/vidéos) de la galerie. Paramètre grant si protégée.
GET /g/{token}/file?name=…&size=thumb|full
Sert un média : aperçu Nextcloud borné (600 px miniature / 1600 px plein écran) ou flux vidéo. Strictement confiné au dossier source de la galerie.
GET /g/{token}/zip
Demande la préparation d'un ZIP complet (traité en file d'attente par les workers).
Compte (utilisateur connecté)
GET /api/me/notifications · PUT
Préférences de notification email (consultation / téléchargement de galeries) + destinataires. Body PUT : notify_view, notify_download, recipients (CSV, max 5).
POST /api/me/upgrade-request
Demande d'augmentation de stockage (4 €/To). Body : requested_tb (1-100), message. Traitement manuel par l'équipe, aucun paiement en ligne.
Connexion avec Google + intégrations
Sign-in OAuth via Google, scopes basiques openid email profile (aucun accès aux fichiers, aucun audit). Boutons « Continuer avec Google » sur connexion et inscription.
GET /app/apps/creatif_integrations/api/signin/google/start
Redirige vers Google. Au retour, le compte est créé (Free 50 Go, actif) si l'email vérifié est nouveau, puis la session Wasate est ouverte.
GET /api/integrations
Session requise. Liste les services d'import (Dropbox/OneDrive) avec leur statut connecté/configuré. Jetons chiffrés (libsodium), jamais exposés. La publication sortante vers les réseaux sociaux a été retirée du produit.
Spec OpenAPI
Une spécification OpenAPI 3.1 complète est disponible : /docs/openapi.yaml (à venir).
SDKs
Aucun SDK officiel n'est encore distribué. L'API étant REST classique, tous les clients HTTP fonctionnent (curl, fetch, axios, requests, Guzzle, …).
Changelog
- v1.2 — Juin 2026 : viewer galeries publiques (thèmes + lightbox), notifications email, demande d'upgrade par To, connexion « Continuer avec Google » + import OAuth (Dropbox/OneDrive)
- v1.1 — Juin 2026 : agent Bureau portable (Wasate Connect) — endpoints
/connect/*et/api/workspace - v1.0 — Mai 2026 : version initiale, endpoints contact + inscription + webhook paiement