Preview a refine's routing (the soft quote) — nothing is created

The same body as POST /v1/quotes/{id}/refine, planned and NOT launched: how many distinct fabricators (and which process lanes) the network would ask for the refined part, the shell's exact expected_vendors rows, and its exclusion notes. No child quote, no vendor call, no supersede of in-flight work, no demand or corpus write — fire one per edit; commit with /refine at your sync point. Answers 200 (never 201). An empty body previews the quote's own re-fan. Validation and not-found errors match refine's.

post/v1/quotes/{id}/preview

Request

  • Base URL: https://agenticfabricationnetwork.ai
  • URL: https://agenticfabricationnetwork.ai/v1/quotes/{id}/preview
  • Auth: HTTP bearer

Path parameters

idstring required

Request body

ship_to_zipstring

Destination US ZIP code. Omit if the buyer never stated one — the network stamps its assumed central-US destination (prices stay all-in with shipping) and declares it (routing.ship_to_zip + routing.ship_to { zip, assumed: true })

ship_to_countrystring
deadlinestring date nullable

Latest acceptable delivery date; offers that miss it (and nothing else) move to near_misses with their real ETA — never into offers[]. On refine, explicit null CLEARS an inherited deadline (near-misses convert back); omission inherits it

processesstring[] nullable

Process-lane filter: quote ONLY these processes (intersected with routing candidates). Absent = no filter; on refine the child inherits the parent's filter, and an explicit null CLEARS an inherited filter ("show everything again"). Narrowing by process is a constraint, never a fresh quote — warm vendor sessions survive it.

outdoor_ratedboolean nullable
submersibleboolean nullable
high_tempboolean nullable

Must tolerate sustained heat (vendor heat-resistance claim)

food_safeboolean nullable

Must be vendor-certified food safe

max_budget_centsinteger nullable

All-in budget cap, USD cents. On refine, explicit null CLEARS an inherited cap

requirementsstring[] nullable

Catch-all requirements channel: verbatim terms from the buyer's conversation ("UV resistant", "anodized: red", "iso 13485", "tolerance: 0.1mm"). Each term resolves deterministically — applied terms affect offers, unresolved terms come back in the quote's notes and are logged as demand for vendor sourcing. Terms never override explicit spec/constraint fields and are never an error; there is no wrong place to put a term.

remove_requirementsstring[]

Take back INDIVIDUAL requirements terms by normalized match — the removal channel (terms merge as a union, so re-stating the list can never drop one). Unknown terms are ignored, never an error.

undo_last_stepboolean

Go back exactly one refine step: the network restores the PARENT quote's stored spec + constraints verbatim as a new child — exact, never reconstructed. Must be the ONLY field in the body. An undo is an unlabeled refine: open comparison scenarios close. Undoing the original quote is rejected with honest wording.

scenariostring

Comparison lane label ("carbon steel"). A labeled refine sits SIDE BY SIDE with the parent's other lanes instead of superseding them: same label replaces that scenario's in-flight work, different labels stream concurrently (max 4 distinct active labels per parent — a 5th is rejected listing the active ones), and a refine WITHOUT a scenario resets the baseline and supersedes every lane. Each labeled child echoes scenario on every read. Keep labels short and human.

Response

Routing preview

status'preview' required
quote_idstring required

The quote the preview was planned against (the refine's parent)

process'fdm_print' | 'resin_print' | 'powder_print' | 'metal_print' | 'elastomer_print' | 'cnc' | 'sheetmetal' | 'laser_cut' | 'decal' | 'print' | 'apparel' | 'auto' required
fabricatorsinteger required

Distinct fabricators across every expected lane

expected_vendorsobject[] required

Same rows as QuoteResponse.routing.expected_vendors would carry on the shell

notesstring[] required
spec_askedobject

The refined ask's articulated spec (same filter as QuoteResponse.spec_asked)

Changes

No recorded changes to this operation across all 1 revision of this API.