Backend uniquement
Ni localStorage, ni source client, ni logs applicatifs.
Scena Connect est une API backend. Gardez la clé privée côté serveur, envoyez un preset et recevez le résultat sur votre webhook signé.
Le navigateur appelle votre backend. Votre backend ajoute la clé privée, contacte Scena et retourne uniquement les données utiles à votre interface.
Le brief et les assets sont envoyés à votre serveur authentifié.
Votre serveur ajoute le Bearer token de la connexion.
Les événements signés annoncent l’avancement et la sortie finale.
Conservez SCENA_API_KEY et SCENA_WEBHOOK_SECRET dans votre gestionnaire de secrets. Ne les injectez jamais dans un bundle frontend.
SCENA_BASE_URL=https://api.walter-ai.cloud SCENA_API_KEY=sk_scena_•••••••• SCENA_WEBHOOK_SECRET=whsec_••••••••
const res = await fetch(
`${process.env.SCENA_BASE_URL}/api/saas/generate`,
{
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SCENA_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
preset: 'ugc_product_demo',
input: { prompt, image_url }
})
}
);
if (!res.ok) throw new Error(`Scena ${res.status}`);
const job = await res.json();Calculez le HMAC sur le corps brut et le timestamp reçu, comparez la signature en temps constant, puis dédupliquez l’événement avec son idempotency key.
X-Scena-Signature: sha256=••••••
X-Scena-Timestamp: 1784865600
X-Scena-Idempotency-Key: evt_••••••
signature = HMAC_SHA256(
SCENA_WEBHOOK_SECRET,
`${timestamp}.${rawBody}`
)Ni localStorage, ni source client, ni logs applicatifs.
Une relivraison du même événement ne doit pas répéter votre effet métier.
Utilisez des URLs temporaires et des permissions minimales pour vos médias.