Agent skill

Front Webhooks Skill

Receive and verify Front (Frontapp) application webhooks. Use when setting up Front webhook handlers, debugging X-Front-Signature verification, handling the X-Front-Challenge subscription validation, or processing Front events like inbound_received, outbound_sent, conversation_moved, assignee_changed, tag_added, and new_comment_added.

Install this skill

npx skills add hookdeck/webhook-skills --skill frontapp-webhooks


When to Use This Skill

  • Setting up Front (Frontapp) application webhook handlers
  • Debugging Front X-Front-Signature verification failures
  • Responding to the Front X-Front-Challenge subscription validation request
  • Understanding Front event types (inbound_received, outbound_sent, conversation_moved, assignee_changed, tag_added, new_comment_added) and payloads

Verification (core)

Front application webhooks have no official server SDK, so verify manually. Front signs X-Front-Request-Timestamp + ":" + rawBody with HMAC-SHA256 (key = your app's signing key), base64-encoded, delivered in the X-Front-Signature header. Use the raw request body — never JSON.parse before verifying.

const crypto = require('crypto');

function verifyFrontSignature(rawBody, timestamp, signature, secret) {
  const hmac = crypto.createHmac('sha256', secret);
  hmac.update(timestamp + ':');
  hmac.update(rawBody);                          // Buffer/string of the raw HTTP body
  const expected = hmac.digest('base64');
  try {
    return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
  } catch {
    return false;                                // length mismatch = invalid
  }
}

On subscription, Front first sends a validation request carrying an X-Front-Challenge header. Reply within 10s with HTTP 200 echoing the value — {"challenge": "<value>"} (JSON), challenge=<value> (form), or the raw value (text/plain).

For complete handlers with the challenge handshake, event dispatch, and tests, see:

Common Event Types

Front webhook payloads carry the event name in the top-level type field.

Event typeTriggered When
inbound_receivedInbound message received
outbound_sentOutbound message sent
conversation_movedConversation moved to another inbox
message_delivery_failedOutbound message bounced / delivery failed
conversation_archivedConversation archived
conversation_reopenedConversation reopened
conversation_deletedConversation deleted
conversation_restoredConversation restored
conversation_snoozedConversation snoozed
conversation_snooze_expiredSnooze expired
new_comment_addedComment added to a conversation
assignee_changedAssignee changed
tag_addedTag added to a conversation
tag_removedTag removed from a conversation
link_addedLink added to a conversation
link_removedLink removed from a conversation

For the full event reference, see Front Events.

Environment Variables

FRONT_WEBHOOK_SECRET=your_app_signing_key   # App signing key from the Front app settings

Local Development

# Start tunnel (no account needed)
npx hookdeck-cli listen 3000 frontapp --path /webhooks/frontapp

Reference Materials


Repository

hookdeck/webhook-skills

v0.1.0 · MIT · Updated Aug 4, 2026

View on GitHub →