Aller au contenu principal

Video Generator API

Vue d'ensemble

API REST pour la génération de présentations vidéo.

Base URL : https://api.momentscollectifs.fr


Endpoints

POST /create_presentation

Crée une nouvelle présentation vidéo à partir des messages collectés.

Request

POST /create_presentation
Content-Type: application/json
{
"title": "Anniversaire de Marie",
"description": "Tous vos messages pour ses 30 ans !",
"pages": [
{
"id": 1,
"type": "text",
"content": "<p><strong>Joyeux anniversaire !</strong></p><p>Je te souhaite le meilleur.</p>",
"author": "Jean"
},
{
"id": 2,
"type": "video",
"content": "https://xxx.supabase.co/storage/v1/object/sign/video_dedicace/video_1/dedicace_uuid.webm?token=xxx"
},
{
"id": 3,
"type": "text",
"content": "<p>Un message simple</p>",
"author": "Marie"
}
],
"webhook_url": "https://app.momentscollectifs.fr/api/webhook/presentation"
}

Paramètres

ChampTypeRequisDescription
titlestringOuiTitre de la présentation
descriptionstringNonDescription/introduction
pagesPage[]OuiListe des pages à inclure
webhook_urlstringNonURL de callback quand terminé

Type Page

interface Page {
id: number; // Identifiant unique
type: 'text' | 'video'; // Type de contenu
content: string; // HTML (text) ou URL signée (video)
author?: string; // Nom de l'auteur (pour text)
}

Response

Succès (202 Accepted)

{
"presentationId": "1709123456789_abc123",
"status": "processing",
"estimatedDuration": 120
}

La génération est asynchrone. Utilisez le webhook ou polling pour le statut.

Erreur (400)

{
"error": "Invalid request",
"message": "title is required"
}

GET /download/:presentationId/:filename

Télécharge une vidéo générée.

Request

GET /download/1709123456789_abc123/desktop.mp4

Paramètres URL

ParamètreDescription
presentationIdID retourné par create_presentation
filenamedesktop.mp4 ou mobile.mp4

Response

Succès (200)

Content-Type: video/mp4
Content-Disposition: attachment; filename="desktop.mp4"
Content-Length: 12345678

<binary video data>

Erreur (404)

{
"error": "Not found",
"message": "Presentation not found or not ready"
}

GET /status/:presentationId

Vérifie le statut d'une présentation.

Request

GET /status/1709123456789_abc123

Response

En cours

{
"presentationId": "1709123456789_abc123",
"status": "processing",
"progress": 45,
"currentStep": "Rendering page 3 of 10"
}

Terminé

{
"presentationId": "1709123456789_abc123",
"status": "completed",
"progress": 100,
"downloadUrls": {
"desktop": "/download/1709123456789_abc123/desktop.mp4",
"mobile": "/download/1709123456789_abc123/mobile.mp4"
},
"duration": 180,
"fileSize": {
"desktop": 52428800,
"mobile": 31457280
}
}

Erreur

{
"presentationId": "1709123456789_abc123",
"status": "error",
"error": "Failed to download video from source"
}

GET /health

Vérifie l'état du service.

Request

GET /health

Response

{
"status": "healthy",
"version": "1.0.0",
"uptime": 86400,
"dependencies": {
"ffmpeg": true,
"puppeteer": true,
"storage": true
}
}

Webhook

Quand la génération est terminée, un POST est envoyé au webhook_url.

Payload Succès

{
"event": "presentation.completed",
"timestamp": "2024-03-01T15:30:00Z",
"data": {
"presentationId": "1709123456789_abc123",
"status": "completed",
"downloadUrls": {
"desktop": "https://api.momentscollectifs.fr/download/1709123456789_abc123/desktop.mp4",
"mobile": "https://api.momentscollectifs.fr/download/1709123456789_abc123/mobile.mp4"
},
"duration": 180,
"pageCount": 10
}
}

Payload Erreur

{
"event": "presentation.failed",
"timestamp": "2024-03-01T15:30:00Z",
"data": {
"presentationId": "1709123456789_abc123",
"status": "error",
"error": {
"code": "VIDEO_DOWNLOAD_FAILED",
"message": "Failed to download video: Connection timeout",
"page": 3
}
}
}

Formats de Sortie

FormatRésolutionRatioUsage
Desktop1920 x 108016:9PC, TV, YouTube
Mobile1080 x 19209:16Stories, TikTok, Reels

Spécifications Techniques

Codec vidéo: H.264 (libx264)
Codec audio: AAC
Framerate: 30 fps
Bitrate vidéo: ~5 Mbps
Bitrate audio: 128 kbps
Container: MP4

Limites

LimiteValeur
Pages par présentation100 max
Durée vidéo par page120 secondes max
Durée totale60 minutes max
Taille fichier vidéo source100 MB max
Requêtes simultanées5 par IP

Codes d'Erreur

CodeHTTPDescription
INVALID_REQUEST400Paramètres manquants/invalides
VIDEO_DOWNLOAD_FAILED422Impossible de télécharger la vidéo source
VIDEO_PROCESSING_FAILED422Erreur FFmpeg
TIMEOUT408Génération trop longue
NOT_FOUND404Présentation non trouvée
RATE_LIMITED429Trop de requêtes
INTERNAL_ERROR500Erreur serveur

Exemples

JavaScript (Frontend)

async function generatePresentation(product, items) {
const pages = items.map((item, index) => ({
id: index + 1,
type: item.message_type.toLowerCase(),
content: item.message_type === 'TEXT'
? item.message_media
: await getSignedUrl(item.message_media),
author: item.participant_name
}));

const response = await fetch('https://api.momentscollectifs.fr/create_presentation', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: product.name,
description: product.description,
pages,
webhook_url: `${window.location.origin}/api/webhook`
})
});

const { presentationId } = await response.json();
return presentationId;
}

cURL

# Créer une présentation
curl -X POST https://api.momentscollectifs.fr/create_presentation \
-H 'Content-Type: application/json' \
-d '{
"title": "Test",
"pages": [
{"id": 1, "type": "text", "content": "<p>Hello</p>", "author": "Test"}
]
}'

# Vérifier le statut
curl https://api.momentscollectifs.fr/status/1709123456789_abc123

# Télécharger
curl -O https://api.momentscollectifs.fr/download/1709123456789_abc123/desktop.mp4