...

File Upload Webhooks for Every Stage of the File Lifecycle

Uploads and processing jobs are asynchronous. The Filestack webhook API closes the loop, emitting a signed event to your endpoint at every stage of the file lifecycle.

Signed, verifiable events, delivered the moment they happen.

Trusted by teams at
SendGrid logo with stylized gray text and overlapping square shapes on the left.
LinkedIn logo followed by the word SlideShare in gray text on a light background.
The word teachable is written in all lowercase, sans-serif letters with a colon between teach and able, in a light purple color on a light background.
A gray Airtable logo featuring a geometric cube design to the left of the word Airtable in bold, modern font.

An event for every stage of the file lifecycle

Each event fires at a specific point and carries a payload describing the file and the result. Turning on webhook notifications is a dashboard setting rather than a build.

EventFires whenTypical payload
fp.uploadAn upload completesFile handle, URL, size, MIME type
fp.converseA file conversion finishesSource and output file info
fp.video_converseA video conversion completesOutput formats, status
fp.deleteA file is deletedHandle, timestamp
fp.overwriteA file is overwrittenHandle, new metadata
fp.scanA virus scan resolvesScan result / verdict
fp.exportAn export completesDestination info
fs.workflowA workflow run resolvesPer-task results

An endpoint, an event type, and a secret

Paste the URL, pick the events it receives, generate the signing secret.

Registered endpointsStatus, event, secret, error rate
The Webhooks screen with registered endpoints for deletion, video conversion, file conversion, workflow, and upload events, each showing status, URL, event type, secret, and error rate.
Each event has a visible destination and delivery status.
Edit endpointFile upload webhook
The File upload webhook row in edit mode with editable endpoint URL and event type, a masked secret, regenerate and remove controls, and Save and Cancel actions.
Secrets are isolated per endpoint, so one can rotate while the rest keep running.

Verify every payload

Webhook security comes down to one habit, webhook signature verification on every request. Every payload carries FS-Signature and FS-Timestamp. Recompute the HMAC and compare, and you know the event is authentic and fresh.

Node.js
const crypto = require('crypto');

function verify(req, secret) {
  const sig = req.headers['fs-signature'];
  const ts  = req.headers['fs-timestamp'];
  const digest = crypto
    .createHmac('sha256', secret)
    .update(ts + req.rawBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(digest), Buffer.from(sig));
}
Python
import hmac, hashlib

def verify(headers, raw_body, secret):
  sig = headers['FS-Signature']
  ts  = headers['FS-Timestamp']
  digest = hmac.new(
    secret.encode(),
    (ts + raw_body).encode(),
    hashlib.sha256
  ).hexdigest()
  return hmac.compare_digest(digest, sig)

Search and moderate uploads

Sign the timestamp, a dot, then the raw body exactly as it arrived. Run these numbers yourself with the secret SAMPLE_WEBHOOK_SECRET_DO_NOT_USE.

fp.upload payload and headers
# FS-Timestamp
1785812400

# FS-Signature
aa759bf08e534c0f6078194120
91d4932d9bd6923655150be52d
6d066c72c2d4

# body
{ "id": 423984,
  "action": "fp.upload",
  "timestamp": 1785812400,
  "text": {
    "url": "https://cdn.filestackcontent
    .com/UZ9TFxQAmAHdNFEx8hzw"
,
    "filename": "user-avatar-outdoor.png",
    "size": 1467090,
    "mimetype": "image/png",
    "status": "Stored" } }
Why the raw body matters

Verify the bytes you received, never a re-serialized object. One changed character moves the digest.

# same signature, one handle swapped
# for 9kQx7RtTSaWvNmPd2fLb

expected  a2b26c41d4f54c15f0767e7a14
         64af5b9cae562b647e357cc30c
         6abb006ee1e8
received  aa759bf08e534c0f6078194120
         91d4932d9bd6923655150be52d
         6d066c72c2d4

valid     false

Verify the bytes you received, never a re-serialized object. One changed character moves the digest.

What teams build with webhooks

Update your database the moment an upload lands

When the fp.upload webhook arrives, write the file handle and metadata to your database immediately.

Webhook docs →

Gate publication on scan and moderation

Wait for fp.scan and moderation results before flipping a file to public. The webhook is the signal that it is safe to publish.

Content moderation →

Kick off downstream processing

When fp.video_converse fires, start the next step (generate thumbnails, notify subscribers, or update the player) knowing the transcode is done.

Workflows →

Sync asset state into your DAM or CMS

Use lifecycle events to keep an external DAM or CMS in sync as files are added, overwritten, or deleted.

Webhooks plus Workflows

Together they replace a queue-and-worker build. The Workflow does the processing (scan, moderate, transcode), and the fs.workflow webhook tells you it is done, with per-task results. That is the whole webhook integration, one webhook endpoint and one signature check, with the queue and the polling on our side.

Workflow
Runs the pipeline async
fs.workflow
Webhook posts the results

Testing and reliability

Retry on failure

Filestack retries delivery when your endpoint returns a non-2xx response, so a brief outage on your side still ends with the event delivered.

Webhook docs →

Test the signing helper

Use the signing helper to generate a valid signature locally and confirm your verification code accepts genuine payloads and rejects tampered ones. Both halves matter.

Signing reference →

Configure in the dashboard

Register and manage webhook endpoints from the developer dashboard. Point events at the URL you control.

Open the dev portal →

Frequently Asked Questions

What is a file upload webhook?

A file upload webhook is an HTTP notification sent to your endpoint the moment a file event occurs, such as an upload completing. Instead of polling for status, your backend receives a signed POST with the event details and acts on it immediately.

How do I verify a Filestack webhook signature?

Filestack signs each webhook with the FS-Signature and FS-Timestamp headers. Webhook signature verification means computing an HMAC-SHA256 of the timestamp concatenated with the raw request body using your webhook secret, then comparing it to FS-Signature. A match proves the event came from Filestack and was not tampered with or replayed.

What events does Filestack send?

Filestack emits events across the file lifecycle, including fp.upload, fp.converse, fp.video_converse, fp.delete, fp.overwrite, fp.scan, fp.export, and fs.workflow. Each fires at a specific stage and carries a payload describing the file and the result.

Can I get notified when a video conversion finishes?

Yes. The fp.video_converse event fires when a video conversion completes, so you can kick off downstream processing or update your UI without polling the conversion status.

Listen for every file event

Wire signed file-event webhooks into your backend with a free API key.