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

# Sending portal links

> Send guests their portal link and reminders with workflows, insert links from the inbox, and let the AI agent share them.

Creating a portal doesn't send it. Send the link from a workflow, from the inbox composer, or through the AI agent.

## In a workflow

Add **Conduit Portal Link** from the **Portal** variable group to a **Send Message** step. **Portal link token** inserts only the token. Both also work in Slack, Teams and AI message steps, and in **Update reservation custom field**.

* A reservation with no portal yet gets one, using the template from [Defaults](https://docs.conduit.ai/portals/defaults.md#templates)
* The step fails with **Portal link unavailable** when there's no portal to send, for example for an inquiry, an expired portal or a workspace with no active template in Defaults
* **Reservation guest portal url**, in the **Reservation** group, becomes the Conduit link, creating the portal if needed. It stays the PMS's own link when no portal can be made
* The **New reservation** trigger also fires for inquiries, which can't have a portal

### Send the link when a booking is confirmed

1. Go to **Workflows**, click **New Workflow**, then **Start from scratch**
2. Pick the **Reservation status updated** trigger and set the status to **Confirmed**
3. Add a **Send Message** step and insert **Conduit Portal Link**
4. Publish the workflow

### Remind guests to finish check-in

1. Pick the **Check-in** trigger and set how long before check-in
2. Click the **+** below it and choose **Controls > Add filter**
3. Add a rule: **Contact action required** is **True**
4. Add a **Send Message** step with **Conduit Portal Link**, then publish

**Check-in** and **Check-out** triggers start at 5 days before, with **Run for all reservations** on. With it on:

* A booking that syncs within 24 hours of being made still gets sends whose time already passed
* A reservation confirmed later, like an inquiry or a request, still gets its before-check-in sends

### Portal variables

| Variable | What it holds |
| - | - |
| **Conduit Portal Link** | The full portal link |
| **Portal link token** | The token on its own |
| **Portal status** | **Active**, **Completed** or **Expired** |
| **Online check-in status** | The guest's first unfinished step, like **Needs ID**, **Needs review**, **Waiting on custom gate** or **Ready** |
| **Outstanding check-in requirements** | The steps left, by title |
| **Contact action required** | **True** while the guest has a step to do. Custom gates and IDs waiting for review don't count |

* **Portal status** and the three check-in variables are blank unless the reservation has exactly one portal and it belongs to the workflow's contact. The check-in variables are only filled while the portal is active
* **Conduit Portal Link** and **Portal link token** fail the step with **Portal link unavailable** when the reservation has more than one active portal or the portal belongs to another contact

### Portal triggers

Triggers under **Portal event** start a workflow from something that happens in a portal:

| Trigger | When it fires |
| - | - |
| **Portal viewed** | A guest opens a portal |
| **Portal check-in completed** | A guest finishes every check-in step |
| **Agreement signed**, **Damage waiver completed**, **Portal details submitted**, **Portal questions answered**, **Additional people added** | A guest finishes that step |
| **Portal fee paid** | A guest pays a required fee |
| **Security deposit authorized**, **captured**, **released** and **renewal required** | A deposit hold changes |
| **Portal offer viewed**, **added to cart** and **removed from cart** | A guest looks at or changes their cart |
| **Portal checkout opened**, **checkout started** and **payment submitted** | A guest moves through checkout |
| **Portal offer purchased** | A guest buys an offer |
| **Portal payment failed**, **Portal refund issued** | A payment fails or is refunded |
| **Portal request submitted**, **approved**, **declined** and **expired** | A request changes |
| **Portal session completed**, **Portal session expired**, **Portal delivery failed** | A portal completes, expires or can't be delivered |

* **Templates (optional)** limits a trigger to some templates. Offer, checkout, payment, refund and request triggers also take **Offers (optional)**, and checkout started, payment submitted, offer purchased, payment failed and refund issued take **Minimum total (optional)**
* Test links never start workflows
* Ratings have no trigger

**Resolve portal request**, under **Payments** in the step picker, approves or declines a request from a workflow.

## From the inbox

**Portal links** in the composer toolbar inserts a link to the guest's portal:

* **Full portal**, a check-in step that isn't done yet, a stay detail like **Wi-Fi** or **Check-in instructions**, a guide, or one of the offers the guest can see now
* It uses the stay the reply is about
* It shows when the reservation has an active portal, and never creates one
* It's hidden on small screens, in new messages and when WhatsApp only allows templates

**Copy portal link** in the **Portal** column on **Reservations** copies the link, and creates the portal if there isn't one.

## Through the AI agent

The agent's **Get Portal** tool gives the agent the guest's portal link to share, creating the portal if needed. It can link to one check-in step or one offer. It's off by default.

1. Go to **Agents** and open the agent
2. Open **Tools**, then **Conduit**, then **Portals**
3. Turn on **Get Portal** and save the agent

Changing an agent's tools needs **Manage Agents**.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.