> ## Documentation Index
> Fetch the complete documentation index at: https://docs.levios.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a follow-up sequence

> Examples and ordering rules for all eight automation actions.

Place these objects inside `configuration.follow_up.actions`, in execution
order. Each example is one action, not a complete configuration. A sequence
requires at least one delivery action and a final `finish`, with at most 20
actions in total.

## Send text and link buttons

```json theme={null}
{
  "type": "send_message",
  "delay_seconds": 0,
  "text": "Here is your guide.",
  "buttons": [
    {
      "type": "url",
      "title": "Open guide",
      "url": "https://example.com/guide"
    }
  ]
}
```

`send_message` requires `text` and `buttons`. Use an empty array for no buttons:
text then allows 1 to 1000 Unicode scalars. With 1 to 3 buttons, text allows 1
to 640. Follow-up buttons are URL-only, with titles of 1 to 20 scalars and
HTTP(S) URLs. A URL click does not resume the sequence.

## Send media

```json theme={null}
{
  "type": "send_media",
  "delay_seconds": 0,
  "media_type": "image",
  "url": "https://example.com/guide.jpg"
}
```

`send_media` accepts `media_type` values `image`, `video`, `audio`, or `file`,
with a public HTTP(S) `url`. Keep the file accessible until delivery. The
authoring API accepts a URL, not multipart upload or base64. Structural
validation does not download the file or establish its size, MIME type, or
provider acceptance.

## Send a carousel

Use `send_carousel` for 1 to 10 image cards, each with 1 to 3 URL buttons. The
[carousel guide](/guides/carousels) includes every field and a complete creation
example.

## Ask the contact to follow

```json theme={null}
{
  "type": "ask_to_follow",
  "delay_seconds": 0,
  "message": "Follow our account, then confirm to receive the guide.",
  "buttons": {
    "open_profile_title": "Open profile",
    "confirm_title": "I follow you"
  },
  "verification_mode": "strict",
  "not_following_message": "We could not confirm your follow yet. Please try again.",
  "max_attempts": 3,
  "retry_exhausted_action": "stop",
  "recheck_after_seconds": 300,
  "expires_in_seconds": 86400
}
```

`strict` checks follow status with Instagram; `trusted_click` trusts the
confirmation click. `not_following_message` is required but can be `null`. Both
prompts allow 1 to 640 scalars; button titles allow 1 to 20. `max_attempts` is 1
to 10. `recheck_after_seconds` is 60 to 86400; `expires_in_seconds` is 60 to
604800\.

## Ask for an email address

```json theme={null}
{
  "type": "ask_for_email",
  "delay_seconds": 0,
  "message": "What is your email address?",
  "retry_message": "Please send a valid email address.",
  "max_attempts": 3,
  "retry_exhausted_action": "stop",
  "expires_in_seconds": 86400
}
```

## Ask for a phone number

```json theme={null}
{
  "type": "ask_for_phone",
  "delay_seconds": 0,
  "message": "What is your phone number?",
  "retry_message": "Please send a valid phone number.",
  "max_attempts": 3,
  "retry_exhausted_action": "stop",
  "expires_in_seconds": 86400
}
```

Both capture actions require all fields shown. `message` and `retry_message`
allow 1 to 1000 scalars; `max_attempts` is 1 to 5; `expires_in_seconds` is 60 to
604800\. Capture validates the submitted value, not ownership, and does not send
an email or WhatsApp message.

For every gate, `retry_exhausted_action` accepts `continue` or `stop`. Expiry
ends the gate even when retry exhaustion is configured to continue. A configured
expiry does not extend Instagram permission to send messages.

## Add a contact tag

```json theme={null}
{
  "type": "add_contact_tag",
  "delay_seconds": 0,
  "tag_id": "00000000-0000-4000-8000-000000000003"
}
```

Use an existing tag UUID from the selected account. Place `add_contact_tag`
after a delivery action. Its `delay_seconds` accepts 0 to 2592000, but a later
message must still pass the cumulative messaging-window checks.

## Finish the sequence

```json theme={null}
{
  "type": "finish"
}
```

`finish` occurs exactly once, at the end, and accepts no delay or other fields.

## Order and timing

Every non-null follow-up requires exactly one `start_follow_up` button in the
opening, for every trigger type. Gates come before delivery. Use at most one
`ask_to_follow`; it cannot be combined with email or phone capture. Email and
phone can each appear once, in either order.

Delivery and gate delays are integers from 0 to 86399 seconds, relative to the
preceding successful completion. Cumulative waits, including tag delays and
background follow rechecks, must leave each outbound provider action within
86399 seconds of the applicable window baseline. A captured inbound reply resets
that baseline; a silent follow recheck does not. Queues and account pacing can
add latency. A saved configuration is not proof of delivery.
