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_connected

or 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.