Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,78 @@
{
"\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n": "\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n6. Click **Connect** from below and allow access to your account.\n7. Save\n",
"Upload Video": "Video hochladen",
"Delete Video": "Video löschen",
"Add Video to Showcase": "Video zum Showcase hinzufügen",
"Add Video to Folder": "Video zum Ordner hinzufügen",
"Custom API Call": "Eigener API-Aufruf",
"Upload a video to your Vimeo account": "Laden Sie ein Video auf Ihr Vimeo-Konto hoch",
"Delete a video from Vimeo": "Ein Video von Vimeo löschen",
"Adds an existing video to a user's showcase": "Fügt ein existierendes Video dem Schaufenster eines Benutzers hinzu",
"Adds an existing video to a user's folder": "Fügt ein vorhandenes Video zum Ordner eines Benutzers hinzu",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Video URL": "Video-URL",
"Video Name": "Videoname",
"Description": "Beschreibung",
"Privacy": "Privatsphäre",
"Allow Embedding": "Einbetten erlauben",
"Allow Download": "Download erlauben",
"Content Rating": "Inhaltsbewertung",
"Folder ID": "Ordner-ID",
"Language": "Sprache",
"License": "Lizenz",
"Video ID": "Video ID",
"Showcase ID": "Showcase ID",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"URL of the video file to upload": "URL der hochzuladenden Videodatei",
"Name for the video": "Name für das Video",
"Description for the video": "Beschreibung für das Video",
"Privacy setting for the video": "Datenschutzeinstellungen für das Video",
"Allow others to embed this video": "Erlaube anderen das Einbetten dieses Video",
"Allow others to download this video (not available for free Vimeo users)": "Erlaube anderen dieses Video herunterzuladen (nicht verfügbar für kostenlose Vimeo-Benutzer)",
"Content rating for the video": "Inhaltsbewertung für das Video",
"ID of the folder to add the video to": "ID des Ordners, zu dem das Video hinzugefügt wird",
"Language code for the video": "Sprachcode für das Video",
"License for the video": "Lizenz für das Video",
"ID of the showcase to add the video to": "ID des Schaufensters zum Hinzufügen des Videos",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"Everybody": "Alle",
"Contacts": "Kontakte",
"Embeddable but hidden": "Einbettbar, aber versteckt",
"Only you": "Nur du",
"Password protected": "Passwort geschützt",
"Only can be accessed with private link": "Nur mit privatem Link erreichbar",
"Vimeo users": "Vimeo users",
"All Right Reserved": "Alle Rechte vorbehalten",
"Attribution Required": "Zuordnung erforderlich",
"Attribution-ShareAlike": "Namensnennung-Alike",
"Attribution-NoDerivs": "Namensnennung-Knoten",
"Attribution-NonCommercial": "Namensnennung-Nicht-Kommerzielles",
"Attribution-NonCommercial-ShareAlike": "Namensnennung-Nichtkommerziell-ShareAlike",
"Attribution-NonCommercial-NoDerivs": "Namensnennung-Nichtkommerzial-NoDerivs",
"Public Domain": "Öffentliche Domäne",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD",
"New Video I've Liked": "Neues Video das ich gelesen habe",
"New Video by Search": "Neues Video nach Suche",
"New Video of Mine": "Neues Video von Mine",
"New Video by User": "Neues Video von Benutzer",
"Triggers when you like a new video on Vimeo": "Löst aus, wenn dir ein neues Video auf Vimeo gefällt",
"Triggers when a new video is added that matches a search query": "Wird ausgelöst, wenn ein neues Video hinzugefügt wird, das einer Suchanfrage entspricht",
"Triggers when you add/upload a new video": "Wird beim Hinzufügen/Hochladen eines neuen Videos ausgelöst",
"Triggers when another specified user adds a video": "Löst aus, wenn ein anderer spezifizierter Benutzer ein Video hinzufügt",
"Search Query": "Suchanfrage",
"User ID": "Benutzer-ID",
"Search term to monitor for new videos": "Suchbegriff für neue Videos",
"ID of the user to monitor for new videos": "ID des zu überwachenden Benutzers für neue Videos"
}

View File

@@ -0,0 +1,78 @@
{
"\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n": "\n### Para obtener tu token de acceso a la API de Vimeo, sigue estos pasos:\n\n1. Inicie sesión en su cuenta de Vimeo\n2. Cree su aplicación en Vimeo, vaya a https://developer. imeo.com/apps\n3. Después de crear la aplicación, copia **identificador de cliente** y rellena el campo **ID de cliente** debajo.\n4. Desplácese hacia abajo y copie los **secretos del cliente** y llénelo al campo **Nivel del cliente** de abajo.\n5. Desplácese hacia abajo y encuentre la sección \"Sus URL de devolución de llamada\", y añada una nueva URL. Asegúrese de copiar la **URL de redirección** del campo de abajo a la URL de redirección de Vimeo.\n6. Haz clic en **Conectar** desde abajo y permite el acceso a tu cuenta.\n7. Guarda\n",
"Upload Video": "Subir vídeo",
"Delete Video": "Eliminar vídeo",
"Add Video to Showcase": "Añadir vídeo al escaparate",
"Add Video to Folder": "Añadir vídeo a la carpeta",
"Custom API Call": "Llamada API personalizada",
"Upload a video to your Vimeo account": "Sube un vídeo a tu cuenta de Vimeo",
"Delete a video from Vimeo": "Eliminar un vídeo de Vimeo",
"Adds an existing video to a user's showcase": "Añade un vídeo existente al escaparate de un usuario",
"Adds an existing video to a user's folder": "Añade un vídeo existente a la carpeta de un usuario",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Video URL": "URL del vídeo",
"Video Name": "Nombre de vídeo",
"Description": "Descripción",
"Privacy": "Privacidad",
"Allow Embedding": "Permitir incrustación",
"Allow Download": "Permitir descarga",
"Content Rating": "Valoración de contenido",
"Folder ID": "ID Carpeta",
"Language": "Idioma",
"License": "Licencia",
"Video ID": "ID de vídeo",
"Showcase ID": "ID de muestra",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"URL of the video file to upload": "URL del archivo de vídeo a subir",
"Name for the video": "Nombre del vídeo",
"Description for the video": "Descripción del vídeo",
"Privacy setting for the video": "Configuración de privacidad para el vídeo",
"Allow others to embed this video": "Permitir que otros incrusten este video",
"Allow others to download this video (not available for free Vimeo users)": "Permitir a otros descargar este video (no disponible para usuarios Vimeo gratis)",
"Content rating for the video": "Calificación de contenido para el vídeo",
"ID of the folder to add the video to": "ID de la carpeta a la que agregar el vídeo",
"Language code for the video": "Código de idioma del vídeo",
"License for the video": "Licencia para el vídeo",
"ID of the showcase to add the video to": "ID del escaparate al que añadir el vídeo",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"Everybody": "Todo el mundo",
"Contacts": "Contactos",
"Embeddable but hidden": "Incrustable, pero oculto",
"Only you": "Sólo tú",
"Password protected": "Protegido por contraseña",
"Only can be accessed with private link": "Sólo se puede acceder con un enlace privado",
"Vimeo users": "Vimeo users",
"All Right Reserved": "Todos los derechos reservados",
"Attribution Required": "Atribución requerida",
"Attribution-ShareAlike": "Atribución-Compartir Igual",
"Attribution-NoDerivs": "Atribución-Sin derivados",
"Attribution-NonCommercial": "Atribución-No Comercial",
"Attribution-NonCommercial-ShareAlike": "Atribución-No Comercial-CompartirIgual",
"Attribution-NonCommercial-NoDerivs": "Atribución-No Comercial-Sin derivados",
"Public Domain": "Dominio público",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO",
"New Video I've Liked": "Nuevo video que me gusta",
"New Video by Search": "Nuevo vídeo por búsqueda",
"New Video of Mine": "Nuevo vídeo de la mina",
"New Video by User": "Nuevo vídeo por usuario",
"Triggers when you like a new video on Vimeo": "Dispara cuando te guste un nuevo vídeo en Vimeo",
"Triggers when a new video is added that matches a search query": "Dispara cuando se agrega un nuevo vídeo que coincida con una consulta de búsqueda",
"Triggers when you add/upload a new video": "Dispara cuando agregas/subas un nuevo vídeo",
"Triggers when another specified user adds a video": "Dispara cuando otro usuario especificado agrega un video",
"Search Query": "Buscar consulta",
"User ID": "ID Usuario",
"Search term to monitor for new videos": "Término de búsqueda para monitorear nuevos vídeos",
"ID of the user to monitor for new videos": "ID del usuario para monitorizar nuevos vídeos"
}

View File

@@ -0,0 +1,78 @@
{
"\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n": "\n### Pour obtenir votre jeton d'accès à l'API Vimeo, suivez ces étapes :\n\n1. Connectez-vous à votre compte Vimeo\n2. Créez votre application sur Vimeo, accédez à https://developer. imeo.com/apps\n3. Après avoir créé l'application, copiez **Identifiant client** et remplissez-le dans le champ **ID client** ci-dessous.\n4. Faites défiler vers le bas et copiez les **secrets du client** et remplissez-le dans le champ **Secret du client** ci-dessous.\n5. Faites défiler vers le bas et trouvez la section \"Vos URLs\" et ajoutez une nouvelle URL. Assurez-vous de copier l'**URL de redirection** du champ ci-dessous vers l'URL de redirection de Vimeo.\n6. Cliquez sur **Connecter** à partir du bas et autorisez l'accès à votre compte.\n7. Enregistrez\n",
"Upload Video": "Charger une vidéo",
"Delete Video": "Supprimer la vidéo",
"Add Video to Showcase": "Ajouter une vidéo à la démonstration",
"Add Video to Folder": "Ajouter une vidéo au dossier",
"Custom API Call": "Appel d'API personnalisé",
"Upload a video to your Vimeo account": "Téléchargez une vidéo sur votre compte Vimeo",
"Delete a video from Vimeo": "Supprimer une vidéo de Vimeo",
"Adds an existing video to a user's showcase": "Ajoute une vidéo existante à la vitrine d'un utilisateur",
"Adds an existing video to a user's folder": "Ajoute une vidéo existante au dossier d'un utilisateur",
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
"Video URL": "URL de la vidéo",
"Video Name": "Nom de la vidéo",
"Description": "Libellé",
"Privacy": "Confidentialité",
"Allow Embedding": "Autoriser l'intégration",
"Allow Download": "Autoriser le téléchargement",
"Content Rating": "Évaluation du contenu",
"Folder ID": "ID du dossier",
"Language": "Langue",
"License": "Licence",
"Video ID": "ID Vidéo",
"Showcase ID": "Identifiant de la vitrine",
"Method": "Méthode",
"Headers": "Headers",
"Query Parameters": "Paramètres de requête",
"Body": "Body",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
"URL of the video file to upload": "URL du fichier vidéo à télécharger",
"Name for the video": "Nom de la vidéo",
"Description for the video": "Description de la vidéo",
"Privacy setting for the video": "Paramètres de confidentialité pour la vidéo",
"Allow others to embed this video": "Permettre aux autres d'intégrer cette vidéo",
"Allow others to download this video (not available for free Vimeo users)": "Autoriser d'autres personnes à télécharger cette vidéo (non disponible pour les utilisateurs de Vimeo gratuits)",
"Content rating for the video": "Évaluation du contenu pour la vidéo",
"ID of the folder to add the video to": "ID du dossier à ajouter à la vidéo",
"Language code for the video": "Code de langue pour la vidéo",
"License for the video": "Licence pour la vidéo",
"ID of the showcase to add the video to": "ID de la vitrine à ajouter à la vidéo",
"Authorization headers are injected automatically from your connection.": "Les Headers d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
"Everybody": "Tout le monde",
"Contacts": "Contacts",
"Embeddable but hidden": "Intégrable mais caché",
"Only you": "Seulement vous",
"Password protected": "Protégé par mot de passe",
"Only can be accessed with private link": "Uniquement accessible avec un lien privé",
"Vimeo users": "Vimeo users",
"All Right Reserved": "Tous droits réservés",
"Attribution Required": "Attribution requise",
"Attribution-ShareAlike": "Attribution-Partage à l'identique",
"Attribution-NoDerivs": "Attribution-Pas de Modification",
"Attribution-NonCommercial": "Attribution-Non Commercial",
"Attribution-NonCommercial-ShareAlike": "Attribution-Pas d'Utilisation Commerciale-Partage à l'identique",
"Attribution-NonCommercial-NoDerivs": "Attribution-Pas d'Utilisation Commerciale-Pas de Modification",
"Public Domain": "Domaine public",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Video I've Liked": "Nouvelle vidéo que j'ai aimé",
"New Video by Search": "Nouvelle vidéo par recherche",
"New Video of Mine": "Nouvelle vidéo de la mienne",
"New Video by User": "Nouvelle vidéo par utilisateur",
"Triggers when you like a new video on Vimeo": "Déclenche quand vous aimez une nouvelle vidéo sur Vimeo",
"Triggers when a new video is added that matches a search query": "Déclenche quand une nouvelle vidéo est ajoutée qui correspond à une requête de recherche",
"Triggers when you add/upload a new video": "Déclenche lorsque vous ajoutez/téléchargez une nouvelle vidéo",
"Triggers when another specified user adds a video": "Déclenche quand un autre utilisateur spécifié ajoute une vidéo",
"Search Query": "Requête de recherche",
"User ID": "Identifiant de l'utilisateur",
"Search term to monitor for new videos": "Terme de recherche à surveiller pour les nouvelles vidéos",
"ID of the user to monitor for new videos": "ID de l'utilisateur à surveiller pour les nouvelles vidéos"
}

View File

@@ -0,0 +1,78 @@
{
"\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n": "\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n6. Click **Connect** from below and allow access to your account.\n7. Save\n",
"Upload Video": "動画をアップロード",
"Delete Video": "ビデオを削除",
"Add Video to Showcase": "ショーケースにビデオを追加",
"Add Video to Folder": "フォルダにビデオを追加",
"Custom API Call": "カスタムAPI通話",
"Upload a video to your Vimeo account": "Vimeoアカウントに動画をアップロード",
"Delete a video from Vimeo": "Vimeo から動画を削除する",
"Adds an existing video to a user's showcase": "ユーザーのショーケースに既存のビデオを追加します",
"Adds an existing video to a user's folder": "既存のビデオをユーザーのフォルダに追加します",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Video URL": "動画の URL",
"Video Name": "ビデオ名",
"Description": "Description",
"Privacy": "プライバシー",
"Allow Embedding": "埋め込みを許可する",
"Allow Download": "ダウンロードを許可",
"Content Rating": "コンテンツの評価",
"Folder ID": "フォルダID",
"Language": "言語",
"License": "ライセンス",
"Video ID": "ビデオ ID",
"Showcase ID": "ショーケースID",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"URL of the video file to upload": "アップロードするビデオファイルのURL",
"Name for the video": "ビデオの名前",
"Description for the video": "ビデオの説明",
"Privacy setting for the video": "ビデオのプライバシー設定",
"Allow others to embed this video": "他のユーザーがこのビデオを埋め込むことを許可する",
"Allow others to download this video (not available for free Vimeo users)": "この動画を他のユーザーにダウンロードさせる無料のVimeoユーザーは利用できません",
"Content rating for the video": "動画のコンテンツ評価",
"ID of the folder to add the video to": "ビデオを追加するフォルダのID",
"Language code for the video": "ビデオの言語コード",
"License for the video": "ビデオのライセンス",
"ID of the showcase to add the video to": "動画を追加するショーケースの ID",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"Everybody": "誰でも",
"Contacts": "連絡先",
"Embeddable but hidden": "埋め込み可能だが非表示にする",
"Only you": "あなたのみ",
"Password protected": "パスワード保護",
"Only can be accessed with private link": "プライベートリンクでのみアクセスできます",
"Vimeo users": "Vimeo users",
"All Right Reserved": "すべての右予約済み",
"Attribution Required": "帰属が必要です",
"Attribution-ShareAlike": "表示-継承のような",
"Attribution-NoDerivs": "表示 - NoDerivs",
"Attribution-NonCommercial": "表示-<unk>",
"Attribution-NonCommercial-ShareAlike": "表示-非営利-継承のような",
"Attribution-NonCommercial-NoDerivs": "表示-非営利-NoDerivs",
"Public Domain": "パブリックドメイン",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭",
"New Video I've Liked": "私が気に入った新しいビデオ",
"New Video by Search": "検索による新しいビデオ",
"New Video of Mine": "私の新しいビデオ",
"New Video by User": "ユーザーによる新しいビデオ",
"Triggers when you like a new video on Vimeo": "Vimeo で新しい動画を気に入った時にトリガーする",
"Triggers when a new video is added that matches a search query": "検索クエリに一致する新しいビデオを追加したときにトリガーします",
"Triggers when you add/upload a new video": "新しいビデオを追加/アップロードしたときにトリガーします",
"Triggers when another specified user adds a video": "別の指定したユーザーがビデオを追加したときにトリガーします",
"Search Query": "検索クエリ",
"User ID": "ユーザー ID",
"Search term to monitor for new videos": "新しい動画を監視する検索期間",
"ID of the user to monitor for new videos": "新しいビデオを監視するユーザーのID"
}

View File

@@ -0,0 +1,78 @@
{
"\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n": "\n### Om je Vimeo API toegangstoken te verkrijgen, volg de stappen:\n\n1. Log in op uw Vimeo account\n2. Maak uw app op Vimeo, navigeer naar https://developer. imeo.com/apps\n3. Kopieer na het aanmaken van de app **Client ID** en vul het in naar **Client ID** veld hieronder.\n4. Scroll naar beneden en kopieer **Client geheimen** en vul het in naar **Client Secret** veld hieronder.\n5. Scroll naar beneden en vind \"Your callback URLs\" sectie en voeg nieuwe URL toe. Zorg ervoor dat u de **Redirect URL** kopieert van onderstaand veld naar Vimeo omleidings-URL.\n6. Klik op **Verbinden** van onderaan en geef toegang tot uw account.\n7. Sla\n",
"Upload Video": "Video uploaden",
"Delete Video": "Video verwijderen",
"Add Video to Showcase": "Voeg video toe aan showcase",
"Add Video to Folder": "Video toevoegen aan map",
"Custom API Call": "Custom API Call",
"Upload a video to your Vimeo account": "Upload een video naar uw Vimeo account",
"Delete a video from Vimeo": "Verwijder een video van Vimeo",
"Adds an existing video to a user's showcase": "Voegt een bestaande video toe aan de showcase van een gebruiker",
"Adds an existing video to a user's folder": "Voegt een bestaande video toe aan de map van een gebruiker",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Video URL": "Video URL",
"Video Name": "Video naam",
"Description": "Beschrijving",
"Privacy": "Privacy",
"Allow Embedding": "Insluiten toestaan",
"Allow Download": "Download toestaan",
"Content Rating": "Beoordeling inhoud",
"Folder ID": "Map ID",
"Language": "Taal",
"License": "Licentie",
"Video ID": "Video ID",
"Showcase ID": "Showcase ID",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"URL of the video file to upload": "URL van het te uploaden video bestand",
"Name for the video": "Naam voor de video",
"Description for the video": "Beschrijving voor de video",
"Privacy setting for the video": "Privacyinstelling voor de video",
"Allow others to embed this video": "Toestaan dat anderen deze video insluiten",
"Allow others to download this video (not available for free Vimeo users)": "Sta anderen toe om deze video te downloaden (niet beschikbaar voor gratis Vimeo gebruikers)",
"Content rating for the video": "Beoordeling van de inhoud voor de video",
"ID of the folder to add the video to": "ID van de map om de video aan toe te voegen",
"Language code for the video": "Taalcode voor de video",
"License for the video": "Licentie voor de video",
"ID of the showcase to add the video to": "ID van de showcase om de video aan toe te voegen",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"Everybody": "Iedereen",
"Contacts": "Contactpersonen",
"Embeddable but hidden": "Insluitbaar, maar verborgen",
"Only you": "Alleen jij",
"Password protected": "Wachtwoord beveiligd",
"Only can be accessed with private link": "Alleen via een privélink kan worden benaderd",
"Vimeo users": "Vimeo users",
"All Right Reserved": "Alle Rechts Gereserveerd",
"Attribution Required": "Attributie vereist",
"Attribution-ShareAlike": "Naamsvermelding-GelijkDelen",
"Attribution-NoDerivs": "Naamsvermelding-GeenAfgeleideWerken",
"Attribution-NonCommercial": "Naamsvermelding-NietCommercieel",
"Attribution-NonCommercial-ShareAlike": "Naamsvermelding-NietCommercieel-GelijkDelen",
"Attribution-NonCommercial-NoDerivs": "Naamsvermelding-NietCommercieel-GeenAfgeleideWerken",
"Public Domain": "Publiek domein",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD",
"New Video I've Liked": "Nieuwe Video die ik leuk vind",
"New Video by Search": "Nieuwe video op zoek naar",
"New Video of Mine": "Nieuwe video van mijn",
"New Video by User": "Nieuwe video door gebruiker",
"Triggers when you like a new video on Vimeo": "Triggert wanneer je een nieuwe video op Vimeo leuk vindt",
"Triggers when a new video is added that matches a search query": "Triggert wanneer een nieuwe video is toegevoegd die overeenkomt met een zoekopdracht",
"Triggers when you add/upload a new video": "Triggert wanneer je een nieuwe video toevoegt/upload",
"Triggers when another specified user adds a video": "Triggert wanneer een andere gebruiker een video toevoegt",
"Search Query": "Zoek query",
"User ID": "Gebruiker ID",
"Search term to monitor for new videos": "Zoek term om te bekijken voor nieuwe video's",
"ID of the user to monitor for new videos": "ID van de gebruiker voor nieuwe video's"
}

View File

@@ -0,0 +1,78 @@
{
"\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n": "\n### Para obter o seu token de acesso da Vimeo, siga estes passos:\n\n1. Faça login na sua conta Vimeo\n2. Crie seu aplicativo no Vimeo, navegue até https://developer. imeo.com/apps\n3. Depois de criar o aplicativo, copie **Identificador do cliente** e preencha-o para o campo **ID do cliente** abaixo.\n4. Desça e copie **Segredos do cliente** e preencha-o para o campo **Segredo do Cliente** abaixo.\n5. Deslize para baixo e encontre a seção \"Suas URLs de chamada\" e adicione uma nova URL. Certifique-se de copiar o **URL de redirecionamento** do campo abaixo para o URL de redirecionamento do Vimeo.\n6. Clique em **Conectar** abaixo e permita o acesso à sua conta.\n7. Salvar\n",
"Upload Video": "Enviar vídeo",
"Delete Video": "Excluir vídeo",
"Add Video to Showcase": "Adicionar Vídeo ao Mostruário",
"Add Video to Folder": "Adicionar vídeo à pasta",
"Custom API Call": "Chamada de API personalizada",
"Upload a video to your Vimeo account": "Envie um vídeo para sua conta Vimeo",
"Delete a video from Vimeo": "Excluir um vídeo do Vimeo",
"Adds an existing video to a user's showcase": "Adiciona um vídeo existente à vitrine de um usuário",
"Adds an existing video to a user's folder": "Adiciona um vídeo existente à pasta do usuário",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Video URL": "URL do vídeo",
"Video Name": "Nome do Vídeo",
"Description": "Descrição",
"Privacy": "Privacidade",
"Allow Embedding": "Permitir integração",
"Allow Download": "Permitir Download",
"Content Rating": "Classificação do conteúdo",
"Folder ID": "ID da pasta",
"Language": "IDIOMA",
"License": "Tipo:",
"Video ID": "ID do Vídeo",
"Showcase ID": "ID do mostruário",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"URL of the video file to upload": "URL do arquivo de vídeo para upload",
"Name for the video": "Nome para o vídeo",
"Description for the video": "Descrição do vídeo",
"Privacy setting for the video": "Configuração de privacidade para o vídeo",
"Allow others to embed this video": "Permitir que outros incorporem este vídeo",
"Allow others to download this video (not available for free Vimeo users)": "Permitir que outros baixem este vídeo (não disponível para usuários Vimeo gratuitos)",
"Content rating for the video": "Classificação do conteúdo para o vídeo",
"ID of the folder to add the video to": "ID da pasta à qual adicionar o vídeo",
"Language code for the video": "Código do idioma para o vídeo",
"License for the video": "Licença para o vídeo",
"ID of the showcase to add the video to": "ID da vitrine para adicionar o vídeo a",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"Everybody": "Todos",
"Contacts": "CONTATOS",
"Embeddable but hidden": "Incorporável mas oculto",
"Only you": "Apenas você",
"Password protected": "Senha protegida",
"Only can be accessed with private link": "Apenas pode ser acessado com um link privado",
"Vimeo users": "Vimeo users",
"All Right Reserved": "Todos os Direitos Reservados",
"Attribution Required": "Atribuição Necessária",
"Attribution-ShareAlike": "Atribuição-CompartilhaIgual",
"Attribution-NoDerivs": "Atribuição-NoDerivs",
"Attribution-NonCommercial": "Atribuição-Não Comercial",
"Attribution-NonCommercial-ShareAlike": "Atribuição-Não Comercial-Partilha de Ativos",
"Attribution-NonCommercial-NoDerivs": "Atribuição-NãoComercial-NoDerivs",
"Public Domain": "Domínio público",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA",
"New Video I've Liked": "Novo vídeo que eu gostei",
"New Video by Search": "Novo vídeo pela busca",
"New Video of Mine": "Novo Vídeo da Mina",
"New Video by User": "Novo vídeo por usuário",
"Triggers when you like a new video on Vimeo": "Aciona quando você gosta de um novo vídeo no Vimeo",
"Triggers when a new video is added that matches a search query": "Aciona quando um novo vídeo é adicionado que corresponde a uma consulta de pesquisa",
"Triggers when you add/upload a new video": "Dispara quando você adicionar/enviar um novo vídeo",
"Triggers when another specified user adds a video": "Dispara quando outro usuário especificado adiciona um vídeo",
"Search Query": "Consulta de Pesquisa",
"User ID": "ID de usuário",
"Search term to monitor for new videos": "Termo de pesquisa para monitorar novos vídeos",
"ID of the user to monitor for new videos": "ID do usuário a monitorar para novos vídeos"
}

View File

@@ -0,0 +1,78 @@
{
"\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n": "\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n6. Click **Connect** from below and allow access to your account.\n7. Save\n",
"Upload Video": "Upload Video",
"Delete Video": "Delete Video",
"Add Video to Showcase": "Add Video to Showcase",
"Add Video to Folder": "Add Video to Folder",
"Custom API Call": "Custom API Call",
"Upload a video to your Vimeo account": "Upload a video to your Vimeo account",
"Delete a video from Vimeo": "Delete a video from Vimeo",
"Adds an existing video to a user's showcase": "Adds an existing video to a user's showcase",
"Adds an existing video to a user's folder": "Adds an existing video to a user's folder",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Video URL": "Video URL",
"Video Name": "Video Name",
"Description": "Description",
"Privacy": "Privacy",
"Allow Embedding": "Allow Embedding",
"Allow Download": "Allow Download",
"Content Rating": "Content Rating",
"Folder ID": "Folder ID",
"Language": "Language",
"License": "License",
"Video ID": "Video ID",
"Showcase ID": "Showcase ID",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"URL of the video file to upload": "URL of the video file to upload",
"Name for the video": "Name for the video",
"Description for the video": "Description for the video",
"Privacy setting for the video": "Privacy setting for the video",
"Allow others to embed this video": "Allow others to embed this video",
"Allow others to download this video (not available for free Vimeo users)": "Allow others to download this video (not available for free Vimeo users)",
"Content rating for the video": "Content rating for the video",
"ID of the folder to add the video to": "ID of the folder to add the video to",
"Language code for the video": "Language code for the video",
"License for the video": "License for the video",
"ID of the showcase to add the video to": "ID of the showcase to add the video to",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Everybody": "Everybody",
"Contacts": "Contacts",
"Embeddable but hidden": "Embeddable but hidden",
"Only you": "Only you",
"Password protected": "Password protected",
"Only can be accessed with private link": "Only can be accessed with private link",
"Vimeo users": "Vimeo users",
"All Right Reserved": "All Right Reserved",
"Attribution Required": "Attribution Required",
"Attribution-ShareAlike": "Attribution-ShareAlike",
"Attribution-NoDerivs": "Attribution-NoDerivs",
"Attribution-NonCommercial": "Attribution-NonCommercial",
"Attribution-NonCommercial-ShareAlike": "Attribution-NonCommercial-ShareAlike",
"Attribution-NonCommercial-NoDerivs": "Attribution-NonCommercial-NoDerivs",
"Public Domain": "Public Domain",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Video I've Liked": "New Video I've Liked",
"New Video by Search": "New Video by Search",
"New Video of Mine": "New Video of Mine",
"New Video by User": "New Video by User",
"Triggers when you like a new video on Vimeo": "Triggers when you like a new video on Vimeo",
"Triggers when a new video is added that matches a search query": "Triggers when a new video is added that matches a search query",
"Triggers when you add/upload a new video": "Triggers when you add/upload a new video",
"Triggers when another specified user adds a video": "Triggers when another specified user adds a video",
"Search Query": "Search Query",
"User ID": "User ID",
"Search term to monitor for new videos": "Search term to monitor for new videos",
"ID of the user to monitor for new videos": "ID of the user to monitor for new videos"
}

View File

@@ -0,0 +1,78 @@
{
"\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n": "\n### To obtain your Vimeo API access token, follow these steps:\n\n1. Login to your Vimeo account\n2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps\n3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.\n4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.\n5. Scroll down and find \"Your callback URLs\" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.\n6. Click **Connect** from below and allow access to your account.\n7. Save\n",
"Upload Video": "Upload Video",
"Delete Video": "Delete Video",
"Add Video to Showcase": "Add Video to Showcase",
"Add Video to Folder": "Add Video to Folder",
"Custom API Call": "自定义 API 呼叫",
"Upload a video to your Vimeo account": "Upload a video to your Vimeo account",
"Delete a video from Vimeo": "Delete a video from Vimeo",
"Adds an existing video to a user's showcase": "Adds an existing video to a user's showcase",
"Adds an existing video to a user's folder": "Adds an existing video to a user's folder",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Video URL": "Video URL",
"Video Name": "Video Name",
"Description": "描述",
"Privacy": "Privacy",
"Allow Embedding": "Allow Embedding",
"Allow Download": "Allow Download",
"Content Rating": "Content Rating",
"Folder ID": "Folder ID",
"Language": "Language",
"License": "License",
"Video ID": "Video ID",
"Showcase ID": "Showcase ID",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"URL of the video file to upload": "URL of the video file to upload",
"Name for the video": "Name for the video",
"Description for the video": "Description for the video",
"Privacy setting for the video": "Privacy setting for the video",
"Allow others to embed this video": "Allow others to embed this video",
"Allow others to download this video (not available for free Vimeo users)": "Allow others to download this video (not available for free Vimeo users)",
"Content rating for the video": "Content rating for the video",
"ID of the folder to add the video to": "ID of the folder to add the video to",
"Language code for the video": "Language code for the video",
"License for the video": "License for the video",
"ID of the showcase to add the video to": "ID of the showcase to add the video to",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Everybody": "Everybody",
"Contacts": "Contacts",
"Embeddable but hidden": "Embeddable but hidden",
"Only you": "Only you",
"Password protected": "Password protected",
"Only can be accessed with private link": "Only can be accessed with private link",
"Vimeo users": "Vimeo users",
"All Right Reserved": "All Right Reserved",
"Attribution Required": "Attribution Required",
"Attribution-ShareAlike": "Attribution-ShareAlike",
"Attribution-NoDerivs": "Attribution-NoDerivs",
"Attribution-NonCommercial": "Attribution-NonCommercial",
"Attribution-NonCommercial-ShareAlike": "Attribution-NonCommercial-ShareAlike",
"Attribution-NonCommercial-NoDerivs": "Attribution-NonCommercial-NoDerivs",
"Public Domain": "Public Domain",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色",
"New Video I've Liked": "New Video I've Liked",
"New Video by Search": "New Video by Search",
"New Video of Mine": "New Video of Mine",
"New Video by User": "New Video by User",
"Triggers when you like a new video on Vimeo": "Triggers when you like a new video on Vimeo",
"Triggers when a new video is added that matches a search query": "Triggers when a new video is added that matches a search query",
"Triggers when you add/upload a new video": "Triggers when you add/upload a new video",
"Triggers when another specified user adds a video": "Triggers when another specified user adds a video",
"Search Query": "Search Query",
"User ID": "User ID",
"Search term to monitor for new videos": "Search term to monitor for new videos",
"ID of the user to monitor for new videos": "ID of the user to monitor for new videos"
}

View File

@@ -0,0 +1,42 @@
import { createPiece, OAuth2PropertyValue } from "@activepieces/pieces-framework";
import { vimeoAuth } from "./lib/auth";
import { uploadVideo } from './lib/actions/upload-video';
import { deleteVideo } from './lib/actions/delete-video';
import { addVideoToShowcase } from './lib/actions/add-video-to-showcase';
import { addVideoToFolder } from './lib/actions/add-video-to-folder';
import { newVideoLiked } from './lib/triggers/new-video-liked';
import { newVideoBySearch } from './lib/triggers/new-video-by-search';
import { newVideoOfMine } from './lib/triggers/new-video-of-mine';
import { newVideoByUser } from './lib/triggers/new-video-by-user';
import { PieceCategory } from "@activepieces/shared";
import { createCustomApiCallAction } from "@activepieces/pieces-common";
export const vimeo = createPiece({
displayName: "Vimeo",
auth: vimeoAuth,
minimumSupportedRelease: '0.36.1',
logoUrl: "https://cdn.activepieces.com/pieces/vimeo.png",
categories: [PieceCategory.CONTENT_AND_FILES],
authors: ['privatestefans','sanket-a11y'],
actions: [
uploadVideo,
deleteVideo,
addVideoToShowcase,
addVideoToFolder,
createCustomApiCallAction({
auth: vimeoAuth,
baseUrl: () => "https://api.vimeo.com",
authMapping: async (auth) => {
return {
Authorization: `Bearer ${(auth as OAuth2PropertyValue).access_token}`,
};
},
}),
],
triggers: [
newVideoLiked,
newVideoBySearch,
newVideoOfMine,
newVideoByUser
],
});

View File

@@ -0,0 +1,39 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { vimeoAuth } from '../auth';
import { apiRequest, userFolderDropdown, userVideoDropdown } from '../common';
import { HttpMethod } from '@activepieces/pieces-common';
export const addVideoToFolder = createAction({
name: 'add_video_to_folder',
displayName: 'Add Video to Folder',
description: 'Adds an existing video to a user\'s folder',
auth: vimeoAuth,
props: {
videoId: userVideoDropdown,
folderId: userFolderDropdown,
},
async run({ auth, propsValue }) {
const { videoId, folderId } = propsValue;
if (!folderId) throw new Error("Folder selection is required. Please select a folder to add the video to.");
// require a access token with `interact` scope
const response = await apiRequest({
auth,
path: `/me/projects/${folderId}/videos/${videoId}`,
method: HttpMethod.PUT,
});
if(response.status === 204){
return {
success: true,
message: `Video '${videoId}' added to folder '${folderId}' successfully`
};
}
return {
success: false,
response
};
},
});

View File

@@ -0,0 +1,62 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { vimeoAuth } from '../auth';
import { apiRequest, userVideoDropdown } from '../common';
import { HttpMethod } from '@activepieces/pieces-common';
export const addVideoToShowcase = createAction({
name: 'add_video_to_showcase',
displayName: 'Add Video to Showcase',
description: 'Adds an existing video to a user\'s showcase',
auth: vimeoAuth,
props: {
videoId: userVideoDropdown,
showcaseId: Property.Dropdown({
auth: vimeoAuth,
displayName: 'Showcase ID',
description: 'ID of the showcase to add the video to',
required: true,
refreshers: [],
options: async ({ auth }) => {
const response = await apiRequest({
auth,
path: '/me/albums',
method: HttpMethod.GET,
queryParams: {
per_page: '100',
},
});
const showcases = response.body.data.map((folder: any) => ({
value: folder.uri.split('/').pop(),
label: folder.name,
}));
return {
options: showcases,
};
},
}),
},
async run({ auth, propsValue }) {
const { videoId, showcaseId } = propsValue;
// require a access token with `edit` scope
const response = await apiRequest({
auth,
path: `/me/albums/${showcaseId}/videos/${videoId}`,
method: HttpMethod.PUT,
});
if(response.status === 204){
return {
success: true,
message: `Video '${videoId}' added to showcase '${showcaseId}' successfully`
};
}
return {
success: false,
response
};
},
});

View File

@@ -0,0 +1,36 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { vimeoAuth } from '../auth';
import { apiRequest, userVideoDropdown } from '../common';
import { HttpMethod } from '@activepieces/pieces-common';
export const deleteVideo = createAction({
name: 'delete_video',
displayName: 'Delete Video',
description: 'Delete a video from Vimeo',
auth: vimeoAuth,
props: {
videoId: userVideoDropdown,
},
async run({ auth, propsValue }) {
const { videoId } = propsValue;
const response = await apiRequest({
auth,
path: `/videos/${videoId}`,
method: HttpMethod.DELETE,
});
if(response.status === 204){
return {
success: true,
message: `Video '${videoId}' deleted successfully`
};
}
return {
success: false,
response
};
},
});

View File

@@ -0,0 +1,181 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { vimeoAuth } from '../auth';
import { apiRequest, userFolderDropdown } from '../common';
import { HttpMethod } from '@activepieces/pieces-common';
export const uploadVideo = createAction({
name: 'upload_video',
displayName: 'Upload Video',
description: 'Upload a video to your Vimeo account',
auth: vimeoAuth,
props: {
videoUrl: Property.ShortText({
displayName: 'Video URL',
description: 'URL of the video file to upload',
required: true,
}),
name: Property.ShortText({
displayName: 'Video Name',
description: 'Name for the video',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description: 'Description for the video',
required: false,
}),
privacy: Property.StaticDropdown({
displayName: 'Privacy',
description: 'Privacy setting for the video',
required: false,
defaultValue: 'anybody',
options: {
options: [
{ value: 'anybody', label: 'Everybody' },
{ value: 'contacts', label: 'Contacts' },
{ value: 'disable', label: 'Embeddable but hidden' },
{ value: 'nobody', label: 'Only you' },
{ value: 'password', label: 'Password protected' },
{ value: 'unlisted', label: 'Only can be accessed with private link' },
{ value: 'users', label: 'Vimeo users' },
],
},
}),
password: Property.DynamicProperties({
auth: vimeoAuth,
displayName: 'Privacy',
required: false,
refreshers: ['privacy'],
async props(propsValue): Promise<any> {
const privacy = propsValue['privacy'] as unknown as string;
if(privacy === 'password') {
return {
password: Property.ShortText({
displayName: 'Password',
description: 'Password required to view the video (only if privacy is "password")',
required: true,
}),
}
}
return {};
},
}),
allowEmbed: Property.Checkbox({
displayName: 'Allow Embedding',
description: 'Allow others to embed this video',
required: false,
defaultValue: true,
}),
allowDownload: Property.Checkbox({
displayName: 'Allow Download',
description: 'Allow others to download this video (not available for free Vimeo users)',
required: false,
defaultValue: false,
}),
contentRating: Property.Dropdown({
auth: vimeoAuth,
displayName: 'Content Rating',
description: 'Content rating for the video',
required: false,
refreshers: [],
options: async ({ auth }) => {
const response = await apiRequest({
auth,
path: '/contentratings',
method: HttpMethod.GET,
});
return {
options: response.body.data.map((rating: any) => ({
value: rating.code,
label: rating.name,
}))
};
},
}),
folderId: userFolderDropdown,
language: Property.Dropdown({
auth: vimeoAuth,
displayName: 'Language',
description: 'Language code for the video',
required: false,
refreshers: [],
options: async ({ auth }) => {
const response = await apiRequest({
auth,
path: '/languages?filter=texttracks',
method: HttpMethod.GET,
});
return {
options: response.body.data.map((language: any) => ({
value: language.code,
label: `${language.name} (${language.code})`,
})),
};
},
}),
license: Property.StaticDropdown({
displayName: 'License',
description: 'License for the video',
required: false,
defaultValue: '',
options: {
options: [
{ value: '', label: 'All Right Reserved' },
{ value: 'by', label: 'Attribution Required' },
{ value: 'by-sa', label: 'Attribution-ShareAlike' },
{ value: 'by-nd', label: 'Attribution-NoDerivs' },
{ value: 'by-nc', label: 'Attribution-NonCommercial' },
{ value: 'by-nc-sa', label: 'Attribution-NonCommercial-ShareAlike' },
{ value: 'by-nc-nd', label: 'Attribution-NonCommercial-NoDerivs' },
{ value: 'cc0', label: 'Public Domain' },
],
},
}),
},
async run({ auth, propsValue }) {
const { videoUrl, name, description, privacy, password, allowEmbed, allowDownload, contentRating, folderId, language, license } = propsValue;
const uploadData: any = {
upload: {
approach: 'pull',
link: encodeURI(videoUrl),
},
name: name,
privacy: {},
};
if (description) uploadData.description = description;
uploadData.privacy.view = privacy;
if (allowDownload) uploadData.privacy.download = allowDownload;
if (password && privacy === 'password') uploadData.password = password['password'];
uploadData.privacy.embed = allowEmbed ? 'public' : 'private';
// Add new properties
if (contentRating) uploadData.content_rating = contentRating;
if (language) uploadData.locale = language;
if (license) uploadData.license = license;
if (folderId) uploadData.folder_uri = `/me/projects/${folderId}`;
// require a access token with `upload` scope
const response = await apiRequest({
auth,
path: '/me/videos',
method: HttpMethod.POST,
body: uploadData,
});
const body = response.body;
if (!body.uri) {
throw new Error('Video upload failed: URI not found in response');
}
body.video_id = body.uri.split('/').pop();
return body;
},
});

View File

@@ -0,0 +1,21 @@
import { PieceAuth } from '@activepieces/pieces-framework';
const authGuide = `
### To obtain your Vimeo API access token, follow these steps:
1. Login to your Vimeo account
2. Create your app on Vimeo, navigate to https://developer.vimeo.com/apps
3. After creating the app, copy **Client identifier** and fill it to **Client ID** field below.
4. Scroll down and Copy **Client secrets** and fill it to **Client Secret** field below.
5. Scroll down and find "Your callback URLs" section, and add new URL. Make sure you copy the **Redirect URL** from the field below to Vimeo's redirect URL.
6. Click **Connect** from below and allow access to your account.
7. Save
`;
export const vimeoAuth = PieceAuth.OAuth2({
description: authGuide,
authUrl: 'https://api.vimeo.com/oauth/authorize',
tokenUrl: 'https://api.vimeo.com/oauth/access_token',
required: true,
scope: ['public', 'private', 'edit', 'upload', 'delete', 'interact'],
});

View File

@@ -0,0 +1,112 @@
import { httpClient, HttpMethod, AuthenticationType } from '@activepieces/pieces-common';
import { Property } from '@activepieces/pieces-framework';
import { vimeoAuth } from './auth';
export async function apiRequest({
auth,
path,
method = HttpMethod.GET,
body,
queryParams,
}: {
auth: any;
path: string;
method?: HttpMethod;
body?: any;
queryParams?: Record<string, string>;
}) {
const baseUrl = 'https://api.vimeo.com';
let headers: Record<string, string> | undefined = {
'Accept': 'application/vnd.vimeo.*+json;version=3.4',
};
if (body) {
if (body instanceof FormData) {
headers = { ...headers, 'Content-Type': 'multipart/form-data' };
} else if (body.constructor === Object) {
headers = { ...headers, 'Content-Type': 'application/json' };
}
}
try {
return await httpClient.sendRequest({
method,
url: `${baseUrl}${path}`,
body,
queryParams,
timeout: 30000,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.access_token,
},
...(headers ? { headers } : {}),
});
}
catch(err: any){
if (err.response?.body?.error) {
const vimeoError = err.response.body.error;
throw new Error(`Vimeo API error: ${vimeoError.description || vimeoError.message || vimeoError}`);
}
const statusCode = err.response?.status;
if (statusCode === 429) throw new Error('Rate limit exceeded. Please try again later.');
if (statusCode === 401) throw new Error('Authentication failed. Please check your Vimeo credentials.');
if (statusCode === 404) throw new Error('Resource not found.');
throw new Error(`Vimeo API error: ${err.message || err}`);
}
}
export const userFolderDropdown = Property.Dropdown({
auth: vimeoAuth,
displayName: 'Folder ID',
description: 'ID of the folder to add the video to',
required: false,
refreshers: [],
options: async ({ auth }) => {
const response = await apiRequest({
auth,
path: '/me/folders',
method: HttpMethod.GET,
queryParams: {
per_page: '100',
},
});
const folders = response.body.data.map((folder: any) => ({
value: folder.uri.split('/').pop(),
label: folder.name,
}));
return {
options: folders,
};
},
});
export const userVideoDropdown = Property.Dropdown({
auth: vimeoAuth,
displayName: 'Video ID',
required: true,
refreshers: [],
options: async ({ auth }) => {
const response = await apiRequest({
auth,
path: '/me/videos',
method: HttpMethod.GET,
queryParams: {
per_page: '100',
},
});
const videos = response.body.data.map((video: any) => ({
value: video.uri.split('/').pop(),
label: video.name,
}));
return {
options: videos,
};
},
});

View File

@@ -0,0 +1,560 @@
import { PiecePropValueSchema, Property, createTrigger, TriggerStrategy, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { vimeoAuth } from '../auth';
import { apiRequest } from '../common';
import { DedupeStrategy, Polling, pollingHelper, HttpMethod } from '@activepieces/pieces-common';
import dayjs from 'dayjs';
type Props = {
query: string;
};
const polling: Polling<AppConnectionValueForAuthProperty<typeof vimeoAuth>, Props> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, propsValue, lastFetchEpochMS }) {
const { query } = propsValue;
const response = await apiRequest({
auth,
path: '/videos',
method: HttpMethod.GET,
queryParams: {
query: query,
sort: 'date',
direction: 'desc',
per_page: '50',
},
});
const videos = response.body.data || [];
const newVideos = [];
for (const video of videos) {
const videoId = video.uri.split('/').pop();
const createdTime = dayjs(video.created_time).valueOf();
// If we have a last fetch time and this video is newer, add it to new videos
if (lastFetchEpochMS && createdTime > lastFetchEpochMS) {
newVideos.push(video);
}
// If no last fetch time (first run), add all videos
else if (!lastFetchEpochMS) {
newVideos.push(video);
}
video.video_id = videoId;
}
return newVideos.map((video) => ({
epochMilliSeconds: dayjs(video.created_time).valueOf(),
data: video,
}));
},
};
export const newVideoBySearch = createTrigger({
name: 'new_video_by_search',
displayName: 'New Video by Search',
description: 'Triggers when a new video is added that matches a search query',
auth: vimeoAuth,
props: {
query: Property.ShortText({
displayName: 'Search Query',
description: 'Search term to monitor for new videos',
required: true,
}),
},
type: TriggerStrategy.POLLING,
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
sampleData: {
"uri": "/videos/1113154536",
"name": "video title here",
"description": "video description here",
"type": "video",
"link": "https://i.vimeocdn.com/...",
"player_embed_url": "https://i.vimeocdn.com/...",
"duration": 50,
"width": 854,
"language": "en",
"height": 480,
"embed": {
"html": "<iframe>...</iframe>",
"badges": {
"hdr": false,
"live": {
"streaming": false,
"archived": false
},
"staff_pick": {
"normal": false,
"best_of_the_month": false,
"best_of_the_year": false,
"premiere": false
},
"vod": false,
"weekend_challenge": false
},
"interactive": false
},
"created_time": "2025-08-26T08:31:14+00:00",
"modified_time": "2025-08-26T08:36:31+00:00",
"release_time": "2025-08-26T08:31:14+00:00",
"content_rating": [
"unrated"
],
"content_rating_class": "unrated",
"rating_mod_locked": false,
"license": null,
"privacy": {
"view": "anybody",
"embed": "public",
"download": false,
"add": true,
"comments": "anybody"
},
"pictures": {
"uri": "/videos/1113154536/pictures/2051589675",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 100,
"height": 75,
"link": "https://i.vimeocdn.com/...",
"link_with_play_button": "https://i.vimeocdn.com/..."
},
],
"resource_key": "ef0dea8128a2a68334c50085e2d63a41451c5c53",
"default_picture": false
},
"tags": [],
"stats": {
"plays": 0
},
"categories": [
{
"uri": "/categories/sports",
"name": "Sports",
"link": "https://i.vimeocdn.com/...",
"top_level": true,
"is_deprecated": false,
"pictures": {
"uri": "/videos/675717426/pictures/1369315527",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 100,
"height": 75,
"link": "https://i.vimeocdn.com/...",
"link_with_play_button": "https://i.vimeocdn.com/..."
},
],
"resource_key": "e7ccae157d596d301b025fb8e06905432dd2bbcc",
"default_picture": false
},
"last_video_featured_time": "2025-08-25T21:44:03+00:00",
"parent": null,
"metadata": {
"connections": {
"channels": {
"uri": "/categories/sports/channels",
"total": 36269
},
"groups": {
"uri": "/categories/sports/groups",
"total": 9880
},
"users": {
"uri": "/categories/sports/users",
"total": 1624624
},
"videos": {
"uri": "/categories/sports/videos",
"total": 406609
}
},
"interactions": {
"follow": {
"added": false,
"added_time": null,
"uri": "/users/245851446/categories/sports"
}
}
},
"subcategories": [],
"icon": {
"uri": "/categories/sports/icon",
"active": false,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 20,
"height": 20,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "73fb2a40655c2a497cc42463c07cf4637b0320f1",
"default_picture": false
},
"resource_key": "24145eed0412385437c5a34fa732d3f90dd1dd3a"
},
{
"uri": "/categories/music",
"name": "Music",
"link": "https://i.vimeocdn.com/...",
"top_level": true,
"is_deprecated": false,
"pictures": {
"uri": "/videos/938646663/pictures/1840111294",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 100,
"height": 75,
"link": "https://i.vimeocdn.com/...",
"link_with_play_button": "https://i.vimeocdn.com/..."
},
],
"resource_key": "3f234a7cf900bca1890657a283c2e28a95849ffa",
"default_picture": false
},
"last_video_featured_time": "2025-08-25T21:49:43+00:00",
"parent": null,
"metadata": {
"connections": {
"channels": {
"uri": "/categories/music/channels",
"total": 61540
},
"groups": {
"uri": "/categories/music/groups",
"total": 12618
},
"users": {
"uri": "/categories/music/users",
"total": 3004223
},
"videos": {
"uri": "/categories/music/videos",
"total": 656341
}
},
"interactions": {
"follow": {
"added": false,
"added_time": null,
"uri": "/users/245851446/categories/music"
}
}
},
"subcategories": [],
"icon": {
"uri": "/categories/music/icon",
"active": false,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 20,
"height": 20,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "2216bf78a10b0823b64cb837d337143474f2014d",
"default_picture": false
},
"resource_key": "a35d9defa20ba9be724f10f368f50ef539de9210"
}
],
"uploader": {
"pictures": {
"uri": null,
"active": false,
"type": "default",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 30,
"height": 30,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "06cd312fcc3908e2d839aeb00ccaaf434acb0859",
"default_picture": true
}
},
"metadata": {
"connections": {
"comments": {
"uri": "/videos/1113154536/comments",
"total": 0
},
"credits": {
"uri": "/videos/1113154536/credits",
"total": 0
},
"likes": {
"uri": "/videos/1113154536/likes",
"total": 0
},
"pictures": {
"uri": "/videos/1113154536/pictures",
"total": 1
},
"texttracks": {
"uri": "/videos/1113154536/texttracks",
"total": 0
},
"related": {
"uri": "/videos?query=soccer&sort=date&direction=desc&per_page=1&offset=1",
},
"recommendations": {
"uri": "/videos/1113154536/recommendations",
"resource_signature": "d50ecaf..."
},
"albums": {
"uri": "/videos/1113154536/albums",
"total": 0
},
"available_albums": {
"uri": "/videos/1113154536/available_albums",
"total": 1
},
"available_channels": {
"uri": "/videos/1113154536/available_channels",
"total": 0
},
"versions": {
"uri": "/videos/1113154536/versions",
"total": 1,
"current_uri": "/videos/1113154536/versions/1109484176",
"resource_key": "51635bdd6f9aa94785a469c6cd030a6b95eaed06",
"create_storyboard_id": "",
"latest_incomplete_version": null
}
},
"interactions": {
"watchlater": {
"uri": "/users/245851446/watchlater/1113154536",
"added": false,
"added_time": null
},
"like": {
"uri": "/users/245851446/likes/1113154536",
"added": false,
"added_time": null,
"show_count": true
},
"report": {
"uri": "/videos/1113154536/report",
"reason": [
"pornographic",
"harassment",
"ripoff",
"incorrect rating",
"spam",
"causes harm",
"csam",
"voting misinformation"
]
},
"can_update_privacy_to_public": {
"uri": "/videos/1113154536",
},
"validate": {
"uri": "/videos/1113154536/validate",
}
},
"is_vimeo_create": false,
"is_screen_record": false
},
"user": {
"uri": "/users/245890681",
"name": "john michal",
"link": "https://i.vimeocdn.com/...",
"capabilities": {
"hasLiveSubscription": false,
"hasEnterpriseLihp": false,
"hasSvvTimecodedComments": false,
"hasSimplifiedEnterpriseAccount": false,
"hasManagementCapabilitiesForComments": true,
"hasDetailedVideoVersionHistory": false,
"canViewSimplifiedCommentMentions": true
},
"location": "India Gate, New Delhi, Delhi, India",
"gender": "m",
"bio": "Welcome to Castle - A collaboration platform for creators and teams to build ideas together.",
"short_bio": "Modern platform for collaboration and creativity.",
"created_time": "2025-08-26T08:18:12+00:00",
"pictures": {
"uri": null,
"active": false,
"type": "default",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 30,
"height": 30,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "06cd312fcc3908e2d839aeb00ccaaf434acb0859",
"default_picture": true
},
"websites": [],
"metadata": {
"connections": {
"albums": {
"uri": "/users/245890681/albums",
"total": 0
},
"appearances": {
"uri": "/users/245890681/appearances",
"total": 0
},
"channels": {
"uri": "/users/245890681/channels",
"total": 0
},
"feed": {
"uri": "/users/245890681/feed",
},
"followers": {
"uri": "/users/245890681/followers",
"total": 0
},
"following": {
"uri": "/users/245890681/following",
"total": 1
},
"groups": {
"uri": "/users/245890681/groups",
"total": 0
},
"likes": {
"uri": "/users/245890681/likes",
"total": 1
},
"membership": {
"uri": "/users/245890681/membership/",
},
"moderated_channels": {
"uri": "/users/245890681/channels?filter=moderated",
"total": 0
},
"portfolios": {
"uri": "/users/245890681/portfolios",
"total": 0
},
"videos": {
"uri": "/users/245890681/videos",
"total": 1
},
"shared": {
"uri": "/users/245890681/shared/videos",
"total": 0
},
"pictures": {
"uri": "/users/245890681/pictures",
"total": 0
},
"folders_root": {
"uri": "/users/245890681/folders/root",
},
"teams": {
"uri": "/users/245890681/teams",
"total": 1
}
},
"interactions": {
"follow": {
"added": false,
"added_time": null,
"uri": "/users/245851446/following/245890681",
},
"block": {
"uri": "/me/block/245890681",
"added": false,
"added_time": null
},
"report": {
"uri": "/users/245890681/report",
"reason": [
"inappropriate avatar",
"spammy",
"bad videos",
"creepy",
"not playing nice",
"impersonation",
"inappropriate job post"
]
}
}
},
"location_details": {
"formatted_address": "India Gate, New Delhi, Delhi, India",
"latitude": 28.6110878,
"longitude": 77.23452,
"city": "New Delhi",
"state": "Delhi",
"neighborhood": null,
"sub_locality": "India Gate",
"state_iso_code": "DL",
"country": "India",
"country_iso_code": "IN"
},
"skills": [],
"available_for_hire": false,
"can_work_remotely": false,
"resource_key": "8af8f8b57045046bbb85a0a892a1c2e913086768",
"account": "free"
},
"app": {
"name": "Vimeo Site",
"uri": "/apps/58479"
},
"play": {
"status": "playable"
},
"status": "available",
"resource_key": "fbacfa620edc8a5c9c5b2f95ab18de13a501fc58",
"upload": {
"status": "complete",
"link": null,
"upload_link": null,
"form": null,
"approach": null,
"size": null,
"redirect_url": null
},
"transcode": {
"status": "complete"
},
"is_playable": true,
"has_audio": false,
"video_id": "1113154536"
},
});

View File

@@ -0,0 +1,562 @@
import { PiecePropValueSchema, Property, createTrigger, TriggerStrategy, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { vimeoAuth } from '../auth';
import { apiRequest } from '../common';
import { DedupeStrategy, Polling, pollingHelper, HttpMethod } from '@activepieces/pieces-common';
import dayjs from 'dayjs';
type Props = {
userId: string;
};
const polling: Polling<AppConnectionValueForAuthProperty<typeof vimeoAuth>, Props> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, propsValue, lastFetchEpochMS }) {
const { userId } = propsValue;
const response = await apiRequest({
auth,
path: `/users/${userId}/videos`,
method: HttpMethod.GET,
queryParams: {
sort: 'date',
direction: 'desc',
per_page: '50',
},
});
const videos = response.body.data || [];
const newVideos = [];
for (const video of videos) {
const videoId = video.uri.split('/').pop();
const createdTime = dayjs(video.created_time).valueOf();
// If we have a last fetch time and this video is newer, add it to new videos
if (lastFetchEpochMS && createdTime > lastFetchEpochMS) {
newVideos.push(video);
}
// If no last fetch time (first run), add all videos
else if (!lastFetchEpochMS) {
newVideos.push(video);
}
video.video_id = videoId;
}
return newVideos.map((video) => ({
epochMilliSeconds: dayjs(video.created_time).valueOf(),
data: video,
}));
},
};
export const newVideoByUser = createTrigger({
name: 'new_video_by_user',
displayName: 'New Video by User',
description: 'Triggers when another specified user adds a video',
auth: vimeoAuth,
props: {
userId: Property.ShortText({
displayName: 'User ID',
description: 'ID of the user to monitor for new videos',
required: true,
}),
},
type: TriggerStrategy.POLLING,
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
sampleData: {
"uri": "/videos/1113800695",
"name": "video title here",
"description": "description here",
"type": "video",
"link": "https://i.vimeocdn.com/...",
"player_embed_url": "https://i.vimeocdn.com/...",
"duration": 62,
"width": 640,
"language": "en",
"height": 360,
"embed": {
"html": "<iframe>...</iframe>",
"badges": {
"hdr": false,
"live": {
"streaming": false,
"archived": false
},
"staff_pick": {
"normal": false,
"best_of_the_month": false,
"best_of_the_year": false,
"premiere": false
},
"vod": false,
"weekend_challenge": false
},
"interactive": false,
"buttons": {
"watchlater": true,
"share": true,
"embed": true,
"hd": false,
"fullscreen": true,
"scaling": true,
"like": true
},
"logos": {
"vimeo": true,
"custom": {
"active": false,
"url": null,
"link": null,
"use_link": false,
"sticky": false
}
},
"play_button": {
"position": "auto"
},
"title": {
"name": "show",
"owner": "show",
"portrait": "show"
},
"end_screen": [],
"playbar": true,
"quality_selector": null,
"pip": true,
"autopip": true,
"volume": true,
"color": "00adef",
"colors": {
"color_one": "000000",
"color_two": "00adef",
"color_three": "ffffff",
"color_four": "000000"
},
"event_schedule": true,
"has_cards": false,
"outro_type": "videos",
"show_timezone": false,
"cards": [],
"airplay": true,
"audio_tracks": true,
"chapters": true,
"chromecast": true,
"closed_captions": true,
"transcript": true,
"skipping_forward": true,
"ask_ai": true,
"uri": null,
"email_capture_form": [],
"speed": true
},
"created_time": "2025-08-28T05:51:54+00:00",
"modified_time": "2025-09-04T08:59:27+00:00",
"release_time": "2025-08-28T05:51:54+00:00",
"content_rating": [
"unrated"
],
"content_rating_class": "unrated",
"rating_mod_locked": false,
"license": null,
"privacy": {
"view": "anybody",
"embed": "public",
"download": false,
"add": true,
"comments": "anybody"
},
"pictures": {
"uri": "/videos/1113800695/pictures/2052390380",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 100,
"height": 75,
"link": "https://i.vimeocdn.com/...",
"link_with_play_button": "https://i.vimeocdn.com/..."
},
],
"resource_key": "2ab7656e4ebba9e6f65e37576885b28ddf992500",
"default_picture": false
},
"tags": [],
"stats": {
"plays": 0
},
"categories": [],
"uploader": {
"pictures": {
"uri": "/users/245851446/pictures/118131984",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 30,
"height": 30,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "ba73e4cd8767062609dda2dfcd4649727c2bb49d",
"default_picture": false
}
},
"metadata": {
"connections": {
"comments": {
"uri": "/videos/1113800695/comments",
"total": 0
},
"credits": {
"uri": "/videos/1113800695/credits",
"total": 0
},
"likes": {
"uri": "/videos/1113800695/likes",
"total": 0
},
"pictures": {
"uri": "/videos/1113800695/pictures",
"total": 1
},
"texttracks": {
"uri": "/videos/1113800695/texttracks",
"total": 0
},
"related": null,
"recommendations": {
"uri": "/videos/1113800695/recommendations",
"resource_signature": "cf11ed146071dbd..."
},
"albums": {
"uri": "/videos/1113800695/albums",
"total": 0
},
"available_albums": {
"uri": "/videos/1113800695/available_albums",
"total": 1
},
"available_channels": {
"uri": "/videos/1113800695/available_channels",
"total": 0
},
"versions": {
"uri": "/videos/1113800695/versions",
"total": 1,
"current_uri": "/videos/1113800695/versions/1110194140",
"resource_key": "31c9e0964895318b48ccc6d94df5704452860e6d",
"create_storyboard_id": "",
"latest_incomplete_version": null
}
},
"interactions": {
"watchlater": {
"uri": "/users/245851446/watchlater/1113800695",
"added": false,
"added_time": null
},
"report": {
"uri": "/videos/1113800695/report",
"reason": [
"pornographic",
"harassment",
"ripoff",
"incorrect rating",
"spam",
"causes harm",
"csam",
"voting misinformation"
]
},
"view_team_members": {
"uri": "/videos/1113800695/teammembers",
},
"edit": {
"uri": "/videos/1113800695",
"blocked_fields": [
"custom_url"
]
},
"edit_content_rating": {
"uri": "/videos/1113800695",
"content_rating": [
"language",
"drugs",
"violence",
"nudity",
"advertisement",
"safe",
"unrated"
]
},
"edit_privacy": {
"uri": "/videos/1113800695",
"content_type": "application/vnd.vimeo.video",
"properties": [
{
"name": "privacy.view",
"required": true,
"options": [
"anybody",
"nobody",
"password",
"disable",
"unlisted"
]
}
]
},
"delete": {
"uri": "/videos/1113800695",
},
"can_update_privacy_to_public": {
"uri": "/videos/1113800695",
},
"trim": {
"uri": "/videos/1113800695/cliptrim",
},
"validate": {
"uri": "/videos/1113800695/validate",
}
},
"is_vimeo_create": false,
"is_screen_record": false
},
"manage_link": "/manage/videos/1113800695",
"user": {
"uri": "/users/245851446",
"name": "Stefans Arya",
"link": "https://i.vimeocdn.com/...",
"capabilities": {
"hasLiveSubscription": false,
"hasEnterpriseLihp": false,
"hasSvvTimecodedComments": false,
"hasSimplifiedEnterpriseAccount": false,
"hasManagementCapabilitiesForComments": true,
"canViewSimplifiedCommentMentions": true
},
"location": "",
"gender": "m",
"bio": null,
"short_bio": null,
"created_time": "2025-08-25T16:22:03+00:00",
"pictures": {
"uri": "/users/245851446/pictures/118131984",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 30,
"height": 30,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "ba73e4cd8767062609dda2dfcd4649727c2bb49d",
"default_picture": false
},
"websites": [],
"metadata": {
"connections": {
"albums": {
"uri": "/users/245851446/albums",
"total": 1
},
"appearances": {
"uri": "/users/245851446/appearances",
"total": 0
},
"categories": {
"uri": "/users/245851446/categories",
"total": 0
},
"channels": {
"uri": "/users/245851446/channels",
"total": 0
},
"feed": {
"uri": "/users/245851446/feed",
},
"followers": {
"uri": "/users/245851446/followers",
"total": 0
},
"following": {
"uri": "/users/245851446/following",
"total": 0
},
"groups": {
"uri": "/users/245851446/groups",
"total": 0
},
"likes": {
"uri": "/users/245851446/likes",
"total": 5
},
"membership": {
"uri": "/users/245851446/membership/",
},
"moderated_channels": {
"uri": "/users/245851446/channels?filter=moderated",
"total": 0
},
"portfolios": {
"uri": "/users/245851446/portfolios",
"total": 0
},
"videos": {
"uri": "/users/245851446/videos",
"total": 1
},
"watchlater": {
"uri": "/users/245851446/watchlater",
"total": 0
},
"shared": {
"uri": "/users/245851446/shared/videos",
"total": 0
},
"pictures": {
"uri": "/users/245851446/pictures",
"total": 1
},
"watched_videos": {
"uri": "/me/watched/videos",
"total": 0
},
"folders_root": {
"uri": "/users/245851446/folders/root",
},
"folders": {
"uri": "/users/245851446/folders",
"total": 1
},
"teams": {
"uri": "/users/245851446/teams",
"total": 1
},
"block": {
"uri": "/me/block",
"total": 0
}
}
},
"location_details": {
"formatted_address": "",
"latitude": null,
"longitude": null,
"city": null,
"state": null,
"neighborhood": null,
"sub_locality": null,
"state_iso_code": null,
"country": null,
"country_iso_code": null
},
"skills": [],
"available_for_hire": false,
"can_work_remotely": false,
"preferences": {
"videos": {
"rating": [
"unrated"
],
"privacy": {
"view": "anybody",
"comments": "anybody",
"embed": "public",
"download": true,
"add": true,
"allow_share_link": true
}
},
"webinar_registrant_lower_watermark_banner_dismissed": []
},
"content_filter": [
"language",
"drugs",
"violence",
"nudity",
"safe",
"unrated"
],
"upload_quota": {
"space": {
"free": 1068989426,
"max": 1073741824,
"used": 4752398,
"showing": "lifetime",
"unit": "video_size"
},
"periodic": {
"period": null,
"unit": null,
"free": null,
"max": null,
"used": null,
"reset_date": null
},
"lifetime": {
"unit": "video_size",
"free": 1068989426,
"max": 1073741824,
"used": 4752398
}
},
"resource_key": "670938330b60950d868b643b2e2ed768e987816a",
"account": "free"
},
"last_user_action_event_date": "2025-09-04T08:59:27+00:00",
"parent_folder": null,
"review_page": {
"active": false,
"link": "https://i.vimeocdn.com/...",
"is_shareable": true
},
"app": {
"name": "Vimeo Site",
"uri": "/apps/58479"
},
"play": {
"status": "playable"
},
"status": "available",
"resource_key": "c337eab5d7fee5eaa7a6e3f87147a6c170eedf35",
"upload": {
"status": "complete",
"link": null,
"upload_link": null,
"form": null,
"approach": null,
"size": null,
"redirect_url": null
},
"transcode": {
"status": "complete"
},
"is_playable": true,
"has_audio": true,
"video_id": "1113800695"
},
});

View File

@@ -0,0 +1,388 @@
import { PiecePropValueSchema, createTrigger, TriggerStrategy, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { vimeoAuth } from '../auth';
import { apiRequest } from '../common';
import { DedupeStrategy, Polling, pollingHelper, HttpMethod } from '@activepieces/pieces-common';
const polling: Polling<AppConnectionValueForAuthProperty<typeof vimeoAuth>, object> = {
strategy: DedupeStrategy.LAST_ITEM,
async items({ auth, lastItemId }) {
const response = await apiRequest({
auth,
path: '/me/likes',
method: HttpMethod.GET,
queryParams: {
per_page: '50',
},
});
const likedVideos = response.body.data || [];
const newVideos = [];
for (const video of likedVideos) {
const videoId = video.uri.split('/').pop();
if(videoId === lastItemId) break;
newVideos.push(video);
video.video_id = videoId;
}
return newVideos.map((video) => ({
id: video.uri.split('/').pop(),
data: video,
}));
},
};
export const newVideoLiked = createTrigger({
name: 'new_video_liked',
displayName: 'New Video I\'ve Liked',
description: 'Triggers when you like a new video on Vimeo',
auth: vimeoAuth,
props: {
},
type: TriggerStrategy.POLLING,
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
sampleData: {
"uri": "/videos/874196439",
"name": "video title here",
"description": "description here",
"type": "video",
"link": "https://i.vimeocdn.com/...",
"player_embed_url": "https://i.vimeocdn.com/...",
"duration": 93,
"width": 1920,
"language": null,
"height": 1440,
"embed": {
"html": "<iframe>...</iframe>",
"badges": {
"hdr": false,
"live": {
"streaming": false,
"archived": false
},
"staff_pick": {
"normal": false,
"best_of_the_month": false,
"best_of_the_year": false,
"premiere": false
},
"vod": false,
"weekend_challenge": false
},
"interactive": false
},
"created_time": "2023-10-13T19:55:47+00:00",
"modified_time": "2025-08-28T06:42:07+00:00",
"release_time": "2023-10-13T19:55:47+00:00",
"content_rating": [
"safe"
],
"content_rating_class": "safe",
"rating_mod_locked": false,
"license": null,
"privacy": {
"view": "anybody",
"embed": "public",
"download": false,
"add": false,
"comments": "nobody"
},
"pictures": {
"uri": "/videos/874196439/pictures/1738058620",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 100,
"height": 75,
"link": "https://i.vimeocdn.com/...",
"link_with_play_button": "https://i.vimeocdn.com/..."
},
],
"resource_key": "9a71a32cf2ecedc9f3b545775f8ca3d5ddd41927",
"default_picture": false
},
"tags": [],
"stats": {
"plays": 8
},
"categories": [],
"uploader": {
"pictures": {
"uri": null,
"active": false,
"type": "default",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 30,
"height": 30,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "06cd312fcc3908e2d839aeb00ccaaf434acb0859",
"default_picture": true
}
},
"metadata": {
"connections": {
"comments": {
"uri": "/videos/874196439/comments",
"total": 0
},
"credits": {
"uri": "/videos/874196439/credits",
"total": 0
},
"likes": {
"uri": "/videos/874196439/likes",
"total": 1
},
"pictures": {
"uri": "/videos/874196439/pictures",
"total": 1
},
"texttracks": {
"uri": "/videos/874196439/texttracks",
"total": 0
},
"related": {
"uri": "/me/likes?per_page=50&offset=1",
},
"recommendations": {
"uri": "/videos/874196439/recommendations",
"resource_signature": "9333ef3d898bc05..."
},
"versions": {
"uri": "/videos/874196439/versions",
"total": 1,
"current_uri": "/videos/874196439/versions/852877470",
"resource_key": "8b228d8b3b2e4ba34f917da8942060a36c393b8e",
"create_storyboard_id": "",
"latest_incomplete_version": null
}
},
"interactions": {
"watchlater": {
"uri": "/users/245851446/watchlater/874196439",
"added": false,
"added_time": null
},
"like": {
"uri": "/users/245851446/likes/874196439",
"added": true,
"added_time": "2025-08-28T06:42:07+00:00",
"show_count": true
},
"report": {
"uri": "/videos/874196439/report",
"reason": [
"pornographic",
"harassment",
"ripoff",
"incorrect rating",
"spam",
"causes harm",
"csam",
"voting misinformation"
]
},
"can_update_privacy_to_public": {
"uri": "/videos/874196439",
},
"validate": {
"uri": "/videos/874196439/validate",
}
},
"is_vimeo_create": false,
"is_screen_record": false
},
"user": {
"uri": "/users/209307138",
"name": "yoixym",
"link": "https://i.vimeocdn.com/...",
"capabilities": {
"hasLiveSubscription": false,
"hasEnterpriseLihp": false,
"hasSvvTimecodedComments": false,
"hasSimplifiedEnterpriseAccount": false,
"hasManagementCapabilitiesForComments": true,
"hasDetailedVideoVersionHistory": false,
"canViewSimplifiedCommentMentions": true
},
"location": "",
"gender": "",
"bio": null,
"short_bio": null,
"created_time": "2023-10-13T19:50:49+00:00",
"pictures": {
"uri": null,
"active": false,
"type": "default",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 30,
"height": 30,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "06cd312fcc3908e2d839aeb00ccaaf434acb0859",
"default_picture": true
},
"websites": [],
"metadata": {
"connections": {
"albums": {
"uri": "/users/209307138/albums",
"total": 0
},
"appearances": {
"uri": "/users/209307138/appearances",
"total": 0
},
"channels": {
"uri": "/users/209307138/channels",
"total": 0
},
"feed": {
"uri": "/users/209307138/feed",
},
"followers": {
"uri": "/users/209307138/followers",
"total": 0
},
"following": {
"uri": "/users/209307138/following",
"total": 0
},
"groups": {
"uri": "/users/209307138/groups",
"total": 0
},
"likes": {
"uri": "/users/209307138/likes",
"total": 0
},
"membership": {
"uri": "/users/209307138/membership/",
},
"moderated_channels": {
"uri": "/users/209307138/channels?filter=moderated",
"total": 0
},
"portfolios": {
"uri": "/users/209307138/portfolios",
"total": 0
},
"videos": {
"uri": "/users/209307138/videos",
"total": 1
},
"shared": {
"uri": "/users/209307138/shared/videos",
"total": 0
},
"pictures": {
"uri": "/users/209307138/pictures",
"total": 0
},
"folders_root": {
"uri": "/users/209307138/folders/root",
},
"teams": {
"uri": "/users/209307138/teams",
"total": 1
}
},
"interactions": {
"follow": {
"added": false,
"added_time": null,
"uri": "/users/245851446/following/209307138",
},
"block": {
"uri": "/me/block/209307138",
"added": false,
"added_time": null
},
"report": {
"uri": "/users/209307138/report",
"reason": [
"inappropriate avatar",
"spammy",
"bad videos",
"creepy",
"not playing nice",
"impersonation",
"inappropriate job post"
]
}
}
},
"location_details": {
"formatted_address": "",
"latitude": null,
"longitude": null,
"city": null,
"state": null,
"neighborhood": null,
"sub_locality": null,
"state_iso_code": null,
"country": null,
"country_iso_code": null
},
"skills": [],
"available_for_hire": false,
"can_work_remotely": false,
"resource_key": "a6c815dde7cb470b723c5f84f95490a93b5b9ebe",
"account": "free"
},
"app": {
"name": "Vimeo Site",
"uri": "/apps/58479"
},
"play": {
"status": "playable"
},
"status": "available",
"resource_key": "9a3efa06004dd8574c0274c72ef7c1967223b51d",
"upload": {
"status": "complete",
"link": null,
"upload_link": null,
"form": null,
"approach": null,
"size": null,
"redirect_url": null
},
"transcode": {
"status": "complete"
},
"is_playable": true,
"has_audio": true,
"video_id": "874196439"
},
});

View File

@@ -0,0 +1,553 @@
import { PiecePropValueSchema, createTrigger, TriggerStrategy, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { vimeoAuth } from '../auth';
import { apiRequest } from '../common';
import { DedupeStrategy, Polling, pollingHelper, HttpMethod } from '@activepieces/pieces-common';
import dayjs from 'dayjs';
const polling: Polling<AppConnectionValueForAuthProperty<typeof vimeoAuth>, object> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, lastFetchEpochMS }) {
const response = await apiRequest({
auth,
path: '/me/videos',
method: HttpMethod.GET,
queryParams: {
sort: 'date',
direction: 'desc',
per_page: '50',
},
});
const videos = response.body.data || [];
const newVideos = [];
for (const video of videos) {
const videoId = video.uri.split('/').pop();
const createdTime = dayjs(video.created_time).valueOf();
// If we have a last fetch time and this video is newer, add it to new videos
if (lastFetchEpochMS && createdTime > lastFetchEpochMS) {
newVideos.push(video);
}
// If no last fetch time (first run), add all videos
else if (!lastFetchEpochMS) {
newVideos.push(video);
}
video.video_id = videoId;
}
return newVideos.map((video) => ({
epochMilliSeconds: dayjs(video.created_time).valueOf(),
data: video,
}));
},
};
export const newVideoOfMine = createTrigger({
name: 'new_video_of_mine',
displayName: 'New Video of Mine',
description: 'Triggers when you add/upload a new video',
auth: vimeoAuth,
props: {
},
type: TriggerStrategy.POLLING,
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
sampleData: {
"uri": "/videos/1113186988",
"name": "my sample video",
"description": "abcd with resolution 360p",
"type": "video",
"link": "https://i.vimeocdn.com/...",
"player_embed_url": "https://i.vimeocdn.com/...",
"duration": 62,
"width": 640,
"language": "id",
"height": 360,
"embed": {
"html": "<iframe>...</iframe>",
"badges": {
"hdr": false,
"live": {
"streaming": false,
"archived": false
},
"staff_pick": {
"normal": false,
"best_of_the_month": false,
"best_of_the_year": false,
"premiere": false
},
"vod": false,
"weekend_challenge": false
},
"interactive": false,
"buttons": {
"watchlater": true,
"share": true,
"embed": true,
"hd": false,
"fullscreen": true,
"scaling": true,
"like": true
},
"logos": {
"vimeo": true,
"custom": {
"active": false,
"url": null,
"link": null,
"use_link": false,
"sticky": false
}
},
"play_button": {
"position": "auto"
},
"title": {
"name": "show",
"owner": "show",
"portrait": "show"
},
"end_screen": [],
"playbar": true,
"quality_selector": null,
"pip": true,
"autopip": true,
"volume": true,
"color": "00adef",
"colors": {
"color_one": "000000",
"color_two": "00adef",
"color_three": "ffffff",
"color_four": "000000"
},
"event_schedule": true,
"has_cards": false,
"outro_type": "videos",
"show_timezone": false,
"cards": [],
"airplay": true,
"audio_tracks": true,
"chapters": true,
"chromecast": true,
"closed_captions": true,
"transcript": true,
"skipping_forward": true,
"ask_ai": true,
"uri": null,
"email_capture_form": [],
"speed": true
},
"created_time": "2025-08-26T10:32:20+00:00",
"modified_time": "2025-08-26T10:33:12+00:00",
"release_time": "2025-08-26T10:32:20+00:00",
"content_rating": [
"safe"
],
"content_rating_class": "safe",
"rating_mod_locked": false,
"license": "by-nc",
"privacy": {
"view": "anybody",
"embed": "public",
"download": false,
"add": true,
"comments": "anybody"
},
"pictures": {
"uri": "/videos/1113186988/pictures/2051625735",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 100,
"height": 75,
"link": "https://i.vimeocdn.com/...",
"link_with_play_button": "https://i.vimeocdn.com/..."
},
],
"resource_key": "18c865482c52f2cdcc031fee00a1dc71e78eccf7",
"default_picture": false
},
"tags": [],
"stats": {
"plays": 0
},
"categories": [],
"uploader": {
"pictures": {
"uri": "/users/245851446/pictures/118131984",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 30,
"height": 30,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "ba73e4cd8767062609dda2dfcd4649727c2bb49d",
"default_picture": false
}
},
"metadata": {
"connections": {
"comments": {
"uri": "/videos/1113186988/comments",
"total": 0
},
"credits": {
"uri": "/videos/1113186988/credits",
"total": 0
},
"likes": {
"uri": "/videos/1113186988/likes",
"total": 0
},
"pictures": {
"uri": "/videos/1113186988/pictures",
"total": 1
},
"texttracks": {
"uri": "/videos/1113186988/texttracks",
"total": 0
},
"related": null,
"recommendations": {
"uri": "/videos/1113186988/recommendations",
"resource_signature": "67179b5cabc8e17500e..."
},
"albums": {
"uri": "/videos/1113186988/albums",
"total": 0
},
"available_albums": {
"uri": "/videos/1113186988/available_albums",
"total": 1
},
"available_channels": {
"uri": "/videos/1113186988/available_channels",
"total": 0
},
"versions": {
"uri": "/videos/1113186988/versions",
"total": 1,
"current_uri": "/videos/1113186988/versions/1109519289",
"resource_key": "e562d5caab158411737256b98650b426e578e14f",
"create_storyboard_id": "",
"latest_incomplete_version": null
}
},
"interactions": {
"watchlater": {
"uri": "/users/245851446/watchlater/1113186988",
"added": false,
"added_time": null
},
"report": {
"uri": "/videos/1113186988/report",
"reason": [
"pornographic",
"harassment",
"ripoff",
"incorrect rating",
"spam",
"causes harm",
"csam",
"voting misinformation"
]
},
"view_team_members": {
"uri": "/videos/1113186988/teammembers",
},
"edit": {
"uri": "/videos/1113186988",
"blocked_fields": [
"custom_url"
]
},
"edit_content_rating": {
"uri": "/videos/1113186988",
"content_rating": [
"language",
"drugs",
"violence",
"nudity",
"advertisement",
"safe",
"unrated"
]
},
"edit_privacy": {
"uri": "/videos/1113186988",
"content_type": "application/vnd.vimeo.video",
"properties": [
{
"name": "privacy.view",
"required": true,
"options": [
"anybody",
"nobody",
"password",
"disable",
"unlisted"
]
}
]
},
"delete": {
"uri": "/videos/1113186988",
},
"can_update_privacy_to_public": {
"uri": "/videos/1113186988",
},
"trim": {
"uri": "/videos/1113186988/cliptrim",
},
"validate": {
"uri": "/videos/1113186988/validate",
}
},
"is_vimeo_create": false,
"is_screen_record": false
},
"manage_link": "/manage/videos/1113186988",
"user": {
"uri": "/users/245851446",
"name": "Stefans Arya",
"link": "https://i.vimeocdn.com/...",
"capabilities": {
"hasLiveSubscription": false,
"hasEnterpriseLihp": false,
"hasSvvTimecodedComments": false,
"hasSimplifiedEnterpriseAccount": false,
"hasManagementCapabilitiesForComments": true,
"hasDetailedVideoVersionHistory": false,
"canViewSimplifiedCommentMentions": true
},
"location": "",
"gender": "m",
"bio": null,
"short_bio": null,
"created_time": "2025-08-25T16:22:03+00:00",
"pictures": {
"uri": "/users/245851446/pictures/118131984",
"active": true,
"type": "custom",
"base_link": "https://i.vimeocdn.com/...",
"sizes": [
{
"width": 30,
"height": 30,
"link": "https://i.vimeocdn.com/..."
},
],
"resource_key": "ba73e4cd8767062609dda2dfcd4649727c2bb49d",
"default_picture": false
},
"websites": [],
"metadata": {
"connections": {
"albums": {
"uri": "/users/245851446/albums",
"total": 1
},
"appearances": {
"uri": "/users/245851446/appearances",
"total": 0
},
"categories": {
"uri": "/users/245851446/categories",
"total": 0
},
"channels": {
"uri": "/users/245851446/channels",
"total": 0
},
"feed": {
"uri": "/users/245851446/feed",
},
"followers": {
"uri": "/users/245851446/followers",
"total": 0
},
"following": {
"uri": "/users/245851446/following",
"total": 0
},
"groups": {
"uri": "/users/245851446/groups",
"total": 0
},
"likes": {
"uri": "/users/245851446/likes",
"total": 1
},
"membership": {
"uri": "/users/245851446/membership/",
},
"moderated_channels": {
"uri": "/users/245851446/channels?filter=moderated",
"total": 0
},
"portfolios": {
"uri": "/users/245851446/portfolios",
"total": 0
},
"videos": {
"uri": "/users/245851446/videos",
"total": 1
},
"watchlater": {
"uri": "/users/245851446/watchlater",
"total": 0
},
"shared": {
"uri": "/users/245851446/shared/videos",
"total": 0
},
"pictures": {
"uri": "/users/245851446/pictures",
"total": 1
},
"watched_videos": {
"uri": "/me/watched/videos",
"total": 0
},
"folders_root": {
"uri": "/users/245851446/folders/root",
},
"folders": {
"uri": "/users/245851446/folders",
"total": 0
},
"teams": {
"uri": "/users/245851446/teams",
"total": 1
},
"block": {
"uri": "/me/block",
"total": 0
}
}
},
"location_details": {
"formatted_address": "",
"latitude": null,
"longitude": null,
"city": null,
"state": null,
"neighborhood": null,
"sub_locality": null,
"state_iso_code": null,
"country": null,
"country_iso_code": null
},
"skills": [],
"available_for_hire": false,
"can_work_remotely": false,
"preferences": {
"videos": {
"rating": [
"unrated"
],
"privacy": {
"view": "anybody",
"comments": "anybody",
"embed": "public",
"download": true,
"add": true,
"allow_share_link": true
}
},
"webinar_registrant_lower_watermark_banner_dismissed": []
},
"content_filter": [
"language",
"drugs",
"violence",
"nudity",
"safe",
"unrated"
],
"upload_quota": {
"space": {
"free": 1068989426,
"max": 1073741824,
"used": 4752398,
"showing": "lifetime",
"unit": "video_size"
},
"periodic": {
"period": null,
"unit": null,
"free": null,
"max": null,
"used": null,
"reset_date": null
},
"lifetime": {
"unit": "video_size",
"free": 1068989426,
"max": 1073741824,
"used": 4752398
}
},
"resource_key": "670938330b60950d868b643b2e2ed768e987816a",
"account": "free"
},
"last_user_action_event_date": "2025-08-26T10:32:47+00:00",
"parent_folder": null,
"review_page": {
"active": false,
"link": "https://i.vimeocdn.com/...",
"is_shareable": true
},
"app": {
"name": "Test",
"uri": "/apps/505537"
},
"play": {
"status": "playable"
},
"status": "available",
"resource_key": "0ca18c56787b6a85621e28fcbc8e2037791194aa",
"upload": {
"status": "complete",
"link": null,
"upload_link": null,
"form": null,
"approach": null,
"size": null,
"redirect_url": null
},
"transcode": {
"status": "complete"
},
"is_playable": true,
"has_audio": true,
"video_id": "1113186988"
},
});