How to manage webhooks
Webhooks let you connect Content Camel to your other tools—CRMs, marketing automation platforms, Slack, or custom systems. When a specific event happens (like a prospect viewing shared content), Content Camel sends a notification that you can use to trigger follow-up actions automatically. You can deliver these events to any HTTP endpoint as a URL webhook, or send them directly to HubSpot as custom behavioral events.
Accessing webhooks
Click Settings in the left sidebar
Under Integrations, click Webhooks
Webhooks are an admin-only feature.
Creating a webhook
Click Add Webhook in the top-right corner to open the creation form.
Step 1: Choose the destination type
URL Webhook — Send events to any HTTP endpoint. Use this for custom integrations, Zapier, Make, or any service that accepts webhook payloads.
HubSpot — Send events directly to your connected HubSpot account as custom behavioral events. No URL configuration is needed on your side, but HubSpot does require a one-time setup by our support team (details below).
Step 2: Enter the endpoint
For URL Webhook: enter the full webhook URL (e.g.,
https://api.example.com/webhooks). HTTPS is required.For HubSpot: this step is skipped—events route to your connected HubSpot account automatically.
Step 3: Choose the event type
Select which event triggers the webhook:
Event | ID | When it fires |
|---|---|---|
Content Viewed |
| A recipient opens content you shared with them |
Content Added |
| A new asset is added to the library |
Content Updated |
| An existing asset is modified (title, tags, description, etc.) |
Click Create Webhook to save. The webhook starts firing on the next matching event immediately.
URL webhook payloads
Every URL webhook receives an HTTPS POST with a JSON body. Content Camel delivers events with at-least-once semantics—your endpoint should return a 2xx within a few seconds, and be idempotent.
Common envelope
All events share this shape—eventName identifies the event, and the remaining top-level fields describe the content involved:
{
"eventName": "recipient.item.viewed",
"id": "7b9845b2-e883-4511-8c77-08105166fe2b",
"title": "Q4 Product Overview",
"type": "item",
"shortUrl": "https://share.contentcamel.io/abc123",
"appUrl": "https://app.contentcamel.io/item/detail/7b9845b2-...",
"metadata": {}
}Event: recipient.item.viewed
Fires when a recipient opens a share link. Includes who shared it and basic engagement data.
{
"eventName": "recipient.item.viewed",
"id": "7b9845b2-e883-4511-8c77-08105166fe2b",
"title": "Q4 Product Overview",
"type": "item",
"shortUrl": "https://share.contentcamel.io/abc123",
"appUrl": "https://app.contentcamel.io/item/detail/7b9845b2-...",
"viewUrl": "https://app.contentcamel.io/view/abc123",
"sharedBy": "Dave Shanley",
"sharedByEmail": "dave@contentcamel.io",
"sharedToEmail": "prospect@acme.com",
"sharedToOrganization": "Acme Inc.",
"viewsCount": 3,
"lastViewed": "2026-04-16T17:22:03.000Z",
"metadata": {}
}Event: system.item.added
Fires when new content is added to the library.
{
"eventName": "system.item.added",
"id": "c9a44477e90044d1839c58dfca072571",
"title": "Enterprise Buyer's Guide",
"type": "pdf",
"appUrl": "https://app.contentcamel.io/item/detail/c9a4...",
"createdBy": "marketing@contentcamel.io",
"createdAt": "2026-04-16T17:20:00.000Z",
"metadata": {}
}Event: system.item.updated
Fires when an existing asset is modified (title, tags, description, funnel stage, etc.).
{
"eventName": "system.item.updated",
"id": "c9a44477e90044d1839c58dfca072571",
"title": "Enterprise Buyer's Guide — 2026 Edition",
"type": "pdf",
"appUrl": "https://app.contentcamel.io/item/detail/c9a4...",
"updatedBy": "marketing@contentcamel.io",
"updatedAt": "2026-04-16T18:01:12.000Z",
"metadata": {}
}Delivery behavior
Timeout: your endpoint should respond within ~10 seconds
Retries: up to 3 attempts with exponential backoff on
5xxresponses or connection errors4xx responses: treated as permanent failures—not retried—so make sure your endpoint returns
4xxonly for genuinely bad payloadsOrdering: not guaranteed—order events by their own timestamp fields if sequence matters
No signing yet: webhook bodies are not currently HMAC-signed. If you need signature verification, contact support
Testing your webhook
Use a tool like webhook.site or RequestBin to inspect live payloads before pointing at production
Create a webhook in Content Camel pointing at the inspection URL, then share a piece of content with yourself to trigger
recipient.item.viewedConfirm the shape matches your integration's expectations, then update the URL to your real endpoint
HubSpot custom events
The HubSpot option sends Content Camel events as custom behavioral events on the HubSpot contact's timeline. This lets your sales team see content engagement directly in the Contact record, run workflows off content views, and report on which assets drive pipeline.
How it works
When a Content Camel event fires for a subscription set to HubSpot, we:
Resolve the contact email from the event (usually
sharedByEmail—the Content Camel user who shared the content)Look up the matching HubSpot contact
Fire a custom behavioral event on that contact's timeline with the mapped properties below
Property mapping
Content Camel fields are mapped into HubSpot custom event properties:
Content Camel field | HubSpot property | Description |
|---|---|---|
|
| Unique item identifier |
|
| Item title |
|
| Type (item, site, collection) |
|
| Shortened share URL |
|
| Content Camel app URL |
|
| Direct view URL for the recipient |
|
| Sharer's name |
|
| Sharer's email (used to match HubSpot contact) |
|
| Recipient's email |
|
| Recipient's organization |
|
| Total view count |
|
| Most recent view timestamp |
|
| Anything extra, serialized as JSON |
Setup (requires our support team)
HubSpot custom events need a one-time setup because they involve creating the custom event schema inside your HubSpot portal. Every HubSpot portal is configured differently—different Hubs and tiers, different custom object setups, different workflow needs—so our support team works with you directly to get it right.
What support will coordinate with you:
Confirming your HubSpot subscription tier supports custom behavioral events
Creating a HubSpot Private App with the required scopes (
events, and optionallycrm.objects.contacts.readandcrm.schemas.custom.read/write)Defining the custom event schema in HubSpot (event name, property list)
Securely receiving your Private App token and storing it encrypted on our side
Validating the end-to-end flow with a test event on a real contact
Optionally customizing which email field matches your HubSpot contacts (defaults to
sharedByEmail)
👉 To get started, email support@contentcamel.io with the subject HubSpot Webhook Setup and we'll schedule a short session to get it configured.
Once setup is complete, the HubSpot option in the Add Webhook form will deliver events to your HubSpot account automatically—no URL required.
Managing existing webhooks
Webhooks are grouped by event type on the settings page. Each webhook shows its status, destination URL (for URL webhooks), or an integration badge (for HubSpot).
Editing a webhook
Click the pencil icon on any URL webhook to edit its destination URL. The event type cannot be changed after creation—delete and recreate if you need a different event.
HubSpot webhooks cannot be edited from the UI. To change a HubSpot destination, delete the webhook and contact support to reconfigure.
Deleting a webhook
Click the trash icon on any webhook. A confirmation prompt appears inline—click the checkmark to confirm or the X to cancel.
Common use cases
Sales follow-up — Trigger a CRM task when a prospect views your shared content (
recipient.item.viewed)Slack notifications — Post to a channel when new content is added to the library (
system.item.added)HubSpot contact timeline — Record content engagement as custom behavioral events that sales reps see directly on the contact record
Content auditing — Log all content changes to an external system (
system.item.updated)Zapier / Make automations — Branch on
eventNameand route to the right downstream action
Best practices
Start with
recipient.item.viewed— The highest-value event for sales teams. Real-time visibility into prospect engagement unlocks immediate follow-up.Return quickly — Respond
2xxas soon as you've accepted the payload; do heavy work asynchronously so we don't time out and retry.Be idempotent — Deduplicate using
id+lastViewed(or the event timestamp) since retries can deliver the same event more than once.Test with a public sandbox first — Use webhook.site or a staging endpoint before switching to production.
One webhook per event, per destination — Keep each webhook focused. You can have multiple webhooks for the same event if different systems need it.
Monitor your endpoint — If your receiver is down, deliveries may be dropped after retries. Set up uptime monitoring on the URL you register.
Troubleshooting
My webhook isn't firing.
Confirm the webhook is saved and listed under the event type on the settings page
Trigger the event yourself (for
recipient.item.viewed, share a link with yourself and open it)Check your endpoint's logs for an inbound
POST—if nothing arrived, the webhook may have been deleted or the event didn't fire
I'm seeing 4xx responses in my logs.
4xxis treated as a permanent rejection by Content Camel—we won't retry. Make sure your endpoint accepts JSON and returns2xxfor valid payloads.If the payload shape is different from what you expect, inspect it against the examples above.
HubSpot events aren't showing on the contact timeline.
The most common cause is that
sharedByEmaildoesn't match any HubSpot contact. If the sharer isn't a known contact in your HubSpot portal, the event has nowhere to land.Check HubSpot's Activity Feed for errors.
Reach out to support—we can look at delivery logs and the HubSpot side together.
Have questions?
For URL webhooks, email support@contentcamel.io. For HubSpot setup or changes, email support@contentcamel.io and we'll work with you directly.
