Lead Distro AILead Distro AI
DocsDistributionPing-Post Guide

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.

Last updated:

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: true along with a signed ping_id token.
  • Step 3 — Supplier posts the full lead. The supplier sends the complete lead data to the ingest endpoint, including the flo_ping_id from step 2. The system verifies the token and processes the lead normally.

Ping Endpoint

POST https://app.leaddistro.ai/api/v1/ping

Ping 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 ReasonMeaning
filteredLead data does not pass campaign inbound filters (e.g. wrong state).
suppressedLead phone or email appears on a buyer's suppression list.
invalid_campaignCampaign not found or has no active buyers.
inactive_campaignCampaign exists but is paused.
source_pausedYour source is paused, on this campaign or everywhere. Test pings still go through.
unauthorizedInvalid 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., accepted equals true).
  • Optionally enable Real-Time Price — specify the JSON path for the bid price in the buyer's response (e.g., bid_price or data.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 formatExample replyToken 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.
TextAny 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

StepAmount
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 margin25%

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?
Ping post is available on the Growth plan and above. Pings themselves are never metered or charged, so once you are on a plan that includes ping post you can run as many as you need. Accounts that were already using ping post before it moved to Growth keep it on their current plan.
What's the difference between supplier-side and buyer-side ping-post?
Supplier-side (inbound) ping-post lets your suppliers check if a lead will be accepted before sending the full data — they ping with partial data, get an accept/reject + signed token, then post the full lead. Buyer-side (outbound) ping-post lets your buyers bid on each lead — Lead Distro AI pings every eligible buyer with partial data, collects bids, sends the full lead to the highest bidder. You can use one, the other, or both in the same campaign.
How long does the ping_id token stay valid?
30 minutes from the ping response. After 30 minutes the token is rejected and the supplier must ping again to get a fresh one. This prevents stale leads — a buyer's availability or price can change between ping and post, so we re-validate eligibility every cycle. If your supplier holds leads longer than 30 min before posting, lower their hold time or build a re-ping step into their workflow.
What does the supplier-side ping endpoint return when rejected?
JSON with 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?
Set a global margin at the campaign level — Lead Distro AI subtracts your margin from the winning buyer's bid and quotes that lower price to your supplier. You keep the difference per lead. Override per-buyer to charge different margins from different buyers. Apply a bid penalty to buyers that return leads more often than others so their effective bid reflects their real economic value to you — your reported margin stays honest after returns.
What is Real-Time Price?
Per-buyer ping-post setting that lets a buyer return a 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?
Put {{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?
If the winning buyer rejects the full lead post (their system 5xx'd, or they changed their mind between ping and post), Try-to-Breakeven cascades to the next-highest bidder whose bid still covers the price you already quoted your supplier — preventing the deal from dying when a buyer flakes. Without Try-to-Breakeven, a single buyer rejection wastes the supplier's effort and the lead becomes UNMATCHED.
How does Max Sells Per Lead interact with ping-post?
Max Sells Per Lead is a supplier setting that controls how many top-bidder buyers a single ping result can sell to. Set 1 for exclusive distribution (highest bidder wins, nobody else). Set 2-5 to share the lead with multiple top bidders — common in home services where multiple contractors can each quote the homeowner. Lead Distro AI picks winners by bid at ping time, so suppliers send one post and the system fans out to all winners.
Should I use ping-post or direct-post for my campaign?
Direct-post is simpler and faster — use it for non-competitive verticals (most home services, B2B SaaS leads) where buyers are happy to receive every lead at a fixed price. Ping-post is for competitive verticals (legal, insurance, mortgage) where buyers want to selectively bid on each lead or check availability before committing to data costs. Ping-post adds 200-400ms of latency per lead due to the ping round-trip but unlocks bid-based pricing.

If you have any questions, send us an email at support@leaddistro.ai