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

# TBD pricing

> Price a loan before the subject property's street address is known

To-be-determined (TBD) pricing lets you price a loan before the subject property's street address is known. Configure the property with its state and county, then run pricing as you would for a fully addressed loan. Results are county-level estimates that borrowers can compare while they shop.

<Steps>
  <Step title="Configure the TBD property">
    Add the subject property's state, county name, and five-digit county FIPS code to the loan. The street address and ZIP code can remain empty.
  </Step>

  <Step title="Price the loan">
    Call `pricing.productPricing` and present the eligible rates as estimates.
  </Step>

  <Step title="Add the street address">
    Once the borrower has a property, add its street address and ZIP code to unlock rate selection, locks, and disclosures.
  </Step>
</Steps>

## TBD property requirements

When TBD pricing is enabled, the subject property can omit its street address and ZIP code. It must still include its state and county:

| Property field   | Required | Description                                                                   |
| ---------------- | -------- | ----------------------------------------------------------------------------- |
| State            | Yes      | The subject property's state.                                                 |
| County name      | Yes      | The subject property's county.                                                |
| `fipsCountyCode` | Yes      | The county's five-digit Federal Information Processing Standards (FIPS) code. |
| Street address   | No       | Add it when the property is known.                                            |
| ZIP code         | No       | Add it when the property is known.                                            |

Fully addressed loans continue to price normally. Without TBD pricing enabled, the street address and ZIP code remain required.

<Warning>
  Pricing for a TBD property uses county-level estimates. Present the results as estimates until the subject property has a street address.
</Warning>

## Price the loan

Call `pricing.productPricing` for the loan. The example below returns eligible rates and their product structure IDs; see [Full rate sheet optimizations](/guides/getting-started/pricing-optimizations/full-rate-sheet) for the complete response model.

```graphql theme={null}
query PriceTbdLoan($loanId: ID!) {
  pricing {
    productPricing(loanId: $loanId) {
      products {
        ... on EligibleProductPricing {
          product {
            id
            description
          }
          term
          lock
          rateStack {
            ... on EligibleProductStructure {
              id
              rate
              apr
              monthlyPayment
              closingCosts
            }
          }
        }
      }
      userErrors {
        message
        code
      }
    }
  }
}
```

**Variables:**

```json theme={null}
{
  "loanId": "app_5ap9raB5XUhQZLLkpg31Ve"
}
```

Check `userErrors` before using the pricing results. The example omits ineligible structures and structuring errors; include the other `rateStack` union members shown in the [full rate sheet example](/guides/getting-started/pricing-optimizations/full-rate-sheet#example-query) if your UI displays them.

## Generate a fee sheet for a TBD loan

A TBD loan cannot have a selected rate, but you can still give the borrower estimated closing costs for any eligible rate. Save the `id` of the `EligibleProductStructure` you want to quote and pass it as `productStructureId` when you [request a fee sheet](/guides/getting-started/pricing-optimizations/fee-sheets#request-a-fee-sheet). The generated fee sheet reports `isCountyLevelEstimate: true`.

***

## TBD loan restrictions

TBD pricing results are informational until the subject property has a street address. You can compare rates and generate estimated [fee sheets](/guides/getting-started/pricing-optimizations/fee-sheets), but you cannot:

* Select a priced rate on the loan.
* Confirm a [rate lock](/entity-models/key-concepts/rate-lock).
* [Float a rate](/entity-models/key-concepts/float).
* Generate [initial disclosures](/entity-models/disclosures).

These actions return a top-level GraphQL error with `extensions.errorDetails.code` set to `LOAN_TBD_SUBJECT_PROPERTY`. Add the street address before attempting them again. See [Error handling](/playground/error-handling) for the general error format.

## Related

* [Fee sheets](/guides/getting-started/pricing-optimizations/fee-sheets) — Generate a fee sheet for an eligible rate and retrieve it as a PDF or structured data.
* [Full rate sheet optimizations](/guides/getting-started/pricing-optimizations/full-rate-sheet) — Retrieve complete pricing results and their eligible product structure IDs.
* [Pricing optimizations overview](/guides/getting-started/pricing-optimizations/overview) — Learn about optimization objectives, constraints, and pricing response types.
