Skip to main content
Floating a rate means committing a borrower to a specific loan product and dispatching their initial disclosures without locking the interest rate. A floated loan has started the TRID disclosure clock and is committed to a product structure, but the borrower’s rate can still move with the market until it is locked. Floating is the first half of the rate lock flow—everything that happens before the rate is actually locked. It lets a borrower begin the loan in earnest (receive a Loan Estimate, sign disclosures, establish Intent to Proceed (ITP), and trigger order-outs) while deliberately choosing not to lock the rate yet.

Floating vs. locking

When a borrower selects a product structure, there are two ways to move the loan forward:
Float (floatStructure)Lock (confirmRateLock)
Initial disclosures dispatched✅ Yes✅ Yes
Product structure committed✅ Yes✅ Yes
Interest rate locked❌ No✅ Yes
Protected from rate increases❌ No✅ Yes
Can capture rate decreases✅ Yes❌ No (without a float-down)
Both paths send initial disclosures and freeze the loan to its selected product. The difference is the rate: a floated borrower remains exposed to market movement—up or down—until they lock, whereas a locked borrower is protected from increases but can no longer benefit from decreases (unless they pay for a float-down option). See Rate lock for the locked side of this flow.
Floating is not the same as simply attaching a product structure. Attaching a product structure starts a 3-business-day timer after which initial disclosures auto-fire. Floating dispatches those initial disclosures immediately, on demand, without waiting for the timer and without locking the rate.

Why float instead of lock?

Floating is useful when a borrower is ready to move forward with the loan process but is not yet ready to commit to a rate:
  • Begin processing sooner — Dispatching initial disclosures lets borrowers sign, establish ITP, and trigger order-outs (appraisal, title, verifications) without waiting to lock.
  • Keep rate optionality — The borrower stays exposed to the market and can lock later if rates improve, rather than committing to today’s rate.
  • Compress timelines — Because disclosures and order-outs can start before the lock decision, the loan can be further along by the time the rate is locked.

How floating works in Pylon

Float a product structure with the floatStructure mutation, which takes the loan ID:
mutation FloatStructure($loanId: ID!) {
  loan(id: $loanId) {
    floatStructure(input: { loanId: $loanId }) {
      loanId
    }
  }
}
floatStructure validates the loan, then dispatches the initial disclosure package for the loan’s committed product structure. It deliberately does not lock the rate, send a lock notification, or run any post-lock change-of-circumstance workflow—it only performs the pre-lock half of the flow.

Preconditions

A loan can only be floated when all of the following are true. If any check fails, the mutation rejects with a client-correctable error:
  • AUS must pass — The latest AUS run must allow locking. If AUS has not been run or has not passed, the mutation rejects with AUS_LOCK_NOT_ALLOWED (HTTP 412).
  • The loan must not already be rate locked — A locked loan cannot be floated; the mutation rejects with LOAN_ALREADY_LOCKED (HTTP 403).
  • The loan must not be frozen — A loan whose initial disclosures have already been sent is frozen and cannot have a second disclosure package dispatched.
  • Initial disclosures must not already have been dispatched — If an initial disclosure package is already in flight or has completed successfully, the mutation rejects with LOAN_INITIAL_DISCLOSURES_ALREADY_DISPATCHED (HTTP 412). This guarantees a borrower never receives duplicate initial disclosures. (A previously failed disclosure send does not count as dispatched, so it can be safely retried.)

Checking whether a loan is floated

The Loan type exposes a derived isFloated boolean. A loan is floated when its initial disclosures have been sent but its rate is not yet locked:
isFloated = disclosuresDate IS NOT NULL && rateLockStatus !== LOCKED
query LoanFloatState($loanId: ID!) {
  node(id: $loanId) {
    ... on Loan {
      isFloated
      isFrozen
      rateLockStatus
    }
  }
}
Use isFloated as the canonical signal that a loan has begun the disclosure process but still has an open rate decision. A floated loan is also frozen (isFrozen is true), because its initial disclosures have been sent and its product structure can no longer be changed.

Lifecycle: from float to lock

A typical floated loan moves through these states:
  1. Product structure attached — The borrower commits to a product. The 3-business-day disclosure timer starts.
  2. FloatedfloatStructure dispatches initial disclosures immediately. The loan is now frozen, isFloated is true, and the rate remains unlocked.
  3. ITP established — Borrowers sign their initial disclosures, establishing Intent to Proceed (ITP) and triggering order-outs.
  4. Locked — When the borrower is ready, confirmRateLock locks the rate. isFloated becomes false (the rate is now LOCKED) and the loan proceeds through processing toward closing.