Webhooks
Learn about sending Deepwall events to your server via webhooks
Deepwall tracks user statuses by validating user receipts with stores and sends real-time data to your HTTP endpoints.
You can monitor the subscription events sent by Deepwall to manage your app flow for paid users and react immediately to changes in users subscription statuses.

Configuring Webhooks

For the webhooks service to be activated in Deepwall, you need to provide your webhook URL to Deepwall from the Deepwall management console.
Follow the steps below to configure the Webhooks URL:
1. Navigate to the Deepwall management console and go to App Settings.
2. Go to the Webhooks tab and enter your URL to Webhooks URL for Deepwall Server Notifications.
3. You can copy the API Key and use to protect your server from unwanted requests.
The registered URL will start receving data from Deepwall.

Events Sent Via Webhooks

The following events are sent to your server via webhooks, if webhooks url is configured in Deepwall.
Event Name
Description
purchased
User has purchased a non-subscription product (consumable, non-consumable, non-renewing subscription)
trialSubscribed
User has started a free trial
trialToPaidSubscribed
User is converted to a paid subscription at the end of the free trial
subscribed
Users has started a paid subscription without a free trial
renewed
User has renewed a paid subscription
refunded
User has received a refund for a subscription or non-subscription payment
autoRenewDisabled
User has disabled auto renewal
autoRenewEnabled
User has enabled auto renewal
moved
User has moved to another device

API Key Usage for Security

You can use the API key optionally to protect your server from unwanted requests. You can get the API key from App Settings menu in Deepwall Management Console.

Request Format

Request Header:

Deepwall sends a POST request to webhook URLs every time an event occurs. The request header contains the API key as the Secret value field.
JSON
1
API-Key: Secret Value {API Key}
2
Accept: application/json
Copied!

Request :

For Events Other than moved
Request body for purchased, trialSubscribed, trialToPaidSubscribed, subscribed, renewed, refunded, autoRenewDisabled, autoRenewEnabled.
JSON
1
{
2
"uuid": "d18c11574e4ccd59",
3
"data": {
4
"event": "trialSubscribed",
5
"purchase": {
6
"orderId": "GPA.3326...",
7
"transactionId": "GPA.3326...",
8
"productCode": "com.product",
9
"quantity": 1,
10
"purchaseDate": "2021-02-21 16:55:06",
11
"expiresDate": "2021-02-24 18:54:55",
12
"cancellationDate": null,
13
"isTrialPeriod": 1,
14
"isRenewal": 0,
15
"order": {
16
"originalPurchaseDate": "2021-02-21 16:55:06",
17
"isSubscription": 1,
18
"isRefunded": 0,
19
"isActive": 0,
20
"isProduction": 1,
21
"inTrialPeriod": 1,
22
"inGracePeriod": 0,
23
"purchaseData": "W3sicHJvZHV..."
24
}
25
}
26
}
27
}
Copied!
Column
Description
uuid
Unique user identifier provided by the Deepwall SDK
event
Name of the event, you can see the events list here
orderId
Order Id of the valid subscription in stores
transactionId
Transaction Id in stores
productCode
Purchased product code
quantity
Purchase quantity
purchaseDate
Date of purchase, the time store has charged the user's account
expiresDate
End date of current subscription period
cancellationDate
Refund date, NULL if user has not refunded
isTrialPeriod
1 if user started a trial, otherwise 0
isRenewal
1 if purchase is a renewal and 0 if not
originalPurchaseDate
Date of the original purchase date which is the first order of user
isSubscription
1 if purchase is a subscription and 0 if it is non-subscription
isRefunded
1 if purchase has been refunded and 0 if not
isActive
1 if automatic renewal is enabled, otherwise 0. isActive is 1 in billing retry and grace period.
inTrialPeriod
1 if user is in trial period, otherwise 0
inGracePeriod
1 if user is in grace period, otherwise 0

Subscription Status Tracking Hints

Active Subscription : expiresDate has not expired and isRefunded = 0
In Grace Period : expiresDate has expired and isActive = 1
Inactive Subscription : expiresDate has been expired and isActive = 0
Request for moved
Request body for device moves for paid subscribers.
JSON
1
{
2
"uuid": "394B409C-CE78-4FA4-5CDA-0A0F3AEB",
3
"data": {
4
"event": "moved",
5
"moves": [{
6
"orderId": "1000000701866583",
7
"fromUuid": "2E10EC71-7E32-432B-9C44-5EA1C309",
8
"toUuid": "394B409C-CE78-4FA4-5CDA-0A0F3AEB"
9
}]
10
}
11
}
Copied!
Column
Description
uuid
Unique user identifier provided by Deepwall SDK
event
Name of the event, you can see the events list here
order id
Order Id of the valid subscription in stores
from uuid
Previous unique user identifier
to uuid
New unique user identifier on the new device
It’s important to respond quickly so you do not exceed a time-out limit when you are getting a webhook.
We recommend delaying app processing until a response is sent.