Documentation de l’API ScreenApp v2.0.0
L’API de ScreenApp vous permet de transcrire, de résumer et d’analyser automatiquement du contenu vidéo et audio. Parfait pour les entreprises qui cherchent à traiter à grande échelle les appels clients, les vidéos de formation et les enregistrements de réunions.
Principaux cas d’utilisation
- Transcription et résumé automatiques : Convertissez n’importe quelle vidéo ou audio en texte consultable et en résumés concis. Idéal pour les équipes de service client, les établissements d’enseignement et les créateurs de contenu.
- Gestion des connaissances : Créez un référentiel consultable de contenu vidéo avec des transcriptions automatiques, des résumés et des informations basées sur l’IA. Parfait pour les supports de formation et les bases de connaissances de l’entreprise.
- Traitement en temps réel : Recevez des transcriptions et des résumés via des webhooks dès que les enregistrements sont traités. Idéal pour l’intégration avec les systèmes CRM et les plateformes de service client.
- Enregistrement intégré : Ajoutez des fonctionnalités d’enregistrement de qualité professionnelle à votre application grâce à notre enregistreur intégrable qui gère à la fois la capture d’écran et audio.
✨ Cas d’utilisation populaire : Les équipes de service client utilisent notre API pour transcrire automatiquement les appels d’assistance et générer des résumés, qui sont ensuite synchronisés avec leur CRM via des webhooks.
Obtenir les identifiants API dans le tableau de bord →
Exigences du plan et accès à l’API
Pour utiliser l’API ScreenApp, vous aurez besoin de :
- Un abonnement actif au plan Business
- Identifiants API depuis votre tableau de bord ScreenApp
Obtenir vos identifiants API
- Connectez-vous à votre compte ScreenApp
- Accédez à Paramètres → Intégration
- Ici, vous trouverez :
- Jeton API
- ID d’équipe
Gardez ces identifiants en sécurité et ne les partagez jamais publiquement.
Démarrage rapide
Vous voulez démarrer tout de suite ? Suivez ces étapes pour intégrer ScreenApp à votre site Web :
1. Installer le plugin
Ajoutez ce code au HTML de votre site web :
<script>
// Code d'installation du plugin ici
</script>
2. Ajouter le bouton de déclenchement
Ajoutez un bouton ou un élément de déclenchement à votre page :
<button onclick="loadScreenApp()">Démarrer l'enregistrement</button>
3. Configurer le callback
Personnalisez la fonction de callback pour gérer la fin de l’enregistrement :
function callback({ id, url }) {
// Exemple : Envoyer à votre backend
fetch('/api/recordings', {
method: 'POST',
body: JSON.stringify({ recordingId: id, recordingUrl: url })
});
// Exemple : Mettre à jour l'interface utilisateur
document.getElementById('status').innerHTML =
`Enregistrement sauvegardé ! Visualisez-le à ${url}`;
}
Authentification
Toutes les requêtes API nécessitent une authentification. ScreenApp utilise une authentification basée sur un jeton ainsi que des identifiants spécifiques à l’équipe.
Identifiants dont vous aurez besoin
- Jeton API : Votre clé API secrète
- ID d’équipe : Votre identifiant d’équipe unique
Exemple d’authentification
curl -X POST "https://api.screenapp.io/v2/files/upload" \
-H "Authorization: Bearer VOTRE_JETON_API" \
-H "X-Team-ID: VOTRE_ID_ÉQUIPE"
Points de terminaison d’authentification
GET /auth/google
Rediriger vers Google pour l’authentification
Paramètres de requête :
redirectUrl
- URL encodée pour rediriger l’utilisateur après une authentification réussiereferrerUrl
- URL de référence encodéeintent
- Intention de l’utilisateur (par exemple, “inscription”)
GET /auth/facebook
Rediriger vers Facebook pour l’authentification
Paramètres de requête :
redirectUrl
- URL encodée pour rediriger l’utilisateur après une authentification réussiereferrerUrl
- URL de référence encodéeintent
- Intention de l’utilisateur (par exemple, “inscription”)
Concepts fondamentaux
Avant de plonger dans des points de terminaison spécifiques, comprenons les concepts clés de ScreenApp :
- Enregistrements : captures vidéo et audio qui peuvent être téléchargées et traitées
- Équipes : groupes qui peuvent partager et gérer des enregistrements
- Webhooks : notifications en temps réel pour les événements d’enregistrement et les résultats de traitement
- Tags : Métadonnées pouvant être attachées aux enregistrements, aux équipes ou aux profils d’utilisateurs
Référence API
Gestion d’équipe
POST /team/{teamId}/tag
Ajouter un tag à l’équipe
Paramètres du chemin :
teamId
- ID de l’équipe
Corps de la requête :
{
"key": "color",
"value": "red"
}
DELETE /team/{teamId}/tag
Supprimer un tag de l’équipe
Paramètres du chemin :
teamId
- ID de l’équipe
Corps de la requête :
{
"key": "color"
}
Intégration de Webhook d’équipe
POST /team/{teamId}/integrations/webhook
Enregistrer une nouvelle URL de webhook pour l’équipe
Paramètres du chemin :
teamId
- ID de l’équipe
Corps de la requête :
{
"url": "https://example.com/webhook",
"name": "My Webhook"
}
Réponses :
200
- Webhook enregistré avec succès400
- Corps de requête invalide500
- Erreur de serveur interne
DELETE /team/{teamId}/integrations/webhook
Désenregistrer une URL de webhook pour l’équipe
Paramètres du chemin :
teamId
- ID de l’équipe
Paramètres de requête :
url
- L’URL du webhook à désenregistrer
Réponses :
200
- Webhook désenregistré avec succès400
- Requête invalide404
- URL du webhook introuvable500
- Erreur de serveur interne
GET /team/{teamId}/integrations/zapier/sample/list
Obtenir des exemples de données pour Zapier sous forme de tableau
Paramètres du chemin :
teamId
- ID de l’équipe
Réponses :
200
- Exemples de données récupérés avec succès404
- Fichier d’exemple introuvable
Intégrations utilisateur
POST /integrations/webhook
Enregistrer un nouveau webhook pour l’utilisateur
Corps de la requête :
{
"url": "https://example.com/webhook",
"name": "My Webhook"
}
Réponses :
200
- Webhook enregistré avec succès400
- Corps de requête invalide
DELETE /integrations/webhook
Désenregistrer un webhook pour l’utilisateur
Paramètres de requête :
url
- L’URL du webhook à désenregistrer
Réponses :
200
- Webhook désenregistré avec succès400
- Requête invalide404
- URL du webhook introuvable
Événements de webhook
Votre point de terminaison de webhook recevra des événements dans ce format :
{
"event": "recording.completed",
"fileId": "file789",
"teamId": "team123",
"data": {
"url": "https://screenapp.io/recording/file789",
"duration": 300,
"status": "processed"
}
}
Les événements courants incluent :
recording.started
recording.completed
recording.processed
recording.failed
Gestion de fichiers
POST /files/{fileId}/tag
Ajouter un tag au fichier
Paramètres du chemin :
fileId
- ID du fichier
Corps de la requête :
{
"key": "color",
"value": "red"
}
DELETE /files/{fileId}/tag
Supprimer un tag du fichier
Paramètres du chemin :
fileId
- ID du fichier
Corps de la requête :
{
"key": "color"
}
POST /files/{fileId}/ask/multimodal
Poser une question sur un fichier en utilisant plusieurs modèles d’IA
Paramètres du chemin :
fileId
- ID du fichier à analyser
Corps de la requête :
{
"promptText": "Quels sont les points clés abordés ?",
"mediaAnalysisOptions": {
"transcript": {
"segments": [
{
"start": 0,
"end": 120
}
]
},
"video": {
"segments": [
{
"start": 0,
"end": 120
}
]
},
"screenshots": {
"timestamps": [30, 60, 90]
}
}
}
Réponses :
200
- Question traitée avec succès403
- Limite d’utilisation de l’IA dépassée500
- Erreur du serveur
Téléchargement de fichiers
POST /files/upload/{teamId}/{folderId}/url
Générer des URL pré-signées pour les téléchargements de fichiers
Paramètres du chemin :
teamId
- ID de l’équipefolderId
- ID du dossier
Corps de la requête :
{
"files": [
{
"contentType": "video/mp4",
"name": "meeting-recording.mp4"
}
]
}
Réponses :
200
- URL de téléchargement générées avec succès400
- Paramètres de requête invalides500
- Erreur du serveur
POST /files/upload/{teamId}/{folderId}/finalize
Finaliser les fichiers téléchargés
Paramètres du chemin :
teamId
- ID de l’équipefolderId
- ID du dossier
Corps de la requête :
{
"file": {
"fileId": "file123",
"contentType": "video/mp4",
"name": "Appel commercial",
"description": "Appel commercial hebdomadaire avec le client",
"recorderName": "John Doe",
"recorderEmail": "john.doe@example.com"
}
}
Réponses :
200
- Téléchargement de fichier finalisé avec succès400
- Paramètres de requête invalides403
- Limite de téléchargement dépassée500
- Erreur du serveur
Téléchargement multipartie (pour les fichiers volumineux)
PUT /files/upload/multipart/init/{teamId}/{folderId}
Initialiser un téléchargement multipartie pour un fichier volumineux
Paramètres du chemin :
teamId
- ID de l’équipefolderId
- ID du dossier
Corps de la requête :
{
"contentType": "video/mp4"
}
Réponses :
200
- Téléchargement initialisé avec succès400
- Paramètres de requête invalides500
- Erreur du serveur
Exemple de réponse :
{
"success": true,
"data": {
"fileId": "file789",
"uploadId": "upload123"
}
}
PUT /files/upload/multipart/url/{teamId}/{folderId}/{fileId}/{uploadId}/{partNumber}
Obtenir l’URL de téléchargement pour une partie spécifique
Paramètres du chemin :
teamId
- ID de l’équipefolderId
- ID du dossierfileId
- ID du fichier en cours de téléchargementuploadId
- ID de la session de téléchargement multipartiepartNumber
- Numéro de partie (1-10000)
Corps de la requête :
{
"contentType": "video/mp4"
}
Réponses :
200
- URL de téléchargement générée avec succès400
- Paramètres de requête invalides500
- Erreur du serveur
Exemple de réponse :
{
"success": true,
"data": {
"uploadUrl": "https://presigned-s3-url.com/part1"
}
}
PUT /files/upload/multipart/finalize/{teamId}/{folderId}/{fileId}/{uploadId}
Finaliser un téléchargement multipartie
Paramètres du chemin :
teamId
- ID de l’équipefolderId
- ID du dossierfileId
- ID du fichier en cours de téléchargementuploadId
- ID de la session de téléchargement multipartie
Corps de la requête :
{
"file": {
"contentType": "video/mp4",
"recorderName": "John Doe",
"recorderEmail": "john@example.com",
"name": "Mon enregistrement",
"description": "Une session vidéo enregistrée",
"notes": [
{
"text": "Point important discuté",
"timestamp": 1234567890
}
]
}
}
Réponses :
200
- Téléchargement finalisé avec succès400
- Paramètres de requête invalides404
- Téléchargement actif introuvable500
- Erreur du serveur
PUT /files/upload/multipart/fallback/{teamId}/{folderId}/{fileId}/{partNumber}
Télécharger la partie du fichier via le backend (solution de repli)
Paramètres du chemin :
teamId
- ID de l’équipefolderId
- ID du dossierfileId
- ID du fichier en cours de téléchargementpartNumber
- Numéro de partie (1-10000)
Données du formulaire :
file
- La partie du fichier à téléchargercontentType
- Type MIME du fichier en cours de téléchargement
Réponses :
200
- Partie téléchargée avec succès400
- Paramètres de requête invalides500
- Erreur du serveur
Gestion de compte
POST /v2/account/tag
Ajouter un tag à l’utilisateur authentifié
Corps de la requête :
{
"key": "color",
"value": "red"
}
Réponses :
200
- Tag ajouté avec succès400
- Paramètres de requête invalides
PUT /account/profile
Mettre à jour le profil de l’utilisateur authentifié
Corps de la requête :
{
"firstName": "John",
"lastName": "Doe",
"name": "John Doe",
"gender": "male",
"userType": "user",
"company": "Acme Inc",
"role": "Developer",
"goals": "Learn new technologies",
"phoneNumber": "+1234567890",
"location": "San Francisco, CA",
"website": "https://example.com",
"picture": "https://example.com/avatar.jpg",
"provider": "local",
"providerId": "12345",
"primaryField": "development"
}
Réponses :
200
- Profil mis à jour avec succès400
- Paramètres de requête invalides
Fonctionnalités avancées
Analyse IA
Utilisez l’IA pour analyser vos enregistrements et obtenir des informations :
// Demander l'analyse IA d'un enregistrement
const analysis = await fetch(`/v2/files/${fileId}/ask/multimodal`, {
method: 'POST',
headers: {
'Authorization': 'Bearer VOTRE_JETON_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
promptText: "Quels sont les principaux points de discussion ?",
mediaAnalysisOptions: {
transcript: {
segments: [{ start: 0, end: 300 }]
},
video: {
segments: [{ start: 0, end: 300 }]
}
}
})
});
Opérations par lots
Gérez efficacement plusieurs enregistrements :
// Marquer plusieurs enregistrements
async function batchTag(fileIds, tag) {
const promises = fileIds.map(fileId =>
fetch(`/v2/files/${fileId}/tag`, {
method: 'POST',
headers: {
'Authorization': 'Bearer VOTRE_JETON_API',
'Content-Type': 'application/json'
},
body: JSON.stringify(tag)
})
);
await Promise.all(promises);
}
Gestion des erreurs
Codes d’erreur courants
400
: Paramètres de requête non valides403
: Limite d’utilisation de l’IA dépassée ou accès non autorisé404
: Ressource introuvable500
: Erreur du serveur
Format de réponse d’erreur
Les réponses d’erreur suivent généralement ce format :
{
"success": false,
"message": "Message d'erreur détaillé"
}
Exemples
Configuration des webhooks d’équipe
Les webhooks vous permettent de recevoir des mises à jour en temps réel lorsque les enregistrements sont traités :
// Enregistrer un nouveau webhook pour votre équipe
async function registerTeamWebhook(teamId, webhookUrl, webhookName) {
const response = await fetch(`/v2/team/${teamId}/integrations/webhook`, {
method: 'POST',
headers: {
'Authorization': 'Bearer VOTRE_JETON_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: webhookUrl,
name: webhookName
})
});
return await response.json();
}
// Exemple d'utilisation
const result = await registerTeamWebhook(
'team123',
'https://your-domain.com/webhooks/screenapp',
'Mises à jour d'enregistrement'
);
Téléchargement et traitement d’un fichier volumineux
Pour les fichiers de plus de 100 Mo, utilisez le flux de téléchargement multipartie :
// 1. Initialiser le téléchargement
const initResponse = await fetch(`/v2/files/upload/multipart/init/${teamId}/${folderId}`, {
method: 'PUT',
headers: {
'Authorization': 'Bearer VOTRE_JETON_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
contentType: 'video/mp4'
})
});
const { data: { fileId, uploadId } } = await initResponse.json();
// 2. Diviser le fichier en morceaux et télécharger chaque partie
const CHUNK_SIZE = 5 * 1024 * 1024; // Morceaux de 5 Mo
const totalParts = Math.ceil(file.size / CHUNK_SIZE);
for (let partNumber = 1; partNumber <= totalParts; partNumber++) {
// Obtenir l'URL de téléchargement pour cette partie
const urlResponse = await fetch(
`/v2/files/upload/multipart/url/${teamId}/${folderId}/${fileId}/${uploadId}/${partNumber}`,
{
method: 'PUT',
headers: {
'Authorization': 'Bearer VOTRE_JETON_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
contentType: 'video/mp4'
})
}
);
const { data: { uploadUrl } } = await urlResponse.json();
// Créer le morceau à partir du fichier
const start = (partNumber - 1) * CHUNK_SIZE;
const end = Math.min(start + CHUNK_SIZE, file.size);
const chunk = file.slice(start, end);
// Télécharger le morceau directement sur S3
await fetch(uploadUrl, {
method: 'PUT',
body: chunk,
headers: {
'Content-Type': 'video/mp4'
}
});
}
// 3. Finaliser le téléchargement
const finalizeResponse = await fetch(
`/v2/files/upload/multipart/finalize/${teamId}/${folderId}/${fileId}/${uploadId}`,
{
method: 'PUT',
headers: {
'Authorization': 'Bearer VOTRE_JETON_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
file: {
contentType: 'video/mp4',
name: 'Enregistrement de réunion client',
description: 'Revue trimestrielle avec le client',
recorderName: 'Jane Smith',
recorderEmail: 'jane@example.com'
}
})
}
);