---
title: "What does the App Store notification TEST mean?"
description: "TEST is the notification the App Store sends when you ask for one with the Request a Test Notification endpoint. Use it to check your server receives and answers notifications."
url: https://revenuedot.app/docs/notifications/apple-test
---

# What does the App Store notification TEST mean?

The App Store notification TEST is a sample notification that Apple sends only when you request it, to check that your server receives notifications.

## Quick facts

| | |
|---|---|
| Notification | `notificationType` `TEST` |
| Where | App Store Server Notifications v2 (`responseBodyV2DecodedPayload`) |
| Sent by | The App Store server, to your notification URL |
| What Apple says | The App Store server sends it when you call the Request a Test Notification endpoint. You get it only at your request. |

## What triggers it

- You called Request a Test Notification in the App Store Server API,.
- It carries no purchase, so there is nothing to apply.
- Apple's Get Test Notification Status endpoint shows whether the delivery worked.

## What your server should do

1. Verify the `signedPayload` with Apple's App Store Server Library (`SignedDataVerifier.verifyAndDecodeNotification`) before you act on anything in it.
2. Answer 200 so Apple records success.
3. Do not treat it as a customer event.
4. If it does not arrive, call Get Test Notification Status for the failure reason.
5. Answer HTTP 200 (any code from 200 to 206) once you have stored the notification. Apple retries other answers five times, at 1, 12, 24, 48 and 72 hours after the previous attempt, so make your handler safe to run twice (the payload carries a `notificationUUID`).

## Example

```javascript
// Run on the decoded payload, after you verified Apple's signature.
const notification = {"notificationType":"TEST","data":{"environment":"Sandbox","bundleId":"com.example.app"}};

function decide(n) {
  if (n.notificationType !== "TEST") return "ignore";
  return "answer 200, do not touch any customer";
}

console.log(decide(notification));
```

*Run-checked: `npm run check:snippets` runs this snippet with Node and compares its output with `answer 200` (checked 2026-10-03).*

## How RevenueDot handles it

RevenueDot verifies Apple's signature, checks the bundle ID, stores the notification and answers 200. A purchase RevenueDot has not seen is applied only when the app's **Track new purchases from server-to-server notifications** setting is on. RevenueDot stores the test notification, answers 200 and counts it as received, so the app's notification status in setup health can turn ready. It applies nothing and sends no webhook event.

## Related

- [What does the App Store notification RENEWAL_EXTENSION mean?](https://revenuedot.app/docs/notifications/apple-renewal-extension.md)
- [What does the App Store notification DID_RENEW mean?](https://revenuedot.app/docs/notifications/apple-did-renew.md)
- [What does the App Store notification SUBSCRIBED mean?](https://revenuedot.app/docs/notifications/apple-subscribed.md)
- [Which webhook events does RevenueDot send?](https://revenuedot.app/docs/api/webhook-events.md)
- [Set up App Store notifications in RevenueDot](https://revenuedot.app/docs/guides/app-store.md)

## Source

- [Apple: notificationType](https://developer.apple.com/documentation/appstoreservernotifications/notificationtype)
- [Apple: Responding to App Store Server Notifications](https://developer.apple.com/documentation/appstoreservernotifications/responding-to-app-store-server-notifications)
- [Apple: app-store-server-library-node (SignedDataVerifier)](https://github.com/apple/app-store-server-library-node)
- [RevenueDot server: stores/apple/notifications.ts (how the notification is applied)](https://github.com/revenuedot/revenuedot/blob/main/apps/server/src/stores/apple/notifications.ts)
- [RevenueDot server: stores/apple/notifications.ts (how the notification is applied)](https://github.com/revenuedot/revenuedot/blob/main/apps/server/src/stores/apple/notifications.ts)
- [RevenueDot core: events.ts (how a change becomes a webhook event)](https://github.com/revenuedot/revenuedot/blob/main/packages/core/src/events.ts)

Checked: 2026-10-03
