Webhook Payload Reference
This reference describes the webhook payload fields Liferay Data Platform (LDP) accepts from Demandbase, HubSpot, and Marketo. Each source identifies the profile to update with a required field. Demandbase sends account data from its own schema, while HubSpot and Marketo send custom events you define.
Endpoints and Delivery
Each webhook data source generates its own endpoint URL when you add it in LDP. Copy the value LDP shows rather than building the URL yourself. Endpoints accept POST requests with a Content-Type of application/json, authenticated with the LDP-provided token in an Authorization: Bearer <token> header.
To generate the endpoint URL and token, follow the setup steps for Demandbase, HubSpot, or Marketo.
| Data Source | Endpoint Path |
|---|---|
| Demandbase | /api/demandbase_accounts |
| HubSpot | /api/hubspot_webhooks |
| Marketo Event Stream | /api/marketo_webhooks |
LDP forwards the payload to its ingestion service without inspecting the response, and returns 200 OK for every request it accepts. A successful response confirms delivery, not ingestion, so validate your payload before sending it. To confirm that events are landing, check the Activities tab for an individual or account.
Demandbase Account Fields
Demandbase sends account and firmographic data to LDP via webhook, and LDP maps it to unified account profiles. Demandbase builds the payload from its own account schema, which you choose when you set up the integration. For the full set of account, firmographic, and calculated fields Demandbase can send, see the field documentation in your Demandbase account.
| Key | Purpose |
|---|---|
web_site | Identifies the account in LDP. When the payload has no web_site, LDP reads website. |
Make sure the account schema you choose sends web_site or website. LDP discards a payload that has neither, and still returns 200 OK.
HubSpot and Marketo Event Fields
LDP treats HubSpot and Marketo events as custom events, so there is no predefined event schema. You define the JSON payload entirely on the sending side, in a HubSpot workflow webhook action or a Marketo Event Stream webhook, and LDP ingests whatever you send as long as the required fields are present. Both sources use the same payload contract.
Required Fields
Send both fields at the top level of the request body.
| Field | Type | Description |
|---|---|---|
email | String | Email address of the contact or lead. LDP matches the event to the individual with this email address. |
eventName | String | Name of the event. Use a consistent, descriptive identifier (for example, emailClicked, formSubmit, formFillOut, or webinarAttend). |
When a request is missing email or eventName, LDP drops the event and still returns 200 OK.
Additional Properties
Every other top-level key you send becomes an additional property on the stored event, and LDP stores each value as a string. There’s no nested object to build: send extra context as flat top-level keys alongside the fields above (for example, campaign name, asset title, or form ID), and LDP groups them under properties when it displays the event.
LDP dates each event with the time it receives the request. An eventDate key you send is stored as an ordinary property and doesn’t change that date.
Example Payload
{
"email": "contact@example.com",
"eventName": "emailClicked",
"emailTitle": "Marketing Opportunity"
}
Event in the Activities Tab
In the Activities tab, an event’s fields have different names from the ones in your request body. Your event name appears as eventId, your additional properties appear under properties, and applicationId names the source. The top-level eventDate is the time LDP received the event.
LDP sets applicationId from the data source that received the event:
| Data Source | applicationId |
|---|---|
| HubSpot | HubSpot |
| Marketo Event Stream | Marketo |
A HubSpot event looks like this in the tab:
{
"applicationId": "HubSpot",
"eventDate": "Wed Jun 10 12:01:33 GMT 2026",
"eventId": "emailClicked",
"properties": {
"emailTitle": "Marketing Opportunity"
}
}
Use this shape to interpret an event in the Activities tab for an individual or account.
Best Practices
- Use a consistent naming convention for
eventNamevalues across all your webhooks, because LDP groups events by this name. - In HubSpot, add the webhook to a separate workflow for each event type you want to track.