If you’d like to build your own consumer for Frame.io Webhooks, feel free to grab and extend our example app on Github.
Webhooks provide a way to leverage events that occur inside of Frame.io into notifications that can be sent to external systems for processing, API callbacks, and ultimately, workflow automation.
Webhooks can be configured in the Webhooks area of our developer site. A Webhook requires:
A single Webhook can subscribe to any number of the following events:
When the asset.versioned event fires, you’re going to receive a payload with the id of the asset that was versioned, not the version stack itself. So if you expect to be able to pass that id along to another function thinking it’s the version stack’s id, you’re going to have to look-up and track down that particular ‘parent’ resource first.
The asset.label.updated event will not fire when the status label is changed via a PUT call to the /v2/assets/:id endpoint via the public API (BES-408). It will however fire when the status label is updated using any native Frame.io apps and integrations (Web, iOS, Premiere, After Effects, FCPX, etc).
Frame.io delivers a JSON payload to the specified webhook endpoint. Here’s an example payload for an asset.created event:
All payloads contain a type field, indicating the type of event occurring, as well as a resource object. The resource object specifies the type and id of the resource related to this event.
In the above example of an asset.created event, this would be the id for the newly created Asset. Additionally, user and team objects are included. These reference the User who triggered the event, and the Team context for the resource.
Aside from the immediate User and Team context, we do not include any additional information about the subscribed resource. If your application requires additional information or context, we recommend using our HTTP API to make follow-up requests.
Should an error (non-200 status code response) or timeout occur while delivering the webhook to your service, the payload will be retried three times, for a total of four delivery attempts.
By default, all Webhooks are provided with a signing key. This is not configurable. This key can be used to verify that the request originates from Frame.io.
To guard an integration against man-in-the-middle and replay attacks it is essential to verify webhook signatures. Verification ensures that webhook payloads were actually sent by Frame.io and payload content has not been modified in transport.
Included in the POST request are the following headers:
The timestamp is the time of delivery from Frame.io’s systems. This can be used to prevent replay attacks. We recommended verifying this time is within 5 minutes of local time.
The signature is a HMAC SHA256 hash using the signing key provided when the Webhook is first created.
Follow these steps to verify the signature:
v0:timestamp:bodyv0=. Currently Frame.io only has this one version for signing requests. Be sure this prefix is prepended to your computed signature.