Ping-Post Guide
How ping-post lead distribution works in Lead Distro AI. Supplier-side and buyer-side flows, real-time bidding, partial data pings, post-acceptance payloads, and pricing negotiation for competitive lead verticals.
What is Ping-Post?
Ping-post is a two-step lead distribution method where leads are pre-qualified before being fully delivered. Instead of blindly sending leads, the system checks availability, pricing, and filters first — then sends the full lead only when a buyer has committed to purchasing it.
Lead Distro AI supports ping-post on both sides of the transaction — supplier-side (inbound) and buyer-side (outbound). You can use one or both depending on your setup.
Flow 1: Supplier-Side Ping-Post (Inbound)
This flow lets your suppliers check if a lead will be accepted before sending the full data. Useful when suppliers want to avoid wasting bandwidth on leads that will be rejected.
How It Works
- Step 1 — Supplier pings your system. The supplier sends partial lead data (phone, email, state, etc.) to the ping endpoint. No lead record is created.
- Step 2 — System checks eligibility. Lead Distro AI validates the data against campaign filters, suppression lists, and buyer availability. If everything checks out, it returns
accepted: truealong with a signedping_idtoken. - Step 3 — Supplier posts the full lead. The supplier sends the complete lead data to the ingest endpoint, including the
flo_ping_idfrom step 2. The system verifies the token and processes the lead normally.
Ping Endpoint
POST https://app.leaddistro.ai/api/v1/pingPing Request Body
{
"flo_campaign_id": "your-campaign-id",
"flo_supplier_id": "your-supplier-id",
"phone": "5551234567",
"email": "lead@example.com",
"state": "CA"
}The ping endpoint only requires flo_campaign_id and flo_supplier_id as required fields. Any additional fields (phone, email, state, etc.) are checked against campaign inbound filters and suppression lists.
Ping Response (Accepted)
{
"accepted": true,
"ping_id": "eyJjaWQiOiJkZDJiM2...",
"message": "Lead accepted"
}Ping Response (Rejected)
{
"accepted": false,
"reason": "filtered",
"message": "Lead does not meet campaign filters",
"filter_errors": ["state must be one of: TX, FL, CA"]
}| Rejection Reason | Meaning |
|---|---|
| filtered | Lead data does not pass campaign inbound filters (e.g. wrong state). |
| suppressed | Lead phone or email appears on a buyer's suppression list. |
| invalid_campaign | Campaign not found or has no active buyers. |
| inactive_campaign | Campaign exists but is paused. |
| source_paused | Your source is paused, on this campaign or everywhere. Test pings still go through. |
| unauthorized | Invalid API key or supplier not linked to this campaign. |
Posting With the Ping ID
After a successful ping, include the ping_id as flo_ping_id in your ingest request:
{
"flo_campaign_id": "your-campaign-id",
"flo_supplier_id": "your-supplier-id",
"flo_ping_id": "eyJjaWQiOiJkZDJiM2...",
"first_name": "Maria",
"last_name": "Garcia",
"phone": "5551234567",
"email": "lead@example.com",
"state": "CA"
}Ping tokens expire after 30 minutes. If the supplier waits too long to post the full lead, the token will be rejected. The supplier will need to ping again.
Each supplier gets a dedicated API Specs page with their exact endpoints, field requirements, and payload examples — including the flo_ping_id field for ping-post campaigns. Share it from the supplier's settings in your campaign.
Flow 2: Buyer-Side Ping-Post (Outbound)
This flow is configured per-buyer inside a campaign. When a lead is distributed, the system pings the buyer first to check if they want the lead and at what price, then posts the full lead data if they accept.
How It Works
- Step 1 — Lead is ingested. A supplier sends a lead via the ingest API (with or without the supplier-side ping flow above).
- Step 2 — System pings buyers. For each eligible buyer with ping-post enabled, the system sends a ping request to the buyer's configured Ping URL with partial lead data.
- Step 3 — Buyer responds with a bid. The buyer's system returns an accept/reject response. If accepted, they can include a bid price that overrides their default payout.
- Step 4 — Best bid wins. If multiple buyers bid, the highest bidder gets the lead. The system posts the full lead to the winning buyer's delivery endpoint.
- Step 5 — Revenue is recorded. The bid price becomes the lead's revenue. If the supplier uses Revenue Share cost mode, the cost is auto-calculated as a percentage of that bid.
Configuring Buyer-Side Ping-Post
- Go to your Campaign and find the buyer in the Outbound Buyers section.
- Click the buyer's menu (three dots) and select Edit.
- Enable the Ping-Post toggle under the delivery settings.
- Set the Ping URL — this is the endpoint on the buyer's system that receives ping requests.
- Configure Response Parsing — specify which JSON field indicates acceptance (e.g.,
acceptedequalstrue). - Optionally enable Real-Time Price — specify the JSON path for the bid price in the buyer's response (e.g.,
bid_priceordata.price).
Buyer Ping Request (Sent by Lead Distro AI)
The ping body template is configurable per buyer. Use {{field}} placeholders to include lead data:
{
"first_name": "{{first_name}}",
"last_name": "{{last_name}}",
"email": "{{email}}",
"phone": "{{phone}}",
"state": "{{state}}"
}Buyer Ping Response (Expected from Buyer)
{
"accepted": true,
"bid_price": 120.00
}The Real-Time Price feature lets each buyer bid a different amount per lead. Combined with Revenue Share cost mode on the supplier, your margin is automatically calculated per lead — even when bid prices vary.
Pass Ping Reply Values Into the Post
Many destinations answer an accepted ping with an ID, such as a lead ID or a ping token, and refuse the post unless it sends that same ID back. Use the {{ld_ping_response:FIELD}} token to copy any value from the destination's ping reply into the post.
The token works only in the destination's Post Body Template, in the Post Configuration section. In the ping body it is never filled in, because the reply does not exist yet when the ping is sent. The editor warns you if you put one there.
| Ping reply format | Example reply | Token to use |
|---|---|---|
| JSON | {"response":{"lead_id":"874"}} | {{ld_ping_response:response.lead_id}} (the dotted path). The last part alone, {{ld_ping_response:lead_id}}, also works when only one field in the reply has that name. |
| XML | <response><leadToken>abc</leadToken></response> | {{ld_ping_response:leadToken}} (the tag name). The dotted path response.leadToken and the slash path /response/leadToken also work. |
| Text | Any plain-text reply | {{ld_ping_response:body}} (the whole reply). |
The format is the one you picked for the ping's reply in Ping Configuration (JSON, XML, or Text). A Post Body Template for the JSON example above looks like this:
{
"lead_id": "{{ld_ping_response:response.lead_id}}",
"first_name": "{{first_name}}",
"phone": "{{phone}}"
}Find the Real Field Names
- In Ping Configuration, click Test Ping once.
- In the Post Body Template, type
{{(or open the field picker). The fields from the destination's reply are listed under Ping Response Fields. Once live leads have been pinged, the list comes from the destination's most recent accepted ping. - To test the post on its own, run Test Ping first, then Execute Test. A standalone test post uses the reply from your last Test Ping. Without one, the token goes out empty and the destination refuses the test because the post does not match an accepted ping.
- After a real lead goes out, open the lead and check its Delivery Log (or go to Logs → Delivery). The request body shows the value that was sent.
An empty value where the destination expects an ID usually means the token name does not match a field in the reply. A typical symptom is the destination answering "Lead_ID missing or invalid". Run Test Ping and pick the field from Ping Response Fields instead of typing it.
On a campaign that is not ping-post, the Ping Configuration section is hidden until you turn it on. Open the campaign, go to Settings → Destination Features, and switch on Ping Configuration. Ping-post campaigns always show it.
Revenue Share + Ping-Post
Revenue Share is a supplier cost mode where the supplier is paid a percentage of whatever the buyer pays. This is especially powerful with ping-post because the buyer's bid price varies per lead.
Example
| Step | Amount |
|---|---|
| Buyer bids on ping response | $120.00 |
| Revenue (buyer pays you) | $120.00 |
| Supplier cost (75% revenue share) | $90.00 |
| Your profit | $30.00 |
| Your margin | 25% |
To set this up, go to your campaign's Inbound Suppliers section, edit the supplier, and select Revenue Share as the cost mode. Enter the percentage you want to pay the supplier (e.g., 75%).
Revenue Share works with all campaign types — not just ping-post. For standard campaigns with a fixed buyer price, the math is the same: supplier cost = buyer price × percentage.
Frequently Asked Questions
Which plans include ping post?
What's the difference between supplier-side and buyer-side ping-post?
How long does the ping_id token stay valid?
What does the supplier-side ping endpoint return when rejected?
accepted: false, a reason code (one of filtered, suppressed, invalid_campaign, inactive_campaign, source_paused, unauthorized), a human-readable message, and (for filtered) a filter_errors array listing which campaign filters caught the lead. Suppliers should log the reason — filtered means the lead doesn't match your campaign criteria (e.g., wrong state), suppressed means the contact is on a buyer's suppression list, others are config issues.How do I set up margin pricing on a buyer-side ping-post campaign?
What is Real-Time Price?
bid_price field in their ping response. Configure the JSON path in the buyer's settings (e.g., bid_price or nested data.price). On every ping, the buyer's system returns its current willingness to pay; Lead Distro AI uses that as the revenue for any lead that buyer wins. Combine with the supplier-side Revenue Share cost mode to auto-calculate your margin on every lead — even when bid prices vary per lead.How do I send the lead ID from the ping reply in the post?
{{ld_ping_response:FIELD}} in the destination's Post Body Template (Post Configuration). For a JSON reply, use the dotted path, so {"response":{"lead_id":"874"}} becomes {{ld_ping_response:response.lead_id}}. For XML, use the tag name. For a Text reply, use {{ld_ping_response:body}}. Run Test Ping once and the field picker lists the real fields under Ping Response Fields. The token does nothing in the ping body.What does Try-to-Breakeven do?
How does Max Sells Per Lead interact with ping-post?
Should I use ping-post or direct-post for my campaign?
Related Articles
If you have any questions, send us an email at support@leaddistro.ai