Installed snapshot · independent audit

Loan follow-up: strong idea, broken data contract.

A node-level review of Votel’s v10.1 commercial-lending snapshot: webhook intake, contact upsert, email and SMS, calendar booking, outbound retries, human transfer, and the compliance repairs required before activation.

Votel library v10.1Reviewed Sep 18, 2026Agency-level installNo live channels used
VOTEL SNAPSHOT AUDIT11 / COMMERCIAL LENDING

Loan Approval
Appointment Setting

Installed agent1
Agent workflows2
Workflow nodes24
Open outputs10
Launch statusBlocked
2Installed workflows
24Functional nodes
27Connected edges
20Audit findings
0Active channels
01 · Executive verdict

The architecture is worth learning. The installed execution is not safe to launch.

The snapshot models a valuable lifecycle: receive application data, upsert the applicant, notify them, wait for a reply, offer booking, and retry by phone. But the webhook branch reads from a node that does not exist, two loan fields have no destination, both calendars are unbound, and the failure branch falsely confirms success.

Reusable

Core pattern

Webhook intake → contact upsert → multi-channel follow-up → booking or timed call retry.

Broken

Data contract

The trigger is trigger-2-2; every downstream consumer reads trigger-2-1.

Risk

Lending language

The copy implies approval and pre-approval without verified underwriting state.

Do not activate this snapshot as installed. Rebuild the webhook contract, remove external identities, configure channels and calendar, add consent controls, and constrain the agent to verified application-status language.
02 · Installed inventory

One agent contains two ambitious but incomplete workflows.

AssetStatusVerified detail
Loan Approval Appointment SettingInactive

GPT-5.4 Mini, Skylar by Cartesia, zero active channels, 229-word prompt.

Inbound11 nodes

Conversation and inbound-call entries, contact lookup, booking, decline, transfer and terminal messages.

Inbound Webhook13 nodes

Webhook, upsert, email, SMS reply wait, calendar, one-day retry and two outbound calls.

Webhook contractBroken

No URL or sample; all consumers reference the wrong trigger ID.

Calendars0 / 2 configured

Inbound booking displays UTC; webhook booking displays America/Los_Angeles.

Email / SMS / voiceUnconfigured

No email channel, SMS number, or outbound caller ID is selected.

Human transferConfigured

One account-specific named destination ships inside the reusable template.

Knowledge / toolsNone

No lending knowledge base, custom tool, or enabled built-in tool.

State distinction: the agent and graph are installed. The webhook, field contract, sending channels, calendar, consent record, compliance knowledge, and safe destinations are not configured or tested.
Loan Approval source inventory
Reconstructed from the installed v10.1 agent, observed September 18, 2026. Rose items are gaps, not assets.
Text version of this diagram

The v10.1 snapshot installs one inactive agent with zero channels and two workflows: Inbound with 11 nodes and Inbound Webhook with 13 nodes, 24 functional nodes in total, with 10 open outputs. It installs no knowledge, tools, global variables or custom fields.

03 · Workflow map

A clear lifecycle is buried under unresolved branches.

Loan Approval Appointment Setting
● INACTIVE

Workflows

INBOUNDINBOUND WEBHOOK

Agent

Prompt BuilderTools & IntegrationsShared Knowledge
LOAN FOLLOW-UP · 2 FLOWS
Application webhookTrigger ID 2-2
Contact upsertReads missing trigger 2-1
Email + SMSBroken variables, no senders
Reply?30-minute window
YesUnbound calendar
TimeoutCall → wait → call
Success / errorBoth claim scheduled
Sanitized workflow reconstruction. No forwarding number, private contact, webhook secret, or account identifier is shown.

1 · Inbound

Conversation / callContact lookupBook or declineTransfer fallback

Conversation Started accepts chat, voice and SMS even though it relies on call IDs, forwarding and hangup nodes. Inbound Call can overlap with the broader trigger.

2 · Inbound Webhook

WebhookUpsertEmail + SMSBook / retry calls

The graph is conceptually strong, but its source ID is wrong everywhere and ten outcomes remain open.

Inbound source workflow
Reconstructed from traced edges of the Inbound workflow, observed September 18, 2026. The forwarding destination is sanitized. Dashed rose items are open outputs.
Text version of this diagram

Conversation Started and Inbound Call each run a contact lookup. The Inbound Call lookup creates new contacts from webhook outputs that do not exist. Both reach a greeting or script that talks about loan approval, then either a hangup for callers no longer interested or a Smart Calendar Booking with no calendar in UTC. Booking success ends with a message naming the broker. Booking error forwards to one private number; no answer and outside hours end with an apology, and the answered output is open.

Inbound Webhook source workflow
Reconstructed from traced edges of the Inbound Webhook workflow, observed September 18, 2026. Dotted grey notes are disconnected.
Text version of this diagram

The webhook trigger has no URL, sample or authentication. The contact lookup reads trigger-2-1, which does not exist. A match updates the contact with loan type and amount unmapped; both paths send a status email with no sender and a placeholder link, then an SMS with no sender that waits 30 minutes. A reply opens a Smart Calendar Booking with no calendar in Los Angeles time, whose success and error branches both text that the appointment is scheduled. A timeout places an outbound call with no caller ID; failure waits one day and places a second call whose outcomes are all open. The first call's answered output is open. Two notes about generating the webhook URL and buying a phone number are disconnected.

04 · Broken data contract

The workflow cannot read the payload it was built to process.

The installed webhook node is trigger-2-2. Contact lookup, contact update, email personalization, SMS personalization, company, loan amount, and loan type all reference trigger-2-1. The editor explicitly flags those variables as unavailable.

InputDestinationInstalled result
Name, email, phone, companyWrong source

Mapped from nonexistent trigger-2-1.

Loan typeNo field

Value maps to “Select a field…” rather than a defined contact field.

Loan amountNo field

Value maps to “Select a field…” rather than a typed currency/number field.

Booking statusNot reused

Success and error paths send the same scheduled-confirmation copy.

Snapshot standard: version the webhook schema, capture a synthetic sample, validate required fields, map every payload key once, and make downstream actions reference durable contact fields, not an assumed trigger ID.
Loan webhook data contract
Reconstructed from the field mappings, observed September 18, 2026.
Text version of this diagram

The loan application payload has no captured shape. The installed trigger is trigger-2-2, but every consumer reads trigger-2-1. First name, last name, email, phone and company map to standard contact fields from that missing source. Loan type and loan amount map to Select a field, so they have no destination.

05 · Defect register

Twenty findings, led by broken data and misleading status copy.

FindingSeverityWhy it matters
Wrong webhook source ID everywhereCritical

All application data can resolve blank because consumers read a nonexistent trigger.

Error branch confirms successCritical

A failed booking tells the applicant their appointment is scheduled.

Unverified approval languageCritical

“Great news,” “pre-approval,” and “approval appointment” imply an outcome the automation never verifies.

Configured person and forwarding destinationCritical

A reusable lending template ships with another operator’s identity and phone route.

Loan fields have no destinationHigh

Loan type and amount map to unselected fields.

Two calendars, neither configuredHigh

The nodes also disagree between UTC and America/Los_Angeles.

No sending channelsHigh

Email, SMS, and outbound calls cannot execute.

Inbound lookup crosses into webhook stateHigh

The inbound-call create path references unrelated missing trigger outputs.

Call flow accepts chat and SMSHigh

Non-voice sessions can enter call-ID, transfer, and hangup logic.

Webhook has no contract or securityHigh

No URL, sample, filter, authentication, or replay behavior is defined.

Identity and global-variable contaminationHigh

Mike Brown and Jason/Jayson Floyd coexist with a deleted company variable.

Outbound retry outcomes are incompleteHigh

Answered and final-call outcomes have no explicit completion policy.

No consent or suppression modelHigh

Automated calls and texts lack source-of-permission, frequency caps, and durable opt-out state.

Literal calendar-link placeholdersHigh

Email and SMS say “Add your Calender Link” rather than providing a working action.

No lending knowledge or safety rulesHigh

The agent is not constrained against guarantees, advice, eligibility, or unauthorized data disclosure.

Confirmation lacks appointment detailsMedium

No date, time, timezone, location, meeting link, or reschedule path is sent.

Activity notes are disconnected setup copyMedium

They do not document applicant activity and never run.

Potential duplicate call entryMedium

Conversation Started and Inbound Call may both react to one phone conversation.

Greeting and identity mismatchMedium

Only voicemail/screening copy is configured and Jason/Jayson spelling conflicts.

Ten untested open outputsMedium

No simulator case or synthetic communication path has verified terminal behavior.

06 · Launch checklist

Make the data contract true before making the lending copy persuasive.

  • 1
    Rebuild the webhook contract

    Generate a secured endpoint, capture a synthetic payload, validate keys, and replace every trigger-2-1 reference.

    Required
  • 2
    Create typed loan fields

    Install explicit loan-type and loan-amount fields, then map and validate them.

    Required
  • 3
    Rewrite the status language

    Report only verified application state; never imply approval, pre-approval, eligibility, rate, or funding.

    Compliance
  • 4
    Repair success and error paths

    Use truthful recovery copy on booking failure and complete every terminal.

    Required
  • 5
    Remove account-specific destinations

    Clear the named broker, forwarding number, names, and unavailable globals.

    Safety
  • 6
    Configure channels and calendar

    Verify email, SMS, caller ID, calendar, timezone, availability and booking outputs.

    Required
  • 7
    Add outreach governance

    Store permission source, channel consent, opt-out, suppression, frequency, and quiet-hour state.

    Compliance
  • 8
    Attach governed lending knowledge

    Define approved FAQs, escalation rules, privacy boundaries, and human/underwriter authority.

    Required
  • 9
    Separate voice from text

    Restrict call-only variables and nodes to voice, with dedicated SMS/chat paths.

    Required
  • 10
    Test with synthetic applicants

    Prove new/existing contact, reply/timeout, booking success/error, call outcomes, consent and opt-out.

    Test

Loan Approval snapshot audit complete.

The snapshot is installed, inventoried, traced, sanitized, and added to the comparison and defect matrices.

Open remediation report →
Audit method: read-only agency-account review on September 18, 2026. No agent was activated, no webhook or simulator case was generated, and no email, call, SMS, calendar booking, or live contact was used.