Skip to main content

Webhook Methods and Triggers explained

Overview of the HTTP Methods and Triggers available for Webhooks in Appical, and how to choose the right ones for your integration.

Overview

When creating a Webhook in Appical, you select a Method and at least one Trigger. The Method determines how Appical sends the request to the receiving system. The Trigger determines which event in Appical causes the request to be sent.

Example

If your HR system needs to receive an update when a new hire completes their onboarding course, you could select course.completed as the Trigger. The Method depends on what your HR system expects, which will commonly be POST.


Choosing a Method

→ Select the Method expected by the receiving system

When creating or editing a Webhook, select the required option under Method. POST is selected by default, and Appical sends the JSON body with every supported Method.

Method

When to use it

POST

The default and most common choice. Use it when the receiving system expects Appical to send event information to it.

GET

Use this when the receiving endpoint specifically expects a GET request. Less common for Webhooks.

PUT

Use this when the receiving endpoint expects a request intended to fully update an existing record.

PATCH

Use this when the receiving endpoint expects a request intended to update part of an existing record.

DELETE

Use this when the receiving endpoint specifically expects a DELETE request.

📌 Note: The correct Method is determined by the receiving system. If you are unsure which one to select, check with the person or team responsible for that system.

What the receiving system gets

Each request has a JSON body with the event name, a timestamp, the organisation's id and a data object. Every event includes the same user fields; course and form events add their own.

{
  "event": "course.completed",
  "delivered_at": "2026-06-01T09:30:00Z",
  "application_id": 123,
  "data": {
    "user_id": 42,
    "user_email": "[email protected]",
    "user_first_name": "Jane",
    "user_last_name": "Doe",
    "user_first_day": "2026-06-01",
    "user_application_id": 99,
    "user_remote_id": "ext-12345",
    "course_id": 7,
    "course_name": "Welcome to the team"
  }
}
  • user_remote_id is the user's external id (the id from the HR system or import). It is empty if none was set.

  • delivered_at is when the event happened, not when the request was sent. A replay sends the original body unchanged.

  • user.anonymized contains the user's details as they were before anonymization, so the receiver can still match the person.

  • course.* events add course_id and course_name.

  • form.completed adds template_id, template_name, completed_at, user_template_id and an answers list. Each answer has the category, the question text and type, the answer, and when it was last changed.

→ Headers sent with every request

Header

Value

Content-Type

application/json

webhook-id

A unique id for the event. The same event always has the same id, also on a replay, so the receiver can ignore duplicates. Test events start with test-.

webhook-timestamp

When the request was sent, in Unix seconds.

webhook-signature

Only when a signing secret is set. Format v1,. See Verifying Webhook signatures in Appical for details.

Custom headers

Whatever the admin added. A custom header with the same name as one of the headers above is overwritten.



Choosing Triggers

→ Select when the Webhook should be sent

Under Triggers, select the events you want the receiving system to be notified about. You can select one or multiple Triggers for a Webhook. Appical supports 12 Triggers:

Trigger

When is it triggered?

user.created

A new user account is created, by an admin, a CSV import, the API, or an integration.

user.invited

A user is added to the organisation through an invitation. Usually sent together with user.created.

user.invitation_accepted

The user accepts the invitation by setting a password or signs in for the first time with SSO.

user.activated

An archived user is activated again.

user.archived

An active user is archived.

user.anonymized

The user's personal data is anonymized.

user.deleted

The user is deleted from the organisation.

user.first_day

Daily, for each active new hire who reaches their first day.

course.assigned

A course is assigned to the user.

course.started

The user opens a course for the first time.

course.completed

The user completes a course.

form.completed

The user submits a form. This is triggered again for every resubmission.

→ Select multiple Triggers

You can select multiple Triggers for the same Webhook. For example, if another system needs to follow a new hire's onboarding journey, you could select: user.invited (when the new hire is invited), user.first_day (when they reach their first day), course.started (when they start their course), and course.completed (when they complete their course). When one of the selected events happens, Appical sends the corresponding event to the configured URL.

📌 Note: If you need different events to be sent to different systems or URLs, create separate Webhooks with the appropriate Triggers.


👉 Let us know if this article answered your question by using the buttons below. If not, get in touch with our Support Channel for more information:

Did this answer your question?