Webhook Data Structure
When your webhook receives a payment or subscription event, a JSON payload is sent.
Payment success webhook payload
The payment.success webhook tells your integration that a customer has completed a purchase. This page explains the fields in its payload, including customer identifiers, purchased products, and commands configured for your integration.
Example payload
{
"event": "payment.success",
"created_at": "2026-09-29T13:00:54.000Z",
"request_id": "e74d0cfe-acb0b0cb-224491e6-09c3b468",
"webhook_id": 1,
"integration_key": "partner-19560-f7e214b2dfb2a9n1", // For Partner integration only
"store_id": 31,
"mode": "test",
"data": {
"id": 1085674, // Tip4Serv payment or subscription record ID
"type": 1, // 1 for a payment or 2 for a subscription.
"gateway": "none",
"amount": {
"total_paid": 9.89,
"currency": "EUR"
},
"user": {
"email": "example@gmail.com",
"username": "Murga",
"steam_id": "76561198030562985",
"steam_username": "Murg@ Tor",
"minecraft_uuid": "87ac351717f74762bfcaeff0ddd1a9bd",
"minecraft_username": "Murga",
"eosid": "84535555555555555555555555555555",
"discord_id": "376441921087995906",
"discord_username": "Murga"
},
"basket": [
{
"id": "104",
"sub_key": "31t9xjmv",
"name": "Test Minecraft",
"price": "8.99",
"quantity": "1",
"custom_fields": {
"1": {
"field_id": 1,
"name": "My New Field",
"value": {
"option_id": "1",
"name": "test1",
"value": "test1",
"price": 0.9
},
"total_price": 0.9,
"type": "selection",
"marker": "test",
"if_not_filled": "do_not_execute"
}
}
}
],
"actions": [
{
"server_id": "29940",
"commands": [
{
"str": "give {custom:test} {discord_id} ok",
"event": "0",
"product_id": "104",
"item_key": 0,
"command_id": "0"
}
]
}
],
"identifiers": [
{
"source": "seller",
"field_id": 3481,
"identifier_name": "purchase_code",
"identifier_label": "Purchase Code",
"identifier_value": "5456GF",
"typed_value": "purchase_code:5456GF"
}
]
}
}Main fields
Field
Meaning
event
The webhook event. This example uses payment.success. Here is the events list: https://docs.tip4serv.com/webhooks-developers-only/how-do-webhooks-work#example-events
created_at
When the event was created, in ISO 8601 format.
request_id
Identifier for this webhook event. The request_id remains the same across all retry attempts for that event, so you can use it as an idempotency key to prevent processing the same delivery more than once. A new event for the same payment receives a different request_id. For example, a renewal, expiration, refund, or seller-initiated resend is treated as a new event and has its own request_id.
webhook_id
ID of the webhook configuration that received the event.
integration_key
integration_key identifies the partner integration associated with the webhook if applicable.
store_id
ID of the store where the purchase was made.
mode
live for a real purchase or test for a test event.
data
Details of the payment, customer, products, actions, and identifiers.
data object
Field
Meaning
id
Tip4Serv payment or subscription record ID. Use together with data.type to uniquely identify the record.
type
1 for a payment or 2 for a subscription.
transaction_id
It is the PayPal or Stripe transaction ID. Unavailable for bypass and test payment.
gateway
Payment gateway used. Examples include stripe, paypal, free, and none.
amount.total_paid
Total amount paid in the indicated currency.
amount.currency
Currency code, such as EUR or USD.
user
Customer details and standard account identifiers.
basket
Products included in the purchase.
actions
Commands configured for Custom or Partner Integrations.
identifiers
Additional custom identifiers collected for this purchase.
user object
The user object contains the customer’s standard details and linked identities:
Field
Meaning
email
Customer email address.
username
Customer display name.
steam_id, steam_username
Steam identity.
minecraft_uuid, minecraft_username
Minecraft identity.
eosid
ARK: Survival Ascended identifier.
fivem_citizen_id
FiveM citizen identifier, when collected.
discord_id, discord_username
Discord identity.
Some fields may be absent if they were not collected or the customer did not link that service.
basket array
Each entry in basket represents a purchased product.
Field
Meaning
id
Product ID.
sub_key
Identifier for this basket entry.
name
Product name.
price
Product price in the purchase currency.
quantity
Quantity purchased.
custom_fields
Customer selections or values collected for this product, when configured.
A custom_fields entry can include the field’s name and ID, its selected value, any additional price, its type, and a marker used by configured commands. For example, a command containing {custom:test} refers to a custom field with the marker test.
actions array
The actions array lists the commands configured for the current webhook event on servers associated with products in the customer’s basket. It includes servers with matching commands configured in the product editor for Custom Integrations or Partner Integrations added through My Servers.
Each action contains a server_id and a commands array. Each command includes a command_id, str (the command text), and product_id. Additional fields, such as event and item_key, may also be present.
The worker generates command_id as a string containing the command’s zero-based index in its configured list. Use that same value to identify the command when returning per-command results.
identifiers array
The identifiers array contains additional custom identifiers collected for the purchase. These identifiers were configured either by the seller from the cart fields panel or by the integration partner. These are separate from the standard Steam, Minecraft, Discord, and other identities in user.
Each entry describes one identifier:
Field
Meaning
source
Where the identifier came from. In the example, seller means it was configured by the seller from cart fields. partner means it was configured by a partner integration.
field_id
ID of the field used to collect it.
identifier_name
Machine-readable name, such as purchase_code.
identifier_label
Label shown for the field, such as Purchase Code.
identifier_value
The value provided for this purchase.
typed_value
The identifier name and value together, such as purchase_code:5456GF.
Last updated