Documentazione API ScreenApp v2.0.0
L’API di ScreenApp ti consente di trascrivere, riassumere e analizzare automaticamente contenuti video e audio. Perfetto per le aziende che desiderano elaborare chiamate dei clienti, video di formazione e registrazioni di riunioni su larga scala.
Principali casi d’uso
- Trascrizione e riepilogo automatici: converti qualsiasi video o audio in testo ricercabile e riepiloghi concisi. Ideale per team di assistenza clienti, istituzioni educative e creatori di contenuti.
- Gestione della conoscenza: crea un archivio ricercabile di contenuti video con trascrizioni automatiche, riepiloghi e approfondimenti basati sull’intelligenza artificiale. Perfetto per materiali di formazione e knowledge base aziendali.
- Elaborazione in tempo reale: ricevi trascrizioni e riepiloghi tramite webhook non appena le registrazioni vengono elaborate. Ottimo per l’integrazione con sistemi CRM e piattaforme di assistenza clienti.
- Registrazione integrata: aggiungi funzionalità di registrazione di livello professionale alla tua applicazione con il nostro registratore integrabile che gestisce sia l’acquisizione dello schermo che quella audio.
✨ Caso d’uso popolare: i team di assistenza clienti utilizzano la nostra API per trascrivere automaticamente le chiamate di supporto e generare riepiloghi, che vengono poi sincronizzati con il loro CRM tramite webhook.
Ottieni le credenziali API nella dashboard →
Requisiti del piano e accesso API
Per utilizzare l’API ScreenApp, avrai bisogno di:
- Un abbonamento attivo al piano Business
- Credenziali API dalla tua dashboard ScreenApp
Ottenere le credenziali API
- Accedi al tuo account ScreenApp
- Vai su Impostazioni → Integrazione
- Qui troverai:
- Token API
- ID team
Conserva queste credenziali in modo sicuro e non condividerle mai pubblicamente.
Guida rapida
Vuoi iniziare subito? Segui questi passaggi per integrare ScreenApp nel tuo sito web:
1. Installa il plugin
Aggiungi questo codice all’HTML del tuo sito web:
<script>
// Codice di installazione del plugin qui
</script>
2. Aggiungi il pulsante di attivazione
Aggiungi un pulsante o un elemento di attivazione alla tua pagina:
<button onclick="loadScreenApp()">Avvia registrazione</button>
3. Configura il callback
Personalizza la funzione di callback per gestire il completamento della registrazione:
function callback({ id, url }) {
// Esempio: invia al tuo backend
fetch('/api/recordings', {
method: 'POST',
body: JSON.stringify({ recordingId: id, recordingUrl: url })
});
// Esempio: aggiorna l'interfaccia utente
document.getElementById('status').innerHTML =
`Registrazione salvata! Visualizzala all'indirizzo ${url}`;
}
Autenticazione
Tutte le richieste API richiedono l’autenticazione. ScreenApp utilizza l’autenticazione basata su token insieme a identificatori specifici del team.
Credenziali necessarie
- Token API: la tua chiave API segreta
- ID team: il tuo identificatore univoco del team
Esempio di autenticazione
curl -X POST "https://api.screenapp.io/v2/files/upload" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "X-Team-ID: YOUR_TEAM_ID"
Endpoint di autenticazione
GET /auth/google
Reindirizza a Google per l’autenticazione
Parametri della query:
redirectUrl
- URL codificato per reindirizzare l’utente dopo l’autenticazione riuscitareferrerUrl
- URL referrer codificatointent
- Intento per l’utente (ad esempio, “iscrizione”)
GET /auth/facebook
Reindirizza a Facebook per l’autenticazione
Parametri della query:
redirectUrl
- URL codificato per reindirizzare l’utente dopo l’autenticazione riuscitareferrerUrl
- URL referrer codificatointent
- Intento per l’utente (ad esempio, “iscrizione”)
Concetti chiave
Prima di approfondire endpoint specifici, comprendiamo i concetti chiave di ScreenApp:
- Registrazioni: acquisizioni video e audio che possono essere caricate ed elaborate
- Team: gruppi che possono condividere e gestire le registrazioni
- Webhook: notifiche in tempo reale per eventi di registrazione e risultati di elaborazione
- Tag: metadati che possono essere allegati a registrazioni, team o profili utente
Riferimento API
Gestione del team
POST /team/{teamId}/tag
Aggiungi tag al team
Parametri del percorso:
teamId
- ID del team
Corpo della richiesta:
{
"key": "color",
"value": "red"
}
DELETE /team/{teamId}/tag
Rimuovi tag dal team
Parametri del percorso:
teamId
- ID del team
Corpo della richiesta:
{
"key": "color"
}
Integrazione webhook del team
POST /team/{teamId}/integrations/webhook
Registra un nuovo URL webhook per il team
Parametri del percorso:
teamId
- ID del team
Corpo della richiesta:
{
"url": "https://example.com/webhook",
"name": "My Webhook"
}
Risposte:
200
- Webhook registrato correttamente400
- Corpo della richiesta non valido500
- Errore interno del server
DELETE /team/{teamId}/integrations/webhook
Annulla la registrazione di un URL webhook per il team
Parametri del percorso:
teamId
- ID del team
Parametri della query:
url
- L’URL webhook da annullare la registrazione
Risposte:
200
- Webhook deregistrato correttamente400
- Richiesta non valida404
- URL webhook non trovato500
- Errore interno del server
GET /team/{teamId}/integrations/zapier/sample/list
Ottieni dati di esempio per Zapier come array
Parametri del percorso:
teamId
- ID del team
Risposte:
200
- Dati di esempio recuperati correttamente404
- File di esempio non trovato
Integrazioni utente
POST /integrations/webhook
Registra un nuovo webhook per l’utente
Corpo della richiesta:
{
"url": "https://example.com/webhook",
"name": "My Webhook"
}
Risposte:
200
- Webhook registrato correttamente400
- Corpo della richiesta non valido
DELETE /integrations/webhook
Annulla la registrazione di un webhook per l’utente
Parametri della query:
url
- L’URL webhook da annullare la registrazione
Risposte:
200
- Webhook deregistrato correttamente400
- Richiesta non valida404
- URL webhook non trovato
Eventi Webhook
L’endpoint webhook riceverà eventi in questo formato:
{
"event": "recording.completed",
"fileId": "file789",
"teamId": "team123",
"data": {
"url": "https://screenapp.io/recording/file789",
"duration": 300,
"status": "processed"
}
}
Gli eventi comuni includono:
recording.started
recording.completed
recording.processed
recording.failed
Gestione dei file
POST /files/{fileId}/tag
Aggiungi tag al file
Parametri del percorso:
fileId
- ID del file
Corpo della richiesta:
{
"key": "color",
"value": "red"
}
DELETE /files/{fileId}/tag
Rimuovi tag dal file
Parametri del percorso:
fileId
- ID del file
Corpo della richiesta:
{
"key": "color"
}
POST /files/{fileId}/ask/multimodal
Poni una domanda su un file utilizzando più modelli di intelligenza artificiale
Parametri del percorso:
fileId
- ID del file da analizzare
Corpo della richiesta:
{
"promptText": "Quali sono i punti chiave discussi?",
"mediaAnalysisOptions": {
"transcript": {
"segments": [
{
"start": 0,
"end": 120
}
]
},
"video": {
"segments": [
{
"start": 0,
"end": 120
}
]
},
"screenshots": {
"timestamps": [30, 60, 90]
}
}
}
Risposte:
200
- Domanda elaborata correttamente403
- Limite di utilizzo dell’IA superato500
- Errore del server
Caricamento file
POST /files/upload/{teamId}/{folderId}/url
Genera URL pre-firmati per il caricamento di file
Parametri del percorso:
teamId
- ID del teamfolderId
- ID della cartella
Corpo della richiesta:
{
"files": [
{
"contentType": "video/mp4",
"name": "meeting-recording.mp4"
}
]
}
Risposte:
200
- URL di caricamento generati correttamente400
- Parametri della richiesta non validi500
- Errore del server
POST /files/upload/{teamId}/{folderId}/finalize
Finalizza i file caricati
Parametri del percorso:
teamId
- ID del teamfolderId
- ID della cartella
Corpo della richiesta:
{
"file": {
"fileId": "file123",
"contentType": "video/mp4",
"name": "Chiamata di vendita",
"description": "Chiamata di vendita settimanale con il cliente",
"recorderName": "John Doe",
"recorderEmail": "john.doe@example.com"
}
}
Risposte:
200
- Caricamento del file finalizzato correttamente400
- Parametri della richiesta non validi403
- Limite di caricamento superato500
- Errore del server
Caricamento in più parti (per file di grandi dimensioni)
PUT /files/upload/multipart/init/{teamId}/{folderId}
Inizializza un caricamento in più parti per un file di grandi dimensioni
Parametri del percorso:
teamId
- ID del teamfolderId
- ID della cartella
Corpo della richiesta:
{
"contentType": "video/mp4"
}
Risposte:
200
- Caricamento inizializzato correttamente400
- Parametri della richiesta non validi500
- Errore del server
Esempio di risposta:
{
"success": true,
"data": {
"fileId": "file789",
"uploadId": "upload123"
}
}
PUT /files/upload/multipart/url/{teamId}/{folderId}/{fileId}/{uploadId}/{partNumber}
Ottieni l’URL di caricamento per una parte specifica
Parametri del percorso:
teamId
- ID del teamfolderId
- ID della cartellafileId
- ID del file in fase di caricamentouploadId
- ID della sessione di caricamento in più partipartNumber
- Numero di parte (1-10000)
Corpo della richiesta:
{
"contentType": "video/mp4"
}
Risposte:
200
- URL di caricamento generato correttamente400
- Parametri della richiesta non validi500
- Errore del server
Esempio di risposta:
{
"success": true,
"data": {
"uploadUrl": "https://presigned-s3-url.com/part1"
}
}
PUT /files/upload/multipart/finalize/{teamId}/{folderId}/{fileId}/{uploadId}
Finalizza un caricamento in più parti
Parametri del percorso:
teamId
- ID del teamfolderId
- ID della cartellafileId
- ID del file in fase di caricamentouploadId
- ID della sessione di caricamento in più parti
Corpo della richiesta:
{
"file": {
"contentType": "video/mp4",
"recorderName": "John Doe",
"recorderEmail": "john@example.com",
"name": "La mia registrazione",
"description": "Una sessione video registrata",
"notes": [
{
"text": "Punto importante discusso",
"timestamp": 1234567890
}
]
}
}
Risposte:
200
- Caricamento finalizzato correttamente400
- Parametri della richiesta non validi404
- Caricamento attivo non trovato500
- Errore del server
PUT /files/upload/multipart/fallback/{teamId}/{folderId}/{fileId}/{partNumber}
Carica la parte del file tramite backend (fallback)
Parametri del percorso:
teamId
- ID del teamfolderId
- ID della cartellafileId
- ID del file in fase di caricamentopartNumber
- Numero di parte (1-10000)
Dati del modulo:
file
- La parte del file da caricarecontentType
- Tipo MIME del file in fase di caricamento
Risposte:
200
- Parte caricata correttamente400
- Parametri della richiesta non validi500
- Errore del server
Gestione account
POST /v2/account/tag
Aggiungi un tag all’utente autenticato
Corpo della richiesta:
{
"key": "color",
"value": "red"
}
Risposte:
200
- Tag aggiunto correttamente400
- Parametri della richiesta non validi
PUT /account/profile
Aggiorna il profilo dell’utente autenticato
Corpo della richiesta:
{
"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"
}
Risposte:
200
- Profilo aggiornato correttamente400
- Parametri della richiesta non validi
Funzionalità avanzate
Analisi IA
Usa l’IA per analizzare le tue registrazioni e ottenere informazioni dettagliate:
// Richiedi l'analisi IA di una registrazione
const analysis = await fetch(`/v2/files/${fileId}/ask/multimodal`, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
promptText: "Quali sono i punti di discussione chiave?",
mediaAnalysisOptions: {
transcript: {
segments: [{ start: 0, end: 300 }]
},
video: {
segments: [{ start: 0, end: 300 }]
}
}
})
});
Operazioni batch
Gestisci in modo efficiente più registrazioni:
// Tagga più registrazioni
async function batchTag(fileIds, tag) {
const promises = fileIds.map(fileId =>
fetch(`/v2/files/${fileId}/tag`, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify(tag)
})
);
await Promise.all(promises);
}
Gestione degli errori
Codici di errore comuni
400
: Parametri della richiesta non validi403
: Limite di utilizzo dell’IA superato o accesso non autorizzato404
: Risorsa non trovata500
: Errore del server
Formato della risposta di errore
Le risposte di errore in genere seguono questo formato:
{
"success": false,
"message": "Messaggio di errore dettagliato"
}
Esempi
Impostazione dei webhook del team
I webhook ti consentono di ricevere aggiornamenti in tempo reale quando le registrazioni vengono elaborate:
// Registra un nuovo webhook per il tuo team
async function registerTeamWebhook(teamId, webhookUrl, webhookName) {
const response = await fetch(`/v2/team/${teamId}/integrations/webhook`, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: webhookUrl,
name: webhookName
})
});
return await response.json();
}
// Esempio di utilizzo
const result = await registerTeamWebhook(
'team123',
'https://your-domain.com/webhooks/screenapp',
'Aggiornamenti di registrazione'
);
Caricamento ed elaborazione di un file di grandi dimensioni
Per i file di dimensioni superiori a 100 MB, utilizzare il flusso di caricamento in più parti:
// 1. Inizializza il caricamento
const initResponse = await fetch(`/v2/files/upload/multipart/init/${teamId}/${folderId}`, {
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
contentType: 'video/mp4'
})
});
const { data: { fileId, uploadId } } = await initResponse.json();
// 2. Dividi il file in blocchi e carica ogni parte
const CHUNK_SIZE = 5 * 1024 * 1024; // Blocchi da 5 MB
const totalParts = Math.ceil(file.size / CHUNK_SIZE);
for (let partNumber = 1; partNumber <= totalParts; partNumber++) {
// Ottieni l'URL di caricamento per questa parte
const urlResponse = await fetch(
`/v2/files/upload/multipart/url/${teamId}/${folderId}/${fileId}/${uploadId}/${partNumber}`,
{
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
contentType: 'video/mp4'
})
}
);
const { data: { uploadUrl } } = await urlResponse.json();
// Crea il blocco dal file
const start = (partNumber - 1) * CHUNK_SIZE;
const end = Math.min(start + CHUNK_SIZE, file.size);
const chunk = file.slice(start, end);
// Carica il blocco direttamente su S3
await fetch(uploadUrl, {
method: 'PUT',
body: chunk,
headers: {
'Content-Type': 'video/mp4'
}
});
}
// 3. Finalizza il caricamento
const finalizeResponse = await fetch(
`/v2/files/upload/multipart/finalize/${teamId}/${folderId}/${fileId}/${uploadId}`,
{
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
file: {
contentType: 'video/mp4',
name: 'Registrazione della riunione con il cliente',
description: 'Revisione trimestrale con il cliente',
recorderName: 'Jane Smith',
recorderEmail: 'jane@example.com'
}
})
}
);