> For the complete documentation index, see [llms.txt](https://movemint.gitbook.io/movemint-developer-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://movemint.gitbook.io/movemint-developer-docs/open-api-specification/webhooks-and-notifications/webhooks.md).

# Webhooks

How webhook delivery works: event types, payload format, signature verification, and retries. Movemint sends HTTP POST requests to your registered URL when events occur.

#### Supported Events

| Event Type                  | Trigger                                                 |
| --------------------------- | ------------------------------------------------------- |
| `event.participant.created` | A new participant registers for an event you administer |

#### Webhook Delivery

When a webhook event fires, Movemint sends an HTTP `POST` request to your registered URL with a JSON payload:

```json
{
  "type": "event.participant.created",
  "data": {
    "object": { ... }
  }
}
```

The `data.object` field contains the full participant object (see the EventParticipant schema).

#### Signature Verification

Every webhook request includes an `X-Signature` header containing an HMAC-SHA256 hex digest of the request body, signed with your webhook subscription's `secret`. **Always verify the signature** before processing the payload.

```python
import hmac
import hashlib

def verify_signature(payload_body, secret, signature_header):
    expected = hmac.new(
        secret.encode('utf-8'),
        payload_body.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature_header)
```

```ruby
def verify_signature(payload_body, secret, signature_header)
  expected = OpenSSL::HMAC.hexdigest(
    OpenSSL::Digest.new('sha256'),
    secret,
    payload_body
  )
  ActiveSupport::SecurityUtils.secure_compare(expected, signature_header)
end
```

#### Webhook Retries

If your endpoint does not return a 2xx status code, the delivery is considered failed. Failed deliveries are retried automatically by the background job system.

{% openapi-webhook spec="movemint-api" name="newParticipant" method="post" %}
[movemint-api](https://www.movemint.cc/api/v1/openapi)
{% endopenapi-webhook %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://movemint.gitbook.io/movemint-developer-docs/open-api-specification/webhooks-and-notifications/webhooks.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
