# Calendar
Source: https://visaflo.ca/knowledge-base/calendar/calendar
Use the VisaFlo calendar to review upcoming reminders, bookings, and connected Google Calendar events from one date-based view.
## Overview
The Calendar combines date-based work your team needs to track: event reminders, visa expiry reminders, consultation bookings, and events from connected Google Calendars. It gives staff a monthly view, event dots by type, a selected-day detail panel, and quick actions for adding reminders.
Use this guide when you want to review upcoming work, add a reminder, or connect calendar integrations.
## Before you start
* Your plan must include reminders and calendar access.
* Event reminders and visa expiry reminders must already exist, or you can create them from the calendar.
* Consultation bookings appear when your workspace uses VisaFlo booking pages.
* Calendar provider connections are managed from **Settings** > **Third-party integrations**.
## Read the calendar
1. Open **Calendar** from the sidebar.
2. Use the month picker to move between months.
3. Look for event dots on dates with scheduled items.
4. Select a date to open the detail panel.
5. Review upcoming and completed items for the selected date.
The calendar can show multiple item types on the same date. Use the type indicators to distinguish expiry reminders, events, bookings, and Google Calendar items.
## Add an expiry reminder
1. Open **Calendar**.
2. Select the relevant date.
3. Click **Add New**.
4. Choose **Expiry Reminder**.
5. Fill in the client, visa type, expiry date, recipient emails, and reminder schedule.
6. Save the reminder.
Expiry reminders also appear in **Reminders** under the **Visa Expiry** tab.
The same menu is also the starting point for one-off event reminders.
## Add an event reminder
1. Open **Calendar**.
2. Select the relevant date.
3. Click **Add New**.
4. Choose **Event**.
5. Add the event title, date and time, attendees, description, and location.
6. Save the event reminder.
Event reminders also appear in **Reminders** under the **Event** tab.
## Edit an item
1. Select the date that contains the item.
2. Click the item in the detail panel.
3. Update the expiry reminder or event reminder in the edit dialog.
4. Save the change.
Booking entries open as booking details instead of reminder edit forms.
## Connect calendar integrations
Calendar integrations are configured outside the calendar page.
1. Go to **Settings** > **Third-party integrations**.
2. Find the calendar integration area.
3. Connect the supported provider.
4. Complete the OAuth flow.
5. Return to VisaFlo and confirm the integration status.
### Show Google Calendar events
After a Google Calendar connection is active, VisaFlo loads events for the month you are viewing. Google events are read-only in VisaFlo: use the event's **Open in Google Calendar** action to edit the source event.
Use the Calendar filters to show or hide Google Calendar items. When several Google accounts or calendars are connected, you can also choose which account or calendar is visible; those choices are saved in the browser you are using.
The backend exposes `/api/calendar-integration` endpoints for provider support, OAuth, sync checks, token refresh, and deletion.
## Troubleshooting
If the calendar is empty, confirm there are event reminders, visa expiry reminders, or bookings in the selected month.
If an expiry reminder is missing, check **Reminders** > **Visa Expiry** and confirm the expiry date is set.
If an event reminder is missing, check **Reminders** > **Event** and confirm the event date and time.
If Google events are missing, confirm the Google account is connected, the relevant calendar is enabled in the Calendar filters, and the event falls within the month you are viewing. Reconnect the provider from **Settings** > **Third-party integrations** if the OAuth connection has expired.
If a booking is missing, confirm the consultation booking exists and has a confirmed or pending schedule.
# Connect Zoom for consultations
Source: https://visaflo.ca/knowledge-base/calendar/connect-zoom
Connect your Zoom account so video consultations booked through your VisaFlo booking page get a Zoom link automatically, and your scheduled Zoom meetings block booking times.
## Overview
When Zoom is connected, VisaFlo creates a Zoom meeting for every video consultation booked through your booking page and sends the join link to you and the client. Your upcoming Zoom meetings are also treated as busy time, so clients cannot book over them.
Zoom is one of the options for online meeting links. If you prefer, video consultations can use Google Meet or Microsoft Teams from the calendar that receives your booking events instead.
## Before you start
* You need a Zoom account. Any Zoom plan works; meetings created by VisaFlo follow your plan's meeting limits.
* You need a consultant profile with a booking page. See [Calendar](/knowledge-base/calendar/calendar) for setup.
* If the Zoom option is not visible in your workspace yet, it has not been enabled for your account. Contact [info@vflo.app](mailto:info@vflo.app).
## Connect your Zoom account
1. Go to **Settings** > **Integrations**.
2. Under **Calendar & Meeting Integrations**, find **Zoom** and click **Connect**.
3. Sign in to Zoom and approve the requested permissions. VisaFlo asks to read your profile, list and read your meetings, and create and delete meetings.
4. You are returned to VisaFlo. Your Zoom account appears under **Active Connections** with a green check.
Connect the Zoom account that should host the consultations. The join links are created on that account, and its scheduled meetings are the ones used for conflict checking.
## Use Zoom for consultation links
1. Go to **Settings** > **Consultation** > **Availability**.
2. Under **Calendar routing and meeting links**, set **Create online meeting links with** to **Zoom**.
3. If you connected more than one Zoom account, choose which one to use, or leave **Auto-select Zoom account**.
4. Click **Save availability**.
Booking events still go to the calendar chosen under **Create booking events on**. Zoom only supplies the meeting link.
## What happens on a booking
* **New video booking**: VisaFlo creates a scheduled Zoom meeting on your account at the booked time, with the waiting room on and join-before-host off. The join link is included in the confirmation email to the client and in your calendar event.
* **Reschedule**: the original Zoom meeting is deleted and a new one is created at the new time. The client receives a new link.
* **Cancellation**: the Zoom meeting is deleted.
* **In-person bookings**: no Zoom meeting is created.
## Conflict checking with Zoom
Under **Check conflicts against**, your Zoom account is listed alongside your calendars. When it is included, any scheduled Zoom meeting on that account, whether created by VisaFlo or directly in Zoom, blocks that time on your public booking page. Instant meetings and recurring meetings with no fixed time are not counted.
## Disconnect Zoom
Do either of the following:
* In VisaFlo, go to **Settings** > **Integrations** and click the delete icon next to the Zoom account.
* In Zoom, remove VisaFlo from your account's installed apps.
In both cases VisaFlo deletes the stored access tokens and Zoom account identifiers. Bookings made before disconnecting keep their existing join links, but VisaFlo can no longer update or delete those meetings, so remove them in Zoom if a booking is later changed.
If your Availability settings still point to Zoom after disconnecting, VisaFlo falls back to Google Meet or Teams from your booking calendar and shows a **Connect Zoom** prompt until you reconnect or switch the setting.
## Troubleshooting
* **"Application not found" when connecting**: the Zoom integration is not yet available for accounts outside VisaFlo's own Zoom workspace. Contact support.
* **No link in the confirmation email**: check that **Create online meeting links with** is set to Zoom and saved, and that the Zoom account shows as connected under Integrations.
* **Meeting shows at the wrong time in Zoom**: confirm the timezone under **Availability** matches the one on your Zoom profile. Meetings are created in your Availability timezone.
* **Personal Microsoft accounts**: if your booking calendar is a personal Outlook.com or Hotmail account, Microsoft does not allow Teams links to be created. Use Zoom or a Google Calendar for video consultations in that case.
# Creating a Case
Source: https://visaflo.ca/knowledge-base/cases/creating-a-case
Create a case, assign the team, verify the case type, and prepare the client intake workflow.
## Create a case
1. Open **Cases** and select **Add Case**.
2. Choose the client. Create the client first when they do not yet have a record.
3. Enter a clear case name and select the case type that matches the application workflow.
4. Add assignees who need access to the work.
5. Create the case.
Choose the case type carefully: it determines the available questionnaire, document requests, and any supported autofill workflow. If the application path is uncertain, create the client and lead first rather than starting an incorrect case.
## Find and review a case
Use **Cases** to search by case ID or title, check the current status, and confirm the linked client before opening a record.
After creation, confirm the client, case type, assignees, and generated case ID before inviting the client or opening the forms.
## Next steps
* Use **Forms** to review the intake and send a client invitation when the questionnaire is ready.
* Use **Files** to organize supporting documents.
* Use **Tasks** and **Reminders** for internal deadlines.
* Turn on **Client Portal** visibility only when the case is ready for the client to see.
## Troubleshooting
If you selected the wrong case type, review the case before sending any invitation or generating documents. If the case should use a different intake or portal workflow, correct it with your firm lead before entering substantive client data.
# E-Signature
Source: https://visaflo.ca/knowledge-base/cases/e-signature
Send a service agreement from a case for e-signature: check the fields, choose who signs where, send it, and sign for your firm.
Send an agreement from a case, have your client sign it on any device, then sign it for your firm. VisaFlo fills the agreement in from the case, emails your client the signing link, and keeps the signed copy on the case.
## Before you start
* Set up your agreement templates once, in **Settings** > **Templates** > **Service Agreements**. See [Letters & Agreements](/knowledge-base/settings/letters-and-agreements).
* Check that the case's client has an email address. You can also type it in before you send.
* If your firm signs too, check the firm's row on the **E-Sign** tab. It lists the representative from your firm's **Business Profile** and team members who have a representative profile. Representatives you added only in **Autofill Settings** don't appear there yet.
* The case's **Service Agreements** tab needs admin access, or billing access set to all. Without it, start and sign agreements from **Agents** > **Retainer Agent**.
## Start a new agreement
1. Open the case and select the **Service Agreements** tab.
2. Select **New agreement**.
3. Tick one or more templates, such as your service agreement or consultation agreement. Under **Case documents** you can also add PDFs already on the case.
4. Select **Continue**.
The agreement opens in its own workspace as a draft. Your work saves as you go, and the header shows **Draft saved**. Wait for it before you close the tab. If it shows **Not saved. Check your connection.**, your last change didn't save. To come back later, select **Open** on the draft's row in the **Service Agreements** tab.
Leads have the same **Service Agreements** tab. You can also start an agreement from **Agents** > **Retainer Agent** with **New agreement**, then choose a lead or a case.
## Check the fields
The **Fields** tab lists every field in the agreement. Each filled field shows where its value came from, such as **Client**, **Case**, **Today**, or **Default**.
* Fields under **To fill** have no value yet. Fill them in before you send. The agreement's tab shows an amber dot until they are done.
* Change any value you need to. The change applies to this agreement only. The template and the client's record stay as they are.
* Select a field to find it on the page.
If the template was set up in the template editor, you can also edit this agreement's wording right on the page.
To send more than one agreement together, select **Add agreement** above the page and pick another template, or **A document on this case**.
## Choose who signs, and where
Open the **E-Sign** tab. Under **Who signs this document**, it shows who signs the document on screen, in order:
* Your client signs first. Their name and email come from the case.
* **Then** your firm signs, as the representative shown in the firm's row. Select the name to choose another representative.
The sign areas saved in the template are already on the page. Each signer's areas are listed under them, for example **Page 1**. To change them:
* **Add an area:** select **+** next to a signer, choose **Signature**, **Initials**, or **Date**, then click the page where it goes.
* **Move or resize an area:** select it on the page, then drag it or one of its corners.
* **Remove an area:** select it in the list, then select the **X**. Select **Undo** on the message if you change your mind.
* **Add another signer,** such as a spouse: select **Add signer**, click the page where they sign, then enter their name and email.
* **Leave someone off this document:** clear the box next to their name. They don't sign it, but everyone you invite can still open every document in the request. If people must see different documents, send them separate agreements. If nobody signs a document, it goes out to read.
When you check a signer who has no sign area on the document yet, VisaFlo asks you to click where they sign.
If you send several documents, check the signers on each document's tab.
## Send it
1. Select **Send for signature**. With several documents, the button shows how many, for example **Send 2 for signature**.
2. Check the **Signing order**: your client first, then your firm, who **Signs after everyone above**. You can correct the client's email here.
3. Review the **Subject** and **Message**. Your client sees them in the email.
4. Select **Send**.
If something still needs fixing, the dialog lists it under **Before it can go out** and you can't send yet. If your client signs a document that your firm doesn't, VisaFlo asks you to **Add signature area** for your firm first. You can also **Send anyway**.
After you send, VisaFlo opens **Retainer Agent** on its **Sent** tab. On the case, the agreement shows **Waiting** until your client signs.
## What your client does
Your client gets an email with your firm's name, your message, and a **Review and sign** button. The link opens the agreement in their browser, on a computer or a phone. They don't need an account.
1. They tap a sign area and add their signature once: they draw it, type it, or upload a photo of it. It goes in every place they sign, and date areas fill in with the day's date.
2. They select **Finish**.
Their page then says **You're done**, and that your firm signs next. When your firm signs last, they get a signed copy by email, unless your firm turned that off.
To nudge a client who hasn't signed, select **Remind** on the agreement's row.
## Sign for your firm
When your client has signed, the agreement shows **Waiting for you** on the case.
1. On the case's **Service Agreements** tab, select **Sign** on the agreement. You can also find it in **Agents** > **Retainer Agent**, on the **Waiting for you** tab.
2. Select **Sign**, or select a **Sign here** area on the page.
3. Pick a saved signature, or draw, type, or upload one. Select **Save for next time** to reuse it. Saved signatures are shared by everyone who signs as this representative, so save one only if it is the representative's own.
4. Select **Use this signature**, check the page, then select **Complete**.
Anyone at your firm who can open the case can sign for the firm. They sign as the representative the agreement was sent with, and the certificate of completion records who signed. Sign only if you are that representative, or your firm allows you to sign for them.
## When it's complete
* The agreement shows **Completed** on the case's **Service Agreements** tab. Select the download button on its row to open the signed copy.
* The signed copy is also saved in the case's **Files**, in the **Service Agreements** folder.
* When your firm signs last, everyone who signed gets a signed copy by email, unless your firm turned off **Email everyone a signed copy** in the Retainer Agent's **Settings**. When your firm doesn't sign, the signed copy goes to the people assigned to the case, not your client. Send it to your client with **Email a copy**.
* To see who signed and when, select **Open** in the row's menu. From there you can download the **Certificate of completion** or **Email a copy**.
## Troubleshooting
**You can't send yet.** Select **Send for signature** and read the list under **Before it can go out**. The usual causes are an empty field or a signer without a name or email.
**Your client didn't get the email.** Open the agreement from the row's menu and check the email address under their name. Ask them to look in their spam folder, then select **Remind**. You can also copy their signing link with the copy button next to their name and send it another way. Anyone with the link can open it and sign as that person, so send it only to them.
**A signer or document needs to change after sending.** If nobody has signed yet, open the agreement from the row's menu, select **More**, then **Reopen to edit**, and confirm with **Reopen**. Make the change, select **Send for signature**, then **Send again**. Every signer gets a new link. If anyone has already signed, start a **New agreement** with the correction instead.
**You can't sign for the firm yet.** Your firm signs last. The page shows **Waiting for the client** until every client signer has finished.
For more on templates, drafts, and changes, see [How service agreement templates and e-signatures work](/knowledge-base/faq/how-service-agreement-templates-and-e-signatures-work).
# Adding a Client
Source: https://visaflo.ca/knowledge-base/clients/adding-a-client
Create a durable client record, assign responsibility, and start the relevant case without duplicating a lead.
## Add a client directly
Use **Clients** when a person is already engaged and should be managed as a client rather than a prospective lead.
1. Open **Clients** and select **Add Manually**.
2. Enter the client's name and contact details.
3. Assign the staff member responsible for follow-up.
4. Save the client, then create or link the relevant case.
## Review the client record
Open the profile after saving to confirm contact details and linked applications. Use the **Cases** tab to review the client's active work, or **Add Case** to begin an application workflow.
## Choose client or lead
Create a **lead** when the person is still evaluating services, has arrived through a form, or needs qualification before engagement. Create a **client** directly when the engagement is already confirmed or the work is being imported from an existing system.
## Troubleshooting
Before adding a client, search by name and email to avoid creating a duplicate. For a large migration, use the import workflow rather than adding records one by one.
# Modifying a Client
Source: https://visaflo.ca/knowledge-base/clients/modifying-a-client
Update a client record carefully while preserving the linked case, questionnaire, and client-portal workflows that depend on it.
## Open the client profile
Search for the client from **Clients**, then open the profile before making changes. Review the linked cases first so you understand which application workflows may rely on the client record.
## Update client information
Use the profile actions to update contact information, assigned staff, or related records. Keep the primary email accurate because it may be used for questionnaires, portal access, and communication workflows.
### Track alternate email addresses
When a client uses more than one inbox, select the **+** beside the email field and add the alternate address. Messages sent to or received from that address appear in the client's **Communications** history.
Keep one primary email for client-facing flows such as questionnaires and portal access. Remove an alternate address if it no longer belongs to the client, and do not use this field for a spouse, representative, or staff email.
## Before removing a client
Do not remove a record simply to correct a name or email. Search for duplicates first, update the existing record when appropriate, and review linked cases before using any destructive action. A client with active work should be resolved with the responsible staff member before deletion.
## Troubleshooting
If a profile change is not reflected in a form, refresh the case and verify which person record the form uses. For unusual names or addresses, preserve the client-provided information and confirm the final format required by the application before generating forms.
# Document Shares
Source: https://visaflo.ca/knowledge-base/collaboration/document-shares
Share selected case files with external recipients, control reviewer access, and collect file-specific comments through secure public links.
## Overview
Document Shares let your firm send selected case files or folders to an external recipient without giving them dashboard access. Recipients open a secure share link, verify the email address the share was sent to, preview or download files, and optionally leave file-specific comments.
Use this when you need a client, reviewer, co-counsel, or partner to review case documents.
## Before you start
* Upload the files to the case file manager.
* Confirm the recipient email addresses.
* Decide whether each recipient should be a **Viewer** or **Reviewer**.
* Decide when the link should expire.
## Create a share
1. Open the case file manager.
2. Select the files or folders you want to share.
3. Click **Share files**.
4. Add one or more recipient emails.
5. Choose a role for each recipient:
* **Viewer** can access shared files.
* **Reviewer** can access shared files and leave comments.
6. Choose an expiry: 7 days, 30 days, 90 days, or no expiry.
7. Optionally add a message for the recipients.
8. Create the share.
VisaFlo sends invite emails to the recipients and records the share under the case.
## Recipient experience
The recipient opens the share link and enters the email address the share was sent to. This prevents another person from opening the link with a different email address.
After access is confirmed, the recipient can:
* Select files from the file list.
* Preview supported files inline.
* Download shared files.
* Read comments on each file.
* Add comments if their role is **Reviewer**.
If the share was sent from a firm with verified white-label branding, the share page can show the firm's identity so recipients know who sent the documents.
## Manage existing shares
From the case, use the shared links panel to review active shares and recipient activity.
Depending on the share state, you can:
* Revoke a full share.
* Revoke a specific recipient.
* Add a new recipient.
* Resend invite emails.
* Extend an expiry date.
* Re-share an expired or revoked share.
* Mark comments as read after reviewing them.
## Security notes
Only the files included in the share are visible to recipients. A recipient does not receive access to the full case or dashboard.
The share can expire or be revoked. If a recipient reports that a link no longer works, check whether the share expired, was revoked, or was opened with the wrong email address.
## Troubleshooting
If the recipient cannot open the link, confirm they entered the same email address that was invited.
If the recipient can view files but cannot comment, confirm their role is **Reviewer**, not **Viewer**.
If the preview does not load, ask the recipient to download the file. Some file types may not support inline preview.
If a recipient needs more time, extend the share expiry or create a new share.
# Agreements API
Source: https://visaflo.ca/knowledge-base/developers/agreements-api
Create an agreement from a template, send it for e-signature, follow its status and download the signed PDF, all from your own system.
From a lead or a case, one call makes the agreement from a template and sends it for e-signature. Your system can follow it to the end: who opened it, who signed, and the signed PDF. [Webhooks](/knowledge-base/developers/webhooks) tell you when each step happens.
All calls go to `https://api.vflo.app/api/public` with your `X-API-Key` header.
| Step | Call |
| - | - |
| Find a template | `GET /template/list` |
| Make it, and send it | `POST /agreement/create` with `"send": true` |
| Make a draft only | `POST /agreement/create`, then `POST /agreement/{agreementId}/send` |
| Check where it stands | `GET /agreement/{agreementId}` |
| List a record's agreements | `GET /agreement/list?leadId=…` |
| Download the PDF | `GET /agreement/{agreementId}/document/{documentId}` |
| Download the certificate | `GET /agreement/{agreementId}/certificate` |
| Remind the signers | `POST /agreement/{agreementId}/remind` |
## Before you start
1. Create the lead (or use a case): [Create a lead](/knowledge-base/developers/endpoints/create-lead).
2. Open the template (**Settings** > **Templates** > **Agreements**), then its **Settings** tab, and open **API** for the template ID and a request with the template's own field names.
3. For the API to send a template, it needs sign areas. A Word template with sign-here placeholders (`client_signature`, `client_sign_date`, `rcic_signature` and so on) has them. `GET /template/list` says `sendable: true` for those that do.
## Make it and send it
```bash theme={null}
curl -X POST "https://api.vflo.app/api/public/agreement/create" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"leadId": "VFLO_LEAD_ID",
"templateName": "Initial Consultation Agreement",
"send": true,
"values": { "consultation_duration": "60 minutes", "consultation_fee": "$150.00" },
"metadata": { "booking_id": "savvycal-8842" }
}'
```
* The client signs first; the firm signs after, in VisaFlo. Until then the status is `awaiting_countersign`.
* `values` sets the template's variables by exact name. Whatever you leave out fills from the record, the lead's `customFields` of the same name, or the template's default. Money and dates are written the way your workspace writes them.
* `signers` is optional: without it, the record's own contact signs. For more people, send `"signers": [{ "role": "Client", "name": "Jane Doe", "email": "jane@example.com" }, { "role": "Spouse", "email": "sam@example.com" }]`.
* `subject` and `message` change the invitation email.
* `metadata` is your own reference. It comes back on every read and in every webhook event.
* The same call within 24 hours returns the first agreement with `"duplicate": true` and sends nothing twice, so retries are safe.
* Everything is checked before anything is sent. If it can't go, you get a `422` with a `code` (`missing_fields`, `no_sign_areas`, `no_signer_email` and so on) and the list of problems in `data.issues`.
Sending renders the PDF, so it takes a few seconds.
## Follow it
```bash theme={null}
curl "https://api.vflo.app/api/public/agreement/VFLO_AGREEMENT_ID" -H "X-API-Key: YOUR_API_KEY"
```
`status` is `draft`, `sent`, `awaiting_countersign` or `completed`. Each signer is `pending`, `viewed` or `signed`, with `viewedAt` and `signedAt`. `documents[].downloadUrl` and `certificateUrl` need your API key.
Rather than asking again and again, set up a [webhook](/knowledge-base/developers/webhooks).
## Download the signed PDF
```bash theme={null}
curl -o signed.pdf "https://api.vflo.app/api/public/agreement/VFLO_AGREEMENT_ID/document/DOCUMENT_ID?version=signed" -H "X-API-Key: YOUR_API_KEY"
```
`version=original` (the default) is the document as sent. `version=signed` is the copy everyone has signed so far, and answers `409 not_signed` until someone has.
## Zapier and Make
* Send `"send": "true"` as text if your tool only sends text.
* Map fields to `values__consultation_fee`, `signers__Spouse__email` and `metadata__booking_id` when the tool can't build nested JSON.
* Numbers and booleans can be sent as text.
## Limits
* No cancel or delete through the API yet. Do that in VisaFlo.
* 50 `values` keys, 20 `metadata` keys, 6 signers.
# Authentication
Source: https://visaflo.ca/knowledge-base/developers/authentication
Create, protect, and send a VisaFlo workspace API key.
## API Keys
An administrator creates API keys from **Settings** > **API Settings** in VisaFlo. Give each key a clear integration name, such as `HubSpot production` or `Intake webhook`.
The key belongs to the workspace where it was created. VisaFlo uses it to determine which leads, clients, cases, files, tasks, notes, and workflows the request can access.
## Send the Key
Send the key on every workspace API request using `X-API-Key`.
```bash theme={null}
curl "https://api.vflo.app/api/public/workflow/list" \
-H "X-API-Key: YOUR_API_KEY"
```
Do not use `Authorization: Bearer` for this API. Bearer tokens are used by other VisaFlo product surfaces and do not authenticate workspace API requests.
## Keep Keys Safe
* Store keys in a secret manager or encrypted environment variable.
* Do not put a key in browser code, a client-side extension, or a public repository.
* Use one key per integration and environment.
* Revoke a key immediately when an integration is retired or a key may have leaked.
## Errors
| Status | Meaning | What to do |
| - | - | - |
| `401` | Missing, invalid, inactive, or expired API key | Check the `X-API-Key` header, then generate or reactivate a key if necessary. |
| `400` | Invalid request body or missing required input | Correct the request using the endpoint reference. |
| `404` | The requested record is not available in this workspace | Confirm the VisaFlo ID and that the record belongs to the key's workspace. |
| `429` | Rate limit reached | Back off and retry with exponential delay. |
VisaFlo only displays a newly generated key once. Save it before closing the confirmation dialog.
# Create a case
Source: https://visaflo.ca/knowledge-base/developers/endpoints/create-case
Create a VisaFlo case and its configured forms.
`POST https://api.vflo.app/api/public/case/create`
Case fields depend on the immigration case type and its questionnaires. Get the accepted payload shape from **Settings** > **API Settings** in the target workspace, then persist the returned VisaFlo case ID.
```json theme={null}
{
"clientEmail": "jane@example.com",
"caseType": "study_permit"
}
```
The API validates and normalizes the case data before creation. A successful response includes `data` for the created case; use its `caseId` for files, form generation, status changes, tasks, and notes.
`caseId` is not the human-readable `caseNumber` shown in the dashboard.
# Create a client
Source: https://visaflo.ca/knowledge-base/developers/endpoints/create-client
Create a client in the API key's VisaFlo workspace.
`POST https://api.vflo.app/api/public/client/create`
Search for the client first when a source system may resend an intake event.
| Field | Required | Description |
| - | - | - |
| `firstName` | Yes | Client first name. |
| `email` | Yes | Client email address. |
| `lastName`, `phone` | No | Optional client details. |
```json theme={null}
{ "firstName": "Jane", "lastName": "Doe", "email": "jane@example.com" }
```
Returns `200` with `data.userId`, which is the client ID for tasks and notes.
# Create a lead
Source: https://visaflo.ca/knowledge-base/developers/endpoints/create-lead
Create a lead in the API key's VisaFlo workspace, or update the lead already on file for the same email.
`POST https://api.vflo.app/api/public/lead/create`
If the workspace already has an open lead with the same email, that lead is updated instead of duplicated (see [Updating an existing lead](#updating-an-existing-lead)). Retrying the same call is therefore safe.
| Field | Required | Description |
| - | - | - |
| `firstName` | Yes | Lead first name. |
| `email` | Yes | Lead email address. |
| `lastName`, `countryOfResidence` | No | Optional lead details. |
| `phone` | No | E.164 format, for example `+16135550100`. A number in another format is dropped; the lead is still created. |
| `address` | No | Free-text postal address, up to 500 characters. Saved to the lead's contact; an address already on file for the same email is kept, and the submitted one is recorded in the lead's creation note. |
| `customFields` | No | Up to 50 extra key/value pairs, such as a booking's duration and fee. Keys start with a letter and use letters, digits or underscores. Values are strings (up to 2000 characters), numbers or booleans, 50KB in total. `consultationBooking` and `calendly` are reserved. They are stored on the lead, listed in its creation note, and echoed back in `data.customFields`. |
| `stage` | No | Pipeline stage, by stage id or label (for example `"Consultation Booked"`). Unknown values return `400`. Defaults to New. Moving into Closed-Won stamps `wonDate`. |
| `source` | No | Lead source, by id or label. An unknown label creates that source. Defaults to `api`. |
| `caseType` | No | Case type, by id or label. Unknown values return `400`. |
| `primaryInterest`, `languagePreference` | No | Free text, up to 200 characters. |
| `quotedProfessionalFee` | No | Quoted fee, a number or numeric string such as `"$1,500"`, from 0 to 1,000,000,000. |
| `consultationTime` | No | `YYYY-MM-DD` or `YYYY-MM-DD HH:mm` (24-hour, firm local time). |
| `estimatedCloseDate`, `wonDate` | No | `YYYY-MM-DD`. |
| `assigneeIds` | No | Up to 20 user ids of team members in this workspace. Anyone else returns `400`. |
```json theme={null}
{
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@example.com",
"address": "123 Main St, Ottawa, ON K1A 0A1",
"stage": "Consultation Booked",
"source": "SavvyCal",
"quotedProfessionalFee": 150,
"consultationTime": "2026-10-01 14:30",
"customFields": { "consultationDuration": "60 minutes" }
}
```
An invalid value in any field returns `400` with a message naming the field, and nothing is written.
Returns `201` with `data.id` for a new lead. Its Inbounded and Last activity are both set to the time of the call. Store the ID to create tasks or notes for this lead.
## Updating an existing lead
When the email matches an **open** lead in the workspace, the call updates that lead and returns `200` with `data.id`, `data.updated: true` and `data.updatedFields`. Leads converted to a client and leads in Closed-Won or Closed-Lost are not matched, so a new booking from them creates a new lead. With several open leads, the most recently active one is updated. Clients are never matched.
* Stage, case type, primary interest, fee, consultation time and dates are replaced with the values you send. Resending a stage also re-applies its status and, for Closed-Won, the won date.
* Source, assignees and country of residence only fill blanks, so first-touch attribution and staff assignments are kept. An empty `assigneeIds` list counts as not sent.
* Name, phone, address and preferred language only fill blanks on the lead's contact.
* `customFields` are merged into the lead's existing ones.
* Last activity moves to now. Inbounded (the lead's creation time) is unchanged.
* A note on the lead lists what was updated, including the address and custom values you sent.
Stage, source and case-type labels are matched as labels even when they contain `/` (for example `"Spousal/Common-law"`). "Closed Won" matches the Closed-Won stage. Labels are limited to 100 characters.
# Create a note
Source: https://visaflo.ca/knowledge-base/developers/endpoints/create-note
Add a note to a VisaFlo lead, client, or case.
`POST https://api.vflo.app/api/public/note/create`
```json theme={null}
{
"entityType": "case",
"entityId": "VFLO_CASE_ID",
"title": "Intake context",
"content": "Client confirmed the passport scan is current."
}
```
`entityType`, `entityId`, and `content` are required. `description` is accepted as an alternative to `content`; for case notes VisaFlo stores the content as the note description. Returns `201` with the created note.
# Create a task
Source: https://visaflo.ca/knowledge-base/developers/endpoints/create-task
Create a task linked to a VisaFlo lead, client, or case.
`POST https://api.vflo.app/api/public/task/create`
| Field | Required | Values |
| - | - | - |
| `title` | Yes | Non-empty task title. |
| `priority` | Yes | `low`, `medium`, `high`, or `urgent`. |
| `status` | Yes | `open`, `in_progress`, or `completed`. |
| `entity` | Yes | Object with a `type` of `case`, `client`, or `lead`, plus the record `id`. |
| `description`, `dueDate`, `reminderSettings` | No | `dueDate` uses `YYYY-MM-DD`. |
```json theme={null}
{
"title": "Review new intake",
"priority": "high",
"status": "open",
"entity": { "type": "lead", "id": "VFLO_LEAD_ID" }
}
```
Returns `201` with the created task. VisaFlo inherits assignees from the linked record.
# Create tasks from a workflow
Source: https://visaflo.ca/knowledge-base/developers/endpoints/create-tasks-from-workflow
Apply a VisaFlo workflow template to one lead, client, or case.
`POST https://api.vflo.app/api/public/task/create-from-workflow`
```json theme={null}
{
"workflowId": "VFLO_WORKFLOW_ID",
"entity": { "type": "case", "id": "VFLO_CASE_ID" }
}
```
`workflowId` and `entity` are required. Optionally send `taskOverrides`, keyed by workflow task ID, to replace a template's `reminderSettings`.
Returns `201` with the workflow name, number of imported tasks, and their IDs. The workflow and linked record must belong to the API key's workspace.
# Download case files
Source: https://visaflo.ca/knowledge-base/developers/endpoints/download-case-files
Retrieve the files associated with a VisaFlo case.
`GET https://api.vflo.app/api/public/case/download-files/:caseId`
Use the VisaFlo `caseId`, not the human-readable case number.
```bash theme={null}
curl "https://api.vflo.app/api/public/case/download-files/VFLO_CASE_ID" \
-H "X-API-Key: YOUR_API_KEY"
```
The response is JSON and is scoped to the API key's workspace. Confirm the case with [Get a case](/knowledge-base/developers/endpoints/get-case) before retrieving documents from an external automation.
# Generate forms
Source: https://visaflo.ca/knowledge-base/developers/endpoints/generate-forms
Start form generation for a VisaFlo case.
`POST https://api.vflo.app/api/public/case/:caseId/generate-forms`
Call this after the case data is complete. The body may omit `forms` to generate the full configured bundle, or provide a non-empty array (or comma-separated string) of form codes to generate a subset.
```json theme={null}
{ "forms": ["IMM1294"] }
```
Generation is asynchronous. Start the job, then use [Get autofill status](/knowledge-base/developers/endpoints/get-autofill-status) from your server with backoff until it reaches a terminal state.
# Get autofill status
Source: https://visaflo.ca/knowledge-base/developers/endpoints/get-autofill-status
Check progress after starting VisaFlo form generation.
`GET https://api.vflo.app/api/public/case/:caseId/autofill-status`
```bash theme={null}
curl "https://api.vflo.app/api/public/case/VFLO_CASE_ID/autofill-status" \
-H "X-API-Key: YOUR_API_KEY"
```
Use this only after [Generate forms](/knowledge-base/developers/endpoints/generate-forms). Poll from server-side code with a growing delay; do not repeatedly poll from the browser.
# Get a case
Source: https://visaflo.ca/knowledge-base/developers/endpoints/get-case
Read one case by its VisaFlo case ID.
`GET https://api.vflo.app/api/public/case/:caseId`
Replace `:caseId` with the VisaFlo record ID returned by a create or search request.
```bash theme={null}
curl "https://api.vflo.app/api/public/case/VFLO_CASE_ID" \
-H "X-API-Key: YOUR_API_KEY"
```
Returns `200` with `data` containing the case summary, client, and assignees. Returns `404` when the case is not present and `403` when it is outside the API key's workspace.
# Get a note
Source: https://visaflo.ca/knowledge-base/developers/endpoints/get-note
Read one note linked to a VisaFlo record.
`GET https://api.vflo.app/api/public/note/:entityType/:entityId/:noteId`
```bash theme={null}
curl "https://api.vflo.app/api/public/note/case/VFLO_CASE_ID/VFLO_NOTE_ID" \
-H "X-API-Key: YOUR_API_KEY"
```
Valid entity types are `case`, `client`, and `lead`. The API confirms that the parent record belongs to the API key's workspace before returning the note.
# Get a task
Source: https://visaflo.ca/knowledge-base/developers/endpoints/get-task
Read one VisaFlo task by ID.
`GET https://api.vflo.app/api/public/task/:taskId`
```bash theme={null}
curl "https://api.vflo.app/api/public/task/VFLO_TASK_ID" \
-H "X-API-Key: YOUR_API_KEY"
```
Returns `200` with task details. `404` means the ID does not exist; `403` means it is not part of the API key's workspace.
# List notes
Source: https://visaflo.ca/knowledge-base/developers/endpoints/list-notes
List notes for one VisaFlo lead, client, or case.
`GET https://api.vflo.app/api/public/note/list`
Both `entityType` and `entityId` are required query parameters.
```bash theme={null}
curl "https://api.vflo.app/api/public/note/list?entityType=case&entityId=VFLO_CASE_ID" \
-H "X-API-Key: YOUR_API_KEY"
```
Returns `200` with `data`. Case notes include `title`, `description`, and `content`; lead and client notes include `content` and an optional title.
# List tasks
Source: https://visaflo.ca/knowledge-base/developers/endpoints/list-tasks
List tasks in a VisaFlo workspace with optional filters.
`GET https://api.vflo.app/api/public/task/list`
Optional query parameters are `entityType`, `entityId`, `status`, `priority`, `dueDateFrom`, and `dueDateTo`. Use `YYYY-MM-DD` for dates. When providing `entityId`, also provide `entityType`.
```bash theme={null}
curl "https://api.vflo.app/api/public/task/list?entityType=case&entityId=VFLO_CASE_ID&status=open" \
-H "X-API-Key: YOUR_API_KEY"
```
Returns `200` with `data`, ordered from newest to oldest. Tasks expose their ID, fields, assignees, entity, and reminder settings.
# List workflows
Source: https://visaflo.ca/knowledge-base/developers/endpoints/list-workflows
List the workflow templates available to an API key.
`GET https://api.vflo.app/api/public/workflow/list`
```bash theme={null}
curl "https://api.vflo.app/api/public/workflow/list" \
-H "X-API-Key: YOUR_API_KEY"
```
Returns `200` with workflows ordered by most recently changed. Each item contains `id`, `name`, `description`, and `taskCount`. Use its ID with [Create tasks from a workflow](/knowledge-base/developers/endpoints/create-tasks-from-workflow).
# Search cases
Source: https://visaflo.ca/knowledge-base/developers/endpoints/search-cases
Find cases by VisaFlo ID, case number, or client email.
`GET https://api.vflo.app/api/public/case/search`
Supply at least one of `caseId`, `caseNumber`, or `clientEmail`. When supplied together, every filter must match.
```bash theme={null}
curl "https://api.vflo.app/api/public/case/search?clientEmail=jane@example.com" \
-H "X-API-Key: YOUR_API_KEY"
```
Returns `200` with `data`, an array of cases including `caseId`, `caseNumber`, `name`, `type`, `status`, `client`, and `assignees`.
# Search clients
Source: https://visaflo.ca/knowledge-base/developers/endpoints/search-clients
Find clients in the API key's VisaFlo workspace.
`GET https://api.vflo.app/api/public/client/search`
Supply `email` for an exact match or `name` for a case-sensitive prefix match against first or last name.
```bash theme={null}
curl "https://api.vflo.app/api/public/client/search?email=jane@example.com" \
-H "X-API-Key: YOUR_API_KEY"
```
Returns `200` with `data`, an array of `{ id, firstName, lastName, email }`.
# Search leads
Source: https://visaflo.ca/knowledge-base/developers/endpoints/search-leads
Find leads in the API key's VisaFlo workspace.
`GET https://api.vflo.app/api/public/lead/search`
Supply at least one query parameter. `email` is an exact match; `name` is a case-sensitive prefix match against first or last name.
```bash theme={null}
curl "https://api.vflo.app/api/public/lead/search?email=jane@example.com" \
-H "X-API-Key: YOUR_API_KEY"
```
Returns `200` with `data`, an array of `{ id, firstName, lastName, email, phone, countryOfResidence, status }`. An empty array means no workspace match.
# Update a case status
Source: https://visaflo.ca/knowledge-base/developers/endpoints/update-case-status
Change the status of a case in the current workspace.
`PATCH https://api.vflo.app/api/public/case/:caseId/status`
```json theme={null}
{ "status": "active" }
```
`status` must be a label configured in the workspace's case status list. For a workspace using default statuses, allowed values are `active`, `scheduled`, `pending`, `closed`, and `none`.
Returns `200` with `{ "data": { "caseId": "...", "status": "active" } }`. An invalid status response includes `validStatuses`.
# Update a note
Source: https://visaflo.ca/knowledge-base/developers/endpoints/update-note
Update content or title for one VisaFlo note.
`PATCH https://api.vflo.app/api/public/note/:entityType/:entityId/:noteId`
```json theme={null}
{ "content": "Client confirmed the new appointment date." }
```
Send at least one of `content`, `description`, or `title`. For case notes, `content` updates the stored description. For lead and client notes, send an empty `title` to remove the title.
# Update a task
Source: https://visaflo.ca/knowledge-base/developers/endpoints/update-task
Update the editable fields of a VisaFlo task.
`PATCH https://api.vflo.app/api/public/task/:taskId`
Send any editable fields: `title`, `description`, `priority`, `status`, `dueDate`, `entity`, or `reminderSettings`.
```json theme={null}
{ "status": "completed", "reminderSettings": [] }
```
Use `null` or an empty string for `dueDate` to clear it, and an empty array to clear reminders. Changing `entity` verifies that the destination record belongs to the same workspace.
# Upload a case file
Source: https://visaflo.ca/knowledge-base/developers/endpoints/upload-case-file
Upload one file into a VisaFlo case.
`POST https://api.vflo.app/api/public/case/:caseId/file/upload`
Send one `file` field as `multipart/form-data`. Files are stored in the case's `api` folder. The maximum request size is 50 MB.
```bash theme={null}
curl -X POST "https://api.vflo.app/api/public/case/VFLO_CASE_ID/file/upload" \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@/path/to/passport.pdf"
```
Returns `201` with `fileRegistryId`, `originalName`, `size`, and `logicalPath`.
# Errors and Retries
Source: https://visaflo.ca/knowledge-base/developers/errors
Handle VisaFlo API errors safely and design integrations that avoid duplicate operational records.
## Error Envelope
Failed requests return a non-2xx HTTP status and an error envelope.
```json theme={null}
{
"success": false,
"error": "Unauthorized",
"message": "API key required for public endpoints"
}
```
Use the HTTP status for control flow and `message` for logs or operator-facing diagnostics.
## Retry Policy
| Response | Retry? | Action |
| - | - | - |
| `400` | No | Fix the payload or required parameter. |
| `401` | No | Check, reactivate, or replace the API key. |
| `404` | Usually no | Refresh the VisaFlo ID or confirm workspace ownership. |
| `429` | Yes | Exponential backoff with jitter. |
| `5xx` | Yes | Retry with bounded exponential backoff. |
## Avoid Duplicates
The public API does not accept a generic idempotency-key header. Build idempotency in your integration:
1. Store the VisaFlo ID returned from every successful create.
2. Search by a stable field, such as email or case number, before retrying a client or case create. A lead create is safe to retry: `lead/create` updates the open lead with the same email instead of adding another.
3. Use the stored VisaFlo ID for files, tasks, notes, and updates.
4. Log the source event ID beside the VisaFlo ID so operators can reconcile retries.
## Rate Limits
VisaFlo applies rate limiting to workspace API routes. On `429`, pause the affected job and retry later. Do not fan out retries across many workers, because that prolongs the limit window.
## Safe Logging
Log request IDs, VisaFlo IDs, status codes, and response messages. Do not log API keys or raw immigration documents. Redact emails and personally identifying data where your logging policy requires it.
# VisaFlo API
Source: https://visaflo.ca/knowledge-base/developers/index
Use the VisaFlo workspace API to create and look up leads, clients, cases, files, tasks, notes, and workflows in your firm.
## Build Into Your Workflow
The VisaFlo workspace API is for the operational handoffs around an immigration practice: move an intake into VisaFlo, find the right case, attach a document, create a follow-up, or launch a repeatable workflow.
Every request is scoped to the workspace that owns the API key. Your integration never sends a company ID, and it cannot read or write another firm's data.
It is not the dashboard's internal API. Do not call these endpoints with a dashboard Firebase token.
## Base URL
```text theme={null}
https://api.vflo.app
```
All endpoints in this reference start with `/api/public`.
## What You Can Build
| Workflow | API capabilities |
| - | - |
| Intake handoff | Create or update leads by email, search or create clients, then create a case. |
| Case-aware automation | Find a case by VisaFlo ID, case number, or client email. |
| Document intake | Upload a file directly to the case's `api` folder. |
| Operational follow-up | Create tasks, notes, and workflow task batches on a case, client, or lead. |
| CRM sync | Store VisaFlo IDs after a successful create and use them for later updates. |
## Start Here
1. In VisaFlo, open **Settings** > **API Settings**.
2. Create a named API key for the integration.
3. Store the key in your integration's secret manager.
4. Follow the [Quickstart](/knowledge-base/developers/quickstart) to make a verified request.
5. Look up clients and cases before creating them to avoid duplicates. `lead/create` matches leads by email itself.
API keys are workspace-scoped. Create separate keys for separate integrations so you can revoke one integration without interrupting another.
## First Request
```bash theme={null}
curl "https://api.vflo.app/api/public/lead/search?email=jane@example.com" \
-H "X-API-Key: YOUR_API_KEY"
```
A successful API response uses this envelope:
```json theme={null}
{
"success": true,
"data": {}
}
```
Continue with [Authentication](/knowledge-base/developers/authentication), then follow the resource guides for [records](/knowledge-base/developers/records), [work management](/knowledge-base/developers/work-management), and [files](/knowledge-base/developers/files). The [Endpoint Reference](/knowledge-base/developers/reference) is the complete route index.
# Integration Capabilities
Source: https://visaflo.ca/knowledge-base/developers/integrations
Understand what external systems can do with VisaFlo, how data moves, and where the workspace API boundary ends.
## The Integration Model
VisaFlo's workspace API is an **inbound operational API**. Your CRM, form, document system, internal tool, or automation platform calls VisaFlo when an event occurs. VisaFlo creates or finds the matching workspace records, then creates the work around them.
```text theme={null}
External system event
|
v
Your integration service
|
| X-API-Key
v
VisaFlo workspace API
|
+--> lead, client, or case
+--> document upload
+--> task, note, or workflow tasks
```
The API key determines the target workspace. Do not send a company ID or try to select a tenant from the request body.
## What You Can Build
### CRM and Sales Handoff
Connect HubSpot, Salesforce, Pipedrive, Close, or an internal CRM to VisaFlo when a lead reaches a qualified stage.
| Trigger in the CRM | Action in VisaFlo | Result |
| - | - | - |
| New qualified prospect | Create a lead | A new lead enters the pipeline (the New stage and source `api` unless you send `stage` and `source`). If an open lead already has that email, it is updated instead. |
| Prospect becomes a client | Search then create a client | A client record is available for case work. |
| Matter is opened | Create a case | The integration receives a VisaFlo case ID for future automation. |
| Sales handoff needs context | Create a note or task | The legal team sees the source-system context and follow-up work. |
Use the source system's stable event ID and the returned VisaFlo ID together. This gives your integration a reliable retry and reconciliation key.
### Intake Forms and Booking Flows
Connect Typeform, Jotform, Tally, a custom website, a scheduling tool, or an inbound webhook receiver.
| Incoming data | Recommended VisaFlo flow |
| - | - |
| Web form submission | `lead/create`. An open lead with the same email is updated, so no search is needed. |
| Consultation booked | `lead/create` with `stage`, `consultationTime`, `quotedProfessionalFee` and any booking details in `customFields`. The matching open lead moves to that stage and its Last activity updates. Add a task if staff need to act. |
| Intake is approved | Create or locate the client, create a case, then start a workflow. |
| Follow-up summary | Write a note onto the lead, client, or case. |
The API does not automatically convert a lead to a client. Keep that decision in your intake workflow, then create the client or case when your firm is ready.
### Document Intake
Connect a client upload portal, document collection tool, cloud-storage workflow, or inbound email processor.
1. Find the case using `caseId`, `caseNumber`, or the client's email.
2. Verify the returned case before sending a file.
3. Upload one file to `/case/:caseId/file/upload`.
4. VisaFlo stores the file in the case's `api` folder and returns a file registry ID.
5. Add a task or note when staff review is required.
This pattern is well suited to automations such as “a client uploaded a passport” or “a signed document arrived in our document system.” The API accepts one file per request and supports files up to 50 MB.
### Workflow and Case Operations
Connect internal operations tools, form processors, or workflow automation platforms such as Zapier, Make, n8n, Workato, or a custom worker.
| Need | API capability |
| - | - |
| Start a standardized checklist | List workflow templates, then create tasks from a selected workflow. |
| Create one-off operational work | Create a task on a case, client, or lead. |
| Keep an external team aligned | Add notes with a title and content. |
| Update a case milestone | Patch the case status. |
| Generate or observe form automation | Start form generation and poll autofill status. |
Tasks inherit assignees from the linked VisaFlo record. The API does not accept arbitrary staff assignment in a task request.
### Reporting and Reconciliation
Use the search and read endpoints to verify that a source record maps to the correct VisaFlo case, client, or lead before performing an action. This supports operational dashboards and reconciliation jobs, but it is not a bulk analytics export API.
## Direction of Data Flow
| Direction | Available today | How it works |
| - | - | - |
| External system to VisaFlo | Yes | Your integration calls the workspace API with `X-API-Key`. |
| VisaFlo record lookup | Yes | Search and read endpoints return tenant-scoped, slim records. |
| VisaFlo to external system by webhook | No | The workspace API does not currently provide outbound webhook subscriptions. Poll status or use your own workflow trigger. |
| Browser-direct integration | No | Keep API keys server-side; call VisaFlo through your server or automation worker. |
## Current API Boundary
The public workspace API currently supports creates and lookups for leads, clients, and cases; updating an open lead by email through `lead/create`; case status updates; case file upload and file download; form generation/status; tasks; notes; and workflow task creation.
It does **not** currently provide lead update by ID, client update, delete endpoints, generic case deletion, arbitrary task assignee overrides, outbound webhooks, or a full workspace data export. Design your integration around the available actions and keep a system of record for fields VisaFlo does not expose for writeback.
## Choosing an Integration Pattern
| Pattern | Best for | Implementation |
| - | - | - |
| Server-side webhook handler | Form submissions, CRM lifecycle events, document processors | Receive event, call `lead/create` (or search first for clients and cases), persist returned IDs. |
| Scheduled worker | Reconciliation and form-status checks | Run on an interval, use bounded retries and store checkpoints. |
| iPaaS HTTP step | Lower-volume operations in Zapier, Make, or n8n | Store the key as a platform secret and call the exact endpoint with JSON or multipart data. |
| Internal operations service | High-volume or regulated workflows | Add idempotency, audit logging, encryption, retry queues, and human review. |
The safest first integration is: call `lead/create` (it updates the open lead with the same email instead of duplicating it), save the returned VisaFlo ID, and create a follow-up task. It proves the complete integration path without creating a case or moving documents.
## AI assistants (read-only)
Separate from this write-capable workspace API, VisaFlo also publishes a read-only Model Context Protocol (MCP) server at `https://mcp.vflo.app`. It lets a firm connect Claude, ChatGPT, or another MCP-compatible assistant to query their workspace in natural language, authorized per user through OAuth and consent. It cannot create or change records. See [Connect an AI assistant](/knowledge-base/guide/connect-an-ai-assistant).
# Quickstart
Source: https://visaflo.ca/knowledge-base/developers/quickstart
Make a verified VisaFlo API request, create or update a lead, and create a follow-up task.
## Before You Begin
You need a workspace API key created by a VisaFlo administrator. Keep the key in a server-side secret store. This API is not designed for browser-based requests.
## 1. Verify Your Key
List your workflow templates. This confirms the key, network path, and workspace scope without creating data.
```bash theme={null}
curl "https://api.vflo.app/api/public/workflow/list" \
-H "X-API-Key: YOUR_API_KEY"
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "VFLO_WORKFLOW_ID",
"name": "Standard PR Workflow",
"taskCount": 8
}
]
}
```
## 2. Create or Update a Lead
`lead/create` matches by email. If the workspace already has an open lead for that email, the call updates it instead of creating a duplicate, so retries and repeated webhook deliveries are safe without a search first.
```bash theme={null}
curl -X POST "https://api.vflo.app/api/public/lead/create" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@example.com",
"phone": "+16135550100",
"countryOfResidence": "Canada",
"stage": "Consultation Booked",
"consultationTime": "2026-10-01 14:30"
}'
```
A new lead returns `201`. An existing open lead returns `200` with `data.updated: true`. Either way, save the returned `data.id` in your source system. See [Create a lead](/knowledge-base/developers/endpoints/create-lead) for every field and the update rules.
## 3. Create a Follow-up
Use the VisaFlo lead, client, or case ID to create operational work.
```bash theme={null}
curl -X POST "https://api.vflo.app/api/public/task/create" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Review new web intake",
"priority": "high",
"status": "open",
"entity": { "type": "lead", "id": "VFLO_LEAD_ID" }
}'
```
## Production Checklist
* Search before creating a client or case. `lead/create` already matches leads by email.
* Persist VisaFlo IDs after a successful create.
* Retry only transient failures such as `429` and `5xx` responses.
* Do not retry a malformed `400` request without correcting it.
* Keep the API key on a server, never in a browser or client-side extension.
# Endpoint Directory
Source: https://visaflo.ca/knowledge-base/developers/reference
Browse the VisaFlo workspace API one endpoint at a time.
All endpoints below require `X-API-Key: YOUR_API_KEY` and are prefixed by `https://api.vflo.app`.
## Records
| Method | Endpoint | Purpose |
| - | - | - |
| `POST` | [Create a lead](/knowledge-base/developers/endpoints/create-lead) | Create a lead, or update the open lead with the same email. |
| `GET` | [Search leads](/knowledge-base/developers/endpoints/search-leads) | Find leads by email or name. |
| `POST` | [Create a client](/knowledge-base/developers/endpoints/create-client) | Create a client. |
| `GET` | [Search clients](/knowledge-base/developers/endpoints/search-clients) | Find clients by email or name. |
| `POST` | [Create a case](/knowledge-base/developers/endpoints/create-case) | Create a case and its configured forms. |
| `GET` | [Search cases](/knowledge-base/developers/endpoints/search-cases) | Find cases by ID, number, or client email. |
| `GET` | [Get a case](/knowledge-base/developers/endpoints/get-case) | Read one case. |
| `PATCH` | [Update a case status](/knowledge-base/developers/endpoints/update-case-status) | Change a case status. |
## Files and Forms
| Method | Endpoint | Purpose |
| - | - | - |
| `POST` | [Upload a case file](/knowledge-base/developers/endpoints/upload-case-file) | Upload one file. |
| `GET` | [Download case files](/knowledge-base/developers/endpoints/download-case-files) | Get case files. |
| `POST` | [Generate forms](/knowledge-base/developers/endpoints/generate-forms) | Start form generation. |
| `GET` | [Get autofill status](/knowledge-base/developers/endpoints/get-autofill-status) | Poll form generation. |
## Tasks
| Method | Endpoint | Purpose |
| - | - | - |
| `POST` | [Create a task](/knowledge-base/developers/endpoints/create-task) | Create one task. |
| `POST` | [Create tasks from a workflow](/knowledge-base/developers/endpoints/create-tasks-from-workflow) | Apply a task template. |
| `GET` | [List tasks](/knowledge-base/developers/endpoints/list-tasks) | List and filter tasks. |
| `GET` | [Get a task](/knowledge-base/developers/endpoints/get-task) | Read one task. |
| `PATCH` | [Update a task](/knowledge-base/developers/endpoints/update-task) | Change one task. |
## Notes and Workflows
| Method | Endpoint | Purpose |
| - | - | - |
| `POST` | [Create a note](/knowledge-base/developers/endpoints/create-note) | Create a note. |
| `GET` | [List notes](/knowledge-base/developers/endpoints/list-notes) | List notes for a record. |
| `GET` | [Get a note](/knowledge-base/developers/endpoints/get-note) | Read one note. |
| `PATCH` | [Update a note](/knowledge-base/developers/endpoints/update-note) | Change one note. |
| `GET` | [List workflows](/knowledge-base/developers/endpoints/list-workflows) | List templates for task creation. |
## Integration Pattern
For inbound integrations, use this order:
1. Search for an existing client or case. For leads, skip this: `lead/create` updates the open lead with the same email.
2. Create the record only when no existing match is found.
3. Use the returned VisaFlo ID for a task, note, file upload, or case update.
4. Store the VisaFlo ID in your integration so later requests remain idempotent.
`caseId` is VisaFlo's record ID. It is different from the human-readable `caseNumber` shown to staff and clients.
# Webhooks
Source: https://visaflo.ca/knowledge-base/developers/webhooks
VisaFlo posts to your address when an agreement is sent, opened, signed by a signer and fully signed.
Set the address in **Settings** > **API** > **Webhook**. Use **Send test** to see an event arrive before you build on it.
## Events
| Event | When |
| - | - |
| `agreement_sent` | The invitation went out, from VisaFlo or from the API |
| `agreement_viewed` | A signer opened it for the first time |
| `agreement_signer_signed` | A signer finished signing |
| `agreement_signed` | Everyone, the firm included, has signed. The certificate is ready. |
Every event has the same body: the agreement as `GET /agreement/{agreementId}` returns it, plus `id`, `event` and `timestamp`. Signer events add `signer`. `agreement_signed` adds `signatureId`, `round` and the `invoices` it created. Your `metadata` is in all of them, so you can find your own record (a booking, a Monday item) without a lookup.
```json theme={null}
{
"id": "evt_…",
"event": "agreement_signed",
"timestamp": "2026-10-01T15:04:05.000Z",
"agreementId": "VFLO_AGREEMENT_ID",
"status": "completed",
"metadata": { "booking_id": "savvycal-8842" },
"certificateUrl": "https://api.vflo.app/api/public/agreement/VFLO_AGREEMENT_ID/certificate"
}
```
## Check the signature
Every post carries:
* `X-VisaFlo-Signature: t=,v1=`
* `X-VisaFlo-Event` and `X-VisaFlo-Delivery`
`v1` is the HMAC-SHA256, with your signing secret (shown in Settings > API, starts with `whsec_`), of the string `.`. Compute it over the raw body, compare in constant time, and reject a `t` that is more than five minutes old.
```js theme={null}
const crypto = require("crypto");
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}
```
## Delivery
* Answer with any `2xx` within 10 seconds. Anything else is a failure.
* A failed post is tried again after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours and 24 hours (seven tries in all). After that it is marked failed; **Settings** > **API** lists the latest deliveries and can send one again.
* An event can arrive more than once. Use `X-VisaFlo-Delivery`, or the agreement's `status`, to ignore repeats.
* Addresses must be `https://` and public. Redirects are not followed.
* **New secret** replaces the signing secret at once. Update your receiver first, or accept both for a while.
# AI Drafts
Source: https://visaflo.ca/knowledge-base/drafting/ai-drafts
Create, review, edit, save, and export AI-assisted case drafts using VisaFlo's drafting workspace.
## Overview
AI Drafts help your team create and revise immigration letters, agreements, and other case documents with context from a case, its forms, uploaded files, templates, and prior drafts.
The drafting workspace has two main areas:
* A left panel for Vera chat, case forms, and case files.
* A document editor where you review, edit, save, and export the draft.
## Before you start
* The case should already contain the client information and files you want to reference.
* If you use templates, create or review them in **Settings** > **Templates** before generating a draft.
* AI Drafts are available only on paid tiers that include drafting access.
## Create a draft
1. Open the case you want to draft for.
2. Go to the case's draft area.
3. Choose whether to generate a draft from a template or start from scratch.
4. Add a clear instruction for the draft, such as the document type, objective, tone, and any facts that must be included.
5. Attach relevant case files, existing drafts, or a template when available.
6. Start generation.
When generation starts, the draft may show a generating state. Keep the page open until the draft content appears or return to it from the case draft list.
## Review the draft workspace
Open a draft to review it in the editor.
Use the top bar to:
* Rename the draft.
* Save changes.
* Export the draft.
* Return to the case when the draft is case-linked.
Use the left panel to:
* Ask Vera to revise, summarize, expand, or rewrite parts of the document.
* View case forms when the draft is linked to a case.
* View case files when the draft is linked to a case.
* Collapse the panel when you want more room for document editing.
### Ask Vera for a revision
Use the **Chat** tab to ask a focused drafting question. The suggested prompts are a useful starting point, but include the relevant facts and the specific outcome you need before applying any response to a filing.
## Work with suggested edits
When Vera proposes edits, review each pending edit before accepting it.
1. Read the suggested change in context.
2. Accept individual edits that are correct.
3. Reject edits that are inaccurate, incomplete, or not appropriate for the filing.
4. Use **Accept all** only after checking the full set of pending edits.
Some structured edits are accepted server-side to preserve document consistency. If an edit fails to apply, refresh the draft and review whether the document changed since the suggestion was created.
## Save and export
VisaFlo tracks unsaved changes while you edit.
1. Save after major edits.
2. Export as DOCX when you need a Word document for further review.
3. Export as PDF when you need a fixed-format copy.
For best results, save before exporting so the server exports the latest version.
## Troubleshooting
If the draft stays in a generating state, wait briefly and refresh the draft. If it still does not complete, generate a new draft with a shorter and more specific instruction.
If Vera's answer misses important facts, attach the relevant file or refer to the exact form section before asking again.
If an accepted edit looks wrong, undo it in the editor or use the draft version history if available for your workspace.
If export does not include the latest text, save the draft and export again.
# Autofill with Extension
Source: https://visaflo.ca/knowledge-base/extension/autofill-with-extension
Use a VisaFlo extension to transfer reviewed case data into a supported portal, then verify the destination record before any submission.
## Before you run autofill
Autofill should start from a reviewed case, not from a partially completed portal record. Confirm all of the following first:
* VisaFlo Autofill Extension is installed from the [Chrome Web Store](https://chromewebstore.google.com/detail/visaflo-autofill-extensio/kndagmebkjldnepmbmmkdnopohefghjh) and enabled in Chrome.
* The VisaFlo case is the correct client and immigration matter.
* Required questionnaire sections are complete and validation issues are resolved.
* The target portal is open to the correct application record and you are signed in with the authorized account.
* You understand which fields will still require manual input or professional judgment.
## Run the workflow
1. Open the case forms workflow in VisaFlo.
2. Choose the supported autofill action for the target portal.
3. Keep the target portal record visible and verify that it belongs to the same client and matter.
4. Start autofill and wait for the extension to finish its current action.
5. Review the portal fields against the VisaFlo questionnaire and source documents.
## Verify the destination system
Never treat a completed autofill action as a completed application. Check the destination portal for missing fields, date formats, selections, family members, declarations, attachments, and any sections the extension could not populate. Save or submit only after an authorized reviewer has confirmed the portal record.
## When autofill is blocked or fails
Stop and diagnose the source before retrying:
| Symptom | Check first |
| - | - |
| Autofill action is unavailable | Case type, extension support, and questionnaire completion. |
| A required portal field is blank | The related questionnaire answer, source document, and portal-specific requirement. |
| Values appear on the wrong application | Client and case identifiers before making any edits. |
| The portal layout does not respond | Extension version, supported portal state, and recent portal changes. |
Capture the case type, target portal step, and the specific field or error when you contact support. Do not include passwords, full client documents, or portal credentials in a support message.
## Related guides
* [Extension Overview](/knowledge-base/extension/must-read-getting-started)
* [Auto-fill IMM forms](/knowledge-base/questionnaires/auto-fill-imm-forms)
* [Auto-fill Rep PR portal](/knowledge-base/questionnaires/auto-fill-rep-pr-portal)
* [Automation & Review](/knowledge-base/guide/automation-and-review)
# Create a Case Before Autofill
Source: https://visaflo.ca/knowledge-base/extension/create-a-case-on-visaflo
Create and verify the VisaFlo case before using an extension to prepare a supported external portal workflow.
## Start in VisaFlo, not the portal
Create the client and case in VisaFlo before you prepare a portal application. The case is the source of truth for the questionnaire, files, tasks, drafts, and reviewed information the extension may use. Creating a portal application first makes it much easier to attach the extension to the wrong person or matter.
## Create the correct case
1. Add or select the client.
2. Create a case with the correct case type and an owner.
3. Confirm the case's client relationship and key identifiers.
4. Send or complete the case questionnaire.
5. Add the source documents and any internal review tasks.
6. Review the information before opening the portal workflow.
See [Create a case](/knowledge-base/cases/creating-a-case) for the detailed dashboard steps.
## Confirm the case is ready
Before you use an extension, verify that the case contains the same principal applicant and family composition as the target portal application. Confirm names, dates of birth, addresses, and other identifying details against the source documents. Resolve contradictory information in VisaFlo before you start a destination-system entry.
## Avoid duplicate records
Use one case for one immigration matter. If the same client has a separate matter with its own deadline, forms, or document trail, create a separate case. Do not create duplicate cases merely because an autofill attempt needs to be repeated; correct the source data and retry the same reviewed case when appropriate.
## Next step
When the case is ready, [install the extension](/knowledge-base/extension/installation) and follow [Autofill with Extension](/knowledge-base/extension/autofill-with-extension).
# Installation
Source: https://visaflo.ca/knowledge-base/extension/installation
Install the VisaFlo Autofill Extension from the Chrome Web Store, confirm Chrome has it enabled, and use it only with a reviewed case.
## Install from the Chrome Web Store
Install the [VisaFlo Autofill Extension from the Chrome Web Store](https://chromewebstore.google.com/detail/visaflo-autofill-extensio/kndagmebkjldnepmbmmkdnopohefghjh). The Store is the only supported installation path. Do not download a ZIP file, enable Developer mode, or load an unpacked extension.
1. Open the Store listing in Chrome.
2. Select **Add to Chrome** and approve Chrome's installation prompt.
3. Open Chrome's Extensions menu and pin VisaFlo Autofill Extension if your team needs quick access.
4. Confirm the extension is enabled before opening a supported portal.
Chrome Web Store installations receive extension updates through Chrome. Before a time-sensitive workflow, check that Chrome is up to date and that the extension remains enabled.
## Verify before autofill
Open the intended portal and confirm that the case, questionnaire, and target application record all match. Do not run autofill against a client application until this review is complete.
## Troubleshooting
If **Add to Chrome** is unavailable, open the Store listing in Chrome rather than another browser or managed profile. If VisaFlo Autofill Extension is missing from the Extensions menu, confirm that it is enabled at `chrome://extensions`. If it is disabled by a managed-browser policy, ask your browser administrator to allow the Chrome Web Store listing; do not install a local copy as a workaround.
# Extension Overview
Source: https://visaflo.ca/knowledge-base/extension/must-read-getting-started
Understand what VisaFlo extensions do, when to use them, and the review checkpoints required before a government portal submission.
## What the extension does
VisaFlo extensions help transfer reviewed case information into supported external portal workflows. They are a preparation tool that reduces repeated data entry; they do not submit an application, determine eligibility, or remove the need to review the destination portal.
Install the [VisaFlo Autofill Extension from the Chrome Web Store](https://chromewebstore.google.com/detail/visaflo-autofill-extensio/kndagmebkjldnepmbmmkdnopohefghjh), then confirm the exact case and portal workflow are supported before use. The Chrome Web Store listing is the supported source and receives updates through Chrome.
## The safe operating sequence
1. Build the case and collect the required questionnaire answers and evidence.
2. Review and correct the source data in VisaFlo.
3. Install the extension that matches the portal and application type.
4. Sign in to the target portal yourself and open the correct application record.
5. Run autofill only after confirming the client, case, and portal record match.
6. Review every populated destination field before saving, sending, or submitting.
This sequence keeps VisaFlo's source record and the government portal entry aligned while preserving professional control at the moment it matters.
## Before you start
* Use a current version of Chrome and install VisaFlo Autofill Extension only from the Chrome Web Store.
* Ensure the dashboard case has the correct case type, client, questionnaire, and required family-member information.
* Resolve incomplete answers and validation errors before running autofill.
* Keep the browser and target portal available while the extension is working; avoid switching to an unrelated application record.
* Have a manual completion path available for time-sensitive work.
* Never use Developer mode, **Load unpacked**, or a locally shared extension archive for client work.
## What to do when the portal changes
Government portals can change their page structure, field labels, or application flow. If autofill does not behave as expected, stop and compare the result with the source questionnaire. Do not force the workflow by repeatedly running it against a live application. Document the portal page, case type, and the field or step that failed before contacting support.
## Continue
* [Install extension](/knowledge-base/extension/installation)
* [Autofill with Extension](/knowledge-base/extension/autofill-with-extension)
* [Autofill IMM forms](/knowledge-base/questionnaires/auto-fill-imm-forms)
* [Automation & Review](/knowledge-base/guide/automation-and-review)
# Data security, storage, team permissions, and white-label setup
Source: https://visaflo.ca/knowledge-base/faq/data-security-storage-team-permissions-and-white-label-setup
Set practical access boundaries for your team, keep client-facing branding intentional, and request formal security information through the appropriate channel.
## Use least-privilege access
Give each staff member the access needed for their role and no more. Review membership when responsibilities change, and reassign active cases, tasks, and reminders before removing a departing user. A shared login makes ownership and auditability weaker; use individual accounts for every team member.
## Keep staff and client surfaces separate
Use dashboard features such as internal notes, working drafts, and staff tasks for team-only work. Use the client portal, questionnaire invitations, document shares, and payment requests only for information the firm has intentionally made client-facing. Review visibility before you send a link.
## Protect portal and external credentials
Staff sign in to government portals themselves before using a supported extension workflow. Do not store, send, or ask clients to send government portal passwords through VisaFlo chat, notes, or support messages. The same rule applies to API keys, access tokens, and private signing links.
## Configure branding deliberately
White-label settings can affect client-facing names, sender identity, and links where the workspace supports them. Configure DNS and branded sender settings with the domain owner, then test in a private browser before sharing a new client link. See [Email & DNS setup](/knowledge-base/faq/how-to-configure-email-sending-dns-records-and-custom-domain-branding).
## Formal due diligence
For a security questionnaire, data-processing agreement, data residency request, or custom compliance requirement, contact VisaFlo support and ask for the current formal documentation. Do not treat a help article as a substitute for a signed security or legal commitment.
# How file upload, folders, merging, compression, and storage work
Source: https://visaflo.ca/knowledge-base/faq/how-file-upload-folders-merging-compression-and-storage-work
Keep case evidence, generated outputs, and client-ready documents organized so the right version is easy to find and review.
## Files are part of the case record
Use the case file manager for source evidence, client uploads, generated documents, and final outputs that belong to a specific matter. A clear file structure makes drafting, review, sharing, and submission preparation faster because every staff member can see which documents are source material and which are outputs.
## Use a small, repeatable folder structure
Begin with a structure your whole team can follow, such as:
* **Client evidence:** identity, financial, relationship, employment, or other source documents.
* **Forms and drafts:** working questionnaires, generated forms, and draft letters.
* **Agreements and signed outputs:** approved agreements and signed copies.
* **Submission or correspondence:** filed copies, receipts, and external communication.
Do not create a new folder for every one-off document. Add a folder only when it helps a reviewer find a group of files repeatedly.
## Choose the right action
| Need | Use | Before you continue |
| - | - | - |
| Add a document to the case | [Upload Files](/knowledge-base/files/upload-files) | Check the active folder and use a clear name. |
| Give staff a local copy | [Download Files](/knowledge-base/files/download-files) | Select only the allowed files; use a restricted shared link for external access. |
| Create one PDF from several PDFs or images | [Merge Files](/knowledge-base/files/merge-files) | Confirm file order and review the merged output. |
| Reduce an image or PDF size | [Compress a file](/knowledge-base/files/compress-file) | **Use Compressed** replaces the original, so download it first if you may need it. |
| Send a limited document set externally | [Document shares](/knowledge-base/collaboration/document-shares) | Check exactly what a recipient can access and for how long. |
## Request documents from clients
Use questionnaire upload requests when you need the client to provide a specific document as part of information collection. Use the case file manager for staff organization after the file is received. This separation keeps a client request tied to the questionnaire while keeping the final case record usable by the team.
## Keep versions reviewable
Do not overwrite a meaningful source document just because a revised copy arrived. Use names that show the document purpose and version, then open the file before relying on it for drafting, signing, or submission. A merged document is a new file next to its sources; a compressed file replaces the original once you choose **Use Compressed**. Either way, check every page.
## IMM PDF note
Some IMM PDFs use XFA formatting and can behave differently from regular PDFs. If a file action is unavailable or the result does not behave as expected, retain the original and use the product workflow only after checking the output. Do not submit a modified form without reviewing it in the destination system.
## Troubleshooting
If an expected client upload is missing, check the questionnaire request and the case folder before asking the client to upload again. If a file will not open, generated documents do not appear in the case, or an upload limit blocks progress, keep the case ID and file name for support.
# How leads, booking forms, consultations, and client conversion work
Source: https://visaflo.ca/knowledge-base/faq/how-leads-booking-forms-consultations-and-client-conversion-work
Use leads for prospective work, collect only the information needed to qualify it, then create a client and case when the firm is ready to engage.
## The boundary between a lead, client, and case
Use a **lead** for a prospective relationship. Use a **client** when your firm has an ongoing relationship with that person or organization. Use a **case** for a specific immigration matter that needs its own information, documents, deadlines, and delivery workflow.
This distinction matters: a lead form is designed to help you decide whether and how to engage. A case questionnaire is designed to collect the structured facts needed to work an active matter. Do not create a detailed case simply to hold an early enquiry.
Read [Core Concepts](/knowledge-base/guide/core-concepts) for the full model.
## Choose an intake path
| Situation | Start with | Why |
| - | - | - |
| A staff member received an enquiry | A manually created lead | Keeps follow-up and qualification separate from active case work. |
| A prospect comes from your website | A public lead form or chatbot | Captures a consistent first-contact record without giving portal access. |
| The prospect needs to choose a time | A consultation or booking workflow | Lets you collect only the booking details before the appointment. |
| The firm has agreed to act | Convert or create the client, then open a case | Starts the matter-specific questionnaire, files, tasks, and client workflow. |
## Build a useful lead form
Ask only for the information that changes the next action. A strong first version usually includes contact details, the immigration objective, location or status context, timing, and how the prospect heard about your firm. Avoid using a lead form to recreate a full case questionnaire; long forms reduce completion and create details your team has not yet committed to managing.
Use [Custom Lead Form](/knowledge-base/leads/custom-lead-form) to build the form and [Collect Leads](/knowledge-base/leads/collect-leads) to work the incoming queue.
## Run the consultation handoff
Before a consultation, confirm the lead owner, the purpose of the meeting, and the question that must be answered next. After it, record one clear outcome:
* Continue qualification.
* Request additional information.
* Send an engagement or payment step.
* Convert to a client and create a case.
* Close the lead with a reason your team can understand later.
This makes follow-up visible and prevents prospects from disappearing between a form submission and a retained matter.
## Convert only when the work is ready
When the firm chooses to engage, preserve the useful relationship information and create the client record. Then create the appropriate case type and assign an owner. Start the case questionnaire only when the team knows which matter it is collecting for; that keeps the data, files, tasks, and automation context aligned.
After conversion, use [Create a case](/knowledge-base/cases/creating-a-case), [Send Invitation](/knowledge-base/questionnaires/send-invitation), and [Client Portal](/knowledge-base/portal/client-portal) to begin delivery.
## Common questions
### Can I use an intake form before choosing a program?
Yes. Use a lead or consultation form for first-contact qualification. Move to a detailed case questionnaire once the firm has chosen the matter type and is ready to collect the required facts.
### What happens to leads that do not convert?
Keep a clear non-conversion or follow-up outcome rather than deleting useful context. This lets the team distinguish a prospect who needs more time from one that is not a fit, and makes future follow-up intentional.
# How online portal autofill works, when a case is ready, and what counts as one usage
Source: https://visaflo.ca/knowledge-base/faq/how-online-portal-autofill-works-when-a-case-is-ready-and-what-counts-as-one-usage
Prepare a reviewed case for a supported portal autofill workflow and confirm the usage terms that apply to your own subscription.
## When a case is ready
Start portal autofill only after the case, questionnaire, family information, and target portal application have all been reviewed. The needed readiness is not simply a 100% completion percentage. The staff member should be able to explain where each important destination value comes from and resolve any conflicting source data first.
## Prepare the workflow
1. Confirm the case type supports the intended portal workflow.
2. Review the principal applicant and every required family-member section.
3. Resolve required-field and validation issues.
4. Install the matching extension from **Settings** > **Extensions**.
5. Sign in to the destination portal yourself and open the correct application.
6. Run autofill, then review every populated portal field before saving or submitting.
VisaFlo does not need a government portal password. The extension works after the authorized user has signed in to the portal.
## What counts as usage
Usage, limits, renewal periods, and overage treatment depend on the subscription attached to your workspace. Check **Settings** > **Subscription** or obtain written confirmation from support before relying on a particular interpretation for a high-volume workflow. Correcting source data and re-running a workflow may be operationally necessary; do not assume any billing outcome without checking the plan that applies to your company.
## If the case is incomplete
Do not use autofill to discover which fields are missing. Return to the questionnaire, assign the correct follow-up, and review the source information. If the destination portal requires a value VisaFlo does not populate, complete it manually and retain the review responsibility in the case workflow.
See [Autofill with Extension](/knowledge-base/extension/autofill-with-extension) and [Pricing & limits](/knowledge-base/faq/visaflo-pricing-case-limits-annual-plans-and-overage-rules).
# How service agreement templates and e-signatures work
Source: https://visaflo.ca/knowledge-base/faq/how-service-agreement-templates-and-e-signatures-work
How an agreement template becomes a signed agreement: templates, drafts, sending, your firm's signature, and changes after sending.
## The agreement lifecycle
Your firm sets up each template once: its wording, the fields that fill in from the case, and where each person signs. Each agreement made from it then moves through four stages. The case's **Service Agreements** tab shows the stage as a status. **Agents** > **Retainer Agent** has a tab for each one: **Draft**, **Sent**, **Waiting for you**, and **Completed**.
1. **Draft.** On a case or lead, **New agreement** makes a draft from one or more templates. It fills in from the record, and you check it before sending.
2. **Waiting** (the **Sent** tab). Once sent, your client gets an email with the signing link. With more than one client signer, the status shows how many have signed, for example **1 of 2 signed**.
3. **Waiting for you.** Everyone on the client side has signed. Your firm signs last.
4. **Completed.** Everyone has signed. The signed copy is on the case. When your firm signs last, everyone who signed gets a copy by email unless your firm turned that off.
An agreement that was already sent keeps the documents it went out with. Drafts pick up template changes when you open them, so check a draft's **Fields** again after you edit its template.
## Set up a template once
In **Settings** > **Templates** > **Service Agreements**, select **Add a Template** and upload your Word file. The template editor opens. There you choose where each field gets its value (auto-filled from the record, typed per agreement, or a formula) and place the sign areas for the client and for your firm.
Name each template the way your firm does, such as *Service Agreement* or *Consultation Agreement*. See [Letters & Agreements](/knowledge-base/settings/letters-and-agreements).
## Prepare and review the agreement
On the case, open **Service Agreements** and select **New agreement**. The agreement opens as a draft in its own workspace. The **Fields** tab shows each value and where it came from, and lists anything still empty under **To fill**. Changes you make there apply to this agreement only.
Read the agreement before you send it: names, dates, fees, scope, and page layout. Templates speed up the work, but they don't replace your review of the specific client and matter. See [Automation & Review](/knowledge-base/guide/automation-and-review).
## Send it and sign it
On the **E-Sign** tab, check who signs each document and where. The client signs first, then your firm. Select **Send for signature**, check the email, and select **Send**. When your client has signed, the agreement shows **Waiting for you**. Select **Sign** to add your firm's signature, then **Complete**. See [E-Signature](/knowledge-base/cases/e-signature) for each step.
## Drafts and changes
* **Drafts save on their own.** Before you leave, wait until the header shows **Draft saved**. Come back with **Open** on the draft's row in the case's **Service Agreements** tab, or from the **Draft** tab of **Retainer Agent**.
* **Delete a draft** from the workspace's **…** menu with **Discard draft**. Its sign areas and signers are deleted. Documents it generated stay on the record.
* **Change an agreement after sending.** If nobody has signed yet, open it from the row's menu, select **More**, then **Reopen to edit**. Change the documents or signers, then send it again. Every signer gets a new link. If anyone has already signed, start a **New agreement** with the correction instead.
* **Send a document only to read.** On the **E-Sign** tab, clear everyone's box for that document. If nobody signs anything, the button changes to **Email documents**, and the request stays a draft.
Retainer Agent can also start drafts for you, for example when a lead moves to a stage, and remind people who haven't signed. Open **Agents** > **Retainer Agent** and select **Settings**. Only admins can change these settings.
## Common issues
### A value is missing or wrong
Before you send, correct it on the **Fields** tab. That changes this agreement only. To fix it for future agreements too, correct the client's record or the template. After you send, reopen it if nobody has signed yet. Otherwise start a **New agreement** with the correction.
### A signer or email needs to change
Before you send, change it on the **E-Sign** tab, or correct the email in the send dialog. After you send, reopen the agreement if nobody has signed yet, make the change, and send it again. Otherwise start a **New agreement**.
### Your client can't find the email
Open the agreement from the row's menu and check the email address under your client's name. Ask them to check their spam folder, then select **Remind**. You can also copy their signing link with the copy button next to their name and send it another way. Anyone with the link can sign as that person, so send it only to them.
### Your firm can't sign yet
Your firm signs after everyone else. Until every client signer has finished, the firm's signing page shows **Waiting for the client**.
### Where to find the signed copy
On the case's **Service Agreements** tab, select the download button on the completed agreement's row. The signed copy is also in the case's **Files**, in the **Service Agreements** folder. To download the **Certificate of completion**, open the agreement from the row's menu.
### An older agreement shows Generated
Agreements with a **Generated** badge were not sent for signature from VisaFlo, for example ones generated before e-signature requests existed. You can download them. To get one signed, start a **New agreement** from its template.
# How tasks, reminders, workflows, deadlines, and case statuses work
Source: https://visaflo.ca/knowledge-base/faq/how-tasks-reminders-workflows-deadlines-and-case-statuses-work
Use tasks for owned actions, reminders for time-sensitive visibility, workflows for repeatable work, and case status for the overall matter state.
## Four tools, four jobs
| Use | For | Example |
| - | - | - |
| **Task** | An action with a clear owner | Review a client's passport upload. |
| **Reminder** | A date or event that must remain visible | Permit expiry or a consultation appointment. |
| **Workflow** | A reusable sequence of work | New retained client onboarding. |
| **Case status** | The overall state of the matter | Active, paused, or closed according to your firm's process. |
Do not use case status as a substitute for a task. A case can be active while many different people own separate actions. Do not use an internal note as a substitute for a deadline; create a task or reminder that can be assigned and tracked.
## Run work from owned tasks
Every operational task should answer three questions: what needs to happen, who owns it, and when it is due. Link the task to the client, lead, or case where possible so the assignee can see the context without searching across systems.
Use the task list to review open work by assignee, priority, status, and linked record.
## Keep time-sensitive work visible
Use reminders for deadlines and calendar-linked events that need a separate date view. The **Reminders** page separates **Task**, **Expiry**, and **Event** items so the team can focus on the type of deadline it needs to review.
## Turn repeated work into a workflow
When the same work happens on every retained client or case, create a workflow rather than recreating the checklist from memory. Start with the smallest reliable version: the required steps, clear owners, and the deadlines that matter. Improve it after the team has used it on real cases.
Each workflow shows its name, purpose, and number of steps. Select **New Workflow** to create a reusable sequence for a repeated process.
## Use case status carefully
Case status communicates the matter's overall state and may affect client access to questionnaires or the portal. Before changing it, check for open client requests, pending documents, upcoming reminders, and tasks assigned to other staff. Make the status change part of the team's operating rule, not an individual shortcut.
## A weekly operating rhythm
For a growing firm, establish a predictable review:
1. Review overdue and due-soon tasks by owner.
2. Review upcoming expiry and event reminders.
3. Check active cases with no next task or client request.
4. Confirm that completed work has the required output saved to the case.
5. Improve the workflow when the same exception appears repeatedly.
This turns VisaFlo from a record of work into the system your team uses to keep work moving.
# How the AI assistant (MCP) connection works, what it can read, and how to revoke access
Source: https://visaflo.ca/knowledge-base/faq/how-the-ai-assistant-mcp-connection-works-what-it-can-read-and-how-to-revoke-access
How VisaFlo's Model Context Protocol connection lets an AI assistant read your workspace, what it can and cannot access, how firm data stays isolated, and how to disconnect.
## What is the AI assistant connection?
VisaFlo runs a Model Context Protocol (MCP) server at `https://mcp.vflo.app`. Connecting it to Claude, ChatGPT, or another MCP-compatible assistant lets that assistant answer questions about your VisaFlo workspace in natural language. See [Connect an AI assistant](/knowledge-base/guide/connect-an-ai-assistant) for setup steps.
## Is it read-only? Can the assistant change my data?
The connection is **read-only**. A connected assistant can look up and summarize your data, but it cannot create, edit, or delete records, move a case, upload a file, or send anything on your behalf. To make changes, use the dashboard.
## MCP Server
Scoped to your workspace, the assistant can read:
* **Cases** — list, search, and open cases, plus case statistics.
* **Clients** — list, search, and open client records.
* **Leads** — list and open leads, plus lead statistics.
* **Tasks and reminders** — list tasks and reminders.
* **Case files** — list and search files, and get a download link for a file.
* **Questionnaire and form answers** — read and search a case's form answers.
* **Briefs** — read a generated case brief or client brief.
* **Emails and comments** — list and read emails and case form comments.
* **Invoices** — list and open invoices, plus invoice statistics.
It sees only what your own account is allowed to see, because you authorize the connection with your own login.
## Is my firm's data isolated from other firms?
Yes. Every request is scoped to the workspace that authorized the connection. An assistant connected to your firm cannot read another firm's cases, clients, or files.
## How do I authorize a connection?
When you add the VisaFlo MCP server in your assistant, VisaFlo opens a sign-in page and then a consent screen. You log in with your normal dashboard email and password and review the access before selecting **Allow**. No API key is created for this connection.
## How do I revoke access?
Open **Settings → Connected apps** in the dashboard and revoke the connection. The assistant loses access immediately. Revoke any connection that no longer has a business purpose.
## Can an administrator turn this off for the whole firm?
Yes. An administrator can disable the AI assistant connection for every member of the firm. When it is disabled, new connections cannot be authorized and existing ones stop returning data.
## Which assistants can I connect?
Any MCP-compatible assistant, including Claude Desktop and ChatGPT. The server URL `https://mcp.vflo.app` is the same for every assistant and every firm.
## Related
* [Connect an AI assistant](/knowledge-base/guide/connect-an-ai-assistant)
* [Which integrations VisaFlo supports and what can be automated with APIs](/knowledge-base/faq/which-integrations-visaflo-supports-and-what-can-be-automated-with-apis)
# How to configure email sending, DNS records, and custom domain branding
Source: https://visaflo.ca/knowledge-base/faq/how-to-configure-email-sending-dns-records-and-custom-domain-branding
Set up the sending domain and branded client-facing links your firm needs, then verify delivery before inviting real clients.
## Treat email delivery and branded links as separate setup tasks
Your sending domain controls the address and authentication used for outbound email. White-label or custom-domain settings control the client-facing domain where supported. Configure and test each one independently before you use it for questionnaires, portal invitations, payment requests, or document shares.
## Set up a sending domain
Open **Settings** > **Email Configuration**, add the domain your firm will use, and copy the exact DNS records shown in VisaFlo into the provider that hosts that domain. The settings screen is the source of truth for the record names and values; do not reuse records from another company or an old setup guide.
After the records are saved at the DNS provider, return to VisaFlo and run the validation action when available. DNS propagation can take time, so a record may be correct but not immediately verified.
## Configure senders and signatures
Once the domain is verified, set the company default sender and configure individual staff sender addresses where your workspace supports them. Then use [Email Signature](/knowledge-base/settings/email-signature) to make client communication consistent.
Send a test email to an internal address before contacting clients. Check the From address, reply-to behaviour, signature, links, and spam-folder delivery.
## Configure branded client-facing links
If your firm uses white-label branding, configure the custom domain from the relevant settings area and follow the displayed DNS and verification instructions. Confirm the portal, questionnaire, or share links on the branded domain in a private browser window before sharing them externally.
## Troubleshooting
If DNS validation fails, compare the record type, host/name, and target value character-for-character with the VisaFlo screen. Make sure the record is being edited at the authoritative DNS provider and that the host field does not duplicate the root domain. If clients do not receive email, check the recipient address, sender verification state, mail records when available, and spam or filtered mail before resending.
Do not put DNS targets, private sender information, or client addresses into public screenshots or support channels that are not approved for sensitive information.
# How to import clients, leads, and cases from CSV or another platform
Source: https://visaflo.ca/knowledge-base/faq/how-to-import-clients-leads-and-cases-from-csv-or-another-platform
Prepare a clean client or lead import, validate a small sample, and treat case migration as a separate mapping project.
## Separate contact import from case migration
Clients and leads are usually the simplest records to import because they have a clear relationship and contact structure. A full case migration is different: it can include case types, questionnaire answers, documents, tasks, reminders, notes, and history that may not map one-to-one from another platform.
Start with the records your team needs to operate immediately, then plan the case migration separately rather than assuming a spreadsheet can recreate every prior workflow.
## Prepare a clean source file
Before importing clients or leads:
1. Use one row per person or organization.
2. Keep the source system's unique ID in a separate reference column when available.
3. Normalize contact fields, especially email addresses and phone numbers.
4. Remove duplicate rows and obsolete test records.
5. Keep first name, last name, email, and ownership fields in consistent columns.
6. Save the original export separately so you can trace or correct an import later.
Do not put several people, emails, or unrelated notes into one cell when those values need separate records in VisaFlo.
## Import a sample first
Import a small representative sample before the full file. Check that names, emails, assignees, stages, and source information appear where the team expects. Search for duplicates after the test import, then correct the mapping before importing more records.
## Plan a case migration deliberately
For active matters, decide what must move on day one:
* Client relationship and contact information.
* Case type, current status, owner, and next action.
* Essential documents and signed outputs.
* Upcoming deadlines and reminders.
* The client request that is currently outstanding.
Historic activity that does not affect current delivery can remain in the prior system if that is safer than importing incomplete or misleading data. Give the team a clear rule for where to look up prior-system history during the transition.
## If an import fails
Check required fields, invalid or duplicate emails, blank rows, invisible characters, and file size before re-running it. Do not repeatedly upload the same complete file; confirm whether a partial import succeeded first. When contacting support, provide the import type, sample row number, error text, and a sanitized sample rather than a full client export unless secure transfer has been arranged.
# How to install the VisaFlo Chrome extensions and choose the right one
Source: https://visaflo.ca/knowledge-base/faq/how-to-install-the-visaflo-chrome-extensions-and-choose-the-right-one
Install VisaFlo Autofill Extension from the Chrome Web Store, keep it updated through Chrome, and verify it against a reviewed case before urgent use.
## Use the official Chrome Web Store listing
Install [VisaFlo Autofill Extension from the Chrome Web Store](https://chromewebstore.google.com/detail/visaflo-autofill-extensio/kndagmebkjldnepmbmmkdnopohefghjh). Do not reuse an old local archive or a previous unpacked installation. Chrome Web Store installation is the supported source for updates and security review.
## Install in Chrome
1. Open the listing in Chrome.
2. Select **Add to Chrome** and approve the Chrome prompt.
3. Open Chrome's Extensions menu to confirm VisaFlo Autofill Extension is enabled.
4. Pin it if quick access is useful for your team.
5. Let Chrome update the extension normally; do not manually replace its files.
## Verify before a live filing
Open a reviewed non-urgent case and the matching portal workflow. Confirm the extension can identify the expected case context before using it for time-sensitive work. Keep the portal tab on the correct application and do not run another autofill extension at the same time.
## Common installation problems
If **Add to Chrome** is unavailable, use Chrome and check whether your organization manages browser extensions. If the extension disappears, verify that it is enabled at `chrome://extensions`, then reinstall it from the Store listing if needed. If it cannot find the expected workflow, recheck the case type and portal support before retrying.
See [Extension Overview](/knowledge-base/extension/must-read-getting-started) for the operating sequence.
# How to report a VisaFlo bug or unresolved support issue
Source: https://visaflo.ca/knowledge-base/faq/how-to-report-a-visaflo-bug-or-unresolved-support-issue
Send a focused, safe bug report that gives support enough context to reproduce the issue without exposing unnecessary client information.
## Report the behavior, not only the outcome
A useful report says what you expected, what happened instead, and the exact action that led to the result. Start with the specific troubleshooting guide when one applies, then use this process for a problem that remains unresolved.
## Include the minimum useful context
* Workspace name and the role that encountered the issue.
* Case ID, lead ID, or client ID when relevant.
* Page URL or feature name.
* Exact steps to reproduce the issue.
* Expected result and actual result.
* Visible error text and approximate time.
* Browser and operating-system version.
* Whether it reproduces in a private browser window or on another non-sensitive record.
## Capture evidence safely
Screenshots or a short recording are useful when they show the action and error. Remove or obscure passwords, API keys, portal links, financial details, passports, full forms, and unrelated client information before sharing. Do not send a full customer export when a case ID and a focused screenshot are sufficient.
## Handle urgent work
If an issue blocks a filing deadline, preserve the source data, notify the responsible team member, and use the firm's approved manual fallback while support investigates. Do not keep retrying a destructive action or move the work to a different client record merely to bypass the issue.
## Follow up
Keep the support reference with the related case task or internal note so the team knows who owns the next action and whether a workaround was used.
# How to send, customize, lock, and review client questionnaires
Source: https://visaflo.ca/knowledge-base/faq/how-to-send-customize-lock-and-review-client-questionnaires
Use the case questionnaire to collect structured client information, request changes, and establish reviewed data for downstream work.
## The questionnaire is the collection layer
Use a questionnaire after a case exists and your team knows what information the matter requires. It turns client-provided answers and upload requests into structured case data that staff can review, reuse in documents, and use for supported automation.
It is not a substitute for professional review. A completed questionnaire can still contain missing, unclear, or conflicting information.
## Send an invitation with a clear request
1. Open the case and go to its forms or questionnaire area.
2. Confirm that the correct questionnaire and upload requests are assigned.
3. Select **Start intake**, then choose what to send: the questionnaire, the documents, or both.
4. Check the recipient email and, under **Advanced options**, the message before selecting **Send invite**.
5. Record the owner and follow-up date as a task when completion is time-sensitive.
The client receives a secure link to complete their assigned work. See [Send Invitation](/knowledge-base/questionnaires/send-invitation) for the exact staff flow and [Client Portal](/knowledge-base/portal/client-portal) for the client-facing experience.
## Read completion as a signal, not approval
The progress percentage shows questionnaire section completion. It does not guarantee that every required answer is usable or that the case is ready to submit. Before moving forward, review the information for:
* Required answers and expected uploads.
* Consistency between related answers.
* Dates, names, and numbers that affect forms or agreements.
* Facts that need clarification or supporting evidence.
* Changes since a previous draft, extraction, or autofill run.
## Request a correction in context
Use review mode or comments when the client needs to correct a specific answer. State what needs to change and why, then send the review request. Keep the explanation tied to the relevant question instead of asking the client to infer which answer is wrong from a general email.
After the client updates the answer, review it again before marking the issue resolved. See [Comments](/knowledge-base/questionnaires/comments) and [View Questionnaire](/knowledge-base/questionnaires/view-questionnaire).
## Customize carefully
Customize a questionnaire when the case needs a client-specific question, upload request, instruction, or visibility change. Keep each customization connected to a real next decision or document requirement. If the same change recurs across a case type, move it into an approved reusable template rather than rebuilding it on every case.
Avoid adding questions that a reviewer will not use. More fields increase client effort and make it harder for staff to detect the important gaps.
## Manage client editing deliberately
Client access can depend on the case status and assigned workflow. Keep the case active while the client must provide or correct information. Limit edits only after the team has reviewed the answers and has a clear process for handling later changes.
## Use reviewed data downstream
Questionnaire data feeds the rest of case preparation. Before generating a document, using AI assistance, or running portal autofill, follow the same sequence: collect, review, correct, then automate. See [Automation & Review](/knowledge-base/guide/automation-and-review).
## Troubleshooting
If the client did not receive an invitation, verify the email address, invitation status, and email sender configuration before sending another one. If the questionnaire shows 100% but data is missing, inspect the required sections and validation messages instead of relying on the percentage alone.
# How VisaFlo generates IMM PDFs and handles IRCC form updates
Source: https://visaflo.ca/knowledge-base/faq/how-visaflo-generates-imm-pdfs-and-handles-ircc-form-updates
Generate supported IMM PDFs from reviewed case data, verify the output, and respond safely when a government form changes.
## Generate from reviewed questionnaire data
VisaFlo can prepare supported IMM PDF outputs from the case forms workflow. Before generation, confirm that the case type is correct, required questionnaire sections are complete, and the relevant client and family-member information has been reviewed.
The generated PDF is a preparation output. Open it and compare it with the questionnaire and source documents before giving it to a client, attaching it to a portal, or filing it.
## Review the generated output
Check the sections that commonly depend on case-specific facts:
* Names, dates of birth, and document identifiers.
* Addresses, travel, and personal history.
* Family members and relationship details.
* Employment, education, and other application-specific facts.
* Any declaration, signature, validation, or barcode step required by the destination process.
If the generated PDF differs from the source record, correct the questionnaire or case data first, then regenerate and review a new copy. Do not edit only the final file when the underlying data is wrong.
## When a government form changes
Government forms and portal workflows can change. If a form version, field, validation step, or barcode behaviour appears different from what your team expects, stop and verify the current destination requirement before proceeding. Use the supported VisaFlo workflow only after confirming that it matches the current form and case type.
For a time-sensitive or submission-blocking change, preserve the source data, note the affected form and step, and contact VisaFlo support with a sanitized description. Do not rely on an old generated copy merely because it worked for a previous case.
## Troubleshooting
If generation is unavailable, check the case type, required questionnaire fields, and any visible validation messages. If a PDF does not open, appears incomplete, or does not validate as expected, do not file it. Review the source data and destination requirements, then regenerate only after the cause is understood.
See [Auto-fill IMM forms](/knowledge-base/questionnaires/auto-fill-imm-forms) for the detailed preparation workflow and [Automation & Review](/knowledge-base/guide/automation-and-review) for the review boundary.
# Invoices, payments, tax settings, and trust accounting
Source: https://visaflo.ca/knowledge-base/faq/invoices-payments-tax-settings-exports-and-trust-accounting-limits
Understand the boundary between ordinary billing and VisaFlo's dedicated trust ledger, reconciliation, evidence, and reporting workspace.
## What VisaFlo billing is for
VisaFlo billing connects a client or lead, a service description, due dates, amounts, and payment-request activity to the operational record your team already uses. It is useful for creating a clear client request and seeing its status alongside the matter.
The billing pages alone are not a trust ledger and are not a replacement for tax filing or general accounting. When the dedicated **Trust Accounting** module is enabled and configured for the firm's jurisdiction, use that workspace—not an invoice or payment status—to record client trust money, reconcile the bank account, retain evidence, and produce audit records.
## Invoice lifecycle
1. Create an invoice for the correct client or lead.
2. Add reviewed line items, dates, tax treatment, and payment instructions.
3. Review the draft before creating or sending a payment request.
4. Send the payment request only once the amount and recipient are correct.
5. Monitor the invoice status and record any required follow-up in the case or client workflow.
6. Retain or export the records your accounting process requires.
See [Request payment](/knowledge-base/invoices/request-online-payment) for the staff workflow.
## Keep charges understandable
Use line-item names that a client and a later reviewer can understand. When your firm's workflow distinguishes professional fees, government fees, expenses, or milestones, keep those distinctions explicit instead of combining them into an unclear total. Confirm the due date, tax setting, and payment instructions before the invoice leaves the firm.
## Tax and accounting boundary
Tax treatment can vary by firm, service, and jurisdiction. Configure and review it according to your firm's approved process. The Billing workspace should not be the only place you rely on to decide tax obligations, reconcile funds, or maintain trust records.
For trust money, the dedicated Trust Accounting workspace is designed to serve as the firm's operational system of record for:
* immutable client and account-control ledger entries;
* client-level balance and overdraft controls;
* retained bank-statement and transaction evidence;
* bank-row matching and period-locked three-way reconciliation;
* independent sign-off, reconciliation reports, receipts, and compliance registers;
* QBO journal synchronization, health, retry, reversal, and audit details when connected; and
* annual report, register, and evidence-inventory exports.
That does not turn an invoice, payment link, or QBO copy into the authoritative trust ledger. VisaFlo's trust journal remains authoritative. The firm must still configure the correct jurisdiction and permissions, review exceptions, retain required source documents, operate its real bank account, complete regulator filings, and obtain its own accounting or regulatory advice where required.
## Trust-accounting operating sequence
1. Enable Trust Accounting in Settings, select the applicable jurisdiction, and restrict access to authorized staff.
2. Create each real trust bank account with its correct currency and institution identity.
3. Record every receipt and withdrawal through the dedicated Trust Accounting workflow. Do not edit balances directly.
4. Resolve receipt-delivery, evidence, shortage, unclaimed-money, held-property, and QBO health exceptions as they appear.
5. Import the retained source bank statement, match or explicitly resolve every row, and review the three independent reconciliation legs.
6. Have the designated reviewer sign off. Completion locks the period and preserves its report snapshot.
7. Export and retain the reconciliation report, annual report, register histories, and evidence inventory under the firm's retention policy.
The annual printable report is not a ZIP archive and does not embed source evidence bytes. Keep the evidence inventory with the retained original files.
## Payment requests and follow-up
If a payment action is available for an invoice, confirm that the invoice is complete before using it. Avoid creating duplicate requests while an earlier request is still open or being resolved. When a payment outcome affects the next case step, create or update the related task so staff can see the operational consequence.
## Troubleshooting
If an invoice is missing, a payment link fails, tax appears wrong, or a payment state is unexpected, keep the invoice number, client or lead, amount, date, and screenshot for support.
For a trust issue, preserve the transaction ID, account, client, date, visible health code, reconciliation period, and related evidence ID. Do not work around a fail-closed error by creating an offsetting entry unless the approved trust workflow calls for it; investigate the underlying record and use an immutable reversal or documented correction.
# Troubleshooting autofill failures, incomplete-question blockers, and extension case matching
Source: https://visaflo.ca/knowledge-base/faq/troubleshooting-autofill-failures-incomplete-question-blockers-and-extension-case-matching
Diagnose autofill by checking the source questionnaire, the case-to-portal match, extension support, and destination fields in that order.
## Stop before retrying
Do not repeatedly run autofill against a live portal application. First determine whether the issue is source data, case selection, extension support, or the destination portal. Repeating the action without that check can make it harder to see which values changed.
## 1. Check the source case
Confirm that you opened the correct VisaFlo case and that its client, case type, and family-member information match the intended portal application. Review required questionnaire sections and visible validation messages. A completion percentage alone does not prove that the data needed for portal entry exists.
## 2. Check the extension and portal state
Confirm that the installed extension supports the portal and application type you are using. Make sure the extension is enabled, the target portal is open to the correct application, and you are signed in with the authorized account. Do not switch to another client or portal record while the extension is working.
## 3. Check the destination fields
If the action runs but a field is blank or incorrect, compare it with the related questionnaire answer and source document. Correct the source record, then retry only the relevant workflow. Fields that depend on professional judgment, a portal-specific choice, or unsupported data may require manual completion.
## Common symptoms
| Symptom | Check first |
| - | - |
| Autofill action is unavailable | Case type, questionnaire requirements, and extension support. |
| A required field is blank | The related answer, validation, and whether the field is supported. |
| Data appears in the wrong portal record | Client, case, and portal application identifiers. |
| The portal layout does not react | Extension version, portal changes, and browser extensions that interfere. |
| The output looks stale | Whether the source questionnaire changed after the previous run. |
## Escalate with a safe reproduction record
When you contact support, provide the case type, VisaFlo case ID, portal step, action taken, visible error, browser version, and whether the issue reproduces on a synthetic or non-sensitive test case. Do not send portal passwords, access tokens, or full client documents.
See [Autofill with Extension](/knowledge-base/extension/autofill-with-extension) and [Automation & Review](/knowledge-base/guide/automation-and-review).
# Troubleshooting client questionnaire links, access errors, and login confusion
Source: https://visaflo.ca/knowledge-base/faq/troubleshooting-client-questionnaire-links-access-errors-and-login-confusion
Resolve a client questionnaire access problem by checking the recipient, invitation, case access state, and family-member assignment.
## Start with the recipient and invitation
Confirm that the invitation was sent to the email address on the intended client or family-member record. Ask the recipient to open the latest link from the invitation rather than a forwarded or old browser bookmark. If an email is missing, check spam or filtered mail before sending another invite.
## Check the case and form assignment
Open the case's **Forms** tab and confirm:
* The case is linked to the correct client.
* The correct questionnaire or form set is present.
* The case status allows the intended client access.
* The invitation is associated with the right form or whole-questionnaire workflow.
* A spouse or dependant form is assigned to the correct family-member email where applicable.
## Distinguish portal sign-in from questionnaire access
Portal magic-link sign-in and a questionnaire invitation are different client-facing routes. A client who can sign in to the portal may still need the correct questionnaire assignment; a questionnaire recipient may not need general portal access for the specific form workflow. Use the link generated for the work you want the client to complete.
## If the page opens but editing is blocked
Check whether the case was moved to a status that limits client edits, whether a review or lock state is active, and whether staff have requested a specific correction. Do not change the form structure just to restore access until you have identified the intended client workflow.
## Escalate safely
Provide the case ID, recipient email domain only if needed, form or family-member role, invitation time, and the exact error text. Do not share a live invitation URL or unrelated client information in an unapproved support channel.
See [Client questionnaires](/knowledge-base/faq/how-to-send-customize-lock-and-review-client-questionnaires) and [Client Portal](/knowledge-base/portal/client-portal).
# Troubleshooting CSV import errors, duplicate records, and failed migrations
Source: https://visaflo.ca/knowledge-base/faq/troubleshooting-csv-import-errors-duplicate-records-and-failed-migrations
Fix CSV import problems by validating source rows, required fields, duplicate handling, and partial-import state before retrying.
## Check whether the import partially succeeded
Before uploading again, search VisaFlo for a few rows from the attempted file. An import can create some records before an error is reported. Re-running the full file without checking can create duplicates or make the result harder to reconcile.
## Validate the source file
Review the file for one record per row, consistent headers, valid emails where required, and no merged cells or hidden characters. Normalize email addresses and remove duplicate rows in the source file before importing. Keep a copy of the original export and a dated copy of every cleanup version.
## Diagnose common errors
| Symptom | Check first |
| - | - |
| Invalid email | Spaces, invisible characters, multiple addresses in one cell, or missing values. |
| Duplicate client or lead | Existing record by email, previous partial import, or duplicate source row. |
| Columns mapped incorrectly | Header names, sample row values, and whether the target expects separate first/last name fields. |
| File is rejected | File type, encoding, required headers, and size. |
| Case migration is incomplete | Whether the source contains data that has no direct VisaFlo equivalent. |
## Retry with a small sample
Correct the source file, then import a small representative sample. Confirm that names, emails, assignees, and stages are correct before importing the remaining rows. Treat a full case migration as a separate mapping exercise; document files, task history, and custom fields may need a staged transfer rather than a spreadsheet upload.
## Escalate with a sanitized sample
Send support the import type, error text, source column headers, sample row number, and a sanitized sample file if secure transfer is not arranged. Do not attach an entire client export to a general support message.
See [CSV imports](/knowledge-base/faq/how-to-import-clients-leads-and-cases-from-csv-or-another-platform).
# Troubleshooting e-signature links and signed agreement files
Source: https://visaflo.ca/knowledge-base/faq/troubleshooting-e-signature-links-and-signed-agreement-files
Resolve signature-request problems by checking the agreement, signer setup, recipient delivery, and completed output in that order.
## Check the request before sending another link
Open the agreement from the row's menu on the case's **Service Agreements** tab and check the documents, the signers, and their email addresses. To change them after sending, see [E-Signature](/knowledge-base/cases/e-signature). Don't start a second request while the first is still out, because your client can still sign the old one.
## If a signer cannot open the link
Ask the signer to use the latest email and to check spam or filtered mail. Open the agreement from the row's menu and check the email address under their name, then select **Remind**. You can also copy their signing link with the copy button next to their name. Anyone with the link can sign as that person, so send it only to them.
## If the signed file is missing
Check the agreement's status on the case's **Service Agreements** tab first. When it shows **Completed**, select the download button on its row, or open the case's **Files** and look in the **Service Agreements** folder. If the agreement shows **Completed** but the file is missing, note the case ID, agreement name, signer, approximate completion time, and visible status for support.
## Multi-signer issues
Check the signing order and every signer on the **E-Sign** tab before sending. If a signer or a sign area must change and nobody has signed yet, reopen the agreement with **Reopen to edit** and send it again. If anyone has already signed, start a **New agreement** with the correction.
## Escalate safely
Include the case ID, document name, status, approximate time, and a screenshot. Don't send the agreement, the signing link, or client credentials in an unapproved support channel.
See [Agreements & e-signatures](/knowledge-base/faq/how-service-agreement-templates-and-e-signatures-work).
# Troubleshooting missing data, invisible changes, and recovery options
Source: https://visaflo.ca/knowledge-base/faq/troubleshooting-missing-data-invisible-changes-and-recovery-options
Find apparently missing case data by checking record context, client submission state, family-member assignment, concurrent edits, and available history.
## Confirm the record context first
Most apparent data loss is a context problem: the wrong workspace, client, case, form, or family-member section is open. Before changing anything, confirm the case ID, linked client, case type, and the specific form or section where the value should appear.
## Check whether the change was saved
For client-provided information, confirm whether the client saved or submitted the relevant section. For staff edits, check whether another browser tab or staff member changed the same record. Do not re-enter large amounts of information until you know whether the original value is elsewhere in the case.
## Common causes
* A client worked in a different questionnaire section or family-member profile.
* The case or form shown is not the one the client used.
* The case status or invitation state prevents the client from editing.
* A newer save from another tab overwrote an older view.
* A migration or import mapped the field differently than expected.
* The team is looking at a generated output instead of the source questionnaire.
## Avoid concurrent editing loss
Do not edit the same questionnaire or case section in multiple browser tabs. Close stale tabs before making a major change and refresh before saving after a long editing session. When two staff members need to work on the same matter, divide work by section and use tasks or internal notes to make ownership clear.
## Use available history carefully
If the relevant workflow exposes history or prior values, use it to identify what changed and when. Treat history as evidence to review, not an automatic recovery action. Confirm the correct record and the impact on generated documents before restoring or re-entering a value.
## Escalate safely
Provide the case ID, affected form or section, approximate last-known time, action preceding the issue, and a screenshot that does not expose unnecessary client data. Do not send full passports, forms, credentials, or entire client files in a general support message.
# Troubleshooting page errors, freezes, slow loading, and failed actions
Source: https://visaflo.ca/knowledge-base/faq/troubleshooting-page-errors-freezes-slow-loading-and-failed-actions
Diagnose a slow page or failed dashboard action without losing work, then provide support with a focused, reproducible report.
## Preserve work before troubleshooting
If you have unsaved text or form changes, copy the work to a safe local note before refreshing. A browser refresh can resolve a temporary loading issue but may discard changes that were not saved.
## Determine the scope
Check whether the problem affects one record, one feature, or the whole dashboard. Open a different non-sensitive record or another page in the same workspace. This helps distinguish a case-specific data issue from a browser, connection, or service problem.
## Safe first checks
1. Refresh the page after preserving unsaved work.
2. Confirm the connection is stable.
3. Retry in an up-to-date Chrome window or a private window if browser extensions may interfere.
4. Disable only extensions that could affect forms, downloads, or portal autofill; keep required VisaFlo extensions enabled when testing their workflow.
5. Check whether the action completed in the underlying record before clicking it again.
## File and download problems
If a file does not open or download, check that the file appears in the correct case folder and that the browser permits downloads or popups. For a large archive, wait for preparation to finish before requesting another download. Do not upload a duplicate file before confirming the original is not already present.
## Report a reproducible issue
Include the page URL or route, case ID when relevant, exact action, visible error, browser and operating-system version, approximate time, and whether it occurs in another private browser session. A short screen recording can help, but remove or obscure unnecessary client information before sharing it.
If the failure blocks an urgent filing, preserve the source data and use the firm's approved manual fallback while support investigates.
# Troubleshooting subscription access, plan gating, and billing-state issues
Source: https://visaflo.ca/knowledge-base/faq/troubleshooting-subscription-access-plan-gating-and-billing-state-issues
Resolve an unexpected feature lock or billing state by checking the workspace, active plan, recent billing changes, and account permissions.
## Confirm the workspace and active subscription
Open **Settings** > **Subscription** and verify that you are in the intended company workspace. Review the active plan and status shown there. A user can be signed into the correct VisaFlo account but still be looking at a different company or role context than the one that has the expected feature.
## Check recent changes
If a plan, payment method, or billing action was just updated, refresh the dashboard and return to Subscription settings before retrying. Confirm any billing-portal confirmation screen rather than assuming an action completed because the browser window closed.
## Separate product access from client invoicing
A workspace subscription controls VisaFlo access. A client invoice or payment request is a separate matter workflow. Creating, paying, or editing a client invoice does not change the company's product subscription state.
## When to contact support
Contact support with the workspace name, affected feature, visible plan status, approximate time of the change, and screenshot. Do not include card numbers or other payment credentials. For questions about tax, reconciliation, or trust accounting, use your firm's approved financial process.
See [Pricing & limits](/knowledge-base/faq/visaflo-pricing-case-limits-annual-plans-and-overage-rules) and [Manage Subscription](/knowledge-base/settings/manage-subscription).
# VisaFlo pricing, case limits, annual plans, and overage rules
Source: https://visaflo.ca/knowledge-base/faq/visaflo-pricing-case-limits-annual-plans-and-overage-rules
Find the subscription information that applies to your workspace and confirm any limit, renewal, or overage question before changing a plan.
## Check the subscription that applies to your workspace
Open **Settings** > **Subscription** to view the active plan and the billing actions available to your workspace. The dashboard is the source for the plan currently attached to your company; do not rely on a historic quote, another firm's plan, or a screenshot from a different workspace.
## Understand a limit before you plan around it
Some features or usage types can be plan-dependent. Before committing to a high-volume workflow, confirm:
* Which plan is active.
* Which feature or usage type is relevant to the workflow.
* Whether the limit applies by billing period, annual allocation, feature, or another contract term.
* What happens when the included amount is reached.
* Who in your firm is authorized to change the subscription.
The applicable answer can depend on your agreement and current plan configuration. Contact VisaFlo support for a written confirmation when a limit affects a client deadline, budget, or rollout decision.
## Upgrade, downgrade, or update billing details
Use the Subscription support section to request a plan or payment-method change. Keep the confirmation from VisaFlo, then return to Subscription settings and confirm the displayed status before assuming that access or entitlements have changed.
## When a feature appears locked
1. Confirm that you are in the correct workspace.
2. Review the active subscription and any visible plan status.
3. Refresh the dashboard after a recent billing change.
4. Check whether the feature requires additional setup, such as an enabled extension or connected provider.
5. Contact support with the workspace name, affected feature, and screenshot if access remains unexpected.
For client invoices and payment requests, see [Invoices & payments](/knowledge-base/faq/invoices-payments-tax-settings-exports-and-trust-accounting-limits). Subscription billing and client billing are separate workflows.
# What the AI Scanner can extract and how to use it safely
Source: https://visaflo.ca/knowledge-base/faq/what-the-ai-scanner-can-extract-and-how-to-use-it-safely
Scan a client's documents into the questionnaire with AI Scanner, then check every value against the source before you import it.
## What AI Scanner is for
AI Scanner reads a client's documents and suggests answers for their questionnaire. It saves you retyping names, dates, and numbers. It does not tell you that a value is correct, current, complete, or right for the application. You review every value before it is saved.
Use it only after you know which document you are scanning and which person's questionnaire should receive the information.
## Start with suitable source material
The scanner works best on clear, complete, structured documents, such as passports, earlier IMM forms, resumes, certificates, and legible PDFs. Poor scans, unusual layouts, long statements, handwriting, and documents in a language your team cannot read all need more manual review.
## Before you start
* AI Scanner is not included on every plan. If it is greyed out, hover over it to see why.
* A few case types don't support AI Scanner yet. Hovering the option tells you when yours is one of them.
* Each person can have up to 10 files per scan: PDF, Word, Excel, or image files (JPG, PNG, GIF, WEBP).
## Scan a document
1. Open the case and select **Forms**. To scan for several people at once, stay on the case's **Forms** page. To scan for one person, open their questionnaire.
2. Open AI Scanner in one of two ways:
* On the **AI Scanner** banner at the top of the questionnaire, select **Scan Now**.
* In the left panel, select **Import** (the download icon), then **AI Scanner**. Use this when the banner is hidden, for example in **Review Mode**.
3. Find the card for the right person. On the **Forms** page, each person on the case has their own card, with their name and role, such as **Principal Applicant**. Inside one person's questionnaire, you see only their card, marked **Currently open**.
4. Drag the files onto that person's card, or select **Drag and drop, or click to upload** to choose them. The card counts them, for example **1/10 selected**. Select **X** on a file to remove it.
5. Select **Scan Data**. If you added files for more than one person, the button reads **Scan 2 forms** (or the number of people) and scans them together.
The scanner shows its progress while it reads. A large or multi-page file can take up to a minute. You can't close the scanner while it scans.
## Review the results
Nothing goes into the questionnaire until you import it. The files you scanned are already saved to the case, in **Files** under **Uploads** for that person, in an **AI Scanner** folder, whether or not you import. The review opens one person at a time. The header shows the name and role of the person you are reviewing, and a counter such as **1 / 2**.
1. **Check the person.** Make sure the name in the header matches the person in the document. If you scanned a document into the wrong person's card, select **Skip this form**. Then open the scanner again and add the file to the right card. In the case's **Files**, delete or move the file from the wrong person's **AI Scanner** folder.
2. **Read the summary.** **Scan Complete** lists the sections found in the document (**Detected in document**) and the ones it did not cover (**Not found in this document**). The badge shows how many of the scanned fields are included, for example **10 / 10 fields**.
3. **Compare each value with the document.** Check names, dates, document numbers, and addresses letter by letter. To fix a value, click it and type.
4. **Decide on conflicts.** When a scanned value would replace an answer already in the questionnaire, an amber note lists those fields. Select a field name to jump to it. Under the field you see **Current value** with the existing answer. Then choose:
* Select **Keep current value** to keep the existing answer. The field is marked **Excluded** and is not imported.
* Leave the field as it is to replace the existing answer with the scanned value.
5. **Leave out what you don't want.** Hover over a field and select **X** to exclude it. Select **Exclude section** to leave out a whole section. Select **Restore** or **Include section** to bring it back.
6. **Check repeating sections.** For sections like travel history, the scanner shows the entries already in the form. Untick any entry you don't want to keep. The note tells you how many entries will be added or removed.
7. Select **Import N fields to form**, where N is the number of fields you are importing. To leave this person's questionnaire unchanged, select **Skip this form**.
If more than one person was scanned, the next person's review opens. After the last one, the scanner closes.
## After you import
* A message confirms the import, for example **9 fields were imported to the form.** For the questionnaire you have open, the message also has **Undo import**. Select it within 10 seconds to put the previous answers back. Imports into other people's questionnaires on the case can't be undone.
* The questionnaire scrolls to the first section that changed and highlights it for a moment.
* Fill in anything the scan did not read. The scan only fills what it could read clearly, so a date hidden by glare or a field the document doesn't have stays as it was. Type it in from the original document.
* Review the questionnaire again before you generate documents or run autofill.
This follows the same order as [Automation & Review](/knowledge-base/guide/automation-and-review): collect, review, correct, automate, then verify.
## Control client access in questionnaires
Clients see AI Scanner in their own questionnaires unless an admin turns it off. To change it, open **Settings** > **Preferences** and find **AI Scanner** under **Miscellaneous**. Turn it off if client self-scanning doesn't fit your firm's review process.
Turning it off removes the scanner from client questionnaires. It does not replace your review of data already extracted. While it is on, tell clients which documents are right to scan, and remember that their scans still need staff review.
## When not to use it
Don't use a scan as a shortcut around unclear or contradictory facts. Resolve the client's information first. Don't scan documents into the wrong family member's card. Don't upload case documents to any system your firm's data-handling process does not allow.
## Troubleshooting
* **A card says the form type isn't supported yet.** The scanner can't read into that person's form. Fill it in by hand.
* **A scan failed.** The scanner goes back to the upload screen and shows the error on that person's card. Scan that person again, or try a clearer file.
* **No extracted fields could be matched to this form.** The document doesn't match this questionnaire's sections. Try a clearer document, or one that covers the sections you need.
* **Some fields were not imported because their section is hidden.** The section depends on an answer elsewhere in the questionnaire. Answer that question, then scan again or type the values in.
* **Could not be scanned (try again).** A section could not be read this time. Scan again to retry it.
# Which immigration programs and IRCC portals does VisaFlo support?
Source: https://visaflo.ca/knowledge-base/faq/which-immigration-programs-and-ircc-portals-does-visaflo-support
Confirm support from the case type and Extensions settings for the exact program and portal you plan to use, rather than relying on a static coverage list.
## Support is workflow-specific
VisaFlo support depends on the selected case type, available questionnaire, form-generation workflow, and any portal extension shown for that workflow. A product or portal name alone is not enough to establish that a particular application path is supported.
## Confirm before opening the case
1. Open **Cases** and begin creating the case.
2. Check whether the exact application or the appropriate case type is available.
3. Review the forms and questionnaire that the case type provides.
4. Confirm that the [VisaFlo Autofill Extension Chrome Web Store listing](https://chromewebstore.google.com/detail/visaflo-autofill-extensio/kndagmebkjldnepmbmmkdnopohefghjh) covers the target workflow.
5. Confirm any unusual, provincial, urgent, or changing workflow with support before promising an automated path to a client.
## Distinguish the support levels
* **Case workflow support** means the case type and collection workflow are available.
* **IMM PDF support** means a supported form can be prepared from reviewed data.
* **Portal autofill support** means the matching portal workflow and extension are available for that case type.
One level does not imply another. For example, a case can have a useful questionnaire and file workflow even when a particular external portal is not available for autofill.
## If the exact program is not listed
Do not choose an unrelated case type only because its name looks similar. Create the client or lead, preserve the intake information, and ask support to confirm the appropriate workflow before collecting a full case questionnaire or opening a portal application.
See [Create a case](/knowledge-base/cases/creating-a-case), [Extension Overview](/knowledge-base/extension/must-read-getting-started), and [IMM PDFs](/knowledge-base/faq/how-visaflo-generates-imm-pdfs-and-handles-ircc-form-updates).
# Which integrations VisaFlo supports and what can be automated with APIs
Source: https://visaflo.ca/knowledge-base/faq/which-integrations-visaflo-supports-and-what-can-be-automated-with-apis
Plan integrations around a clear system of record, a narrow data flow, and explicit authorization for every connected app or API workflow.
## Start with the workflow, not the integration name
An integration is valuable when it removes a repeated handoff without creating two competing versions of the same record. Before connecting a tool, define the event, data, owner, and expected outcome.
For example: “A website enquiry creates a lead with source and contact details, then the intake owner receives a follow-up task.” This is clearer and safer than “connect the website to VisaFlo.”
## Choose the system of record
For each workflow, decide which system owns the durable record:
* VisaFlo should own client, lead, case, questionnaire, task, and case-document context when the work is being delivered in VisaFlo.
* An external storage, accounting, calendar, or communication system may own its specialized record.
* An integration should copy or reference the minimum data needed to coordinate the two systems, not mirror every field indefinitely.
## Common connection patterns
| Goal | Typical flow | Decision to make first |
| - | - | - |
| Capture website enquiries | Form or chatbot to VisaFlo lead | Who owns follow-up and what counts as a qualified lead? |
| Coordinate documents | VisaFlo case files with supported storage workflow | Which system stores the authoritative file and which identifiers remain linked? |
| Connect calendar or communications | VisaFlo record linked to an external event or message | Which updates should create a task or notification? |
| Extend reporting or automation | VisaFlo API or connected app to external workflow | Is the flow one-way, two-way, or approval-gated? |
| Use an AI assistant | Connected app or MCP connection reads authorized VisaFlo context | Which teams, records, and actions should the assistant be allowed to access? |
## Connect AI assistants deliberately
Open **Settings** > **Connected apps** to review compatible assistant connections and start authorization.
Connect only assistants and accounts your firm trusts with the records they will be allowed to query. Review the requested access before authorizing, disconnect an app that no longer has a business purpose, and do not put credentials or unreviewed sensitive case data into an external prompt merely because a connection exists.
For step-by-step setup with Claude or ChatGPT, what the assistant can read, and how to disconnect, see [Connect an AI assistant](/knowledge-base/guide/connect-an-ai-assistant).
## Build an integration in stages
1. Start with one trigger and one outcome.
2. Map the smallest useful field set.
3. Test with a synthetic or non-production record.
4. Decide how errors are surfaced and who corrects them.
5. Add a review step before the integration creates sensitive or high-consequence records.
6. Measure whether the automation actually removes a manual handoff.
## Information to bring to support
When you need help planning an integration, provide the external tool, trigger, desired VisaFlo record, field mapping, expected frequency, and whether the flow can create or change data. This lets the team distinguish a simple setup from a custom integration or API requirement.
# Case Document Checklist
Source: https://visaflo.ca/knowledge-base/files/case-document-checklist
Track every document a case needs, adjust the request for one client, and accept or return uploads without leaving the case.
## What the case checklist is for
When a case type has a document checklist, every case of that type opens with one built from your firm's [checklist template](/knowledge-base/settings/document-checklist-templates). The checklist is where you see, in one place, what the client still owes you and what you have already approved.
Open the case, select the **Files** tab, then **Checklist**. **All files** switches to the File Manager, where the uploaded files themselves are kept. If the case type has no checklist, the **Files** tab shows only the File Manager.
The header shows overall progress as **N of M accepted**. When the case has more than one person, choose whose documents to see from the list at the top: each person has their own checklist, because a document requested from the principal applicant is not automatically requested from a spouse or dependant.
## Read the counts
Four counts sort the documents. Select one to list its documents.
| Count | Meaning |
| - | - |
| **To review** | The client uploaded a file and it is waiting for your review |
| **Needs work** | You asked the client for a correction, or wrote a comment that is not sent yet (**Comment not sent**) |
| **Missing** | Requested, nothing uploaded yet |
| **Accepted** | You approved the upload |
## Adjust the request for one client
Select **Edit** at the top of the checklist to switch documents on or off for this case. The change applies to this case only and reaches the client's questionnaire and portal immediately, so make the change before you send a reminder rather than after.
Use this when a single client needs something the template does not cover, or when a requested document genuinely does not apply. For a change that should apply to every future case, edit the [checklist template](/knowledge-base/settings/document-checklist-templates) instead.
## Review an upload
Select a document to open it: the uploaded file, a preview, and what the **AI check** found.
1. Check the file and the **AI check** results.
2. Choose **Accept** to approve the upload. This takes effect right away: the client sees the document as accepted and can no longer delete it. Select **Undo** on the confirmation while it is showing if you change your mind.
3. Or choose **Request changes**. The box under **What should the client fix?** starts with the problems the AI check found; edit it into what the client must fix, then select **Add comment**. The comment is saved as a draft and the document shows **Comment not sent**. Nothing reaches the client yet.
4. When you have finished reviewing, select **Send review to client**. The button appears once there is a comment not sent. Check the recipient and select **Send review**. Every new comment goes out in one email.
The review covers the whole case, not only the person you have selected: it lists every comment and every missing document for each person, with links to their pages. The client's email is filled in. Send it only to people who may see the whole case.
The client sees your comment on that upload field on their Documents page, marked **Needs changes**. If your firm has **Notes in Questionnaires** turned on, they can reply there. Be specific: name the problem and the fix, not just the document.
Documents your firm added don't have **Accept** or **Request changes** and don't count toward **N of M accepted**. Until the client uploads, they count under **Missing**, marked **Added for this case**. Once uploaded, they move to the **Added for this case** link below the list, where you check the files yourself.
## Confirm the request before you invite
The invitation is your last check before the client sees the list. In the **Forms** tab, select **Start intake**, choose **Questionnaire & documents** or **Documents only**, then select **Edit** next to **Document checklist** to review the exact documents each member will be asked for. Uncheck anything this client should not receive. These changes save right away, even if you close the invite without sending.
Continue with [Send Invitation](/knowledge-base/questionnaires/send-invitation).
## Next steps
* Use [Comments](/knowledge-base/questionnaires/comments) when the issue is with an answer rather than a file.
* Use [Upload Files](/knowledge-base/files/upload-files) for staff-managed evidence that the client does not need to see.
* Turn on [Client Portal](/knowledge-base/portal/client-portal) visibility when the client should track progress themselves.
## Troubleshooting
**A template change is missing from this case.** Document selection in a checklist template applies to new cases only; **Required**, **Files**, instructions, and AI checks for standard documents reach open cases right away. Adjust the document on this case with **Edit**. When your firm has a checklist or one of your own case types for this case type, **Sync with template** appears in the same place. A case made from one of your case types syncs with it; hover over the button to see which template it uses. If VisaFlo doesn't know which of your case types the case was made from (a case made before this was tracked), Sync asks you to choose: **Your firm's checklist** or one of your case types. Your choice is kept for the case, so it isn't asked again; **Undo** on the confirmation puts back both the documents and the choice. Sync replaces this case's document choices for every person with that template: anything switched on or off by hand is reset, and documents added for this case are removed. Select **Undo** on the confirmation if that was not what you wanted.
**A country-specific document is not requested.** These are requested only when the case applies from the matching country. To request one anyway, select **Edit** and switch it on under **Country-specific requirements**.
**The client cannot find where to upload.** Confirm the document is switched on for the correct member. Each member has a separate checklist section, and a document requested from the principal applicant is not automatically requested from a spouse or dependant.
**An upload is not showing under To review.** Refresh the case. If the client saw a file-quality warning during upload, they may have removed the file instead of continuing.
# Compress a File
Source: https://visaflo.ca/knowledge-base/files/compress-file
Reduce the size of an image or PDF from the case file manager before sharing or submitting it.
## Choose the file
Open the case, select **Files** (and **All files**, if the case shows a **Checklist** / **All files** switch), and locate the image or PDF that needs to be smaller. Confirm that you have the correct version before starting. Compression shows you the result first; the stored file is replaced only when you choose **Use Compressed**, and the original is not kept.
## Compress it
Double-click the file, or open its **...** menu and choose **View**, to open the preview. Under **Compression**, set **Target Size (MB)**, then choose **Compress File**.
Do not compress fillable IRCC forms or signed agreements. Compression rewrites the PDF, which removes form data and invalidates digital signatures.
## Check the result, then choose
Check the **Compressed** tab before you choose, and switch to **Original** to compare. Confirm that every page is present, photos are the right way up, and text, stamps, and signatures are still readable. Then choose **Use Compressed** to replace the stored file with the smaller version, or **Keep Original** to leave it as it was.
**Use Compressed** permanently replaces the original. If you may need the full-quality version later, download the original first. Use the compressed result when a portal or email attachment has a smaller file-size limit. If it remains too large, use a lower target only after checking whether the receiving system has a documented size limit.
## Troubleshooting
Compression works on images and PDFs; for other file types the panel shows "Compression not available for this file type". If you see "File is already smaller than target size", lower **Target Size (MB)** and try again. "Could not reduce file size further" means the file can't get any smaller this way. In both cases nothing was changed.
The compressed result is kept for about 5 minutes. If **Use Compressed** shows "Failed to finalize compression choice", the stored file may already have been replaced even though the error appeared, and its listed size may not show it. Open the file and look at it before you do anything else, and don't compress it again if it already looks compressed.
# Download Files
Source: https://visaflo.ca/knowledge-base/files/download-files
Download one file, selected files, or the current case folder from the case file manager.
## Download a single file
Open the case and select **Files**. Use the file's action menu and choose **Download**. Your browser saves the file using its configured download location.
## Download several files
Select the files or folders you need, then use **Download** from the bulk actions. Use **Download All** only when you need the complete current folder or case file set. A multi-file download is prepared as an archive and can take longer for large folders.
## Before sharing a download
Check that the selection contains only documents the recipient is allowed to receive. For external access, use a restricted shared link instead of downloading a broad case folder and sending it by email.
## Troubleshooting
If no download starts, allow downloads in your browser and try again after any file upload or processing has finished. For a large archive, wait for the preparation step to complete before starting another request.
# Merge Files
Source: https://visaflo.ca/knowledge-base/files/merge-files
Combine selected PDF and image files into a single case document.
## Select the files
Open the case and select **Files** (and **All files**, if the case shows a **Checklist** / **All files** switch). Select two or more PDF, JPEG, or PNG files, not folders, then choose **Merge** from the bulk actions. Review the selection carefully: the merged document follows the order shown in the merge dialog.
## Name and create the merged document
Set a clear file name. Drag the selected files into the right order before choosing **Merge Files**.
Fillable IRCC forms (XFA PDFs) can't be merged: the dialog lists them and **Merge Files** stays off. Choose **Cancel**, untick those files, and select **Merge** again. Merging also rewrites the pages, so digital signatures in the source PDFs don't carry over; keep signed agreements as separate files. VisaFlo creates the merged document in the case files; the source files remain available unless you remove them separately.
## Review before use
Open the merged PDF and check page order, readability, and all expected pages. Photos taken on a phone can come out sideways, so check that every page is the right way up. This is especially important for forms, attachments, and documents with signatures.
## Troubleshooting
Merge works with PDF, JPEG, and PNG files. **Merge** appears once two or more files, and no folders, are selected. If a file can't be merged, an error names it and the dialog stays open: choose **Cancel**, untick that file, and select **Merge** again. Wait for any file that is still uploading. Do not use a merged copy in a submission until it has been reviewed.
# Rename a File
Source: https://visaflo.ca/knowledge-base/files/rename-file
Use consistent file names so case evidence, generated outputs, and signed documents remain easy to find and review.
## Rename from the case file manager
Open the case and select **Files**. Open the action menu for the file or folder you want to change, choose **Rename**, enter the new name, and save. Rename only after confirming that you selected the right version of the document.
## Use names that explain the document
Use a convention your whole team can read without opening each file. A useful name usually includes the document purpose, the relevant person or period when needed, and a version or date for working copies.
For example:
* `Passport - principal applicant - 2026-07`
* `Employment letter - current employer - received`
* `Service agreement - signed`
* `Letter of explanation - draft 2`
Avoid names such as `scan`, `final`, or `new` when there may be more than one version. A signed output should remain identifiable as signed even if a later draft is created.
## Before sharing or submitting
Open the renamed file to confirm the name matches its content. Renaming helps staff find the right document, but it does not change the document itself or make a draft ready to share, sign, or submit.
See [Files & storage](/knowledge-base/faq/how-file-upload-folders-merging-compression-and-storage-work) for folder and version practices.
# Upload Files
Source: https://visaflo.ca/knowledge-base/files/upload-files
Upload and organize case documents without mixing staff file management with client questionnaire upload requests.
## Upload files inside a case
Open the case and select **Files**. Create folders for a document group before uploading, then use **Upload File** to add supporting documents to the selected location.
## Keep files organized
* Use folders for a clear document group, such as identity, financial evidence, or correspondence.
* Give files names that make their purpose and version clear before sharing or generating documents.
* Select only the files or folders you need before using **Download All**.
* Use **Shared links** only for the specific documents a recipient should access.
## Copy a case file set to a connected drive
When Google Drive, OneDrive, or Dropbox is connected for the workspace, open the File Manager's import menu and choose **Copy all to** the connected provider. VisaFlo copies the current case's files in the background and shows progress while the job runs.
Wait for the completion message before treating the drive as a complete copy. A job can finish with some failed files; review the result and retry only the missing material. This action copies files out of VisaFlo and does not remove the original case files.
## Use files with questionnaires and AI Scanner
Questionnaire upload requests are separate from staff file organization. If a client cannot see an expected upload request, review the questionnaire configuration and their assigned forms. Use AI Scanner only with clear, relevant documents, then review the extracted questionnaire data before relying on it.
## Troubleshooting
If an upload appears to be missing, refresh the case, confirm the active folder, and check whether another staff member moved the file. Do not create duplicate uploads before checking the existing file list.
# Lead Chatbot
Source: https://visaflo.ca/knowledge-base/growth/lead-chatbot
Set up the VisaFlo lead chatbot, add firm knowledge, collect visitor questions, and notify your team when a new lead is captured.
## Overview
The Lead Chatbot is an embeddable AI assistant for your firm's website. It can answer common visitor questions from your configured firm profile, FAQs, and uploaded knowledge sources, then capture lead details and notify selected team members.
Use this guide when you want to configure the chatbot, test the visitor experience, and install it on your website.
## Before you start
* You need access to **Settings**.
* Prepare your firm's website URL, public contact details, booking link, service areas, hours, fees, and common visitor FAQs.
* Decide which team members should receive new lead notifications.
* If you plan to install the widget yourself, make sure you can edit your website's HTML or tag manager.
## Configure the chatbot
1. Go to **Settings** > **Lead Chatbot**.
2. Open the **General** tab.
3. Set the persona name visitors will see.
4. Upload an avatar if you want the widget to use a branded assistant image.
5. Choose the theme color.
6. Write the welcome message and suggested prompts.
7. Add your booking link, contact email, contact phone, and practice areas.
8. Select the team members who should be notified when the chatbot captures a lead.
9. Save the configuration.
## Add firm knowledge
Open the **Knowledge** tab and fill the structured profile:
* **Services**: the immigration services your firm offers.
* **Hours**: normal availability or response expectations.
* **Fees**: consultation or pricing guidance that can be shared publicly.
* **About**: a short description of the firm and who you help.
Then add FAQs for common questions such as eligibility, timelines, consultation booking, document preparation, and what happens after a visitor submits their details.
You can also add knowledge sources:
1. Add a website URL to ingest public website content.
2. Upload a document if your firm has an onboarding sheet, service guide, or FAQ document.
3. Wait for the source to finish processing.
4. Disable, delete, or re-scrape sources when the information changes.
## Preview and test
Use the live preview in the settings page to check the welcome message, suggested prompts, colors, and avatar. Then open **Chatbot Preview** to test the full widget experience before installing it on your website.
Test at least these paths:
* Ask about services your firm offers.
* Ask a question that should be answered from an FAQ.
* Ask about pricing or fees.
* Submit lead contact information.
* Confirm the right team members receive the notification.
## Install on your website
Open the **Install** tab and copy the embed snippet. Add it to your website where global scripts are loaded, such as the main layout, theme settings, or tag manager.
After installing:
1. Visit the public website in an incognito window.
2. Confirm the widget appears.
3. Send a test conversation.
4. Check that the conversation appears in VisaFlo analytics.
5. Check that lead notification emails are sent to the selected recipients.
## Review analytics and conversations
Open the **Analytics** tab to review chatbot performance and recent conversations. Use this view to confirm whether visitors are asking questions the knowledge base does not yet answer.
If the chatbot repeatedly gives incomplete answers, update the structured profile, FAQs, or knowledge sources, then test again.
## Troubleshooting
If the widget does not appear, confirm the embed snippet was copied from the current **Install** tab and placed on the public website, not only a staging page.
If answers are too generic, add specific services, fees, hours, and FAQs in the **Knowledge** tab. Uploaded files and scraped URLs must finish processing before they can improve answers.
If new lead notifications are not arriving, confirm notification recipients are selected and that the recipient email addresses belong to active team members.
If the widget uses old website content, remove or re-scrape the affected URL source.
# AI Assistant Daily Workflows
Source: https://visaflo.ca/knowledge-base/guide/ai-assistant-daily-workflows
Short, copy-ready prompts for daily case work with a connected AI assistant — check questionnaire status, find outstanding documents, watch for uploads, and draft follow-ups.
Once you have [connected an AI assistant](/knowledge-base/guide/connect-an-ai-assistant), these prompts cover the everyday questions. Each one is a single line — copy it, swap in a real client name, and send.
Everything is **read-only**: the assistant answers questions and drafts text, but never changes a case, sends anything, or uploads a file.
## Check where a case stands
**Brief me before a call**
```text wrap theme={null}
Brief me on Maria Silva's case — where does it stand and what's my next move?
```
Returns the case status, each questionnaire's state, outstanding documents, and upcoming tasks in one summary.
**Did the client submit, or only edit?**
```text wrap theme={null}
For Maria Silva's case, did the client submit each questionnaire or only edit it, and has it been reviewed?
```
Tells you, per questionnaire, whether it was submitted, edited after submitting, reviewed, or autofilled — so you know what still needs your attention.
**What documents are still missing?**
```text wrap theme={null}
Which documents are still outstanding on Maria Silva's case?
```
Lists what the client still owes, split into satisfied and outstanding items.
The document checklist only appears once your case types have upload requirements set. On a case with no checklist configured, it returns zero items even if files exist.
## Watch for new activity
**What came in today?**
```text wrap theme={null}
What did clients upload across my cases since yesterday? Group by case.
```
Lists recent uploads newest-first, with the case and file type. Re-run it tomorrow with "since today" and you only see what's new.
**Check a specific file**
```text wrap theme={null}
Open the passport Maria Silva just uploaded and tell me if it's legible and still valid.
```
The assistant opens the file with a secure, short-lived link and reports back. A quick sanity check before your own review.
## Draft and track
**Draft the follow-up email**
```text wrap theme={null}
Draft an email to Maria Silva asking for her outstanding documents, in plain language. Save it as a draft — don't send it.
```
Pulls the missing items and any reviewer notes, then writes a draft for you to review and send.
**Update your tracker**
```text wrap theme={null}
For each of my active cases, list the client, stage, forms reviewed, outstanding documents, and who we're waiting on. Update my tracker.
```
Reads each case and writes the rows into your own Notion or spreadsheet tracker. VisaFlo stays read-only.
## What's not covered yet
* No live alert when a document is uploaded — use the "what came in today?" prompt to check. Live triggers are on the roadmap.
* No automatic duplicate, expiry, or translation checks. The assistant can read a file you point it to, but there is no built-in document-intelligence engine yet.
* No changes to VisaFlo. Sending mail, editing a case, or marking a form reviewed stays with you in the dashboard.
## Related
* [Connect an AI assistant](/knowledge-base/guide/connect-an-ai-assistant) — one-time setup with screenshots
* [How the connection works and how to revoke access](/knowledge-base/faq/how-the-ai-assistant-mcp-connection-works-what-it-can-read-and-how-to-revoke-access)
# Automation & Review
Source: https://visaflo.ca/knowledge-base/guide/automation-and-review
Use VisaFlo automation to reduce repetitive preparation work while keeping accountable professional review in the workflow.
## The automation model
VisaFlo automation is most reliable when it works from reviewed, case-specific information. It can accelerate collection, extraction, drafting, and entry, but it should not make the final professional decision or remove the review checkpoint.
The operating rule is simple:
1. **Collect** information from the client and source documents.
2. **Review** the information for completeness, accuracy, and relevance to the case.
3. **Correct** the case record when something is missing or inconsistent.
4. **Automate** the next repetitive preparation step.
5. **Verify** the generated output or portal entry before it is sent or submitted.
## Use the right automation for the job
| Need | VisaFlo capability | Required review |
| - | - | - |
| Gather facts from a client | [Questionnaires](/knowledge-base/questionnaires/send-invitation) | Confirm answers and request clarification where needed. |
| Pull candidate facts from a document | [AI Scanner](/knowledge-base/faq/what-the-ai-scanner-can-extract-and-how-to-use-it-safely) | Compare extracted values with the source document before saving or using them. |
| Prepare a letter or agreement | [AI Drafts](/knowledge-base/drafting/ai-drafts) and [Templates](/knowledge-base/settings/letters-and-agreements) | Check facts, legal or professional judgment, dates, names, fees, and final formatting. |
| Fill supported government forms or portals | [Autofill](/knowledge-base/questionnaires/auto-fill-imm-forms) and the [Extension](/knowledge-base/extension/installation) | Review every destination field after VisaFlo enters it and before submission. |
## Build a trustworthy input layer
Automation quality is constrained by the case data it receives. Before using an automated step:
* Use a questionnaire for facts that must be structured and reusable.
* Keep source evidence in the case files with clear names and versions.
* Resolve conflicting client information in the case record rather than choosing one silently.
* Limit the files and fields you provide to the material relevant to the task.
* Make the reviewer explicit when a task has a deadline or high consequence.
## Separate preparation from approval
AI Scanner and AI Drafts are preparation tools. A completed draft, extraction, or autofill run is not automatically an approved document or a submitted application. Make approval visible in your workflow:
* Use a task for the staff member who must review the output.
* Save the reviewed output to the case files.
* Request a signature only after the agreement is correct.
* Mark a submission step complete only after the authorized person has checked the destination system.
## When not to automate
Do not use automation as a shortcut when the source facts are ambiguous, incomplete, or contradictory. Resolve the underlying information first. If a client-provided value changes after a draft or autofill run, update the case record and repeat the relevant review instead of editing only the final output.
## Build confidence gradually
Start with a narrow use case, such as extracting one document type or drafting one recurring letter. Compare the output to a manual workflow, record where review catches issues, then expand only after the team has a consistent checklist. This makes automation a durable part of the firm's operating process rather than a one-off experiment.
# Connect an AI Assistant
Source: https://visaflo.ca/knowledge-base/guide/connect-an-ai-assistant
Connect Claude, ChatGPT, or another MCP-compatible AI assistant so it can answer questions about your VisaFlo cases, clients, leads, tasks, files, and more in natural language.
## Overview
VisaFlo publishes a Model Context Protocol (MCP) server so an AI assistant can read your workspace and answer questions in plain language, such as "which cases are due this week?" or "summarize the form answers for this client's case."
The connection is **read-only**. The assistant can look up and summarize your data, but it cannot create, edit, or delete cases, clients, files, or any other record. Every request is scoped to your own workspace, so an assistant connected to your firm can never see another firm's data.
Any MCP-compatible assistant works. This guide walks through **Claude** and **ChatGPT** with screenshots; the same server URL works with other MCP clients. The screens below are from the desktop apps — the web versions follow the same steps.
## Before you start
* You connect with your **own VisaFlo login** — the assistant acts as you and sees only what your account is allowed to see.
* An administrator can disable the AI assistant connection for the whole firm. If your firm has turned it off, the connection will not return data. See [Manage and disconnect](#manage-and-disconnect).
* The server URL is the same for every firm:
```text theme={null}
https://mcp.vflo.app
```
You do not create an API key for this. Authorization happens through a sign-in and consent screen when you connect.
## Connect Claude
1. Open **Settings**, then select **Connectors** in the left sidebar.
2. Open the **Add** menu in the top right, then choose **Add custom connector**.
3. In the dialog, enter a **name** (for example, `VisaFlo`) and paste the URL `https://mcp.vflo.app`, then select **Add**. You can leave the Advanced settings (OAuth fields) blank.
4. Select **Connect**. Claude opens a VisaFlo sign-in page — log in with the same email and password you use in the dashboard, review the access on the consent screen, and select **Allow**.
5. Ask a question about your cases, clients, leads, tasks, or files. See [Try it](#try-it).
## Connect ChatGPT
1. Open **Settings**, then select **Plugins** under Integrations in the left sidebar.
2. On the Plugins screen, select the **MCPs** tab.
3. Select **+ Add server** in the top right of the Servers list.
4. Fill in the connection form: set a **Name** (for example, `VisaFlo`), set **Type** to **Streamable HTTP**, paste the URL `https://mcp.vflo.app`, and select **Save**. Leave the bearer-token and header fields blank.
5. ChatGPT opens a VisaFlo sign-in page. Use the same email and password you use in the dashboard, review the requested access on the consent screen, and select **Allow**.
6. Ask ChatGPT a question about your VisaFlo data. See [Try it](#try-it).
The exact labels and layout in Claude and ChatGPT change over time. If a screen looks different from these captures, look for the same idea — a **Connectors**, **MCP**, or **custom server** option — and enter the URL `https://mcp.vflo.app`.
You can also start the same flow from the dashboard at **Settings → Connected apps → Set up a connection**, which shows the copyable URL and step-by-step tabs.
## What the assistant can access
Once connected, the assistant can **read** the following, always scoped to your workspace:
| Area | What the assistant can read |
| - | - |
| Cases | List, search, and open cases; case statistics. |
| Clients | List, search, and open client records. |
| Leads | List and open leads; lead statistics. |
| Tasks and reminders | List tasks and reminders. |
| Case files | List and search files, get a download link for a file, and list recent uploads across all your cases. |
| Form answers | Read and search a case's questionnaire and form answers. |
| Questionnaire status | See, per questionnaire, whether the client submitted it or only edited it, whether it was reviewed and by whom, and whether it was autofilled. |
| Document checklist | See which requested documents are satisfied and which are still outstanding on a case. |
| Briefs | Read a generated case brief or client brief (case detail, form answers, tasks, reminders, files, questionnaire status, and outstanding documents in one call). |
| Emails and comments | List and read emails, formal review comments, and the inline field notes reviewers and clients leave on a questionnaire. |
| Invoices | List and open invoices; invoice statistics. |
The assistant **cannot** create, change, or delete any of these records, and it cannot move a case, send an invitation, or upload a file. Treat it as a read-only analyst over your existing data.
## Try it
Once connected, try one of these prompts in your assistant:
* What cases are due this week?
* Show me leads assigned to me with status qualified.
* Summarize the form answers for \[client name]'s case.
* List files on case \[id] and give me a download link for the most recent one.
* For \[client name]'s case, did the client submit each questionnaire or only edit it, and has it been reviewed?
* Which documents are still outstanding on \[client name]'s case?
* What did clients upload across my cases since yesterday?
For a full set of copy-ready prompts organized by daily task — with real example answers — see [AI assistant daily workflows](/knowledge-base/guide/ai-assistant-daily-workflows).
## Manage and disconnect
* **Disconnect one assistant:** open **Settings → Connected apps** in the dashboard and revoke the connection you no longer want. The assistant immediately loses access.
* **Disable for the whole firm:** an administrator can turn the AI assistant connection off for every member of the firm. When it is disabled, new connections cannot be authorized and existing ones stop returning data.
Connect only assistants your firm trusts with the records they will read, and disconnect any connection that no longer has a business purpose. Do not paste unreviewed sensitive case data into an external prompt merely because a connection exists.
## Troubleshooting
* **The assistant keeps sending you to a login page.** Sign in with your VisaFlo dashboard credentials and complete the consent screen. The connection is not active until you select **Allow**.
* **The assistant can't find or connect to the server.** Confirm the URL is exactly `https://mcp.vflo.app` with no trailing path or typo, then add the connector again.
* **The assistant connects but returns no data.** Your firm may have disabled the AI assistant connection. Ask an administrator to re-enable it, then reconnect.
* **The assistant says it can't make a change.** This is expected. The connection is read-only. Make edits in the dashboard.
## Related
* [Which integrations VisaFlo supports and what can be automated with APIs](/knowledge-base/faq/which-integrations-visaflo-supports-and-what-can-be-automated-with-apis)
* [How the AI assistant connection works, what it can read, and how to revoke access](/knowledge-base/faq/how-the-ai-assistant-mcp-connection-works-what-it-can-read-and-how-to-revoke-access)
* [VisaFlo API](/knowledge-base/developers/index) for building your own integrations
# Core Concepts
Source: https://visaflo.ca/knowledge-base/guide/core-concepts
The VisaFlo records and working surfaces that make up a firm's intake and case-delivery system.
## The records your firm manages
### Leads
A lead is a prospective client before your firm has opened active case work. Leads are useful for qualification, consultation booking, follow-up, and conversion reporting. Keep an enquiry as a lead until your team has decided to engage it.
### Clients
A client is the durable relationship record. One client can have more than one case over time. Store client-level contact information here; put matter-specific work, documents, and deadlines on the case.
### Cases
A case is one immigration matter. It gives the work a shared context: client, case type, assignees, forms, files, notes, drafts, tasks, financial activity, and client-facing visibility. Create a separate case when the work needs a separate process, deadline set, or document trail.
## The case workspaces
### Questionnaires and forms
Questionnaires collect structured information from the client. They are the best place for information you need to review, reuse in documents, or use for supported autofill. A questionnaire is not a general chat thread; use comments for clarification and tasks for internal follow-up.
### Files
Files are the supporting evidence and generated outputs for a case. Use folders and consistent names so a staff member can tell whether a document is source evidence, a working draft, a signed output, or a submission copy.
### Tasks, reminders, and workflows
A task has an owner and an action. A reminder keeps a time-sensitive item visible. A workflow is a reusable pattern of tasks for repeated work. Use all three together: workflow for the repeatable process, task for the owned action, and reminder for the deadline.
### Drafts, templates, and signatures
Templates provide a reviewed starting structure. Drafts are the working document. E-signature requests are the final client action after the content is correct. Do not treat a template or an AI-generated draft as final without case-specific review.
## The client-facing surfaces
### Client Portal
The portal is a controlled view of client work. It is appropriate for requests, updates, and case information your firm intentionally makes visible. It is not the place for internal notes, working comments, or unreviewed drafts.
### Invitations, shared links, and payment requests
Use an invitation when the client needs to complete a questionnaire or access a portal workflow. Use a shared link for a deliberately selected document set. Use an invoice and payment action for payment collection. Each surface has a different purpose; avoid using a broad shared link as a substitute for a specific client request.
## A simple decision rule
Ask where the information should still be useful six months from now:
* Relationship-level information belongs on the **client**.
* Matter-level work belongs on the **case**.
* Client-provided structured facts belong in a **questionnaire**.
* Source and output documents belong in **files**.
* An owned next action belongs in a **task**.
* Team-only context belongs in an **internal note**.
Read [How VisaFlo Works](/knowledge-base/guide/visaflo-operating-model) for the flow between these concepts.
For the review boundary around AI Scanner, AI Drafts, and portal autofill, read [Automation & Review](/knowledge-base/guide/automation-and-review).
# Start Guide
Source: https://visaflo.ca/knowledge-base/guide/getting-started
Set up the essentials, create a first case, and establish the first client workflow in VisaFlo.
## What success looks like
Your first VisaFlo setup is complete when your team can move one real client through a repeatable path: capture the enquiry, create the client and case, request information, assign internal work, and see what is still needed. Do not try to configure every feature before you have validated that path.
## Start with the product model
VisaFlo separates the relationship from the work:
* A **lead** is a prospect before engagement.
* A **client** is the person or organization your firm serves.
* A **case** is a specific immigration matter for that client.
* **Questionnaires, files, tasks, drafts, invoices, and signatures** are case work, not separate systems.
Read [How VisaFlo Works](/knowledge-base/guide/visaflo-operating-model) before setting up a new team. It explains why this model prevents intake details, deadlines, documents, and client communication from drifting apart.
## Complete your first workflow
1. Invite the staff members who will own intake, case work, and billing. See [Invite a member](/knowledge-base/settings/inviting-a-member).
2. Set your branded sender address and signature before you send client communication. See [Branded email](/knowledge-base/settings/branded-email-address) and [Email Signature](/knowledge-base/settings/email-signature).
3. Create a client and an initial case. See [Add a client](/knowledge-base/clients/adding-a-client) and [Create a case](/knowledge-base/cases/creating-a-case).
4. Send the client a questionnaire or portal invitation. See [Send Invitation](/knowledge-base/questionnaires/send-invitation) and [Client Portal](/knowledge-base/portal/client-portal).
5. Add the first internal task and due date. See [Tasks & statuses](/knowledge-base/faq/how-tasks-reminders-workflows-deadlines-and-case-statuses-work).
6. Upload one representative document and review how your team will organize folders. See [Upload Files](/knowledge-base/files/upload-files).
## Choose one intake path
Most firms begin with one of these patterns:
| If you need to... | Start with... | Then... |
| - | - | - |
| Qualify a new enquiry | [Lead forms](/knowledge-base/leads/custom-lead-form) | Review the lead, book a consultation, then convert when retained. |
| Open work for an existing client | [Add a client](/knowledge-base/clients/adding-a-client) | Create a case and send the case questionnaire. |
| Move an existing file into VisaFlo | [Create a case](/knowledge-base/cases/creating-a-case) | Add the client, team owner, documents, tasks, and next client request. |
## What to defer
Set up templates, e-signatures, payment workflows, portal autofill, and integrations after your first end-to-end client workflow works. These features are most valuable when they reinforce an agreed intake and case process rather than substitute for one.
## Next step
Use [Launch Your Firm](/knowledge-base/guide/launch-your-firm) to turn the first workflow into a team standard.
# Launch Your Firm
Source: https://visaflo.ca/knowledge-base/guide/launch-your-firm
Turn VisaFlo's product model into a repeatable intake and case-delivery workflow for your team.
## Start with one case type
Choose the case type your firm handles most often or one with a clear, repeatable process. Launching every case type at once creates inconsistent templates, folders, and client instructions. Prove one path first, then duplicate the pattern deliberately.
## Define the operating decisions
Write down the answers before configuring features:
1. Which lead outcomes does the team use: new, qualified, consultation booked, retained, or closed?
2. Who can create a client and case?
3. What information must be collected before a case is ready for review?
4. Which tasks are mandatory, who owns them, and what counts as complete?
5. Which files, status updates, and requests can the client see?
6. Who reviews generated documents before signature or submission?
These decisions become your lead stages, questionnaire fields, case template, workflow, and client messages.
## Build the minimum viable workflow
Configure only the pieces needed to serve the first case type well:
| Workflow element | Recommended first version |
| - | - |
| Lead intake | One lead form or a clear manual entry rule. |
| Client and case | One owner, one case type, and a consistent naming convention. |
| Information collection | One questionnaire with only the information needed for the next review. |
| File structure | A small set of folders that separates client evidence from generated outputs. |
| Team work | A reusable workflow with a clear owner and due date for every action. |
| Client communication | One invitation message, one follow-up pattern, and one portal visibility rule. |
## Run a controlled pilot
Use a non-production case or one appropriate live case with the people who will actually do the work. Walk through the process as both staff and client:
1. Submit or create the lead.
2. Convert or create the client and case.
3. Send the questionnaire invitation.
4. Upload and organize a document.
5. Create and complete an internal task.
6. Generate a document only after checking the source facts.
7. Review what the client can see.
Capture every handoff that requires a side message, spreadsheet, or memory. Those gaps are the next workflow or documentation improvements to make.
## Make the process durable
After the pilot, publish a short internal standard for the case type: naming rules, required fields, folder structure, task owners, client message templates, and review checkpoints. Then train the team against the standard and make it the default for the next case type.
## Continue building
* [Collect leads](/knowledge-base/leads/collect-leads)
* [Create a case](/knowledge-base/cases/creating-a-case)
* [Send a questionnaire](/knowledge-base/questionnaires/send-invitation)
* [Set up workflows](/knowledge-base/faq/how-tasks-reminders-workflows-deadlines-and-case-statuses-work)
* [Create letters and agreements](/knowledge-base/settings/letters-and-agreements)
# How VisaFlo Works
Source: https://visaflo.ca/knowledge-base/guide/visaflo-operating-model
Understand VisaFlo's operating model for turning enquiries into organized, client-ready immigration case work.
## VisaFlo is organized around the case
An immigration practice has two connected jobs: earn and qualify work, then deliver the work accurately and on time. VisaFlo keeps both jobs connected without treating every person, document, and deadline as a separate spreadsheet.
The case is the working center of the system. It connects the client, team, required information, documents, deadlines, billing, and client-facing activity for one immigration matter.
## The operating flow
1. **Attract and qualify:** A prospect enters as a lead through manual entry, a lead form, booking, or an integration.
2. **Engage:** When the prospect becomes a client, retain the relationship record and open the relevant case.
3. **Collect:** Send a case questionnaire, request uploads, and expose only the right information through the client portal.
4. **Coordinate:** Assign tasks, reminders, and workflow steps to make ownership and deadlines visible.
5. **Prepare:** Organize source documents, generate letters or agreements, and use AI-assisted drafting or autofill only after data is reviewed.
6. **Finalize:** Request signatures, issue invoices, share the right documents, and retain a clear case record for follow-up work.
This is a loop, not a one-way pipeline. A case can return to collection when new facts are needed, to preparation when information changes, or to coordination when a deadline moves.
## One source of truth, different working surfaces
The same case can look different to different people without creating duplicate records:
* **Staff** use the dashboard for case details, files, notes, tasks, drafts, invoices, and settings.
* **Clients** use the portal and invitation links to complete assigned work and see the information your firm chooses to show.
* **Prospects** interact with lead forms, booking links, and chat before they become clients.
Keep staff-only working notes, internal task detail, and incomplete drafts in the dashboard. Use the portal, controlled invitations, and shared links for client-facing work.
## Automation follows reviewed data
VisaFlo's automation features build on the case record; they do not replace professional review.
* A questionnaire turns client-provided information into structured case data.
* AI Scanner can extract information from a document for review.
* AI Drafts use selected case context to help prepare a document.
* Extension autofill transfers reviewed data into supported government portals after the user signs in.
The reliable sequence is: collect, review, correct, then automate. Treat any generated draft, extraction, or portal entry as work that still needs a practitioner or authorized staff member to verify.
## Design your own version of the model
Before standardizing your team, decide four things:
1. What makes a lead ready to become a client?
2. Which case types need their own questionnaire, task workflow, and templates?
3. Which work belongs to staff versus the client portal?
4. What has to be reviewed before a document is generated, signed, paid, or submitted?
Use [Core Concepts](/knowledge-base/guide/core-concepts) for the working definitions, then [Launch Your Firm](/knowledge-base/guide/launch-your-firm) for an initial rollout sequence.
# VisaFlo Help Center
Source: https://visaflo.ca/knowledge-base/index
Set up your firm, understand VisaFlo's operating model, and run client work from lead intake through case completion.
VisaFlo gives immigration firms one operating system for lead intake, client records, case work, client collaboration, documents, and follow-through. Start with the product model, then follow the same sequence your firm uses to move an enquiry into a completed matter.
## Follow your firm's workflow
* **Set up your firm:** add the team, verify client-facing email, and prepare the first case materials in [Set Up Your Immigration Firm](/knowledge-base/workflows/set-up-your-firm).
* **Win and engage a client:** collect enquiries, qualify them, create the client, and request payment when appropriate in [Win and Engage a Client](/knowledge-base/workflows/win-and-engage-a-client).
* **Open and collect:** create the case, send the questionnaire, review answers, and organize evidence in [Open a Case and Collect Information](/knowledge-base/workflows/open-a-case-and-collect-information).
* **Prepare and submit:** generate documents or use supported autofill only after review in [Prepare, Review, and Submit](/knowledge-base/workflows/prepare-review-and-submit).
* **Communicate and close:** keep the client informed, obtain signatures, share selected files, and improve the next case in [Communicate, Close, and Improve](/knowledge-base/workflows/communicate-close-and-improve).
Each workflow guide leads to the exact feature instructions when a task needs more detail. Read [How VisaFlo Works](/knowledge-base/guide/visaflo-operating-model) first if your firm is new to VisaFlo.
# Add Internal Notes
Source: https://visaflo.ca/knowledge-base/internal-notes/add-internal-notes
Record team-only context and follow-up details on a case.
## Add a case note
Open the case and select the **Notes** tab. Choose the option to add a note, enter the context your team needs, and save it to the case. Use a specific subject and include the relevant decision, owner, or follow-up date so another staff member can act on it.
## Write notes that are useful later
* Record what happened and the next action, not only that someone was contacted.
* Include the source of important information, such as a client call or an uploaded document.
* Keep confidential client information limited to what the case team needs to handle the work.
* Create a task or reminder separately when the note requires a time-bound follow-up.
## Visibility
Internal notes are for your team’s case work. Do not use them as a substitute for a client-facing message or a questionnaire comment. Before sharing case information externally, use the appropriate client communication or document-sharing workflow.
# Request Online Payment
Source: https://visaflo.ca/knowledge-base/invoices/request-online-payment
With VisaFlo , easily request payments from your clients by sending secure online payment links. Follow these simple steps to streamline the payment process. St...
## Create an invoice
Open **Billing** and select **Create Invoice**. Choose the client or lead, set the issue and due dates, then add one or more line items. Mark government fees separately from professional fees and apply tax only where appropriate.
Set a due date when you need payment reminders. Add payment instructions before creating the invoice; the invoice record can be created before you create or send a payment link.
## Review and request payment
After creating the invoice, return to **Billing** to check the client, amount due, issue date, due date, and status. Use the payment action on the invoice row only after reviewing the amounts and instructions.
You can email an invoice without connecting Stripe. The email includes your payment instructions, such as e-transfer details. When Stripe is connected, it also includes an online payment link. For an invoice billed in stages, use **Send** beside the relevant payment stage.
## Troubleshooting
If you cannot create an online payment link, confirm that Stripe is connected. Check the invoice status before sending another request so the client does not receive duplicate requests. If sending fails, the dialog shows the error and keeps your recipient and subject so you can retry.
# Add Leads
Source: https://visaflo.ca/knowledge-base/leads/add-leads
Add a prospect manually, assign ownership, avoid duplicates, and keep qualification work separate from active cases.
## Add a lead manually
1. Open **Leads** and choose the action to add a lead.
2. Enter the prospect's available contact information.
3. Select the starting stage and the staff member responsible for follow-up.
4. Save the lead, then record the next action in the activity timeline.
## Verify the new record
Open the lead after saving to confirm the contact information, current stage, and activity timeline.
## Add another email address
Keep the main email as the address used for the lead's primary identity and add alternate addresses from the lead profile when the same person uses more than one inbox. Select the **+** next to the email field, enter the alternate address, and save it.
VisaFlo includes messages sent to or received from an added address in the lead's **Communications** history. Do not add a colleague's or family member's address unless it genuinely belongs to the same lead; create or link the appropriate record instead.
## Avoid duplicates
Search by full name, email, and phone before adding a new lead. If the prospect already exists, update the existing lead and add a new timeline entry instead of creating a second record.
## Importing leads
For a large import, use the supported import workflow and validate a small sample before importing the complete list. Keep the source column names and contact fields consistent so leads can be routed correctly.
# Collect Leads
Source: https://visaflo.ca/knowledge-base/leads/collect-leads
Effortlessly gather and track potential clients with VisaFlo’s lead collection tool. Stay organized and ensure you never miss an opportunity to follow up. Step...
## Collect and qualify leads
Leads represent people who are not yet active clients. Create leads manually, collect them through public lead forms, or receive them from connected acquisition workflows.
## Track leads by stage
Use **Board View** to group leads by lifecycle stage. Search by full name, email, or phone before moving a prospect to the next stage.
## Review a new lead
Open a lead to confirm contact information, current stage, and the activity timeline. The timeline shows how the lead entered VisaFlo, which gives the assigned team member context for the next follow-up.
## Suggested lifecycle
1. Capture the inquiry through a form, booking flow, integration, or manual entry.
2. Qualify the lead and record the next action.
3. Move the lead through your team's stages as the conversation progresses.
4. Convert the lead to a client once the engagement is confirmed.
5. Mark the lead closed when the opportunity is no longer active.
## Troubleshooting
If a website form submission does not appear, first confirm the public form is published and that its URL or embed is the current one. For consultations, confirm whether the booking workflow is configured to create a lead automatically.
# Custom Lead Form
Source: https://visaflo.ca/knowledge-base/leads/custom-lead-form
Embed your VisaFlo Form on your website to instantly capture leads and schedule meetings. Configure Form Click Configure Form button on the Leads page. 2. Click...
## Create a lead form
Open **Settings** > **Lead Forms** and create a new form for the inquiry you want to collect. Use a short title and description that explain what the visitor will receive or what happens next.
## Build and preview the form
Use **Form Settings** to set the title, description, theme, and submit label. Add only the fields needed to route or qualify the inquiry; every unnecessary required field reduces completion.
## Publish and embed
Open the public form URL before adding it to your website. Confirm the title, required fields, and submit action are clear, then use the public URL or embed instructions from the form workflow.
New submissions create leads in VisaFlo. Review the lead profile and activity timeline to see the captured information and assign the next action.
## Troubleshooting
If a form is not collecting leads, confirm that you are using the published public URL and that required fields are not preventing submission. Keep internal routing notes and staff-only instructions out of the public form description.
# Client Portal
Source: https://visaflo.ca/knowledge-base/portal/client-portal
Set up the client-facing portal so clients can view visible applications, open questionnaires, sign documents, review updates, and request a secure sign-in link.
## Overview
The Client Portal gives clients a separate, client-facing place to see the applications you choose to show them. Clients sign in with a secure email link, then view visible applications, client-facing statuses, questionnaires, signature requests, optional IRCC processing-time cards, and portal notifications.
Use this guide when you want to prepare a case for the client portal and confirm what the client will see.
## Before you start
* The client must have an email address on their profile.
* The case must be linked to the correct client.
* Client portal access must be available for your workspace.
* If you use a white-label domain, confirm the domain is verified before sharing the portal link.
* If family members should only see their own forms, confirm family member records and form assignments before sharing access.
## Share the portal sign-in page
1. Open a case.
2. Open the **Client Portal** tab.
3. Expand the intro panel.
4. Copy the portal sign-in URL.
5. Send the link to the client.
Clients can also go directly to `/portal/signin` on your VisaFlo or white-label domain. They enter their email, then VisaFlo sends a secure sign-in link if the email has portal access.
## Show or hide a case
Cases are hidden from the client portal until you turn on visibility.
1. Open the case.
2. Open the **Client Portal** tab.
3. Turn on **Show in client portal**.
4. Choose the **Status shown to client**.
5. Save or wait for the case update to complete.
Use a client-facing status that is safe for the client to read. This status is separate from your internal case status.
## Configure the processing-time card
The portal can show a client-facing IRCC processing-time estimate when staff enable it for the case.
1. Open the case's **Client Portal** tab.
2. Find **Processing time**.
3. Enable the card.
4. Choose the relevant processing-time category and options.
5. Review the staff-side preview before relying on it with the client.
If the estimate is unavailable, the client portal hides or explains the unavailable state instead of showing a broken card.
## Send portal notifications
Use portal notifications for updates you want the client to see inside the portal.
1. Open the case or client profile.
2. Open the **Client Portal** notification area.
3. Add an optional title.
4. Write the message.
5. Link the notification to a case when relevant.
6. Send the notification.
The client sees unread notifications on the portal home page, notification bell, and notification list. Case-linked notifications also appear on that application's detail page.
## What clients can do
An application detail page keeps the questionnaire, signature requests, and case-specific updates together.
After signing in, clients can:
* See a home summary of their visible applications and unread updates.
* Open **Applications** to view cases shown in the portal.
* Filter applications by client-facing status.
* Open an application detail page.
* Open questionnaires assigned to them.
* Open signature requests and sign documents.
* View case-specific portal notifications.
* View processing-time estimates when staff enabled them.
## Troubleshooting
If the client cannot sign in, confirm the email they entered matches the client or family member email in VisaFlo.
If a case is missing, confirm **Show in client portal** is enabled on that case and the case is linked to the right client.
If the wrong status appears, update **Status shown to client** from the case's **Client Portal** tab.
If a questionnaire is missing for a family member, check the family registry and form assignment.
If the portal link uses the wrong domain, confirm the white-label domain is verified, then copy the sign-in URL again from the intro panel.
# Auto-fill IMM Forms
Source: https://visaflo.ca/knowledge-base/questionnaires/auto-fill-imm-forms
Fill a case's IMM PDF forms from the questionnaire with PDF Autofill, find them in the case's Files, and check each form before you file.
VisaFlo fills a case's IMM PDF forms with the answers from the questionnaire. You start it from the case's **Forms** page, and the filled forms land in the case's **Files** tab. Autofill saves you the typing. It doesn't replace your review, so check every form before you file it.
## Before you start
* **The questionnaire is complete.** On the **Forms** page, each questionnaire under **Questionnaires** should show 100%. Inside a questionnaire, every section in the left panel has a green check. To find what's missing, click the eye button in the left panel (**Show Only Incomplete Questions**).
* **The case has a representative.** Autofill puts the representative's details on the forms, for example on IMM 5476 (Use of a Representative). If you don't pick one for the case, VisaFlo uses your firm's default representative. With neither, autofill is blocked. An admin adds representatives and sets the default in **Settings** > **Autofill Settings**, under **Representative Information**.
* **Your plan includes autofill.** If it doesn't, the autofill button is greyed out. Hover over it to see "Your current plan does not include this feature."
## Open the case's forms
1. Open the case and click **View Forms**. The **Forms** page opens.
2. Under **Representative & Contact Details**, check the representative. If you see **Select a representative to enable autofill.**, click **Edit**, pick a representative, and click **Save**.
3. Under **Questionnaires**, check that each person's progress shows 100%. To go through the answers, click **Open**.
The autofill button is at the top of the left panel, under the case name. Run it from the **Forms** page to fill the forms for everyone on the case. If you run it from inside one person's questionnaire, VisaFlo fills only that person's forms.
## Activate autofill for the case
You do this once per case.
1. In the left panel, click **Activate Autofill**.
2. Read the note and click **Activate**. Activating counts as one autofill usage against your plan. If your plan's quota is already used up, it's charged as an additional autofill. After that, autofill for this case is unlimited.
3. You see **Autofill activated for this case.** The button changes to **PDF Autofill**. On the case page, the **Autofilled** field now shows the date and time you activated.
## Generate the PDF forms
1. Click **PDF Autofill**.
2. The dialog says **Generate autofilled PDF forms for this case.** Click **Start PDF Autofill**.
3. The dialog now says **Your autofilled PDF forms are being generated.** VisaFlo fills the forms on its servers, so you can close the dialog and keep working. To go straight to the forms, click **View Files**.
If the questionnaire isn't complete, the dialog says **The questionnaire is not complete.** and the button reads **Autofill Anyway**. Finish the questionnaire first. Otherwise the forms come out with gaps.
## Find the generated forms
1. On the case's **Files** tab, open **All files**.
2. Open the folder whose name starts with **IMMs\_** followed by the date and time of the run, for example `IMMs_20260929_163342`. Double-click it, or open its menu (**...**) and choose **Open**.
3. The forms are inside. They're named with your firm's **Autofilled Form Naming Option**. The default is ` -