Transloadit
Pricing
  • File Uploads
  • File Importing
  • Batch Processing
  • Video Encoding
  • Audio Encoding
  • Image Processing
  • Document Processing
  • Artificial Intelligence
  • File Filtering & Security
  • Media Cataloging
  • File Compression
  • Code Evaluation
  • File Exporting
  • Smart CDN
  • View all services
  • Explore integrations
  • Explore live demos
  • Uppy
  • TransloaditKit
  • Android SDK
  • Node.js SDK
  • Python SDK
  • Ruby SDK
  • Go SDK
  • Java SDK
  • PHP SDK
  • Zapier
  • MCP Server
  • Transloadit CLI
  • Terraform
  • Essentials
  • Best Practices
  • FAQ
  • Robots
  • API
  • Formats
  • Build your first app
  • About
  • Comparisons
  • Open Source
  • Testimonials
  • Jobs
  • Security
  • Posts
  • DevTimes
  • DevTips
  • Press
  • Research
  • Case Studies
  • Solutions
  • Guides
  • Glossary
  • Legal
  • Tools
  • Helping Coursera bring education to millions around the world
  • Transloadit Support
  • Open Source Support
  • Service level agreement
EssentialsRobotsFAQAPIFormatsBest Practices
Topics
  • Endpoints
  • Response codes
  • Authentication
  • Webhooks
  • Metadata
  • API security
  • Rate limiting
  • Queues
  • Resumable uploads
Authentication
  • Create a bearer token
  • Create a new Auth Key
  • Retrieve list of Auth Keys
  • Retrieve Auth Key scopes
  • Edit an Auth Key
  • Delete an Auth Key
  • Retrieve an Auth Key secret
Assemblies
  • Create a new Assembly
  • Retrieve an Assembly Status
  • Create an Assembly with a supplied ID
  • Stream Assembly changes live
  • Cancel a running Assembly
  • Replay an Assembly
  • Retrieve list of Assemblies
  • Assembly Status response
  • Retrieve Assembly statistics
Webhooks
  • Retrieve Assembly Notifications
  • Replay Assembly Notification
Billing
  • Retrieve a month’s bill
Queues
  • Retrieve currently used priority job slots
  • Retrieve priority job slot statistics
Resumable Uploads
  • Discover tus capabilities
  • Create a tus upload
  • Retrieve a tus upload offset
  • Upload tus file bytes
  • Terminate a tus upload
  • Download a tus upload
Template Credentials
  • Create a new Template Credential
  • Retrieve a Template Credential
  • Edit a Template Credential
  • Delete a Template Credential
  • Retrieve list of Template Credentials
  • Retrieve Template Credential types
Templates
  • Create a new Template
  • Retrieve a Template
  • Edit a Template
  • Delete a Template
  • Retrieve list of Templates
Digital Asset Management
  • Move or rename a DAM asset
  • Delete a DAM asset
  • Move DAM assets in bulk
  • Delete DAM assets in bulk

Webhooks

Configure Webhooks

Set notify_url in your Assembly Instructions, at the same level as steps. Once the Assembly reaches a terminal state, Transloadit sends an HTTP POST to that URL.

Any status from 200 up to but not including 300 acknowledges delivery. Redirects and client or server errors are treated as failures. By default, Transloadit retries failures 5 times with an exponential factor of 1.97.

Limit the Notification payload

By default, a Webhook includes the complete Assembly Status. Set notification_payload to an array containing any combination of these supported filters:

  • without_params: the top-level raw Assembly instruction fields params, template, and merged_params are omitted.
  • without_result_meta_data: meta is omitted from each file in results.
  • without_results: the top-level results object is omitted.
  • without_upload_meta_data: meta is omitted from each file in uploads.
  • without_uploads: the top-level uploads array is omitted.

Notification replays reuse filters supplied in the original Assembly request. Filters defined only in a Template are not preserved on replay, so a replay can include data omitted from the initial Notification. Supply notification_payload in the original Assembly request when replays must use the same filters.

Verify the signature

Assembly Webhooks use the application/x-www-form-urlencoded media type. The transloadit field contains the exact serialized Assembly Status JSON, and the signature field contains its lowercase hexadecimal HMAC.

To verify a Webhook:

  1. Read the transloadit and signature form fields without modifying the payload string.
  2. Calculate an HMAC-SHA1 hexadecimal digest over the exact transloadit string, using the trusted Auth Secret selected as described below.
  3. Compare the calculated digest with signature using a timing-safe comparison.
  4. Parse transloadit as JSON only after the signatures match.

An Assembly’s initial Notification uses the Auth Secret of the Auth Key that authenticated its creation, including when it was created by an Assembly replay. Notification replays first look up the Auth Key recorded in the Assembly Status as api_auth_key_id. If that key is not recorded, cannot be resolved, has been deleted, or its lookup fails, the Notification replay uses the authenticated replay caller’s Auth Secret instead.

Assembly replays retain the parent’s historical api_auth_key_id. For example, if Key A creates an Assembly and Key B replays it, the new Assembly’s initial Notification is signed with B’s secret. Replaying that Notification can use A’s secret, even when B calls both replay endpoints and both keys remain active. Keep the applicable parent and replay-creation secrets available to your verifier; do not assume every delivery for one Assembly uses the same secret.

Select verification secrets from trusted server-side configuration for the expected Workspace and Assembly, not from fields in the unverified payload. When more than one configured secret is applicable, accept the request only if its signature matches one of those trusted secrets. If none matches, reject the request; do not skip verification to accept a replay.

Unlike current API-request signatures, the Webhook signature is an unprefixed sha1 digest for backwards compatibility. Treat the payload as untrusted and reject the request when either field is absent, the signature is malformed, or the comparison fails.

Use one of our SDK verification helpers when available. If you implement verification yourself, do not reserialize the parsed JSON before calculating the HMAC: whitespace and object-key order are part of the signed byte sequence.

import { createHmac, timingSafeEqual } from 'node:crypto'

// authSecret must come from trusted server-side configuration.
function verifyTransloaditWebhook({ authSecret, payload, signature }) {
  if (typeof payload !== 'string' || typeof signature !== 'string') return false
  if (!/^[0-9a-f]+$/.test(signature)) return false

  const expected = createHmac('sha1', authSecret).update(payload, 'utf8').digest()
  if (signature.length !== expected.length * 2) return false
  const received = Buffer.from(signature, 'hex')

  return received.length === expected.length && timingSafeEqual(received, expected)
}
Previous page ← AuthenticationNext page Metadata →
Contact support⁠

TransloaditChecking status…

Product

  • Services
  • Pricing
  • Demos
  • Tools
  • Security
  • Support

Company

  • About/Press
  • Blog/Jobs
  • Comparisons/Compliance matrix
  • Research
  • Open source
  • Solutions

Docs

  • Getting started
  • Transcoding
  • FAQ
  • API
  • Guides/DevTips
  • Supported formats

More

  • Platform status⁠
  • Community forum⁠
  • StackOverflow⁠
  • Uppy
  • tus⁠

© 2009–2026 Transloadit-II GmbH

PrivacyTermsImprint
EnglishDeutschEspañol