Skip to main content
POST /v1/estimates accepts pack_id and factors; dry_run: true remains compatible. Discover required fields and enum values from GET /v1/packs. Canonical packs are tattoo/custom and medspa/laser-removal. Never send customer phone/email, including nested values. Keep image bytes client-side. Responses describe integer-minor-unit price ranges, sessions, candidate fixtures, assumptions and a deposit preview. Estimates never charge, reserve an appointment or earn a partner bounty. HTTP 422 returns missing_fields and suggested_user_questions. Ask that clarifying set, then retry with answers. Preserve requires_escalation and any continue_url; do not treat escalation as an approved quote. Unsure goals, PMU and multiple tattoos may require consultation. Quotes and holds are a separate explicitly authorized operation.