Ingest Feedback Event

Ingest one outreach outcome event. This is how Satellyte learns which leads, titles, companies, and signal types produce better outcomes.

Endpoint

POST /api/v1/feedback/events

Authentication

All requests require the X-Satellyte-API-Key header. See Quickstart.

Supported event types

event_typeBehavior
openAccepted; no status mutation yet.
clickAccepted; no status mutation yet.
replySets lead status to replied; updates replied_at and reply_content.
positive_replySets status to replied; marks feedback = positive.
bounceSets status to skipped; marks feedback = negative.
meeting_bookedSets status to meeting_booked; marks feedback = positive.

Supported sources

instantly, heyreach, webhook, manual, custom.

Request body

FieldTypeRequiredNotes
lead_idstringYesLead ID in your workspace.
event_typeenumYesOne of the values in the table above.
sourceenumNoDefaults to custom.
contentstringNoReply text, event detail, or failure reason.
meeting_urlstringNoUsed with meeting_booked.
occurred_atstring (ISO)NoEvent time; defaults to now.
metadataobjectNoReserved for future use.

cURL: positive reply

curl -i -X POST "https://api-staging.satellyte.ai/api/v1/feedback/events" \ -H "X-Satellyte-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "lead_id": "LEAD_ID_HERE", "event_type": "positive_reply", "source": "webhook", "content": "Interested, send me more details." }'

cURL: meeting booked

curl -i -X POST "https://api-staging.satellyte.ai/api/v1/feedback/events" \ -H "X-Satellyte-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "lead_id": "LEAD_ID_HERE", "event_type": "meeting_booked", "source": "webhook", "meeting_url": "https://meet.google.com/example", "content": "Meeting booked from outbound campaign." }'

Response (200)

{ "data": { "accepted": true, "event_type": "positive_reply", "source": "webhook", "lead_id": "lead_123", "mutated_lead": true, "stored_event": false, "note": "Lead outcome updated using existing leads fields.", "lead": { "id": "lead_123", "status": "replied", "replied_at": "2026-05-02T12:00:00.000Z", "meeting_booked_at": null, "feedback": "positive", "feedback_reason": "Interested, send me more details." } } }

Response fields

FieldTypeNotes
acceptedbooleanAlways true for a recognized event type with a known lead.
event_typestringEchoed event type.
sourcestringEchoed source.
lead_idstringEchoed lead id.
mutated_leadbooleanWhether the lead record was updated.
stored_eventbooleanReserved for future; whether a separate event log entry was written.
notestringFree-form explanation of what changed.
leadobjectUpdated lead snapshot (id, status, replied_at, meeting_booked_at, feedback, feedback_reason).

Error responses

All failed calls use the standard error envelope documented in Errors.

StatusCodeNotes
400validation_errorReturned when the request body is invalid, required event fields are missing, or the outcome/event type is unsupported.
401unauthorizedReturned when X-Satellyte-API-Key is missing, invalid, or expired.
404lead_not_foundReturned when lead_id does not exist in this workspace.
429rate_limit_exceededReturned when the API key exceeds its configured rate limit.
500service_errorReturned when Satellyte cannot ingest the feedback event. Retry with backoff.