Log an interaction
Record a call, email, meeting or note on a constituent timeline.
POST https://cotlet.dev/api/v1/bloomerang/constituents/{constituent_id}/interactions
write
Logs what already happened; it sends nothing to the constituent. A user without giving access cannot choose Acknowledgement, PledgeReminder, Receipt or Solicitation and gets APP_PERMISSION_DENIED. It reaches no one, so it does not wait for your OK.
Parameters
| Name | Type | Description |
|---|---|---|
| constituent_id integer required | integer | Constituent ID from search_constituents. |
| date string required | string | YYYY-MM-DD. |
| subject string required | string | Up to 255 characters. |
| purpose string required | string | Purpose: Acknowledgement, ImpactCultivation, Newsletter, Receipt, Solicitation, SpecialEvent, VolunteerActivity, PledgeReminder, Welcome or Other. |
| channel string required | string | Channel: Email, Phone, TextMessage, Mail, InPerson, SocialMedia, Website or Other. |
| note string | string | Longer text kept with the interaction. |
Request
curl -X POST https://cotlet.dev/api/v1/bloomerang/constituents/1/interactions \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"date","subject":"subject","purpose":"purpose","channel":"channel"}' result = client.call("bloomerang", "add_interaction", {"constituent_id":1,"date":"date","subject":"subject","purpose":"purpose","channel":"channel"}) const result = await cotlet.call('bloomerang', 'add_interaction', {"constituent_id":1,"date":"date","subject":"subject","purpose":"purpose","channel":"channel"}); cotlet call bloomerang add_interaction --data '{"constituent_id":1,"date":"date","subject":"subject","purpose":"purpose","channel":"channel"}' Example response
{
"id": 7311,
"constituent_id": 48211,
"date": "2026-10-21",
"subject": "Called about lapsed gift",
"channel": "Phone",
"purpose": "Solicitation"
}