Record a follow-up
POST
/api/v2/contacts/{username_or_id}/follow-upMarks the contact's due follow-up as sent, the same as ticking it off on the Follow-ups board. Works only while a follow-up is due.
Rate limit 150 requests per minute
Headers
x-api-keyheaderRequiredYour API key.
Content-TypeheaderRequiredapplication/json
Path parameters
username_or_idstringRequiredInstagram username or contact id.
Body
sent_atstringWhen it was sent. Cannot be in the future. Default now.
sent_bystringEmail of the team member who sent it.
stagestringName or id of the due stage, from List follow-up stages. A safety check: the request is rejected if that stage is not the one due.
Errors
| Error | When |
|---|---|
400 invalid_sent_at | sent_at is not a date or is in the future. |
400 invalid_sent_by | sent_by is not a valid email address. |
403 user_not_in_organization | The sent_by email belongs to someone outside your organization. |
404 unknown_sent_by | No user with the sent_by email. |
404 contact_not_found | No contact with that username or id in your organization. |
409 follow_up_not_pending | No follow-up is due for this contact right now. |
409 stage_not_pending | stage is not the stage that is due. |
409 follow_up_already_recorded | This follow-up was already recorded. |
curl -X POST "https://app.dmtracker.ai/api/v2/contacts/jane.fitness/follow-up" \
-H "x-api-key: $DMTRACKER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sent_by": "alex@yourcompany.com"
}'{
"status": "success",
"message": "Follow-up recorded",
"data": {
"id": "d59c2a7e-4b1f-4e83-9a60-3f8c1b7d2e94",
"contact": {
"id": "7c1e9a52-3f4b-4d2a-9e61-0b8f2d5c4a17",
"username": "jane.fitness",
"full_name": "Jane Cooper",
"follow_up": {
"state": "sent",
"count": 1,
"last_follow_up_sent_at": "2026-10-29T10:09:02.000+00:00"
}
}
}
}Shortened. data.contact is the full contact object.