Start with what you already have
You do not need to rebuild your data structure to use PINGSLAP. Send whatever fields you currently have—arbitrary fields automatically display under Other Details. Use specialized sections like lead, tracking, or action links only when you want PINGSLAP to organize or act on the data more intelligently.
1. Simple payload
At minimum, send a title and a message (or body). PINGSLAP displays the title prominently at the top of the alert card and places the message in the notification body.
{
"title": "Backup Complete",
"message": "Nightly database backup finished successfully."
}
2. Custom data
Send your existing payload fields as root-level properties. Additional fields automatically appear under an Other Details section in the PINGSLAP app.
{
"title": "Order Shipped",
"body": "Package has left the warehouse.",
"order_id": "ORD-99281",
"carrier": "FedEx",
"tracking_number": "9205590164917312345678"
}
3. Lead data
Wrapping customer contact fields inside a "lead": { ... } object causes PINGSLAP to organize them into a dedicated Lead section with clean rows for name, phone, email, and service.
{
"title": "New Roofing Lead",
"lead": {
"name": "Jane Doe",
"phone": "(813) 555-9876",
"email": "jane@example.com",
"city": "Tampa",
"state": "FL",
"service": "Roof Replacement",
"property_type": "Residential",
"urgency": "High"
}
}
Recognized phone numbers automatically receive a one-tap Call button. Email displays as selectable text for easy copying (email is not an automated action).
4. Phone numbers
Phone dialing does not require the Lead structure. Send a phone number anywhere in your payload—such as a root contact_number field—and PINGSLAP provides a Call button when a supported phone format is recognized.
{
"title": "Dispatch Request",
"contact_number": "(813) 555-9876"
}
PINGSLAP recognizes standard telephone number formats. Unrecognized formats or arbitrary numbers remain plain selectable text.
5. Campaign tracking
Group attribution and marketing metadata inside a "tracking": { ... } object to organize campaign, source, and landing page details into a dedicated Tracking section.
{
"title": "New Campaign Lead",
"tracking": {
"campaign": "Fall Roofing Mailer",
"utm_source": "mailer",
"landing_page": "https://example.com/roof"
}
}
Ordinary URLs like landing pages remain display and selectable data—they do not automatically become interactive links.
6. Action links
A normal URL in a payload is data. If you want PINGSLAP to provide an interactive button that opens a URL in a browser or CRM app, use the canonical _pingslap.action object:
{
"title": "New CRM Lead",
"lead": {
"name": "Jane Doe",
"phone": "(813) 555-9876"
},
"_pingslap": {
"v": 1,
"action": {
"type": "url",
"label": "Open Lead",
"url": "https://crm.example.com/leads/8492"
}
}
}
Action links require https://, must have Allow Action Links enabled for that Space, and display the destination URL before opening. Ordinary payload URLs never become actions automatically.
7. Summary, category & priority
You can optionally provide high-level context fields at the root of your payload to give alerts immediate visual context in your notification feed.
{
"title": "Server High Load",
"message": "CPU utilization exceeded 92%",
"summary": "Primary app cluster under heavy traffic",
"category": "Infrastructure",
"priority": "high"
}
8. Best practices
- Send a short title (under 80 characters).
- Put the primary human takeaway in the body or message.
- Keep custom metadata at root so it appears under Other Details.
- Never send sensitive information like passwords, credit cards, or private credentials.
Authoritative technical contract
Looking for verified limits, exact field definitions for the lead and tracking objects, form-urlencoded support, or error response specifications?
View the full Payload Reference →
fetch
await fetch("https://api.pingslap.com/webhook/YOUR_SPACE", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
title: "New website lead",
message: "Taylor wants a quote today"
})
});
Browser JavaScript may be blocked by CORS even when curl works. See JavaScript and CORS.