User Record Changed webhooks do not fire

Hi all,

I recently set up webhooks for Blackbaud K-12 by creating a subscription for com.blackbaud.education.user.change.v1 and testing it successfully with a couple of com.blackbaud.utility.testpayload.v1 calls. However, I've noticed that no amount of changes, profile creations, or deletions in Blackbaud K-12 actually trigger any webhooks. We don't even see attempts of webhooks in the server logs.

Making GET calls to https://api.sky.blackbaud.com/webhook/v1/subscriptions shows a provisioned subscription, requesting additional test payloads works just as expected.

Anybody having similar issues by any chance? Can anybody from Blackbaud chime in?

Thank you!

Answers

  • Hi @Omer Boratav - I'm tagging in @Stephen Boyle to see if he can offer any assistance here!

  • Alex Wong
    Alex Wong Community All-Star
    Tenth Anniversary Kudos 5 Facilitator 4 bbcon 2025 Attendee Badge

    I don't use education webhook, but I do use RE's. Did you check later to make sure? I experienced hours of delay sometime before the webhook is fired.

  • Hi @Alex Wong, really appreciate your input as a fellow dev. I haven't experimented with webhooks in RE yet, but it's good to hear that they're working.

    I've been waiting for 11 days now—so there's definitely a problem. And if I can be honest, I really do understand and appreciate throttling and debouncing; but if a webhook takes hours to fire, that's not really a webhook.

    Blackbaud provides an average timeframe of about 5 minutes in its documentation. 5 minutes is perfectly reasonable. But hours, or days? That'd defeat the whole point of a webhook, I think.

  • Alex Wong
    Alex Wong Community All-Star
    Tenth Anniversary Kudos 5 Facilitator 4 bbcon 2025 Attendee Badge

    I totally hear what you are saying. In generally, webhook do fire quickly.

    @Ben Wong @Erik Leaver adding 2 from Blackbaud here for some comment.

    My experience of when webhook took hours is when I approve a dozen webview batches in RE NXT and that causes hundreds of "when gift is created" webhook to fire. This is usually when I see a delay of a few hours.

  • Ben Wong
    Ben Wong Blackbaud Employee
    Tenth Anniversary Kudos 3 Name Dropper Participant

    Hi @Omer Boratav, one thing you can try if the environment you have contains Education Management and Raiser's Edge NXT, is to use the Webhook Monitor to see if the webhook event is firing: https://developer.blackbaud.com/skyapi/products/renxt/webhook/webhook-monitor

    The Webhook Monitor is a separate app that will need to be connected. Once connected you'll see an add-in on the RENXT homepage. Even though it's only compatible with RENXT currently, it let's you subscribe to the Education Management webhooks. If you make changes to the user, you should see a log of events that were fired by the change, and received by the Webhook Monitor. If you see the event in the Webhook Monitor log, then you know your environment is firing the webhook event and the issue is with your code receiving it.

    Hope that helps!

  • Hi @Ben Wong, thank you so much for that tip!

    I've connected the Webhook Monitor and subscribed to the webhooks through it, but nothing's showing up there either. So I'm pretty confident that the issue is with the webhooks not firing.

    Cheers,

  • Ben Wong
    Ben Wong Blackbaud Employee
    Tenth Anniversary Kudos 3 Name Dropper Participant

    @Omer Boratav in that case, you should contact Blackbaud Support and file a ticket so that they can look into your specific situation. It will probably need attention from the Education Management product team. Cc: @Stephen Boyle

  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 First Reply Name Dropper

    @Omer Boratav,

    I think the release yesterday had the changes to reenable the user changed webhook. If it's not working for you now, let me know.

    Stephen

  • Hi @Stephen Boyle,

    Sorry for not updating this thread. Yes, I put in a ticket (#020844892) on the afternoon of April 20th, and got a reply asking me a bunch of troubleshooting questions at 06:24 Pacific Time on April 21st.

    Miraculously, at 09:52 the same morning, we started getting a stream of webhooks for some fairly recent changes; and it appears to have been working fine since then.

    One thing I should note for other people who may be working with the Education webhooks: The User ID returned in data.id is not just the user's User ID as a string. It's apparently prefixed with the environment ID.

    So instead of something like:

    {
        "id": "uwz7wi28-67b9-4999-0w5c-zy3m3bzxkqu5",
        "data": {
            "id": "1234567"
        },
        "time": "2026-04-21T16:52:59.143731+00:00",
        "type": "com.blackbaud.education.user.change.v1",
        "source": "CY93MVX6JDJAY3KKW9EE812J50N1CQQQBZKPU1U",
        "subject": "/environments/p-yourenvironment-identifier",
        "specversion": "1.0",
        "traceparent": "00-0ja7pm0q796kxci6haa9e45kin1xe6d8-4f3mtn0k2hnkw5fw-01"
    }
    

    where 1234567 would be the user ID you'd use in the GET User by ID endpoint, Blackbaud sends:

    {
        "id": "uwz7wi28-67b9-4999-0w5c-zy3m3bzxkqu5",
        "data": {
            "id": "p-yourenvironment-identifier-1234567"
        },
        "time": "2026-04-21T16:52:59.143731+00:00",
        "type": "com.blackbaud.education.user.change.v1",
        "source": "CY93MVX6JDJAY3KKW9EE812J50N1CQQQBZKPU1U",
        "subject": "/environments/p-yourenvironment-identifier",
        "specversion": "1.0",
        "traceparent": "00-0ja7pm0q796kxci6haa9e45kin1xe6d8-4f3mtn0k2hnkw5fw-01"
    }
    

    This is not documented in the webhook event documentation, and is also not reflected in the test webhook.

  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 First Reply Name Dropper

    I don't think that is supposed to be happening. Let me check with the team.

Categories