Motion reasons
Every reason Curviate reports for a Motion is one of the codes on this page: an Enrollment's skip_reason and finish_reason, a history entry's reason, the analytics reason counts, and the events feed. The list is closed: a code is never renamed, and a new one is added here first. Each code comes with its one-line sentence beside it (skip_message, finish_message, reason_message), so an agent can explain it without a lookup.
Read them from the CLI:
curviate enrollment get enr_01J8Z3K9P0Q1R2S3T4V5W6X7Y8 --json
curviate enrollment list --motion mot_01J8Z3K9P0Q1R2S3T4V5W6X7Y8 --reason already_connectedor from the API: GET /v1/enrollments/{id} and GET /v1/enrollments?motion_id=...&reason=already_connected.
do_not_contact
The person is on the Team's do-not-contact list, so the Motion left them out or stopped.
Reported as: Enrollment skipped (skip_reason); Enrollment finished (finish_reason).
What to do: Nothing. Every Motion skips the people on the list, and adding a person ends their open Enrollments for good: they cannot be resumed. Replying in a conversation they started is still allowed. To contact them again from a Motion, an Owner or Manager removes them from the list (DELETE /v1/do-not-contact/{id}) and adds them to the Motion again.
in_exclusion_list
The Contact is on one of the Motion's exclusion lists, so it was not enrolled.
Reported as: Enrollment skipped (skip_reason).
What to do: Nothing to do unless the exclusion is wrong: remove the Contact from the exclusion list, then add it again with curviate motion add <motion> --contact <id>.
in_other_motion
The Contact is or recently was in another Motion, so it was not enrolled.
Reported as: Enrollment skipped (skip_reason).
What to do: Wait until the other Motion is done with the person, or turn off settings.exclude.other_motions. skip_detail is same_motion when an earlier Enrollment of this Motion already reached them.
known_chat
The Account already has a chat with this person, so the Motion left them out.
Reported as: Enrollment skipped (skip_reason).
What to do: The account already talks to this person. To enroll them anyway, add them from that chat in the Unibox, or turn off settings.exclude.known_chats.
filtered
The Contact did not pass one of the Motion's where filters; skip_detail names which one.
Reported as: Enrollment skipped (skip_reason).
What to do: skip_detail is the index of the failing where filter. Fix the Contact's data or the filter, then add the Contact again.
profile_unavailable
The LinkedIn profile could not be read, so nothing was done for this person.
Reported as: Enrollment skipped (skip_reason); Step failed (history reason).
What to do: The profile may be private, deleted or out of reach for this account. Check linkedin_url on the Contact; nothing is retried automatically.
no_connected_account
This Motion is set to Connected only (settings.assign already_connected) and this person is not a Connection of any sending Account; set assign to auto to invite them.
Reported as: Enrollment skipped (skip_reason).
What to do: Update the Motion with settings.assign set to auto, or add a sending account that is a Connection. Then add the skipped Contacts again with curviate motion add: a list scan never looks at a skipped Contact twice.
completed
The Enrollment reached the end of its Sequence.
Reported as: Enrollment finished (finish_reason).
What to do: Normal ending. Read history with curviate enrollment get <id> for what each Step did.
stopped
Someone stopped this Enrollment.
Reported as: Enrollment finished (finish_reason).
What to do: Ended by curviate enrollment stop or POST /v1/enrollments/{id}/stop. Resume it with curviate enrollment resume <id> --at <step>.
removed
The Contact was removed from the Motion.
Reported as: Enrollment finished (finish_reason).
What to do: Ended by curviate motion remove. Add the Contact again to re-enroll it.
account_unavailable
The sending Account stayed unavailable, so the Enrollment ended.
Reported as: Enrollment finished (finish_reason).
What to do: The sending account needs attention (reconnect it). Reassign the Enrollment to another account of the Motion, or resume it once the account is back.
account_removed
The sending Account was removed, so the Enrollment ended.
Reported as: Enrollment finished (finish_reason).
What to do: The account left Curviate or the Motion. Reassign the Enrollment to another sending account of the Motion.
motion_archived
The Motion was archived, which ends every open Enrollment.
Reported as: Enrollment finished (finish_reason).
What to do: Archiving ends every open Enrollment and cannot be undone. Create a new Motion to reach the person again.
motion_ended
The Motion reached its end date, which ends every open Enrollment.
Reported as: Enrollment finished (finish_reason).
What to do: The Motion's schedule.end_at passed. Extend end_at on a new Motion to continue.
contact_deleted
The Contact was deleted, so the Enrollment ended.
Reported as: Enrollment finished (finish_reason).
What to do: The Contact is gone; contact_id is null. Nothing to do.
contact_merged
The Contact was merged into one already enrolled on this Account, so this Enrollment ended.
Reported as: Enrollment finished (finish_reason).
What to do: The surviving Contact already has an Enrollment on this account in this Motion; follow that one.
replied
The person replied, so the Enrollment ended.
Reported as: Enrollment finished (finish_reason).
What to do: Continue the conversation in the Unibox. The Sequence's on_reply, or the then of the until message.replied it was waiting in, decides what a reply does.
messaged_manually
Someone messaged this person by hand from this Account, which always ends the Enrollment.
Reported as: Enrollment finished (finish_reason).
What to do: Nothing. A person on this Account took the conversation over, so the Motion stepped back.
engaged_elsewhere
The person replied to another Account of this Motion, or was messaged by hand from one, so this Account stopped.
Reported as: Enrollment finished (finish_reason).
What to do: Nothing. The conversation goes on from the Account the person engaged with. Its other Accounts stop so the person hears from one.
already_following
The Account already follows this person, so the follow was skipped.
Reported as: Step skipped (history reason).
What to do: Nothing to do: the follow you wanted is already in place.
not_following
The Account does not follow this person, so there was nothing to unfollow.
Reported as: Step skipped (history reason).
What to do: Nothing to do: there was no follow to remove.
already_connected
Already connected to this Account, so no invitation was sent.
Reported as: Step skipped (history reason).
What to do: Nothing to do: the person is already a Connection. Steps after the invitation continue.
invite_pending
An invitation from this Account to this person is already pending, so no new one was sent.
Reported as: Step skipped (history reason); Step failed (history reason).
What to do: An earlier invitation from this account is still open. Wait for it, or withdraw it with an invite.withdraw step.
already_invited
This account already invited this person once, and Curviate never invites the same person twice from one account.
Reported as: Step skipped (history reason).
What to do: Curviate invites each person at most once per account, whichever Motion or core send invited them. The Sequence continues without a second invitation from this account; another account of your team can still invite them.
no_pending_invite
There was no pending invitation to withdraw.
Reported as: Step skipped (history reason).
What to do: Nothing to do: there was no open invitation to withdraw.
not_connected
The person is not a Connection of this Account, so the message could not be sent.
Reported as: Step skipped (history reason); Step failed (history reason).
What to do: A message needs a Connection. Send an invitation first, wait with until invite.accepted, or use an inmail.send step.
inmail_unavailable
This Account cannot send an InMail to this person.
Reported as: Step skipped (history reason); Step failed (history reason).
What to do: The account has no InMail it can use for this person. Use an account on Sales Navigator or Recruiter, or a message.send after an invitation.
no_eligible_post
The person has no recent post to react to or comment on.
Reported as: Step skipped (history reason); Step failed (history reason).
What to do: The person has not posted recently. Use if contact.posted_within before the step, or accept the skip.
already_reacted
The Account already reacted to this post, so the reaction was skipped.
Reported as: Step skipped (history reason).
What to do: Nothing to do: the reaction is already there.
already_commented
The Account already commented on this post, so the comment was skipped.
Reported as: Step skipped (history reason).
What to do: Nothing to do: the account already commented on that post.
missing_variable
A variable in the text had no value and the step has no fallback to send instead.
Reported as: Step skipped (history reason).
What to do: A {{...}} variable had no value for this Contact and there was no fallback. Add a fallback to the step, or fill the field on the Contact.
no_endorsable_skill
The person lists no skill this Account has not endorsed yet.
Reported as: Step skipped (history reason).
What to do: Nothing left to endorse. Accept the skip.
text_too_long
The rendered text, or a voice note's fallback, was over LinkedIn's limit and no shorter fallback could be sent.
Reported as: Step skipped (history reason).
What to do: The text with the Contact's values passed LinkedIn's limit. Shorten the text or the field, or add a shorter fallback.
already_attempted
This step was already attempted and LinkedIn never confirmed it, so Curviate did not send it again.
Reported as: Step skipped (history reason).
What to do: LinkedIn never confirmed an earlier attempt of this step, so it may already have happened. Curviate does not send it twice; check the chat before writing by hand.
platform_rejected
LinkedIn refused the action.
Reported as: Step failed (history reason).
What to do: LinkedIn said no. Look at the person and the account in LinkedIn before trying again with curviate enrollment retry <id>.
recipient_unreachable
LinkedIn says this person cannot be reached from this Account.
Reported as: Step failed (history reason).
What to do: This account cannot reach the person (privacy settings, or they left LinkedIn). Try another account with reassign, or accept it.
platform_error
LinkedIn returned an error, so the action did not happen.
Reported as: Step failed (history reason).
What to do: LinkedIn returned an error and nothing happened. Retry with curviate enrollment retry <id>.
outcome_unknown
LinkedIn did not confirm the action. Curviate never repeats it, so it was not retried.
Reported as: Step failed (history reason).
What to do: Treat it as possibly sent: read the chat before doing anything by hand. Retry skips this step as already_attempted.
tag_limit
The Tag could not be added because a Tag limit is reached; the Sequence moved on.
Reported as: Step taken (history reason).
What to do: The Contact or the team is at its Tag limit. Remove unused Tags; the Sequence already moved on.