Aller au contenu

API Reference

REST API complète pour gérer vos projets, rendus, partages et plus encore. Base URL : https://demobro.com/api

Content-Type: application/json
Auth: Bearer JWT
Responses: JSON

Authentification

JWT (JSON Web Token) pour toutes les requêtes authentifiées. Les tokens access expirent après 5 min, utilisez le refresh token pour en obtenir un nouveau.

Utilisation du token

# Ajoutez le header Authorization à chaque requête
curl -H "Authorization: Bearer <access_token>" \
     https://demobro.com/api/projects/

Projets

CRUD complet sur vos projets de démo. Chaque projet contient une configuration YAML.

Rendus

Lancez des rendus vidéo à partir d'un projet. Le rendu est asynchrone — le statut progresse de pending → processing → completed.

Partages

Créez des liens de partage publics pour vos rendus avec analytics, protection par mot de passe et expiration.

Endpoints publics (sans authentification)

GET/api/share/public/{token}/ — Récupérer la page de partage publique
POST/api/share/public/{token}/session/— Créer une session de vue
POST/api/share/public/{token}/events/— Enregistrer des événements analytics

Templates

Galerie de templates publics que vous pouvez forker dans vos projets.

Facturation

Gestion des abonnements Stripe, crédits et consommation.

LLM

Génération IA pour vos configurations YAML, narrations et effets visuels.

Plugins

Plugins de rendu extensibles : Blender, Mobile, Webinar, 3D Product.

Connecteurs

Intégrations CRM et webhooks pour synchroniser vos données.

Configurer son avatar depuis le MCP

Demandez un QR code à votre assistant, puis scannez-le avec votre téléphone. Ajoutez une photo et, si vous le souhaitez, votre voix. Le setup affiche un score de qualité avant de sauvegarder les sources sur le compte lié à la clé MCP.

create_avatar_setup()
create_avatar_setup(include_voice=true)
get_avatar_setup_status(session_id="…")
cancel_avatar_setup(session_id="…")

Le résultat inclut une image PNG et un lien privé valable 15 minutes, sans connexion sur le téléphone. Un nouveau QR remplace le précédent. La création et la révocation nécessitent la permission write ; le suivi nécessite read. Le statut completed confirme la sauvegarde des sources. La préparation de la voix peut continuer ensuite.

Démo d'une application locale

Le rendu s'exécute sur les serveurs DemoBro, jamais sur votre machine : une URL en localhost y désigne nos conteneurs, pas votre application. Ces adresses sont refusées avant tout débit.

Exposez le port sur une URL publique

# Cloudflare (sans compte)
cloudflared tunnel --url http://localhost:3000

# ou ngrok
ngrok http 3000

Reprenez l'URL obtenue dans le YAML

scenarios:
  - name: "Parcours"
    url: "https://votre-tunnel.trycloudflare.com"
    steps:
      - action: navigate
        url: "https://votre-tunnel.trycloudflare.com"
        narration: "Voici l'application."

L'URL change à chaque session du tunnel : régénérez le YAML, ou fixez un domaine côté fournisseur de tunnel. Vérifiez la configuration avec validate_demo_config (MCP) avant de lancer le rendu.

Cliquer et saisir, pas seulement montrer

Par défaut, les étapes click, type et wait_forsont réécrites en défilement : un sélecteur erroné bloquerait le navigateur trente secondes puis ferait échouer un rendu déjà facturé. Confirmez d'abord les sélecteurs sur la page vivante, puis demandez le rendu interactif.

# 1. les sélecteurs existent-ils vraiment ? (gratuit)
probe_demo_config(yaml_config=...)

# 2. le rendu exécute alors les clics et les saisies
render_demo_from_yaml(name=..., yaml_config=..., interactive=true)

Les sélecteurs web acceptés sont css, id, text et xpath, sous la forme locator: {type: css, value: "#email"}.

Ou laissez l'appel ouvrir et fermer le tunnel

Notre serveur MCP tourne sur nos machines : il ne peut pas exposer un port de la vôtre. Ce pont-ci tourne chez vous. Il ouvre le tunnel, vérifie les sélecteurs, lance le rendu, attend la vidéo, puis referme le tunnel — y compris si le rendu échoue. Votre application n'est jamais exposée plus longtemps que l'appel.

curl -O https://demobro.com/demobro-local-mcp.py

Déclarez-le auprès de votre client MCP (nécessite uv et cloudflared) :

{
  "servers": {
    "demobro-local": {
      "command": "uv",
      "args": ["run", "/chemin/vers/demobro-local-mcp.py"],
      "env": { "DEMOBRO_API_KEY": "dmbr_…" }
    }
  }
}

Le YAML garde alors vos URL locales habituelles : le pont les réécrit vers le tunnel avant l'envoi.

render_local_demo(name="Ma démo", yaml_config=..., port=3000)
check_local_selectors(yaml_config=..., port=3000)   # gratuit

Restreignez l'accès à nos adresses de sortie

Un tunnel expose votre application à tout internet le temps du rendu. Nos rendus partent de deux adresses fixes, et d'elles seules : autorisez-les, refusez le reste.

20.86.141.140
20.54.114.49

Exemple avec cloudflared et un pare-feu local :

# n'accepter le port 3000 que depuis les sorties DemoBro
sudo pfctl -t demobro -T add 20.86.141.140 20.54.114.49

N'utilisez pas Cloudflare Access ni l'authentification de ngrok : le moteur de rendu ne sait pas s'authentifier, il serait bloqué comme n'importe quel visiteur. Le filtrage par adresse est le seul contrôle qu'il traverse. Servez des données jetables et refermez le tunnel après le rendu.

SDK Python

Wrapper Python pour l'API REST. Installez avec pip et commencez en 3 lignes.

Installation

# Aucun paquet à installer : utilisez l'API HTTP DemoBro

Authentification

const response = await fetch("https://demobro.com/api/projects/", {
  headers: { Authorization: "Bearer " + process.env.DEMOBRO_API_KEY },
});
const projects = await response.json();

Créer un projet et lancer un rendu

# Créer un projet
curl -X POST https://demobro.com/api/projects/ \
  -H "Authorization: Bearer $DEMOBRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Mon Produit","yaml_config":"$(cat demo.yaml)"}'

# Lancer un rendu
curl -X POST https://demobro.com/api/renders/ \
  -H "Authorization: Bearer $DEMOBRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"project_id":"PROJECT_UUID"}'

Partager un rendu

curl -X POST https://demobro.com/api/shares/ \
  -H "Authorization: Bearer $DEMOBRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"render":"RENDER_UUID","title":"Démo pour le client","allow_download":true}'

CLI

# Lister les projets
curl https://demobro.com/api/projects/ \
  -H "Authorization: Bearer $DEMOBRO_API_KEY"

# Vérifier le statut d'un rendu
curl https://demobro.com/api/renders/RENDER_UUID/ \
  -H "Authorization: Bearer $DEMOBRO_API_KEY"

Codes d'erreur

L'API retourne des codes HTTP standards avec un body JSON détaillé.

CodeDescription
200Succès
201Ressource créée
204Suppression réussie (pas de body)
400Requête invalide — vérifiez les champs envoyés
401Non authentifié — token manquant ou expiré
403Accès refusé — vous n'êtes pas propriétaire de cette ressource
404Ressource introuvable
429Trop de requêtes — rate limit atteint
500Erreur serveur interne
503Service indisponible (ex: provider LLM down)
// Exemple d'erreur 400
{
  "yaml_config": ["Ce champ ne contient pas du YAML valide."],
  "name": ["Ce champ est requis."]
}

// Exemple d'erreur 401
{
  "detail": "Authentication credentials were not provided."
}