Getting Started
Welcome to frameio-kit! This guide will take you from zero to a working Frame.io integration in just a few minutes.
What You'll Build
By the end of this guide, you'll have:
- ✅ A running Frame.io integration
- ✅ A custom action that responds to user clicks
- ✅ A webhook that processes file events
- ✅ An understanding of the core concepts
Prerequisites
Before you start, make sure you have:
- Python 3.13+ installed
- A Frame.io account with workspace access
- Basic Python knowledge (async/await helpful but not required)
Step 1: Installation
Create a new project directory and install frameio-kit:
# Create project directory
mkdir my-frameio-app
cd my-frameio-app
# Install frameio-kit (we recommend uv for fast, reliable installs)
uv add frameio-kit uvicorn
# Or with pip
pip install frameio-kit uvicorn
Step 2: Create Your Application
Create a file named main.py with the following code:
from frameio_kit import App, ActionEvent, WebhookEvent, Message
app = App()
# Custom Action: Responds to user clicks in Frame.io
# CUSTOM_ACTION_SECRET env var will be used automatically
@app.on_action(
event_type="greeting.say_hello",
name="Say Hello",
description="A simple greeting action"
)
async def on_greeting(event: ActionEvent):
print(f"Hello from {event.user.id}!")
return Message(
title="Greetings!",
description="Hello from your first frameio-kit app!"
)
# Webhook: Responds to file events from Frame.io
# WEBHOOK_SECRET env var will be used automatically
@app.on_webhook("file.ready")
async def on_file_ready(event: WebhookEvent):
print(f"File {event.resource_id} is ready!")
What this code does:
- Custom Action - Creates a "Say Hello" menu item in Frame.io that displays a greeting when clicked
- Webhook - Listens for
file.readyevents and prints the file ID when files are processed App()- Initializes your Frame.io integrationMessage- Returned from the custom action handler to display a response in the Frame.io UI- Environment Variables -
CUSTOM_ACTION_SECRETandWEBHOOK_SECRETare automatically loaded from environment
Learn more about Custom Actions and Webhooks
Step 3: Expose Your Server
Frame.io needs a public URL to send events to your application. For local development, use ngrok:
Copy the HTTPS forwarding URL (e.g., https://abc123.ngrok-free.app) – you'll need it for Frame.io configuration.
Step 4: Configure Frame.io
Create a Custom Action
- In Frame.io, navigate to Account Settings → Actions
- Click "New Action" and configure:
- Name:
Say Hello - Event:
greeting.say_hello - URL: Your ngrok URL
- Workspace: Choose the workspace
- Copy the signing secret
Create a Webhook
- In the same settings page, go to Webhooks
- Click "New Webhook" and configure:
- Webhook Name: On file ready
- Event Types: Select
file.ready - Webhook URL: Your ngrok URL
- Workspace: Choose the workspace
- Copy the signing secret
Set Environment Variables
Create a .env file with the secrets from Frame.io:
Secret Configuration
This example uses the default CUSTOM_ACTION_SECRET and WEBHOOK_SECRET environment variables, which is recommended when you have one action and one webhook.
For multiple secrets: Pass each secret explicitly via environment variables:
@app.on_webhook("file.ready", secret=os.environ["FILES_WEBHOOK_SECRET"])
@app.on_action("my_app.analyze", "Analyze", "Analyze file", secret=os.environ["ANALYZE_CUSTOM_ACTION_SECRET"])
For dynamic secrets (e.g., multi-tenant apps, database-backed secrets): See Dynamic Secret Resolution in the App Configuration guide.
Step 5: Run Your Application
Step 6: Test Your Integration
Test the Custom Action:
- Right-click any asset in Frame.io
- Select "Say Hello" from the menu
- See the greeting message appear
Test the Webhook:
- Upload a file to Frame.io
- Wait for it to reach "Ready" status
- Check your terminal for the webhook message
What You've Built
You now have a working Frame.io integration that:
- Responds to user clicks with custom actions
- Processes Frame.io events with webhooks
- Returns feedback to users in the Frame.io UI
- Verifies requests with signature authentication
Next Steps
Explore more features to build powerful integrations:
- App Configuration - Configure middleware, OAuth, and dynamic secret resolution
- Webhooks - Learn about different event types and best practices
- Custom Actions - Build interactive forms and workflows
- Client API - Make authenticated calls to Frame.io's API
- Middleware - Add logging, metrics, and error handling
- User Authentication - Enable Adobe Login OAuth for user-specific actions
Troubleshooting
"Invalid signature" error
- Verify secrets in
.envmatch those from Frame.io - Ensure you're using the correct secret for each handler
Can't see the custom action
- Refresh the Frame.io page
- Check the action is enabled in workspace settings
Webhook not triggering
- Verify ngrok is running and the URL is correct
- Check event types match exactly between Frame.io and your code
For more help, see the API Reference or check Frame.io's developer documentation.