Networked API Documentation
    • Getting Started
    • User Authentication
      • Add New Users to Community
        POST
      • Send email invites
        POST
    • User Profile
      • User Profile
        GET
      • Profile Visits
        GET
    • Community
      • Features
        • Feature List
      • Directory
        • Users List
        • Roles List
      • Monetization
        • Plans
          • Plans List
      • Feed
        • Polls
          • Create Polls
        • Surveys
          • Create Surveys
        • Post
          • Ask and offer help
            • Post Intro
            • Post Advice
            • Post Recommendation
            • Post Kudos
            • Post Help
          • Feed Post List
          • Post to Feed
          • Get Post Comments
          • Add Comments to Post
        • upload Media
      • Opportunities
        • Company and Services
          • Company and Services List
        • Fundaising Initiatives
          • Fundraising Initiatives List
        • Career Opportunities
          • Career Opportunities
      • Events
        • Event Post
        • Edit Events
        • Delete Event
        • Event List
      • Media Center
        • Get Resources
      • Analytics
        • Community Analytics
      • Newsletter
        • Lists
          • Get newsletter subscriber lists
        • Add newsletter subscribers
        • Get newsletter subscribers
      • Remove users from Space
        DELETE
      • Community Details
        GET
      • Spaces List
        GET
      • Add Users to Space
        POST
    • Webhooks
      • Members
        • User joined
        • User join request
        • User join request approved
        • User join request declined
        • User left
        • User unbanned
        • User role changed
        • User profile updated
        • User invited
        • User invite declined
        • User verified
        • User questions answered
        • User nominated
        • Feedback submitted
      • Spaces
        • Space created
        • Space updated
        • Space deleted
        • User joined space
        • User left space
      • Events
        • Event created
        • Event registered
        • Event updated
        • Event cancelled
        • Event registration updated
        • Event registration cancelled
        • Event starting soon
        • Event attended
        • Event ended
      • Feed
        • Post created
        • Post updated
        • Post deleted
        • Post liked
        • Post unliked
        • Comment added
        • Post reported
        • Post approval requested
        • Post approved
        • Post rejected
        • Post shared
        • Post pinned
        • Post unpinned
        • Post scheduled
        • Comment deleted
        • Comment liked
        • Comment unliked
        • Comment reported
        • Poll voted
        • Survey responded
        • Poll ended
      • Live video
        • Live started
        • Live ended
        • Live joined
        • Live left
        • Live recording ready
      • Courses
        • Course published
        • Course updated
        • Course unpublished
        • Course enrolled
        • Lesson completed
        • Quiz submitted
        • Course completed
      • Newsletter
        • Newsletter subscriber added
        • Newsletter subscriber removed
        • Newsletter sent
        • Newsletter email opened
        • Newsletter email clicked
        • Newsletter email bounced
        • Newsletter email complained
      • Payments
        • Monetization subscription created
        • Monetization subscription renewed
        • Monetization subscription changed
        • Monetization subscription cancel scheduled
        • Monetization subscription resumed
        • Monetization subscription cancelled
        • Monetization payment failed
        • Monetization purchase completed
        • Monetization checkout abandoned
        • Monetization refund requested
        • Monetization refund issued
        • Offer reviewed
        • Offer sold out
      • Opportunities
        • Opportunity created
        • Opportunity updated
        • Opportunity deleted
        • Opportunity applied
      • Media
        • Media added
        • Media updated
        • Media deleted
        • Media shared
        • Media downloaded
      • Community
        • Community updated
        • Community tokens low
        • Community tokens limit reached
        • Website page published
        • Community app published
        • Integration sync failed
      • Chat
        • Chat channel created
        • Chat message posted
    • References
      • Role Types
      • Media Types
      • Response Codes
      • Model Status
      • Post Types
    • Schemas
      • WebhookActor
      • WebhookChannel
      • WebhookComment
      • WebhookCourse
      • WebhookEvent
      • WebhookLiveSession
      • WebhookMedia
      • WebhookMember
      • WebhookNewsletter
      • WebhookOffer
      • WebhookOpportunity
      • WebhookPost
      • WebhookPurchase
      • WebhookRegistration
      • WebhookSpace
      • WebhookSubscriber
      • WebhookSubscription
      • WebhookEnvelope

    Webhooks

    Overview
    Set up a webhook endpoint
    The request body
    Subscriptions and filters
    Headers
    Verify signatures
    Retries and endpoint health
    Test sends and the delivery log
    Tokens and webhooks
    Best practices
    Webhooks changelog
    Every event, with its payload and a sample delivery, is listed in the event reference: open any group folder below (Members, Spaces, Events, โ€ฆ).

    Overview#

    Webhooks send an HTTPS POST to your server when something happens in your community.
    You add an endpoint, choose which events you want, and Networked sends each matching event to your URL as JSON. This guide describes version 2026-10-21.

    What you can build#

    Sync new members to your CRM. Subscribe to user.joined. When a membership becomes active, create or update the contact in your CRM.
    Send event registrations to a spreadsheet. Subscribe to event.registered. Add one row for each registration.
    Alert your team about paid members. Subscribe to the payments group. Post a message to your team chat when money comes in.

    Event groups#

    There are 98 events in 12 groups. You can subscribe to single events or to whole groups.
    CodeGroupWhat it covers
    100MembersJoining, leaving, roles, invites, profiles and verification.
    200SpacesSpace lifecycle and space membership.
    300EventsCommunity events, registrations and attendance.
    400FeedPosts, comments, polls and surveys across every post type.
    500Live videoLive video rooms (event rooms and ad-hoc sessions).
    600CoursesCourses, enrolment and learner progress.
    700NewsletterSubscribers, sends and per-recipient email activity.
    800PaymentsSubscriptions, purchases, refunds and offers (money the community earns).
    900OpportunitiesJobs, services and fundraising listings.
    1000MediaMedia library items of every type.
    1100CommunityCommunity settings, token usage, website, app and integrations.
    1200ChatPublic channel chat only.
    See the event reference for every event name and its data payload.

    Set up a webhook endpoint#

    You create webhook endpoints in your community's admin area, on the API page.

    Steps#

    1.
    Open the admin area and go to the API page. Open the Webhooks section.
    2.
    Add an endpoint. Enter a name and a URL, for example https://example.com/webhooks/networked.
    3.
    Verify the URL with the verify step on the form.
    4.
    Choose which events to receive. You can pick single events or whole groups. You can also set an optional item-type filter and a spaces filter. See Subscriptions and filters. An endpoint with nothing selected receives nothing.
    5.
    Copy the endpoint secret. It is a 64-character hex string. You use it to verify signatures. You can reveal, copy and roll it at any time.
    6.
    Use Test send to send a sample of any event to your endpoint.

    Limits and requirements#

    ItemRule
    EndpointsUp to 10.
    URLUse an https:// URL. Private, internal and single-label hosts are refused, and the URL is checked again before every send.
    ResponseAnswer with any 2xx status within 10 seconds.

    The request body#

    Every delivery is a JSON object with the event data and some details about the delivery.

    Example#

    {
      "event": "event.registered",
      "timeStamp": 1792600000000,
      "data": {},
      "id": "evt_<uuid>",
      "code": 302,
      "group": "events",
      "version": "2026-10-21",
      "communityId": "<id>",
      "occurredAt": "2026-10-21T15:00:00.000Z",
      "attempt": 1,
      "isTest": false
    }

    Keys#

    KeyMeaning
    eventEvent name, for example user.joined.
    timeStampUnix time in milliseconds when this attempt was sent (occurredAt is when the action happened).
    dataThe event payload. Its shape depends on the event (see the event reference).
    idUnique event id (evt_...). The same id is used for every retry and resend.
    codeNumeric event code.
    groupEvent group key, for example events.
    versionWebhook API version.
    communityIdThe community the event belongs to.
    occurredAtWhen the event happened (ISO 8601, UTC).
    attemptDelivery attempt number, starting at 1.
    isTesttrue for test sends.

    Compatibility#

    event, timeStamp and data are unchanged from earlier versions. For the original 11 events, every existing key in data is kept. Keys may be added, never removed or renamed.

    Subscriptions and filters#

    Each endpoint chooses which events it receives, either one event at a time or by group.

    When an endpoint receives an event#

    An endpoint receives an event when:
    the event name is selected, or
    the event's group is selected. This includes events added to the group later.
    Nothing selected means nothing is sent. An endpoint with no events and no groups can be saved, verified and test-sent, but it receives no deliveries until you choose events or groups.
    A group subscription includes events added to that group in the future. Always ignore event types you do not handle, and answer 2xx for them.

    Optional filters#

    FilterEffect
    spaceIdsOnly events from the chosen spaces. Events that belong to no space (community-level events) are always delivered. No spaces selected means events from every space.
    itemTypesOnly events whose item type matches (post type, media type or product type), for events that have one.

    Headers#

    Every delivery includes these HTTP headers.
    HeaderValue
    x-networked-signaturet=<unix seconds>,v1=<hex>. See Verify signatures.
    x-networked-eventEvent name.
    x-networked-event-idSame as id in the body.
    x-networked-event-codeEvent code.
    x-networked-delivery-idId of this delivery.
    x-webhook-signatureLegacy signature.
    x-webhook-timestampLegacy timestamp.

    Verify signatures#

    Check the signature on every request to be sure it came from Networked and was not changed.
    Use the raw request body, exactly as received. Do not parse and re-serialise it before verifying.

    Recommended: x-networked-signature#

    The header looks like this:
    x-networked-signature: t=<unix seconds>,v1=<hex>
    v1 is the hex HMAC-SHA256 of "<t>.<raw body>" using your endpoint secret. Because it covers the timestamp, a captured request cannot be replayed later.
    For 24 hours after you roll the secret, the header carries two v1= values (signed with the new and the old secret). Accept the request if any of them matches.
    Rolling the secret switches the legacy x-webhook-signature to the new secret immediately. Only x-networked-signature carries the 24-hour overlap.
    Reject the request if |now - t| is more than 300 seconds.
    Compare with a constant-time function.

    Node.js#

    Python#

    PHP#

    Legacy: x-webhook-signature#

    Unchanged from earlier versions. x-webhook-signature is the hex HMAC-SHA256 of JSON.stringify(data) (the data value only) using the secret. x-webhook-timestamp is the timestamp header. The legacy signature does not cover the timestamp, so use x-networked-signature for new integrations.

    Retries and endpoint health#

    Networked retries failed deliveries and disables endpoints that keep failing.

    Delivery and retries#

    The timeout is 10 seconds. Any 2xx response means delivered.
    Other responses and network errors are retried at about 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours and 24 hours (with jitter).
    After the last retry, the delivery is marked failed.

    Disabled endpoints#

    SituationWhat happens
    410 Gone responseThe endpoint is disabled immediately.
    3 days of consecutive failuresThe endpoint is disabled and the community admins are emailed once.

    Order and duplicates#

    Delivery order is not guaranteed. Use occurredAt to order events. Use the event id to de-duplicate, because retries and resends carry the same id.

    Test sends and the delivery log#

    Use test sends to try your endpoint, and the delivery log to see what happened to each delivery.

    Test send#

    From the admin API page, send a sample of any event to an endpoint. The body has isTest: true. Test sends are free.

    Delivery log#

    The delivery log keeps the last 30 days per endpoint. Each entry shows:
    event
    code
    time
    status
    HTTP status
    duration
    attempts
    You can:
    filter by status and event
    view the body that was sent
    resend one delivery
    resend all failed deliveries in a time range
    Held deliveries that expire are shown as expired in the log. See Tokens and webhooks.

    Tokens and webhooks#

    Delivered webhooks use your community's tokens.

    How tokens are used#

    Each delivered webhook uses 1 token.
    A delivery is charged once, when it first succeeds.
    Retries, resends of an already delivered webhook, test sends and failed deliveries are free.

    When you run out of tokens#

    If the community is out of tokens, deliveries are held, not sent.
    Held deliveries are delivered, oldest first, when the community is unblocked.
    Held deliveries older than 30 days expire. They show as expired in the delivery log.

    Best practices#

    Follow these tips to build a reliable webhook receiver.
    Respond 2xx fast and process later. Answer within 10 seconds, then do the real work asynchronously.
    Verify every request. Check x-networked-signature against the raw body. See Verify signatures.
    De-duplicate on the event id. Retries and resends carry the same id.
    Do not rely on order. Delivery order is not guaranteed. Use occurredAt to order events.
    Ignore unknown event types and unknown keys. Keys may be added, never removed or renamed. Answer 2xx for events you do not handle.
    Make retries safe. Handle the same event more than once without side effects.
    Keep the secret out of client code. Store it only on your server.
    Roll the secret if it leaks. For 24 hours the new and old signatures are both accepted in x-networked-signature.
    Use the delivery log after an outage. Check failed deliveries and resend them.
    Use isTest. Keep test sends out of your production data.
    Choose how you subscribe. Subscribe by group to get new events automatically. Subscribe by event to get a fixed set.

    Webhooks changelog#

    This page lists changes to webhooks, newest first.

    2026-10-21#

    Behaviour change: an endpoint with no events and no groups selected no longer receives every event. It receives nothing until you choose events or groups. Endpoints set up before this version with an empty selection stop receiving events.
    New:
    New envelope keys beside event, timeStamp and data: id, code, group, version, communityId, occurredAt, attempt, isTest.
    98 events in 12 groups. Subscribe by event or by group.
    Several endpoints per community (up to 10), each with its own secret, item-type and space filters and status.
    Failed deliveries are retried. There is a 30-day delivery log with resend, and test sends.
    Every event has a unique id, kept across retries and resends.
    New x-networked-signature header that includes the timestamp, plus x-networked-event, x-networked-event-id, x-networked-event-code and x-networked-delivery-id. The legacy x-webhook-signature and x-webhook-timestamp are unchanged.
    Secrets can be rolled. x-networked-signature carries both signatures for 24 hours. The legacy x-webhook-signature switches to the new secret immediately.
    Delivered webhooks use tokens (1 token each).
    Fixes:
    event.created and event.updated are now sent. They were defined before but never sent.
    user.joined is now sent once, when the membership becomes active. It is no longer sent before payment or ID verification, again for people already in the community, or for the admin added to a space they create. It is now sent when a paid join completes or an ID check passes.
    post.created is now sent only when the post is visible, for every post type, including polls, surveys, event posts, shared posts and opportunity posts. Posts waiting for approval send post.approval.requested instead.
    user.profile.updated is now sent from every profile save path.
    Modified atย 2026-10-23 11:10:24
    Previous
    Add Users to Space
    Next
    Members
    Built with