Skip to main content
You can explore draft v0.1 locally with synthetic fixtures. This implementation is reference, not production; you are not starting a deployed checkout service.

Run the repository checks

From the repository root, with development dependencies already installed, run:
If you need to install those dependencies, use npm ci first. Installation may require registry access; it is separate from the offline tests.

Follow the core objects

  1. Read the QuoteManifest to identify the enabled questions, pricing model, review preference, currencies and business-supplied validity settings.
  2. Build a QuoteRequest that preserves raw answers and carries explicit consent for the chosen pack and version.
  3. Use the PricingModel to apply business-owned rates and factors. Keep the ordered intermediate calculations and assumptions so you can explain the result.
  4. Return a non-binding Estimate with a price range when you have valid priced inputs. Neither review mode grants binding approval.
  5. Follow the lifecycle through validation and artist review before issuing a binding Quote with valid_until.
You should register all schemas from spec/schemas/ by $id using Ajv’s draft 2020-12 implementation and enable ajv-formats. Relative schema references resolve against https://uqp.dev/spec/schemas/; that identifier is not a requirement to fetch schemas at runtime. Root objects reject unknown properties. Check min <= max in application validation as well as validating the schema.

Pick a pack and transport

Use the tattoo pack to explore synthetic reference pricing, or the laser-removal pack to inspect a consultation-first flow. Both packs are unvalidated; all sample prices are example data, not real prices. A laser-removal manual-review result is separate and unpriced: do not fabricate a zero-price Estimate when intake gates fail. Choose REST, MCP or GraphQL for the reference contract. Submit a request, then poll for status rather than holding a call open. Webhook delivery is deferred, and the local reference does not implement authentication.

Stop at the payment boundary

Before acceptance and an external checkout handoff, obtain explicit client approval of the payment amount, currency and policies. You must keep the provider as merchant of record and wait for trusted processor confirmation before recording a deposit as paid. Client self-report is insufficient. UQP does not hold funds or implement checkout processing.