---
title: Notification notice webhook
description: "How to receive Authic push notification events on your platform with the signed notification_notice webhook: payload, signature verification, retries and notification types."
---

[Skip to content](https://welcome.authic.io/en/knowledge-base/notification-notice-webhook#main-content)

English

Show submenu for translations

[![](https://welcome.authic.io/hs-fs/hubfs/Logo-B.png?width=134&height=50&name=Logo-B.png)](https://www.authic.io/)

Open main navigation

Close main navigation

- English
  
  Show submenu for translations
- [Authic Dashboard Login](https://app.authic.io/signin)

[Authic Dashboard Login](https://app.authic.io/signin)

 How can we help you?

- There are no suggestions because the search field is empty.

1. [Authic Knowledge Base](https://welcome.authic.io/en/knowledge-base?hsLang=en)
2. [Partner integrations](https://welcome.authic.io/en/knowledge-base/partner-integrations?hsLang=en)

# Notification notice webhook

## HOW TO RECEIVE AUTHIC PUSH NOTIFICATION EVENTS ON YOUR PLATFORM.

This is a quick overview of how to receive Authic push notification events on your platform.

Whenever the loyalty program decides to send a push notification to your members, we also send a signed `notification_notice` webhook to your backend, so you can mirror it in your own inbox, CRM or messaging channel.

This is a plain HTTPS POST with a JSON body, signed with a shared secret. No polling or SDK is required.

In practice, the flow looks like this:

- **Dashboard:** App settings → Integrations → Webhooks
- Add your endpoint URL, enable webhooks, select **Notification notice** and save
- Copy the signing secret (shown once) and store it on your backend
- Verify the `Authic-Webhook-Signature` header on every request
- Process each recipient and return a 2xx response

```
curl -X POST https://your-domain.com/webhooks/authic \  -H "Content-Type: application/json" \  -H "Authic-Webhook-Id: evt_a1b2c3d4-..." \  -H "Authic-Webhook-Event: notification_notice" \  -H "Authic-Webhook-Timestamp: 1779004800" \  -H "Authic-Webhook-Signature: v1=5f2b..." \  -d '{    "id": "evt_a1b2c3d4-...",    "event": "notification_notice",    "createdAt": "2026-05-17T08:00:00.000Z",    "apiVersion": "2026-05-17",    "tenant": { "uuid": "tenant_uuid", "name": "Example Club" },    "data": {      "groupId": "grp_8f14e45f-...",      "chunkIndex": 0,      "totalChunks": 1,      "count": 1,      "reason": "A push notification is triggered.",      "effectiveAt": "2026-05-17T08:00:00.000Z",      "notifications": [{        "user": {          "id": "user_uuid",          "externalId": "unique_user_id_001",          "name": "Jane Doe",          "email": "jane@example.com"        },        "notification": {          "type": "REWARD_AVAILABLE",          "title": "Title in the user's language",          "body": "Body in the user's language"        }      }]    }  }'# Sent by Authic. Respond with any 2xx status.
```

### Parameters

- **id** (String): Unique per delivery (same as Authic-Webhook-Id). Use it as your deduplication key.
- **groupId** (String): Shared by every chunk of the same notification dispatch.
- **chunkIndex, totalChunks** (Number): Position of this chunk (0-based) and how many chunks to expect.
- **count** (Number): Number of recipients in this chunk.
- **effectiveAt** (Date): When the notification was triggered. Identical across all chunks.
- **notifications\[\].user.externalId** (String): Matches the externalID you send at PWA login.
- **notifications\[\].notification** (Object): type (see table below), title and body, already in the user's language.

**Note:** A dispatch can target thousands of members, so recipients are split into chunks of up to 100 per webhook. Chunks may arrive in any order; group them by `groupId` if you need the full set.

### Verifying the signature

Each request is signed with HMAC-SHA256 over `timestamp + "." + rawBody` using your signing secret. The signature header already includes the `v1=` prefix. Reject requests that fail verification.

```
import crypto from 'crypto';// Use the raw request body, before JSON parsing.function verifyAuthicWebhook({ rawBody, headers, secret }) {  const timestamp = headers['authic-webhook-timestamp'];  const signature = headers['authic-webhook-signature'];  const expected = 'v1=' + crypto    .createHmac('sha256', secret)    .update(`${timestamp}.${rawBody}`)    .digest('hex');  return signature?.length === expected.length &&    crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));}
```

### Delivery and retries

- Respond with a 2xx status within 7 seconds. Do heavy work asynchronously.
- Timeouts, network errors, 429 and 5xx responses are retried up to 5 times with exponential backoff (starting at 15 seconds).
- Other 4xx responses are not retried, they are marked as failed.
- Because of retries, the same `id` can be delivered more than once. Ignore ids you have already processed.

### Notification types

`notifications[].notification.type` will be one of:

| Type | Description |
| --- | --- |
| `NEW_CHALLENGE` | A new quest or challenge was published in the member's location. |
| `REFERRAL_SUCCESS` | A referral was successfully completed or joined. |
| `REWARD_AVAILABLE` | A reward just became affordable for the member. |
| `REWARD_CREATED` | A new reward was added in the member's location. |
| `TIER_UPGRADE` | The member's loyalty tier was upgraded. |
| `BOOKING_POINTS_EARNED` | Morning summary of points earned overnight from bookings. |
| `BIRTHDAY` | A birthday gift is available (daily, weekly or monthly, per program setting). |
| `INACTIVITY` | The member has been inactive for 60+ days. |
| `REWARD_UNREDEEMED` | The member claimed a reward but hasn't redeemed it within 7 days. |
| `LOSING_TIER` | The member is at risk of dropping a tier. |
| `POINTS_EXPIRING` | The member has points about to expire. |
| `LEADERBOARD_STARTED` | A new leaderboard cycle has started. |
| `LEADERBOARD_SECOND_WEEK` | Mid-cycle leaderboard reminder (day 8). |
| `LEADERBOARD_THIRD_WEEK` | Late-cycle leaderboard reminder (day 15). |
| `LEADERBOARD_LAST_WEEK` | Final-week leaderboard reminder (day 22). |
| `LEADERBOARD_ENDING` | Leaderboard ends in 2 days. |

**Note:** Use **Send test webhook** on the same page to try your endpoint. Recent deliveries, their request bodies and failed retries are listed there too.

- [Onboarding guide](https://welcome.authic.io/en/knowledge-base/onboarding-guide?hsLang=en)
- [Product guide](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#main-content)

    - [App settings](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#app-settings)
    - [Rewards](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#rewards)
    - [Engagement and features](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#engagement-and-features)
    - [Communication](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#communication)
    - [Analytics](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#analytics)
    - [Marketing](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#marketing)
    - [Settings](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#settings)
    - [CRM Campaigns](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#crm-campaigns)
    - [Contacts](https://welcome.authic.io/en/knowledge-base/product-guide?hsLang=en#contacts)
- [Inspiration guide](https://welcome.authic.io/en/knowledge-base/inspiration-guide?hsLang=en)
- [Partner integrations](https://welcome.authic.io/en/knowledge-base/partner-integrations?hsLang=en)

[![](https://welcome.authic.io/hs-fs/hubfs/Logo-B.png?width=134&height=50&name=Logo-B.png)](https://welcome.authic.io/?hsLang=en)

<https://www.facebook.com/> <https://www.twitter.com/> <https://www.instagram.com/> <https://podcasts.apple.com/> [mailto:email@email.com](mailto:email@email.com)

Copyright © 2026, Authic Labs