Feedback tells LeadConduit what happened to a lead after it was delivered. The CRM integration articles call the same feature disposition feedback. There are two types of feedback:
- Conversion: the lead progressed to a lifecycle stage in your system, such as an appointment being set or a sale closing.
- Return: you are giving the lead back, usually because it was not contactable or not a real prospect.
Salesforce and LeadPerfection have a built-in feedback integration that sends feedback for you. Any other system that can send a web request can report feedback with the instructions on this page, including software your own team builds.
Feedback must be turned on before recipients can send it: see Enabling a Recipient to Send Conversion Feedback to LeadConduit.
How It Works
Make an HTTP POST request to:
https://app.leadconduit.com/feedback?event_id={event_id}
Replace {event_id} with the event ID that was delivered along with the lead data. Every delivery step in a flow generates its own event ID each time it sends a lead, and that ID is what identifies the delivery your feedback refers to. It is not the lead ID: feedback sent with a lead ID is rejected. You only receive the event ID if the delivery step maps the Event ID field to your system, which is part of enabling feedback. Lead Feedback Overview explains why your system of record should store it with the rest of the lead data.
The event ID also authorizes the request, so no API key or other authentication is needed. Treat event IDs as private for the same reason.
If your system cannot send a request body, you can send the same fields as query parameters on a GET request to the same URL. Everything else on this page applies to both forms.
Request Fields
-
type(required): eitherconversionorreturn. If it is missing or has any other value, LeadConduit answers400withoutcome: errorand the reason in the body. -
reason(optional): for a conversion, the name of the lifecycle stage the lead reached (for exampleAppointment SetorSale Closed); for a return, why the lead is being returned (for exampleWrong number). A conversion without a reason is stored, but it never appears in a stage column on the Connections Report, so for conversions you should always send one. -
occurred_at(optional): when the status actually changed in your system, as an ISO 8601 timestamp (2026-05-30T08:00:00Zor2026-05-30T08:00:00-05:00). Without it, LeadConduit uses the time it received the feedback, which is fine for real-time senders and wrong for anything batched or polled. A timestamp without a timezone is read as UTC, and a date without a time as midnight UTC. A value that cannot be parsed is ignored and the feedback falls back to the receipt time.
Any other fields you include are stored on the feedback event as well, and the step’s feedback rules can use them.
Request and Response Formats
You may send the body in one of three formats. Include the Content-Type header so LeadConduit knows which one you chose:
- JSON:
Content-Type: application/json - XML:
Content-Type: text/xmlorContent-Type: application/xml - Form encoding:
Content-Type: application/x-www-form-urlencoded
LeadConduit replies with JSON or XML. Choose the response format with the Accept header (application/json or text/xml); without it, LeadConduit defaults to JSON.
What You Can Send for a Lead
Conversions follow the lead through its lifecycle, so you send one conversion event each time the lead reaches a new stage, with the stage name as the reason. A lead that goes from Contacted to Appointment Set to Sale Closed produces three conversion events. Sending the same stage twice for the same delivery is harmless: the stage is counted once on the Connections Report, and the most recent occurred_at (or receipt time) becomes its lifecycle date.
A return closes the lead. Once LeadConduit accepts a return, it rejects every later feedback on that delivery, conversions included, with the reason lead was already returned. A return can still follow earlier conversions.
If a flow delivered the lead to more than one recipient, each delivery has its own event ID and each recipient sends its own feedback.
Reading the Response
A 201 Created means LeadConduit processed the submission. It does not mean the feedback was accepted, so always check the outcome field in the body:
-
success: the feedback was accepted and recorded. -
failure: the feedback was rejected. Thereasonsays why: the step’s feedback rules did not pass (for example a return sent after the maximum lead age the buyer allows), or the lead was already returned. -
error: something went wrong while processing the feedback, andreasonhas the detail.
Other status codes mean the request never got that far:
| Status | Meaning |
|---|---|
400 |
type is missing or not one of conversion and return (the body carries outcome: error and the reason), or the body could not be parsed as the format named in Content-Type. |
403 |
Feedback has not been enabled on the delivery step that sent this lead. |
404 |
No event exists for this ID, or the event is more than 90 days old and has been deleted. |
406 |
The Accept header asks for a format LeadConduit cannot produce, or Content-Type names an unsupported format. |
409 |
Feedback is configured on the delivery step but currently switched off. |
413 |
The request body is larger than 10 MB. |
415 |
The request has a body but no Content-Type header. |
422 |
The event_id is not a valid ID, is a lead ID, or refers to an event that is not a delivery event. |
Example: curl POST with JSON response
Request
curl -X POST "https://app.leadconduit.com/feedback?event_id=5af4b98aa8065fa3a79bf4b3" \
-H 'Accept: application/json' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'type=conversion&reason=Appointment Set&occurred_at=2026-05-30T08:00:00Z'
Response
HTTP/1.1 201 Created
Header: Content-Type: application/json; charset=utf-8
Body:
{
"lead": {
"first_name": "Joe",
"id": "5bb3890e9000974b35a55133",
"last_name": "Blow"
},
"outcome": "success"
}
Example: form POST with JSON response
Request
Method: POST
URL: https://app.leadconduit.com/feedback?event_id=5af4b98aa8065fa3a79bf4b3
Header: Content-Type: application/x-www-form-urlencoded
Header: Accept: application/json
Body:
type=return&reason=Wrong+number
Response
HTTP/1.1 201 Created
Header: Content-Type: application/json
Body:
{
"lead": {
"email": "joe.blow@example.com",
"first_name": "Joe",
"id": "57913b9911c754b2cb643cf3",
"last_name": "Blow",
"phone_1": "5125551212"
},
"outcome": "success",
"reason": null
}
Example: JSON feedback with JSON response
Request
Method: POST
URL: https://app.leadconduit.com/feedback?event_id=5af4b98aa8065fa3a79bf4b3
Header: Content-Type: application/json
Header: Accept: application/json
Body:
{
"type": "conversion",
"reason": "Sale Closed",
"occurred_at": "2026-06-02T15:45:00-05:00"
}
Response
HTTP/1.1 201 Created
Header: Content-Type: application/json
Body:
{
"outcome": "success",
"reason": null,
"lead": {
"id": "57913b9911c754b2cb643cf3",
"email": "joe.blow@example.com",
"first_name": "Joe",
"last_name": "Blow",
"phone_1": "5125551212"
}
}
Example: XML feedback with XML response
Request
Method: POST
URL: https://app.leadconduit.com/feedback?event_id=5af4b98aa8065fa3a79bf4b3
Header: Content-Type: text/xml
Header: Accept: text/xml
Body:
<?xml version="1.0"?>
<feedback>
<type>return</type>
<reason>Wrong number</reason>
</feedback>
Response
HTTP/1.1 201 Created
Header: Content-Type: text/xml
Body:
<?xml version="1.0"?>
<result>
<outcome>success</outcome>
<reason/>
<lead>
<id>57913b9911c754b2cb643cf3</id>
<first_name>Joe</first_name>
<last_name>Blow</last_name>
<email>joe.blow@example.com</email>
<phone_1>5125551212</phone_1>
</lead>
</result>
Example: rejected feedback
This is what a conversion sent after the lead was already returned looks like. The status is still 201; the rejection is in the body.
HTTP/1.1 201 Created
Header: Content-Type: application/json
Body:
{
"outcome": "failure",
"reason": "lead was already returned",
"lead": {
"id": "57913b9911c754b2cb643cf3",
"email": "joe.blow@example.com",
"first_name": "Joe",
"last_name": "Blow",
"phone_1": "5125551212"
}
}
Conversion Feedback and the Connections Report
For conversion feedback, the reason value names the lifecycle stage the lead reached, and each distinct stage name becomes its own conversion column on the Connections Report shared between connected partners. A few rules follow from that:
- Stage names are matched exactly, so
Appointment Set,appointment set, andAppointment Setare three different columns. Agree on a short, fixed list of stage names and send them identically every time. - Only accepted conversions from the last 90 days create columns, so a brand-new stage shows up after its first accepted event.
- Reports stop adding columns past 25 distinct stage names. Keep the list small.
- The lifecycle date shown for a stage is the
occurred_atyou sent, or the receipt time if you did not send one.
For the request and response schemas, the Feedback section of the LeadConduit API reference on the developer portal has the full details.
Comments
0 comments
Please sign in to leave a comment.