Create custom events for webhooks in Label Studio
If you want to trigger custom events for webhooks in Label Studio, you can extend the webhook event model.
Create a custom webhook event
To create a custom webhook event, add your own action to the WebhookActions model.
For example:
class WebhookAction(models.Model):
    ...
    SOMETHING_HAPPENED = 'SOMETHING_HAPPENED'
    ...
    ACTIONS = {
        SOMETHING_HAPPENED: {
            'name': _('Something happened'),
            'description': _("A thing happened. We wanted to let you know."),
            'key': 'something',
        },
        ...
    ...After declaring the action and the associated properties and payload details in the WebhookAction class, call the event action in the code where it occurs. For example:
...python
result = do_something()
emit_webhooks(organization, WebhookAction.SOMETHING_HAPPENED, {'something': [result]})
...You can retrieve the organization details using Organization.objects.first().
Call event actions with Python functions
There are several functions you can use to call event actions. Refer to the following table:
| Python function | When to use | Additional details | 
|---|---|---|
| get_active_webhooks() | Get all active webhooks. | |
| run_webhook() | Run one webhook and pass some payload. | |
| emit_webhooks() | Send requests for all webhooks for an action. | |
| emit_webhooks_for_instances() | Send serialized instances with webhook requests. | You must declare a serializerin theWebhookAction.ACTIONSmodel. | 
Call event actions with decorators in API source code
You can use decorators with the CRUD REST methods to send event actions to webhooks. You can use the following:
| Decorator syntax | When to use | Details | 
|---|---|---|
| @api_webhook() | POST/PUT/PATCHrequests | Expects a response with an idand uses the.get_object()function after the request to send that information. | 
| @api_webhook_for_delete() | DELETE | Sends only the idfield after a successfully delete operation. |