# Lifecycle diagrams

> The contact status, sequence toggle, and email validation lifecycles as machine-readable text diagrams, each with a table of the events that trigger every transition.

**A contact in a sequence starts Active, gains Contacted after the first email, and moves through Opened, Clicked, Replied, Bounced, Out of office, or Opted Out toward Finished. Sequence toggles cycle from gray Inactive through green Active to blue Completed, with red, orange, and yellow flagging problems. Validation ends Valid, Risky, or Invalid.**

_Status: Reviewed — human-edited, facts not yet confirmed against the product._

Each diagram is plain text so it stays machine-readable. Exact values and full status
tables: [Statuses](/reference/statuses).

## Contact status lifecycle

```text
added to an active sequence
        │
        ▼
      Active ◄────────────── resume (manual) ─────────────── Paused
        │                                                       ▲
        │                                    pause (manual) ────┘
        │
        ├─ first email delivered ──────────► + Contacted
        ├─ opens a tracked email ──────────► + Opened
        ├─ clicks a tracked link ──────────► + Clicked
        ├─ template variable has no value ─► Missing data   (sends stop until cleared)
        ├─ auto-reply with OOO keywords ───► Out of office  (sends stop; manual or automatic exit)
        ├─ automatic reply detected ───────► Auto-replied + Finished
        ├─ email returned undelivered ─────► Bounced        (fix address → Active → resend)
        ├─ clicks opt-out link ────────────► Opted out      (kept even outside sequences)
        ├─ reaches a Call step ────────────► To call ── call logged ──► Called
        ├─ replies by email or SMS ────────► Replied ──► Finished by default
        └─ all steps sent ─────────────────► Finished       (no sends, no reply tracking)
```

*Contacted*, *Opened*, and *Clicked* are additive markers — they join the contact's other
statuses rather than replacing them.

| Status | Emails sent | Exit path |
| --- | --- | --- |
| Active | Yes | Any event above |
| Paused | No | Manual change back to Active |
| Missing data | No | Fill in the variable or remove it from the template, then clear the status manually |
| Out of office | No | Change to Active manually, or automatic out-of-office handling; a real reply from the contact is still detected and handled per the sequence's replies-handling setting |
| Bounced | No | Update the email address, remove Bounced, set Active, and resend within the same sequence; the status is not retained in a different sequence |
| Replied | Stops by default | *Continue sending emails* in replies handling keeps the remaining steps going |
| Auto-replied | No (comes with Finished) | Change the accompanying Finished status to Active manually; Auto-replied itself cannot be removed |
| Opted out | No | Manual removal only; the contact cannot be moved to another sequence while opted out |
| To call | — | A call action moves the contact to Called |
| Called | — | Permanent; removable only via the contact sidebar |
| Finished | No | Back to Active only if steps remain or new steps were added |

## Sequence toggle lifecycle

```text
created ──► Gray (Inactive)
              │ launch
              ▼
        Green (Active) ─────── all contacts finished ──────► Blue (Completed)
              │
              ├─ missing or invalid settings ──► Red (Action required)     cannot run until fixed
              ├─ warnings detected ────────────► Orange (Issues detected)  needs attention
              ├─ a limit is hit ───────────────► Yellow (Limits reached)   temporarily paused
              └─ pause or archive ─────────────► Gray (Inactive)
```

| Toggle | State | Common triggers |
| --- | --- | --- |
| Gray | Inactive | Newly created and not launched, paused, or archived |
| Green | Active | Launched, restarted after a pause, or working through steps — planning, checking conditions, sending, generating tasks, executing LinkedIn actions |
| Red | Action required | Sending email account removed or disconnected, LinkedIn account removed, sending errors, no contacts, missing schedule, suspension at the 8% bounce-rate threshold |
| Orange | Issues detected | Contacts without an assigned email or LinkedIn account, contacts missing required data, provider block on some accounts, 4% bounce rate reached, missing voice profile |
| Yellow | Limits reached | Email account daily limit, active contacts limit for the billing period, sequence daily limit, LinkedIn weekly connection-request limit, provider daily quota exceeded |
| Blue | Completed | All contacts finished the sequence; no active contacts left |

Governing rules: [Sequence execution](/behavior/sequence-execution),
[Bounce handling](/behavior/bounce-handling), [Sequence stopping](/behavior/sequence-stopping).

## Email validation lifecycle

```text
email address checked (syntax, DNS, and mailbox checks)
        │
        ├─ no high-risk factors ──────────────► Valid     safe to enroll
        ├─ server accepts, may still bounce ──► Risky     disposable domain, catch-all, or honeypot
        └─ a check fails ─────────────────────► Invalid   excluded from sequence sends
```

| Outcome | Meaning | Handling |
| --- | --- | --- |
| Valid | Verification completed with no high-risk factors | Safe to put into sequences |
| Risky | The mail server states the recipient exists, but the send may bounce or be of low value | Treat as Valid; keep Risky addresses to up to 20% of a list |
| Invalid | A syntax, DNS, or mailbox error was returned | The contact does not receive sequence emails |

The full error taxonomy behind the Invalid outcome: [Statuses](/reference/statuses).

## Related

- [Statuses](/reference/statuses)
- [How statuses change](/behavior/status-transitions)
- [Entity relationships](/reference/entity-relationships)
- [Bounce handling](/behavior/bounce-handling)

## Build with Reply

- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the operations that trigger each transition
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — status change, sequence start/pause, and diagnostics operations
