{"components":{"responses":{},"schemas":{"HeadlessCancellationPreview":{"additionalProperties":true,"type":"object"},"HeadlessInvoiceOutcome":{"additionalProperties":false,"description":"An owned issued invoice is authoritative, including historical payment-linked invoices. A completed issuance worker may have skipped unsupported work and never proves issuance. Unsupported describes current provider capability, not an issued invoice or a new invoicing engine.","properties":{"invoice_id":{"format":"uuid","nullable":true,"type":"string"},"reason":{"enum":["unsupported_provider"],"nullable":true,"type":"string"},"status":{"enum":["issued","unsupported","not_issued"],"type":"string"}},"required":["status","reason","invoice_id"],"type":"object"},"HeadlessExternalPaymentReportRequest":{"additionalProperties":false,"description":"For an existing payment_id, omitting both amount and currency records the positive outstanding balance: payable face amount minus collections retained after successful refunds. A covered payable returns invalid_request. Successful refunds reopen that balance; pending refunds do not. The accepted amount is frozen for replay. Supply amount and currency for a partial collection or actual overcollection. Inline booking reports derive omitted money from the accepted booking quote.","properties":{"amount":{"type":"string"},"booking":{"$ref":"#/components/schemas/HeadlessBookingCheckoutRequest"},"collection_id":{"format":"uuid","type":"string"},"currency":{"type":"string"},"merchant_reference":{"type":"string"},"payment_id":{"format":"uuid","type":"string"}},"type":"object"},"HeadlessCustomerQuote":{"additionalProperties":false,"properties":{"advisory?":{"enum":[true],"type":"boolean"},"approval_required?":{"type":"boolean"},"checked_at":{"format":"date-time","type":"string"},"contract_version":{"enum":[1],"type":"integer"},"fingerprint":{"pattern":"^[a-f0-9]{64}$","type":"string"},"missing_inputs":{"items":{"type":"string"},"type":"array"},"pricing":{"additionalProperties":false,"nullable":true,"properties":{"amount_due":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"credits":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"currency":{"type":"string"},"discount":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"gross":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"net":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"subtotal":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"tax":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["currency","subtotal","net","tax","gross","discount","credits","amount_due"],"type":"object"},"rail":{"enum":["booking","bundle","subscription","addon"],"type":"string"},"requirements":{"additionalProperties":false,"properties":{"consents":{"items":{"additionalProperties":false,"properties":{"content":{"nullable":true,"type":"string"},"title":{"nullable":true,"type":"string"},"type":{"enum":["terms","short_terms","refund_policy"],"type":"string"}},"type":"object"},"type":"array"},"file_transfer_options":{"additionalProperties":false,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"price":{"additionalProperties":false,"properties":{"amount":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"basis":{"enum":["catalog_rate"],"type":"string"},"currency":{"type":"string"},"tax_mode":{"enum":["including_tax","excluding_tax"],"type":"string"},"unit":{"type":"string"}},"type":"object"},"title":{"type":"string"},"version_id":{"format":"uuid","type":"string"}},"required":["id","version_id","title","description","price"],"type":"object"},"type":"array"},"page":{"minimum":1,"type":"integer"},"per_page":{"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"type":"object"},"file_transfer_required?":{"type":"boolean"},"invoice_profile":{"additionalProperties":false,"properties":{"enabled?":{"type":"boolean"},"fields":{"items":{"additionalProperties":false,"properties":{"field_group":{"enum":["individual","business"],"type":"string"},"id":{"format":"uuid","type":"string"},"input_type":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"required":{"type":"boolean"}},"type":"object"},"type":"array"}},"type":"object"},"recording_seats":{"items":{"additionalProperties":false,"properties":{"capacity":{"minimum":1,"type":"integer"},"required?":{"type":"boolean"},"session_index":{"minimum":0,"type":"integer"}},"type":"object"},"type":"array"},"recording_seats_question":{"nullable":true,"type":"string"},"session_details":{"additionalProperties":false,"properties":{"custom_form":{"additionalProperties":false,"nullable":true,"properties":{"description":{"type":"string"},"enabled":{"type":"boolean"},"questions":{"items":{"additionalProperties":false,"properties":{"helper":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"options":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string"}},"type":"object"},"type":"array"},"title":{"type":"string"}},"type":"object"},"guest_limit":{"minimum":1,"type":"integer"},"notes":{"additionalProperties":false,"properties":{"enabled?":{"type":"boolean"},"placeholder":{"nullable":true,"type":"string"},"required?":{"type":"boolean"},"title":{"nullable":true,"type":"string"}},"type":"object"}},"required":["custom_form","notes","guest_limit"],"type":"object"}},"required":["session_details","recording_seats","recording_seats_question","consents","invoice_profile","file_transfer_options","file_transfer_required?"],"type":"object"},"selection":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/HeadlessBookingQuoteSelection"},{"$ref":"#/components/schemas/HeadlessBundleQuoteSelection"},{"$ref":"#/components/schemas/HeadlessSubscriptionQuoteSelection"},{"$ref":"#/components/schemas/HeadlessAddonQuoteSelection"}],"type":"object"},"status":{"enum":["complete","incomplete"],"type":"string"}},"required":["contract_version","rail","status","advisory?","checked_at","fingerprint","missing_inputs","pricing","selection","requirements","approval_required?"],"title":"HeadlessCustomerQuote","type":"object"},"HeadlessSessionAmendmentCurrent":{"additionalProperties":false,"properties":{"approval_status":{"type":"string"},"booking_id":{"format":"uuid","type":"string"},"booking_slot_id":{"format":"uuid","type":"string"},"client_id":{"format":"uuid","type":"string"},"collection_payment_id":{"format":"uuid","nullable":true,"type":"string"},"compensation":{"additionalProperties":false,"properties":{"refunded_amount":{"type":"string"},"required_action_amount":{"type":"string"}},"required":["refunded_amount","required_action_amount"],"type":"object"},"expires_at":{"format":"date-time","nullable":true,"type":"string"},"fulfillment_status":{"type":"string"},"id":{"format":"uuid","type":"string"},"instruction":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"type":"string"},"client_secret":{"nullable":true,"type":"string"},"currency":{"type":"string"},"kind":{"enum":["no_payment_required","cash","stripe_elements","square_card","redirect"],"type":"string"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"payment_url":{"nullable":true,"type":"string"},"provider":{"nullable":true,"type":"string"},"provider_options":{"additionalProperties":true,"type":"object"}},"required":["kind","amount","currency"],"type":"object"},"payment_status":{"nullable":true,"type":"string"},"pending":{"additionalProperties":false,"nullable":true,"properties":{"after_total":{"type":"string"},"amendment_id":{"format":"uuid","type":"string"},"before_total":{"type":"string"},"cash_due":{"nullable":true,"type":"string"},"cash_reduction":{"nullable":true,"type":"string"},"credits":{"nullable":true,"type":"string"},"expires_at":{"format":"date-time","nullable":true,"type":"string"},"held_after_total":{"type":"string"},"held_before_total":{"type":"string"},"moves_time?":{"type":"boolean"},"owner_id":{"format":"uuid","type":"string"},"state":{"enum":["awaiting_approval","approved","declined","withdrawn","expired"],"type":"string"},"wallet_credit":{"nullable":true,"type":"string"}},"required":["after_total","amendment_id","before_total","cash_due","cash_reduction","credits","expires_at","held_after_total","held_before_total","moves_time?","owner_id","state","wallet_credit"],"type":"object"},"quote_version":{"type":"string"},"result":{"additionalProperties":false,"nullable":true,"properties":{"after_total":{"type":"string"},"amendment_id":{"format":"uuid","type":"string"},"before_total":{"type":"string"},"cash_due":{"nullable":true,"type":"string"},"cash_reduction":{"nullable":true,"type":"string"},"credits":{"nullable":true,"type":"string"},"held_after_total":{"type":"string"},"held_before_total":{"type":"string"},"owner_id":{"format":"uuid","type":"string"},"paid_at_studio?":{"type":"boolean"},"wallet_credit":{"nullable":true,"type":"string"}},"required":["after_total","amendment_id","before_total","cash_due","cash_reduction","credits","held_after_total","held_before_total","owner_id","paid_at_studio?","wallet_credit"],"type":"object"},"session_application_status":{"type":"string"},"settlement_status":{"type":"string"}},"required":["approval_status","booking_id","booking_slot_id","client_id","fulfillment_status","id","payment_status","instruction","quote_version","expires_at","settlement_status","session_application_status","collection_payment_id","result","pending","compensation"],"type":"object"},"HeadlessBookingQuoteRequest":{"additionalProperties":false,"properties":{"client_id":{"format":"uuid","type":"string"},"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["auto","use","none"],"type":"string"},"invoice_profile":{"additionalProperties":false,"properties":{"billing_fields":{"additionalProperties":{"type":"string"},"type":"object"},"type":{"enum":["individual","business"],"type":"string"}},"type":"object"},"page":{"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"promo_code":{"type":"string"},"sessions":{"items":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"custom_form_answers":{"additionalProperties":{"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"type":"object"},"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"file_transfer_option_id":{"format":"uuid","type":"string"},"guests":{"items":{"additionalProperties":false,"properties":{"email":{"nullable":true,"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"},"notes":{"type":"string"},"recording_seats":{"minimum":1,"type":"integer"},"room_id":{"format":"uuid","type":"string"},"service_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"pattern":"^\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?$","type":"string"}},"type":"object"},"type":"array"}},"title":"HeadlessBookingQuoteRequest","type":"object"},"ReportAddonRow":{"additionalProperties":true,"properties":{"addon_id":{"format":"uuid","nullable":true,"type":"string"},"billing_scope":{"enum":["one_off","per_session","unknown","not_applicable"],"type":"string"},"comparison_total":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true},"currency":{"nullable":true,"type":"string"},"effective_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"label":{"type":"string"},"provenance":{"enum":["unknown","separately_selected","package_included"],"type":"string"},"raw_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"total":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true},"unallocated_reasons":{"items":{"type":"string"},"type":"array"}},"required":["addon_id","billing_scope","comparison_total","currency","effective_quantity","label","provenance","raw_quantity","total","unallocated_reasons"],"type":"object"},"HeadlessTourAvailability":{"additionalProperties":false,"properties":{"date":{"format":"date","type":"string"},"times":{"items":{"additionalProperties":false,"properties":{"setup_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"start_time":{"type":"string"}},"required":["start_time","setup_ids"],"type":"object"},"type":"array"},"tour_id":{"format":"uuid","type":"string"}},"required":["tour_id","date","times"],"type":"object"},"HeadlessSubscriptionPlanUpdateRequest":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"quantity":{"type":"integer"}},"required":["addon_id","quantity","billing_scope"],"type":"object"},"type":"array"},"cancellation_fee_amount":{"nullable":true,"type":"string"},"cancellation_policy":{"nullable":true,"type":"string"},"card_color":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"type":"integer"},"durations":{"items":{"additionalProperties":false,"properties":{"discount_type":{"type":"string"},"discount_value":{"type":"string"},"period_months":{"type":"integer"},"price":{"type":"string"},"session_count":{"type":"integer"},"show_on_home":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["session_count"],"type":"object"},"type":"array"},"images":{"additionalProperties":true,"type":"object"},"is_special_offer":{"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"rollover_days":{"type":"integer"},"rollover_unlimited":{"type":"boolean"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"show_in_top_bar":{"type":"boolean"},"special_offer_badge":{"nullable":true,"type":"string"},"special_offer_card_title":{"nullable":true,"type":"string"},"special_offer_images":{"additionalProperties":true,"type":"object"},"special_offer_text":{"nullable":true,"type":"string"}},"title":"HeadlessSubscriptionPlanUpdateRequest","type":"object"},"HeadlessPackageRedemption":{"additionalProperties":false,"properties":{"booking_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"bookings":{"items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"status":{"type":"string"}},"required":["id","status"],"type":"object"},"type":"array"},"client_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"member_package_id":{"format":"uuid","type":"string"},"package_type":{"enum":["bundle","subscription"],"type":"string"}},"required":["booking_ids","bookings","client_id","id","member_package_id","package_type"],"type":"object"},"ReportCustomersEnvelope":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"type":"array"},"evidence_status":{"enum":["available","partially_withheld","withheld","none"],"type":"string"},"result":{"$ref":"#/components/schemas/ReportCustomerResult"}},"required":["evidence","evidence_status","result"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"},"ReportActivity":{"additionalProperties":true,"properties":{"eligible_client_count":{"minimum":0,"type":"integer"},"inactive_client_count":{"minimum":0,"type":"integer"},"never_visited_client_count":{"minimum":0,"type":"integer"},"returning_client_count":{"minimum":0,"type":"integer"}},"required":["eligible_client_count","inactive_client_count","never_visited_client_count","returning_client_count"],"type":"object"},"HeadlessSessionAmendmentPreviewInput":{"additionalProperties":false,"properties":{"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["none","use"],"type":"string"},"credit_limit":{"type":"string"},"payment_source":{"enum":["native","external"],"type":"string"},"proposal":{"$ref":"#/components/schemas/HeadlessSessionAmendmentProposal"}},"required":["proposal","payment_source","credit_choice","consents"],"type":"object"},"ReportMetricDiscovery":{"additionalProperties":true,"properties":{"analyses":{"additionalProperties":true,"properties":{"addons":{"$ref":"#/components/schemas/ReportAnalysisControls"},"capacity":{"$ref":"#/components/schemas/ReportAnalysisControls"},"customers":{"$ref":"#/components/schemas/ReportAnalysisControls"},"packages":{"$ref":"#/components/schemas/ReportAnalysisControls"},"revenue":{"$ref":"#/components/schemas/ReportAnalysisControls"}},"required":["addons","capacity","customers","packages","revenue"],"type":"object"},"definitions":{"items":{"$ref":"#/components/schemas/ReportDefinition"},"type":"array"},"scope":{"$ref":"#/components/schemas/ReportScope"}},"required":["analyses","definitions","scope"],"type":"object"},"HeadlessErrorResponse":{"additionalProperties":true,"description":"Headless command error in the v1 envelope. incomplete_selection (422) requires remaining choices; stale_selection/idempotency_conflict (409) requires refreshing selections or a distinct command; operation_unavailable (404) never creates an obligation. Disabling headless_api blocks new entry while current authorized receipt replay and owned recovery remain available. public_api remains required.","properties":{"code":{"description":"Stable machine-readable error code; clients must tolerate new codes.","type":"string"},"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Field validation messages when code is validation_failed.","type":"object"},"feature":{"description":"Required studio entitlement when code is feature_disabled; clients must tolerate new features.","type":"string"},"permissions":{"description":"Required permissions when code is permission_required.","items":{"$ref":"#/components/schemas/ApiPermission"},"type":"array"},"request_id":{"description":"Request correlation identifier.","type":"string"},"setup_choices":{"description":"Eligible destination setups when code is setup_selection_required.","items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"room_name":{"nullable":true,"type":"string"}},"required":["id","name","room_name"],"type":"object"},"type":"array"},"status":{"description":"HTTP response status.","type":"integer"},"title":{"type":"string"}},"required":["status","code","title","request_id"],"title":"HeadlessErrorResponse","type":"object"},"ApiPermission":{"additionalProperties":true,"properties":{"action":{"type":"string"},"resource":{"type":"string"}},"required":["resource","action"],"title":"ApiPermission","type":"object"},"HeadlessAddonQuoteRequest":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"client_id":{"format":"uuid","type":"string"},"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["use","none"],"type":"string"},"invoice_profile":{"additionalProperties":false,"properties":{"billing_fields":{"additionalProperties":{"type":"string"},"type":"object"},"type":{"enum":["individual","business"],"type":"string"}},"type":"object"},"page":{"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"slot_id":{"format":"uuid","type":"string"}},"title":"HeadlessAddonQuoteRequest","type":"object"},"HeadlessSetupUpdateRequest":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"description":{"nullable":true,"type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"overrides":{"$ref":"#/components/schemas/HeadlessCatalogOverrides"},"room_id":{"format":"uuid","type":"string"},"seat_count":{"type":"integer"},"service_ids":{"items":{"format":"uuid","type":"string"},"type":"array"}},"title":"HeadlessSetupUpdateRequest","type":"object"},"HeadlessStaffMoveInput":{"additionalProperties":false,"properties":{"date":{"format":"date","type":"string"},"override_tour_limit":{"type":"boolean"},"setup_id":{"description":"Selects the destination setup for studio-tour sessions only. Ordinary-session moves retain the booked setup; use the session amendment preview and acceptance operations to change it.","format":"uuid","type":"string"},"start_time":{"type":"string"}},"required":["date","start_time"],"type":"object"},"HeadlessBundlePlanUpdateRequest":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"quantity":{"type":"integer"}},"required":["addon_id","quantity","billing_scope"],"type":"object"},"type":"array"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"type":"integer"},"images":{"additionalProperties":true,"type":"object"},"is_special_offer":{"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"short_description":{"nullable":true,"type":"string"},"show_in_top_bar":{"type":"boolean"},"show_on_home":{"type":"boolean"},"special_offer_badge":{"nullable":true,"type":"string"},"special_offer_card_title":{"nullable":true,"type":"string"},"special_offer_images":{"additionalProperties":true,"type":"object"},"special_offer_text":{"nullable":true,"type":"string"},"tiers":{"items":{"additionalProperties":false,"properties":{"discount_type":{"type":"string"},"discount_value":{"type":"string"},"price":{"type":"string"},"session_count":{"type":"integer"},"show_discount":{"type":"boolean"},"show_on_home":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["session_count"],"type":"object"},"type":"array"},"validity_days":{"maximum":36500,"minimum":1,"nullable":true,"type":"integer"}},"title":"HeadlessBundlePlanUpdateRequest","type":"object"},"HeadlessGuestUpdateInput":{"additionalProperties":false,"properties":{"name":{"type":"string"},"notes":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"status":{"enum":["invited","confirmed","declined"],"type":"string"}},"type":"object"},"HeadlessSetupOffer":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"is_active":{"type":"boolean"},"name":{"type":"string"},"room_id":{"format":"uuid","type":"string"},"seat_count":{"type":"integer"},"service_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"}},"required":["id","version_id","version_number","is_active","name","images"],"title":"HeadlessSetupOffer","type":"object"},"HeadlessSetupCreateRequest":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"description":{"nullable":true,"type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"overrides":{"$ref":"#/components/schemas/HeadlessCatalogOverrides"},"room_id":{"format":"uuid","type":"string"},"seat_count":{"type":"integer"},"service_ids":{"items":{"format":"uuid","type":"string"},"type":"array"}},"required":["name","room_id"],"title":"HeadlessSetupCreateRequest","type":"object"},"HeadlessPackageAcceptance":{"additionalProperties":false,"properties":{"action":{"enum":["succeeded","accepted","action_required","unknown"],"type":"string"},"client_id":{"format":"uuid","type":"string"},"replayed":{"type":"boolean"},"resource_id":{"format":"uuid","type":"string"},"resource_type":{"enum":["package_redemption","subscription_management","subscription_session_grant","member_bundle","member_subscription"],"type":"string"}},"required":["action","replayed","resource_id","resource_type"],"type":"object"},"HeadlessTourPriceQuote":{"additionalProperties":false,"properties":{"addons_total":{"type":"string"},"currency":{"type":"string"},"entered":{"type":"string"},"line_items":{"items":{"additionalProperties":false,"properties":{"addon_version_id":{"format":"uuid","type":"string"},"base_price":{"type":"string"},"line_total":{"type":"string"},"name":{"type":"string"},"quantity":{"minimum":1,"type":"integer"},"unit_price":{"type":"string"}},"required":["addon_version_id","name","quantity","unit_price","base_price","line_total"],"type":"object"},"type":"array"},"subtotal":{"type":"string"},"tax_amount":{"type":"string"},"tax_rate":{"type":"string"},"total":{"type":"string"},"tour_line":{"type":"string"}},"required":["addons_total","currency","entered","line_items","subtotal","tax_amount","tax_rate","total","tour_line"],"type":"object"},"ReportPackagesEnvelope":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"type":"array"},"evidence_status":{"enum":["available","partially_withheld","withheld","none"],"type":"string"},"result":{"$ref":"#/components/schemas/ReportPackageResult"}},"required":["evidence","evidence_status","result"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"},"ReportBusinessSummary":{"additionalProperties":true,"properties":{"addons":{"$ref":"#/components/schemas/ReportSummaryAddons"},"capacity":{"$ref":"#/components/schemas/ReportSummaryCapacity"},"customers":{"$ref":"#/components/schemas/ReportSummaryCustomers"},"freshness_mode":{"enum":["per_family"],"type":"string"},"highlights":{"items":{"type":"string"},"maxItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"packages":{"$ref":"#/components/schemas/ReportSummaryPackages"},"refresh_inputs":{"$ref":"#/components/schemas/ReportSummaryRefresh"},"revenue":{"$ref":"#/components/schemas/ReportSummaryRevenue"},"scope":{"$ref":"#/components/schemas/ReportScope"}},"required":["addons","capacity","customers","freshness_mode","highlights","limitations","packages","refresh_inputs","revenue","scope"],"type":"object"},"HeadlessSubscriptionPlanPrivateOfferRequest":{"additionalProperties":false,"properties":{"delivery":{"enum":["payment_link","grant"],"type":"string"},"plan_attrs":{"$ref":"#/components/schemas/HeadlessSubscriptionPlanUpdateRequest"},"target_user_id":{"format":"uuid","type":"string"},"validity":{"additionalProperties":false,"properties":{"unit":{"enum":["minutes","hours","days"],"type":"string"},"value":{"type":"integer"}},"required":["value","unit"],"type":"object"}},"required":["plan_attrs","target_user_id","delivery"],"title":"HeadlessSubscriptionPlanPrivateOfferRequest","type":"object"},"HeadlessExternalPayableOutcomeInput":{"additionalProperties":false,"properties":{"outcome":{"enum":["failed","void"],"type":"string"},"outcome_id":{"format":"uuid","type":"string"}},"required":["outcome_id","outcome"],"type":"object"},"HeadlessBookingQuoteSelection":{"additionalProperties":false,"properties":{"sessions":{"items":{"additionalProperties":true,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"addon_version_id":{"format":"uuid","type":"string"},"name":{"type":"string"},"price_unit":{"nullable":true,"type":"string"},"quantity":{"minimum":1,"type":"integer"},"unit_price":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["addon_id","addon_version_id","name","quantity","unit_price"],"type":"object"},"type":"array"},"date":{"format":"date","type":"string"},"day_rate_amount":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"day_rate_by_the_hour":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"day_rate_minutes":{"minimum":1,"type":"integer"},"day_rate_name":{"type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"file_transfer_option_id":{"format":"uuid","nullable":true,"type":"string"},"file_transfer_option_price":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"file_transfer_option_title":{"nullable":true,"type":"string"},"file_transfer_option_version_id":{"format":"uuid","nullable":true,"type":"string"},"price_breakdown_lines":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"resolved_price":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"room_id":{"format":"uuid","type":"string"},"room_name":{"type":"string"},"seats":{"minimum":1,"nullable":true,"type":"integer"},"service_day_rate_id":{"format":"uuid","type":"string"},"service_id":{"format":"uuid","type":"string"},"service_name":{"type":"string"},"service_price":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"service_price_unit":{"type":"string"},"service_version_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","type":"string"},"setup_name":{"type":"string"},"setup_version_id":{"format":"uuid","type":"string"},"start_time":{"type":"string"}},"required":["service_id","service_version_id","setup_id","setup_version_id","room_id","date","start_time","duration_minutes","seats","addons"],"type":"object"},"type":"array"}},"required":["sessions"],"type":"object"},"ReportSummaryEnvelope":{"additionalProperties":true,"properties":{"data":{"$ref":"#/components/schemas/ReportBusinessSummary"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"},"HeadlessSquareTokenRequest":{"additionalProperties":false,"properties":{"square_token":{"minLength":1,"type":"string"}},"required":["square_token"],"type":"object"},"ReportEvidenceHeadline":{"additionalProperties":true,"properties":{"additional":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true},"base":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true},"bundle_delivered_session_count":{"minimum":0,"type":"integer"},"bundle_delivered_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"client_count":{"minimum":0,"type":"integer"},"counter_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"current_available_subscription_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"current_period_available_subscription_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"effective_selected_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"excess_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"held_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"linked_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"minutes":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"non_package":{"$ref":"#/components/schemas/ReportCohort"},"package":{"$ref":"#/components/schemas/ReportCohort"},"package_included_line_count":{"minimum":0,"type":"integer"},"purchase_count":{"minimum":0,"type":"integer"},"raw_selected_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"record_count":{"minimum":0,"type":"integer"},"renewal_count":{"minimum":0,"type":"integer"},"rollover_available_subscription_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"separately_selected_line_count":{"minimum":0,"type":"integer"},"subscription_booking_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"subscription_delivered_session_count":{"minimum":0,"type":"integer"},"subscription_manual_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"subscription_restored_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"total":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true},"unknown_provenance_line_count":{"minimum":0,"type":"integer"},"unlinked_units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["record_count"],"type":"object"},"HeadlessExternalPayable":{"additionalProperties":false,"properties":{"action_required":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"type":"string"},"status":{"type":"string"}},"required":["id","kind","status"],"type":"object"},"amount_due":{"type":"string"},"booking_id":{"format":"uuid","nullable":true,"type":"string"},"booking_status":{"nullable":true,"type":"string"},"collected_amount":{"type":"string"},"coverage":{"type":"string"},"currency":{"type":"string"},"fulfillment_status":{"type":"string"},"id":{"format":"uuid","type":"string"},"invoice":{"allOf":[{"$ref":"#/components/schemas/HeadlessInvoiceOutcome"}],"nullable":true},"notifications":{"allOf":[{"$ref":"#/components/schemas/HeadlessNotificationProcessing"}],"nullable":true},"payment_id":{"format":"uuid","type":"string"},"payment_status":{"type":"string"},"refunded_amount":{"type":"string"},"required_action_amount":{"nullable":true,"type":"string"},"required_action_count":{"minimum":0,"type":"integer"}},"required":["id","payment_id","currency","amount_due","collected_amount","refunded_amount","coverage","payment_status","fulfillment_status"],"type":"object"},"HeadlessCancellation":{"additionalProperties":false,"properties":{"action_required":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"type":"string"},"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"enum":["external_refund"],"type":"string"},"status":{"enum":["required"],"type":"string"}},"required":["id","kind","status","amount","currency"],"type":"object"},"booking_id":{"format":"uuid","type":"string"},"fingerprint":{"type":"string"},"id":{"format":"uuid","type":"string"},"items":{"items":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"collections":{"items":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"available_amount":{"type":"string"},"collection_id":{"format":"uuid","type":"string"},"currency":{"type":"string"},"refunded_amount":{"type":"string"}},"required":["collection_id","amount","currency","refunded_amount","available_amount"],"type":"object"},"maxItems":25,"type":"array"},"collections_next_cursor":{"nullable":true,"type":"string"},"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"type":"string"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"provider":{"nullable":true,"type":"string"},"remaining_amount":{"type":"string"},"status":{"type":"string"}},"required":["id","kind","provider","status","amount","remaining_amount","currency","collections","collections_next_cursor"],"type":"object"},"type":"array"},"refund_amount":{"type":"string"},"refund_status":{"enum":["planned","processing","completed","partially_resolved","failed","conflict","reconciling","awaiting_cash"],"type":"string"},"refunded_amount":{"type":"string"},"required_action_amount":{"type":"string"}},"required":["id","booking_id","fingerprint","refund_status","refund_amount","refunded_amount","required_action_amount","action_required","items"],"type":"object"},"HeadlessAcceptance":{"additionalProperties":false,"description":"Immutable result of command acceptance. Accepted means recorded/enqueued, not delivered. Fetch the owned resource for current asynchronous state. Unknown requires reconciliation, not blind duplicate collection.","properties":{"action":{"enum":["accepted","action_required","succeeded","unknown"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"client_id":{"format":"uuid","type":"string"},"collection_id":{"format":"uuid","type":"string"},"payment_id":{"format":"uuid","type":"string"},"reason_code":{"description":"Original external report refusal reason; current resolution is fetched separately.","type":"string"},"replayed":{"type":"boolean"},"resource_id":{"format":"uuid","type":"string"},"resource_type":{"enum":["services","rooms","setups","addons","bundle_plans","subscription_plans","headless_checkout","headless_purchase","external_payment_report","external_payable"],"type":"string"},"session_id":{"format":"uuid","type":"string"}},"required":["action","replayed"],"title":"HeadlessAcceptance","type":"object"},"HeadlessAmendmentPreview":{"additionalProperties":false,"properties":{"owner_id":{"format":"uuid","type":"string"},"quote":{"additionalProperties":true,"type":"object"},"version":{"type":"string"}},"required":["owner_id","version","quote"],"type":"object"},"HeadlessCreateClientRequest":{"additionalProperties":false,"properties":{"account_type":{"default":"external","description":"New people default to external. Standard is an explicit activation request, requires clients:request_activation and email ownership proof; it never grants login by a typed email.","enum":["external","standard"],"type":"string"},"email":{"format":"email","type":"string"},"external_id":{"maxLength":255,"type":"string"},"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"send_invitation":{"default":false,"description":"Only with account_type=standard. Studio explicitly chooses whether to email the activation proof.","type":"boolean"},"source":{"maxLength":255,"type":"string"}},"required":["email"],"title":"HeadlessCreateClientRequest","type":"object"},"ReportSummaryPackages":{"additionalProperties":true,"properties":{"calculated_at":{"format":"date-time","type":"string"},"comparison":{"additionalProperties":true,"nullable":true,"properties":{"bundle_delivered_session_count":{"minimum":0,"type":"integer"},"bundle_delivered_units":{"minimum":0,"type":"integer"},"bundle_purchase_count":{"minimum":0,"type":"integer"},"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"additionalProperties":true,"properties":{"currency":{"type":"string"},"renewal_count":{"minimum":0,"type":"integer"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["currency","renewal_count","total"],"type":"object"},"type":"array"},"purchase_count":{"minimum":0,"type":"integer"},"renewal_count":{"minimum":0,"type":"integer"},"subscription_booking_units":{"minimum":0,"type":"integer"},"subscription_delivered_session_count":{"minimum":0,"type":"integer"},"subscription_manual_units":{"minimum":0,"type":"integer"},"subscription_purchase_count":{"minimum":0,"type":"integer"},"subscription_restored_units":{"minimum":0,"type":"integer"}},"required":["bundle_delivered_session_count","bundle_delivered_units","bundle_purchase_count","currency_coverage","currency_groups","purchase_count","renewal_count","subscription_booking_units","subscription_delivered_session_count","subscription_manual_units","subscription_purchase_count","subscription_restored_units"],"type":"object"},"current":{"additionalProperties":true,"properties":{"bundle_delivered_session_count":{"minimum":0,"type":"integer"},"bundle_delivered_units":{"minimum":0,"type":"integer"},"bundle_purchase_count":{"minimum":0,"type":"integer"},"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"additionalProperties":true,"properties":{"currency":{"type":"string"},"renewal_count":{"minimum":0,"type":"integer"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["currency","renewal_count","total"],"type":"object"},"type":"array"},"purchase_count":{"minimum":0,"type":"integer"},"renewal_count":{"minimum":0,"type":"integer"},"subscription_booking_units":{"minimum":0,"type":"integer"},"subscription_delivered_session_count":{"minimum":0,"type":"integer"},"subscription_manual_units":{"minimum":0,"type":"integer"},"subscription_purchase_count":{"minimum":0,"type":"integer"},"subscription_restored_units":{"minimum":0,"type":"integer"}},"required":["bundle_delivered_session_count","bundle_delivered_units","bundle_purchase_count","currency_coverage","currency_groups","purchase_count","renewal_count","subscription_booking_units","subscription_delivered_session_count","subscription_manual_units","subscription_purchase_count","subscription_restored_units"],"type":"object"},"definitions":{"items":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment"],"type":"string"},"type":"array"},"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"maxItems":0,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observation":{"additionalProperties":true,"nullable":true,"properties":{"counter_units":{"minimum":0,"type":"integer"},"current_available_subscription_units":{"minimum":0,"type":"integer"},"current_period_available_subscription_units":{"minimum":0,"type":"integer"},"excess_units":{"minimum":0,"type":"integer"},"held_units":{"minimum":0,"type":"integer"},"linked_units":{"minimum":0,"type":"integer"},"rollover_available_subscription_units":{"minimum":0,"type":"integer"},"unlinked_units":{"minimum":0,"type":"integer"}},"required":["counter_units","current_available_subscription_units","current_period_available_subscription_units","excess_units","held_units","linked_units","rollover_available_subscription_units","unlinked_units"],"type":"object"},"scope":{"$ref":"#/components/schemas/ReportScope"},"status":{"enum":["available","partial","unavailable"],"type":"string"}},"required":["calculated_at","comparison","current","definitions","evidence","limitations","observation","scope","status"],"type":"object"},"HeadlessBookingCancellationInput":{"additionalProperties":false,"properties":{"expected_fingerprint":{"minLength":1,"type":"string"},"slot_id":{"format":"uuid","type":"string"}},"type":"object"},"ReportMoney":{"additionalProperties":true,"properties":{"amount":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"currency":{"type":"string"},"minor_unit_digits":{"minimum":0,"type":"integer"}},"required":["amount","currency","minor_unit_digits"],"type":"object"},"HeadlessBundlePlanOffer":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"billing_scope":{"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"quantity":{"type":"integer"}},"required":["id","name","quantity","billing_scope"],"type":"object"},"type":"array"},"addons_pagination":{"additionalProperties":false,"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["page","per_page","total"],"type":"object"},"currency":{"type":"string"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"type":"integer"},"id":{"format":"uuid","type":"string"},"images":{"additionalProperties":true,"type":"object"},"included_items":{"items":{"type":"string"},"type":"array"},"included_items_pagination":{"additionalProperties":false,"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["page","per_page","total"],"type":"object"},"name":{"type":"string"},"options":{"items":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"basis":{"type":"string"},"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"session_count":{"type":"integer"},"tax_mode":{"type":"string"},"unit":{"type":"string"}},"required":["id","amount","currency","unit","tax_mode","basis"],"type":"object"},"type":"array"},"options_pagination":{"additionalProperties":false,"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["page","per_page","total"],"type":"object"},"service":{"additionalProperties":false,"nullable":true,"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"validity_days":{"maximum":36500,"minimum":1,"nullable":true,"type":"integer"},"version_id":{"format":"uuid","type":"string"}},"required":["id","version_id","name","options","options_pagination","addons","addons_pagination","included_items","included_items_pagination","images"],"title":"HeadlessBundlePlanOffer","type":"object"},"HeadlessSessionAmendmentConfirmInput":{"additionalProperties":false,"properties":{"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["none","use"],"type":"string"},"credit_limit":{"type":"string"},"expected_version":{"type":"string"},"payment_source":{"enum":["native","external"],"type":"string"},"proposal":{"$ref":"#/components/schemas/HeadlessSessionAmendmentProposal"}},"required":["proposal","payment_source","credit_choice","consents","expected_version"],"type":"object"},"HeadlessSubscriptionPlanOffer":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"billing_scope":{"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"quantity":{"type":"integer"}},"required":["id","name","quantity","billing_scope"],"type":"object"},"type":"array"},"addons_pagination":{"additionalProperties":false,"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["page","per_page","total"],"type":"object"},"currency":{"type":"string"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"type":"integer"},"id":{"format":"uuid","type":"string"},"images":{"additionalProperties":true,"type":"object"},"included_items":{"items":{"type":"string"},"type":"array"},"included_items_pagination":{"additionalProperties":false,"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["page","per_page","total"],"type":"object"},"name":{"type":"string"},"options":{"items":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"basis":{"type":"string"},"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"period_months":{"type":"integer"},"sessions_per_month":{"type":"integer"},"tax_mode":{"type":"string"},"total_sessions":{"type":"integer"},"unit":{"type":"string"}},"required":["id","amount","currency","unit","tax_mode","basis"],"type":"object"},"type":"array"},"options_pagination":{"additionalProperties":false,"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["page","per_page","total"],"type":"object"},"service":{"additionalProperties":false,"nullable":true,"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"terms":{"additionalProperties":false,"properties":{"cancellation_fee_amount":{"nullable":true,"type":"string"},"cancellation_policy":{"nullable":true,"type":"string"},"rollover_days":{"type":"integer"},"rollover_unlimited":{"type":"boolean"}},"required":["rollover_days","rollover_unlimited","cancellation_policy","cancellation_fee_amount"],"type":"object"},"version_id":{"format":"uuid","type":"string"}},"required":["id","version_id","name","options","options_pagination","addons","addons_pagination","included_items","included_items_pagination","images"],"title":"HeadlessSubscriptionPlanOffer","type":"object"},"ReportCustomerCurrency":{"additionalProperties":true,"properties":{"client_count":{"minimum":0,"type":"integer"},"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"currency":{"type":"string"},"payment_count":{"minimum":0,"type":"integer"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["client_count","comparison","currency","payment_count","total"],"type":"object"},"ReportEvidencePage":{"additionalProperties":true,"properties":{"basis":{"enum":["recognized_sold","recognized_delivered","recognized_backlog"],"nullable":true,"type":"string"},"calculated_at":{"format":"date-time","type":"string"},"cohort":{"enum":["all","returning"],"type":"string"},"component":{"enum":["payments","booking_payments","clients","activity_clients","recognition_contributions","capacity_intervals","bundle_purchases","subscription_purchases","renewal_payments","bundle_redemptions","subscription_uses","subscription_redemptions","bundle_counter_observation","subscription_allowance_observation","selection_lines","attachment_sessions","addon_value_contributions"],"type":"string"},"currency":{"nullable":true,"type":"string"},"currency_selection":{"enum":["known","unknown","not_applicable"],"type":"string"},"current_headline":{"$ref":"#/components/schemas/ReportEvidenceHeadline"},"has_more":{"type":"boolean"},"headline_restated":{"type":"boolean"},"kind":{"enum":["client_evidence","session_evidence","booking_purchase_evidence","bundle_purchase_evidence","subscription_purchase_evidence","subscription_renewal_evidence","bundle_usage_evidence","subscription_usage_evidence","transaction_evidence"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"metric":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment"],"type":"string"},"next_cursor":{"nullable":true,"type":"string"},"original_headline":{"$ref":"#/components/schemas/ReportEvidenceHeadline"},"pagination_mode":{"enum":["live"],"type":"string"},"refresh_inputs":{"$ref":"#/components/schemas/ReportRefresh"},"rows":{"items":{"$ref":"#/components/schemas/ReportEvidenceRow"},"maxItems":100,"type":"array"},"scope":{"$ref":"#/components/schemas/ReportScope"},"side":{"enum":["current","comparison","observation"],"type":"string"}},"required":["basis","calculated_at","cohort","component","currency","currency_selection","current_headline","has_more","headline_restated","kind","limitations","metric","next_cursor","original_headline","pagination_mode","refresh_inputs","rows","scope","side"],"type":"object"},"ReportWindow":{"additionalProperties":true,"properties":{"elapsed_calendar_days":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"ends_before":{"format":"date-time","type":"string"},"from_date":{"format":"date","nullable":true,"type":"string"},"observed_before":{"format":"date-time","type":"string"},"partial_period":{"type":"boolean"},"starts_at":{"format":"date-time","nullable":true,"type":"string"},"to_date":{"format":"date","type":"string"}},"required":["elapsed_calendar_days","ends_before","from_date","observed_before","partial_period","starts_at","to_date"],"type":"object"},"HeadlessExternalRefundInput":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"cancellation_refund_item_id":{"format":"uuid","type":"string"},"collection_id":{"format":"uuid","type":"string"},"currency":{"type":"string"},"payment_id":{"format":"uuid","type":"string"},"refund_id":{"format":"uuid","type":"string"},"replaces_refund_id":{"format":"uuid","type":"string"}},"required":["payment_id","collection_id","refund_id","amount","currency"],"type":"object"},"HeadlessAddonAuthoring":{"additionalProperties":false,"properties":{"base_price":{"description":"Configured decimal amount in studio currency; domain validates precision and rules","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"configured_prices":{"$ref":"#/components/schemas/HeadlessConfiguredPrices"},"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"includes_file_transfer":{"type":"boolean"},"is_active":{"type":"boolean"},"max_quantity":{"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"type":"object"},"min_quantity":{"nullable":true,"type":"integer"},"name":{"type":"string"},"price":{"$ref":"#/components/schemas/HeadlessConfiguredRate"},"price_unit":{"type":"string"},"type":{"enum":["standard","standard_with_file_transfer","file_transfer"],"type":"string"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"},"visible_on_booking":{"type":"boolean"}},"required":["id","version_id","version_number","is_active","name","images"],"title":"HeadlessAddonAuthoring","type":"object"},"HeadlessExternalRefundCollectionPage":{"additionalProperties":false,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"available_amount":{"type":"string"},"collection_id":{"format":"uuid","type":"string"},"currency":{"type":"string"},"refunded_amount":{"type":"string"}},"required":["collection_id","amount","currency","refunded_amount","available_amount"],"type":"object"},"maxItems":100,"type":"array"},"next_cursor":{"nullable":true,"type":"string"}},"required":["entries","next_cursor"],"type":"object"},"ReportEvidenceEnvelope":{"additionalProperties":true,"properties":{"data":{"$ref":"#/components/schemas/ReportEvidencePage"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"},"ReportDefinition":{"additionalProperties":true,"properties":{"cancellations":{"type":"string"},"coverage":{"type":"string"},"credits":{"type":"string"},"date_basis":{"type":"string"},"financial_basis":{"type":"string"},"id":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment","completed_visits"],"type":"string"},"label":{"type":"string"},"policy_version":{"type":"string"},"purchase_rails":{"type":"string"},"refunds":{"type":"string"},"tax":{"type":"string"},"unit":{"enum":["currency","clients","visits","hours","purchases","renewals","entitlement_units","quantity","ratio"],"type":"string"}},"required":["cancellations","coverage","credits","date_basis","financial_basis","id","label","policy_version","purchase_rails","refunds","tax","unit"],"type":"object"},"ReportRefresh":{"additionalProperties":{"oneOf":[{"type":"string"},{"type":"integer"}]},"description":"Flat canonical controls. To change only a preset, the host removes old current and comparison date bounds first; a fresh report recomputes observation time.","type":"object"},"HeadlessBundlePlanPrivateOfferRequest":{"additionalProperties":false,"properties":{"delivery":{"enum":["payment_link","grant"],"type":"string"},"plan_attrs":{"$ref":"#/components/schemas/HeadlessBundlePlanUpdateRequest"},"target_user_id":{"format":"uuid","type":"string"},"validity":{"additionalProperties":false,"properties":{"unit":{"enum":["minutes","hours","days"],"type":"string"},"value":{"type":"integer"}},"required":["value","unit"],"type":"object"}},"required":["plan_attrs","target_user_id","delivery"],"title":"HeadlessBundlePlanPrivateOfferRequest","type":"object"},"ReportPackageResult":{"additionalProperties":true,"properties":{"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"comparison_currency_coverage":{"allOf":[{"$ref":"#/components/schemas/ReportCoverage"}],"nullable":true},"comparison_totals":{"$ref":"#/components/schemas/ReportPackageTotals"},"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"$ref":"#/components/schemas/ReportPackageCurrency"},"type":"array"},"definition":{"$ref":"#/components/schemas/ReportDefinition"},"has_more":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"metric":{"enum":["package_purchases","package_renewals","package_consumption"],"type":"string"},"next_page":{"minimum":1,"nullable":true,"type":"integer"},"page":{"minimum":1,"type":"integer"},"page_size":{"maximum":100,"minimum":1,"type":"integer"},"refresh_inputs":{"$ref":"#/components/schemas/ReportRefresh"},"row_count":{"minimum":0,"type":"integer"},"rows":{"items":{"$ref":"#/components/schemas/ReportPackageRow"},"maxItems":100,"type":"array"},"scope":{"$ref":"#/components/schemas/ReportScope"},"totals":{"$ref":"#/components/schemas/ReportPackageTotals"},"undated_bundle_reconciliation":{"additionalProperties":true,"properties":{"counter_units":{"minimum":0,"type":"integer"},"excess_units":{"minimum":0,"type":"integer"},"held_units":{"minimum":0,"type":"integer"},"linked_units":{"minimum":0,"type":"integer"},"unlinked_units":{"minimum":0,"type":"integer"}},"required":["counter_units","excess_units","held_units","linked_units","unlinked_units"],"type":"object"}},"required":["comparison","comparison_currency_coverage","comparison_totals","currency_coverage","currency_groups","definition","has_more","limitations","metric","next_page","page","page_size","refresh_inputs","row_count","rows","scope","totals","undated_bundle_reconciliation"],"type":"object"},"HeadlessConfiguredRate":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"basis":{"enum":["catalog_rate"],"type":"string"},"currency":{"type":"string"},"tax_mode":{"enum":["including_tax","excluding_tax"],"type":"string"},"unit":{"type":"string"}},"required":["amount","currency","unit","basis","tax_mode"],"type":"object"},"HeadlessSubscriptionManagement":{"additionalProperties":false,"properties":{"capabilities":{"additionalProperties":false,"properties":{"cancel":{"type":"boolean"},"change_plan":{"enum":[false],"type":"boolean"},"pause":{"enum":[false],"type":"boolean"},"resume":{"enum":[false],"type":"boolean"},"update_payment_method":{"type":"boolean"}},"required":["cancel","change_plan","pause","resume","update_payment_method"],"type":"object"},"client_id":{"format":"uuid","type":"string"},"failure_code":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"instruction":{"additionalProperties":false,"nullable":true,"properties":{"kind":{"enum":["billing_portal"],"type":"string"},"url":{"format":"uri","type":"string"}},"required":["kind","url"],"type":"object"},"management_status":{"enum":["pending","ready","failed"],"nullable":true,"type":"string"},"plan_snapshot":{"additionalProperties":true,"nullable":true,"type":"object"},"remaining_units":{"minimum":0,"type":"integer"},"subscription_status":{"type":"string"},"term_end":{"format":"date-time","nullable":true,"type":"string"},"term_start":{"format":"date-time","nullable":true,"type":"string"}},"required":["capabilities","client_id","failure_code","id","instruction","management_status","plan_snapshot","remaining_units","subscription_status","term_end","term_start"],"type":"object"},"HeadlessSubscriptionPlanCreateRequest":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"quantity":{"type":"integer"}},"required":["addon_id","quantity","billing_scope"],"type":"object"},"type":"array"},"cancellation_fee_amount":{"nullable":true,"type":"string"},"cancellation_policy":{"nullable":true,"type":"string"},"card_color":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"type":"integer"},"durations":{"items":{"additionalProperties":false,"properties":{"discount_type":{"type":"string"},"discount_value":{"type":"string"},"period_months":{"type":"integer"},"price":{"type":"string"},"session_count":{"type":"integer"},"show_on_home":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["session_count"],"type":"object"},"type":"array"},"images":{"additionalProperties":true,"type":"object"},"is_special_offer":{"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"rollover_days":{"type":"integer"},"rollover_unlimited":{"type":"boolean"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"show_in_top_bar":{"type":"boolean"},"special_offer_badge":{"nullable":true,"type":"string"},"special_offer_card_title":{"nullable":true,"type":"string"},"special_offer_images":{"additionalProperties":true,"type":"object"},"special_offer_text":{"nullable":true,"type":"string"}},"required":["name","duration_minutes","service_id"],"title":"HeadlessSubscriptionPlanCreateRequest","type":"object"},"HeadlessRoomUpdateRequest":{"additionalProperties":false,"properties":{"capacity":{"type":"integer"},"description":{"nullable":true,"type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"overrides":{"$ref":"#/components/schemas/HeadlessCatalogOverrides"}},"title":"HeadlessRoomUpdateRequest","type":"object"},"HeadlessAddonCreateRequest":{"additionalProperties":false,"properties":{"base_price":{"description":"Configured decimal amount in studio currency; domain validates precision and rules","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"description":{"nullable":true,"type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"includes_file_transfer":{"type":"boolean"},"max_quantity":{"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"type":"object"},"min_quantity":{"nullable":true,"type":"integer"},"name":{"type":"string"},"price_unit":{"type":"string"},"type":{"enum":["standard","standard_with_file_transfer","file_transfer"],"type":"string"},"visible_on_booking":{"type":"boolean"}},"required":["name","base_price"],"title":"HeadlessAddonCreateRequest","type":"object"},"ReportCapacityResult":{"additionalProperties":true,"properties":{"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"comparison_totals":{"$ref":"#/components/schemas/ReportCapacityFacts"},"coverage":{"additionalProperties":true,"properties":{"covered_available_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"invalid_interval_count":{"minimum":0,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"}},"required":["covered_available_minutes","invalid_interval_count","limitations"],"type":"object"},"definition":{"$ref":"#/components/schemas/ReportDefinition"},"group_by":{"enum":["room","weekday","hour"],"type":"string"},"has_more":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"metric":{"enum":["available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours"],"type":"string"},"next_page":{"minimum":1,"nullable":true,"type":"integer"},"page":{"minimum":1,"type":"integer"},"page_size":{"maximum":100,"minimum":1,"type":"integer"},"refresh_inputs":{"$ref":"#/components/schemas/ReportRefresh"},"row_count":{"minimum":0,"type":"integer"},"rows":{"items":{"$ref":"#/components/schemas/ReportCapacityFacts"},"maxItems":100,"type":"array"},"schedule_basis":{"enum":["current_schedule_applied_to_requested_dates"],"type":"string"},"scope":{"$ref":"#/components/schemas/ReportScope"},"sort":{"enum":["metric","underuse","utilization"],"type":"string"},"totals":{"$ref":"#/components/schemas/ReportCapacityFacts"}},"required":["comparison","comparison_totals","coverage","definition","group_by","has_more","limitations","metric","next_page","page","page_size","refresh_inputs","row_count","rows","schedule_basis","scope","sort","totals"],"type":"object"},"HeadlessPackageRedemptionInput":{"additionalProperties":false,"properties":{"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"member_package_id":{"format":"uuid","type":"string"},"sessions":{"items":{"additionalProperties":false,"properties":{"custom_form_answers":{"additionalProperties":{"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"type":"object"},"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"guests":{"items":{"additionalProperties":false,"properties":{"email":{"nullable":true,"type":"string"},"name":{"type":"string"},"notes":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"}},"required":["name"],"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"notes":{"nullable":true,"type":"string"},"recording_seats":{"minimum":1,"type":"integer"},"selected_one_off_addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"pattern":"^\\d{2}:\\d{2}(:\\d{2})?$","type":"string"}},"required":["date","setup_id","start_time"],"type":"object"},"minItems":1,"type":"array"}},"required":["consents","member_package_id","sessions"],"type":"object"},"HeadlessTourQuoteRequest":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"}},"type":"object"},"HeadlessRoomCreateRequest":{"additionalProperties":false,"properties":{"capacity":{"type":"integer"},"description":{"nullable":true,"type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"overrides":{"$ref":"#/components/schemas/HeadlessCatalogOverrides"}},"required":["name"],"title":"HeadlessRoomCreateRequest","type":"object"},"HeadlessClient":{"additionalProperties":false,"properties":{"account_lifecycle":{"enum":["external","standard"],"type":"string"},"email":{"format":"email","type":"string"},"external_references":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"source":{"type":"string"}},"required":["source","external_id"],"type":"object"},"type":"array"},"first_name":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"last_name":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"}},"required":["id","email","account_lifecycle","external_references"],"title":"HeadlessClient","type":"object"},"HeadlessSetupAuthoring":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"configured_prices":{"$ref":"#/components/schemas/HeadlessConfiguredPrices"},"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"is_active":{"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"overrides":{"$ref":"#/components/schemas/HeadlessCatalogOverrides"},"room_id":{"format":"uuid","type":"string"},"seat_count":{"type":"integer"},"service_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"}},"required":["id","version_id","version_number","is_active","name","images"],"title":"HeadlessSetupAuthoring","type":"object"},"ReportScope":{"additionalProperties":true,"properties":{"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportWindow"}],"nullable":true},"current":{"$ref":"#/components/schemas/ReportWindow"},"filters":{"$ref":"#/components/schemas/ReportFilters"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"$ref":"#/components/schemas/ReportMetadata"},"refresh_inputs":{"$ref":"#/components/schemas/ReportRefresh"}},"required":["comparison","current","filters","limitations","metadata","refresh_inputs"],"type":"object"},"HeadlessTourOffer":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"consents":{"items":{"additionalProperties":false,"properties":{"content":{"nullable":true,"type":"string"},"title":{"nullable":true,"type":"string"},"type":{"type":"string"}},"required":["type","title","content"],"type":"object"},"type":"array"},"description":{"nullable":true,"type":"string"},"details":{"additionalProperties":false,"properties":{"asks_phone?":{"type":"boolean"},"guests":{"additionalProperties":false,"properties":{"allowed":{"minimum":0,"type":"integer"},"findings":{"additionalProperties":{"items":{"enum":["first_name_missing","last_name_missing","name_too_long","email_missing","email_too_long","invalid_email","duplicate_email"],"type":"string"},"type":"array"},"type":"object"},"surplus":{"minimum":0,"type":"integer"},"unreadable?":{"type":"boolean"}},"required":["allowed","surplus","unreadable?","findings"],"type":"object"},"missing_phone":{"enum":["missing","invalid",null],"nullable":true,"type":"string"},"missing_questions":{"items":{"type":"string"},"type":"array"},"step_applies?":{"type":"boolean"}},"required":["step_applies?","asks_phone?","missing_questions","missing_phone"],"type":"object"},"duration_minutes":{"minimum":1,"type":"integer"},"guests_allowed":{"maximum":20,"minimum":0,"type":"integer"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"phone_required":{"type":"boolean"},"price":{"additionalProperties":false,"properties":{"addons_total":{"type":"string"},"currency":{"type":"string"},"entered":{"type":"string"},"line_items":{"items":{"additionalProperties":false,"properties":{"addon_version_id":{"format":"uuid","type":"string"},"base_price":{"type":"string"},"line_total":{"type":"string"},"name":{"type":"string"},"quantity":{"minimum":1,"type":"integer"},"unit_price":{"type":"string"}},"required":["addon_version_id","name","quantity","unit_price","base_price","line_total"],"type":"object"},"type":"array"},"subtotal":{"type":"string"},"tax_amount":{"type":"string"},"tax_rate":{"type":"string"},"total":{"type":"string"},"tour_line":{"type":"string"}},"required":["addons_total","currency","entered","line_items","subtotal","tax_amount","tax_rate","total","tour_line"],"type":"object"},"questions":{"items":{"additionalProperties":false,"properties":{"helper":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"options":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"type":"object"},"type":"array"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"type":{"enum":["text","single_select","multi_select"],"type":"string"}},"required":["id","type","label","helper","placeholder","required","options"],"type":"object"},"type":"array"},"scheduling_mode":{"enum":["setup_bound","studio_wide"],"type":"string"},"setup_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"slug":{"type":"string"},"tour_type":{"enum":["free","paid"],"type":"string"}},"required":["addon_ids","consents","description","details","duration_minutes","guests_allowed","id","name","phone_required","price","questions","scheduling_mode","setup_ids","slug","tour_type"],"type":"object"},"ReportCustomerRow":{"additionalProperties":true,"properties":{"client_id":{"format":"uuid","type":"string"},"completed_visit_count":{"minimum":0,"nullable":true,"type":"integer"},"last_completed_visit_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"next_confirmed_session_at":{"format":"date-time","nullable":true,"type":"string"},"next_confirmed_session_id":{"format":"uuid","nullable":true,"type":"string"},"rank":{"minimum":1,"nullable":true,"type":"integer"},"total_spend":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true}},"required":["client_id","completed_visit_count","last_completed_visit_at","name","next_confirmed_session_at","next_confirmed_session_id","rank","total_spend"],"type":"object"},"ReportAddonResult":{"additionalProperties":true,"properties":{"attachment":{"$ref":"#/components/schemas/ReportAttachment"},"basis":{"enum":["recognized_sold","recognized_delivered","recognized_backlog"],"type":"string"},"comparison_attachment":{"$ref":"#/components/schemas/ReportAttachment"},"comparison_currency_coverage":{"allOf":[{"$ref":"#/components/schemas/ReportCoverage"}],"nullable":true},"comparison_totals":{"$ref":"#/components/schemas/ReportAddonTotals"},"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"$ref":"#/components/schemas/ReportAddonCurrency"},"type":"array"},"definition":{"$ref":"#/components/schemas/ReportDefinition"},"has_more":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"metric":{"enum":["addon_selections","addon_value","addon_attachment"],"type":"string"},"next_page":{"minimum":1,"nullable":true,"type":"integer"},"page":{"minimum":1,"type":"integer"},"page_size":{"maximum":100,"minimum":1,"type":"integer"},"refresh_inputs":{"$ref":"#/components/schemas/ReportRefresh"},"row_count":{"minimum":0,"type":"integer"},"rows":{"items":{"$ref":"#/components/schemas/ReportAddonRow"},"maxItems":100,"type":"array"},"scope":{"$ref":"#/components/schemas/ReportScope"},"totals":{"$ref":"#/components/schemas/ReportAddonTotals"}},"required":["attachment","basis","comparison_attachment","comparison_currency_coverage","comparison_totals","currency_coverage","currency_groups","definition","has_more","limitations","metric","next_page","page","page_size","refresh_inputs","row_count","rows","scope","totals"],"type":"object"},"HeadlessGuestInput":{"additionalProperties":false,"properties":{"email":{"type":"string"},"name":{"type":"string"},"notes":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"}},"required":["name"],"type":"object"},"ReportPackageObservation":{"additionalProperties":true,"properties":{"counter_units":{"minimum":0,"type":"integer"},"current_available_subscription_units":{"minimum":0,"type":"integer"},"current_period_available_subscription_units":{"minimum":0,"type":"integer"},"excess_units":{"minimum":0,"type":"integer"},"held_units":{"minimum":0,"type":"integer"},"linked_units":{"minimum":0,"type":"integer"},"rollover_available_subscription_units":{"minimum":0,"type":"integer"},"unlinked_units":{"minimum":0,"type":"integer"}},"required":["counter_units","current_available_subscription_units","current_period_available_subscription_units","excess_units","held_units","linked_units","rollover_available_subscription_units","unlinked_units"],"type":"object"},"HeadlessSubscriptionCancellationInput":{"additionalProperties":false,"properties":{},"type":"object"},"ReportMetadata":{"additionalProperties":true,"properties":{"calculated_at":{"format":"date-time","type":"string"},"policy_version":{"enum":["owner_analytics_v1"],"type":"string"},"schema_version":{"enum":[1],"type":"integer"},"studio_id":{"format":"uuid","type":"string"},"studio_name":{"type":"string"},"timezone":{"type":"string"}},"required":["calculated_at","policy_version","schema_version","studio_id","studio_name","timezone"],"type":"object"},"ReportEvidenceRow":{"additionalProperties":true,"properties":{"source_id":{"type":"string"},"slot_id":{"format":"uuid","nullable":true,"type":"string"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"total":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true},"effective_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"is_package":{"type":"boolean"},"package_kind":{"nullable":true,"type":"string"},"next_confirmed_session_id":{"format":"uuid","nullable":true,"type":"string"},"plan_id":{"format":"uuid","nullable":true,"type":"string"},"client_id":{"format":"uuid","nullable":true,"type":"string"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"fact_kind":{"nullable":true,"type":"string"},"package_id":{"format":"uuid","nullable":true,"type":"string"},"provenance":{"enum":["unknown","separately_selected","package_included"],"type":"string"},"additional":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true},"ends_before":{"format":"date-time","nullable":true,"type":"string"},"unallocated_reason":{"nullable":true,"type":"string"},"unlinked_units":{"minimum":0,"type":"integer"},"line_id":{"nullable":true,"type":"string"},"starts_at":{"format":"date-time","nullable":true,"type":"string"},"completed_visit_count":{"minimum":0,"type":"integer"},"base":{"allOf":[{"$ref":"#/components/schemas/ReportMoney"}],"nullable":true},"retained_amount":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"raw_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"next_confirmed_session_at":{"format":"date-time","nullable":true,"type":"string"},"linked_units":{"minimum":0,"type":"integer"},"billing_scope":{"nullable":true,"type":"string"},"last_completed_visit_at":{"format":"date-time","nullable":true,"type":"string"},"booking_id":{"format":"uuid","nullable":true,"type":"string"},"room_id":{"format":"uuid","nullable":true,"type":"string"},"recorded_currency":{"nullable":true,"type":"string"},"minutes":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"held_units":{"minimum":0,"type":"integer"},"paid_attachment":{"type":"boolean"},"excess_units":{"minimum":0,"type":"integer"},"source_kind":{"enum":["schedule","session","hold"],"type":"string"},"addon_id":{"format":"uuid","nullable":true,"type":"string"},"recorded_at":{"format":"date-time","nullable":true,"type":"string"},"units":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"label":{"nullable":true,"type":"string"},"counter_units":{"minimum":0,"type":"integer"}},"required":["source_id"],"type":"object"},"HeadlessCheckoutEmptyRequest":{"additionalProperties":false,"properties":{},"type":"object"},"HeadlessServiceOffer":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"available_for_bundles":{"type":"boolean"},"available_for_subscriptions":{"type":"boolean"},"day_rates":{"items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"min_duration_minutes":{"type":"integer"},"name":{"type":"string"},"price":{"$ref":"#/components/schemas/HeadlessConfiguredRate"}},"required":["id","name","min_duration_minutes","price"],"type":"object"},"type":"array"},"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"is_active":{"type":"boolean"},"name":{"type":"string"},"price":{"$ref":"#/components/schemas/HeadlessConfiguredRate"},"short_description":{"nullable":true,"type":"string"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"},"visible_on_booking":{"type":"boolean"}},"required":["id","version_id","version_number","is_active","name","images"],"title":"HeadlessServiceOffer","type":"object"},"HeadlessSubscriptionQuoteRequest":{"additionalProperties":false,"properties":{"client_id":{"format":"uuid","type":"string"},"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["auto","use","none"],"type":"string"},"duration_id":{"format":"uuid","type":"string"},"invoice_profile":{"additionalProperties":false,"properties":{"billing_fields":{"additionalProperties":{"type":"string"},"type":"object"},"type":{"enum":["individual","business"],"type":"string"}},"type":"object"},"page":{"minimum":1,"type":"integer"},"payment_source":{"default":"native","enum":["native","external"],"type":"string"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"promo_code":{"type":"string"},"subscription_plan_id":{"format":"uuid","type":"string"}},"title":"HeadlessSubscriptionQuoteRequest","type":"object"},"ApiKeyIntrospectionResponse":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"access_level":{"description":"Fixed access level chosen at issuance. Owner includes the current and future studio permission catalog.","enum":["scoped","owner"],"type":"string"},"display_prefix":{"description":"Safe key identifier for display; this is not the bearer secret.","type":"string"},"id":{"format":"uuid","type":"string"},"label":{"type":"string"},"permissions":{"description":"Current effective permissions of the key's service account.","items":{"$ref":"#/components/schemas/ApiPermission"},"type":"array"},"tenant_id":{"format":"uuid","type":"string"}},"required":["id","tenant_id","label","display_prefix","permissions"],"type":"object"},"request_id":{"description":"Request correlation identifier.","type":"string"}},"required":["data","request_id"],"title":"ApiKeyIntrospectionResponse","type":"object"},"ReportRevenueResult":{"additionalProperties":true,"properties":{"comparison_currency_coverage":{"allOf":[{"$ref":"#/components/schemas/ReportCoverage"}],"nullable":true},"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"$ref":"#/components/schemas/ReportRevenueCurrency"},"type":"array"},"definition":{"$ref":"#/components/schemas/ReportDefinition"},"group_by":{"enum":["room","service"],"type":"string"},"has_more":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"metric":{"enum":["recognized_sold","recognized_delivered","recognized_backlog"],"type":"string"},"next_page":{"minimum":1,"nullable":true,"type":"integer"},"page":{"minimum":1,"type":"integer"},"page_size":{"maximum":100,"minimum":1,"type":"integer"},"refresh_inputs":{"$ref":"#/components/schemas/ReportRefresh"},"row_count":{"minimum":0,"type":"integer"},"rows":{"items":{"$ref":"#/components/schemas/ReportRevenueRow"},"maxItems":100,"type":"array"},"scope":{"$ref":"#/components/schemas/ReportScope"}},"required":["comparison_currency_coverage","currency_coverage","currency_groups","definition","group_by","has_more","limitations","metric","next_page","page","page_size","refresh_inputs","row_count","rows","scope"],"type":"object"},"HeadlessExternalPaymentReport":{"additionalProperties":false,"properties":{"acceptance":{"additionalProperties":false,"properties":{"action":{"type":"string"},"booking_id":{"format":"uuid","nullable":true,"type":"string"},"client_id":{"format":"uuid","nullable":true,"type":"string"},"http_status":{"type":"integer"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"reason_code":{"nullable":true,"type":"string"}},"required":["action","http_status"],"type":"object"},"action_required":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"type":"string"},"status":{"type":"string"}},"required":["id","kind","status"],"type":"object"},"amount":{"nullable":true,"type":"string"},"amount_due":{"nullable":true,"type":"string"},"application_status":{"enum":["applied","underfunded","action_required","requires_reconciliation"],"type":"string"},"booking_id":{"format":"uuid","nullable":true,"type":"string"},"booking_status":{"nullable":true,"type":"string"},"collected_amount":{"type":"string"},"collection_id":{"format":"uuid","type":"string"},"coverage":{"enum":["underfunded","covered","unresolved"],"type":"string"},"currency":{"nullable":true,"type":"string"},"fulfillment_status":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"invoice":{"allOf":[{"$ref":"#/components/schemas/HeadlessInvoiceOutcome"}],"nullable":true},"notifications":{"allOf":[{"$ref":"#/components/schemas/HeadlessNotificationProcessing"}],"nullable":true},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"payment_status":{"nullable":true,"type":"string"},"refunded_amount":{"type":"string"},"required_action_amount":{"nullable":true,"type":"string"},"required_action_count":{"minimum":0,"type":"integer"}},"required":["id","collection_id","acceptance","application_status","collected_amount","refunded_amount","coverage"],"type":"object"},"HeadlessServiceAuthoring":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"available_for_bundles":{"type":"boolean"},"available_for_subscriptions":{"type":"boolean"},"base_price":{"description":"Configured decimal amount in studio currency; domain validates precision and rules","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"configured_prices":{"$ref":"#/components/schemas/HeadlessConfiguredPrices"},"day_rates":{"items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"min_duration_minutes":{"type":"integer"},"name":{"type":"string"},"price":{"$ref":"#/components/schemas/HeadlessConfiguredRate"}},"required":["id","name","min_duration_minutes","price"],"type":"object"},"type":"array"},"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"is_active":{"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"price":{"$ref":"#/components/schemas/HeadlessConfiguredRate"},"price_unit":{"type":"string"},"promotion":{"additionalProperties":true,"type":"object"},"short_description":{"nullable":true,"type":"string"},"show_day_rates_on_card":{"type":"boolean"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"},"visible_on_booking":{"type":"boolean"}},"required":["id","version_id","version_number","is_active","name","images"],"title":"HeadlessServiceAuthoring","type":"object"},"HeadlessBookingCheckoutRequest":{"additionalProperties":false,"properties":{"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["auto","use","none"],"type":"string"},"email":{"format":"email","type":"string"},"invoice_profile":{"additionalProperties":false,"properties":{"billing_fields":{"additionalProperties":{"type":"string"},"type":"object"},"type":{"enum":["individual","business"],"type":"string"}},"type":"object"},"promo_code":{"type":"string"},"sessions":{"items":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"custom_form_answers":{"additionalProperties":{"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"type":"object"},"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"file_transfer_option_id":{"format":"uuid","type":"string"},"guests":{"items":{"additionalProperties":false,"properties":{"email":{"nullable":true,"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"},"notes":{"type":"string"},"recording_seats":{"minimum":1,"type":"integer"},"room_id":{"format":"uuid","type":"string"},"service_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"pattern":"^\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?$","type":"string"}},"type":"object"},"type":"array"}},"required":["email","sessions"],"title":"HeadlessBookingCheckoutRequest","type":"object"},"HeadlessMoveInput":{"additionalProperties":false,"properties":{"date":{"format":"date","type":"string"},"setup_id":{"description":"Selects the destination setup for studio-tour sessions only. Ordinary-session moves retain the booked setup; use the session amendment preview and acceptance operations to change it.","format":"uuid","type":"string"},"start_time":{"type":"string"}},"required":["date","start_time"],"type":"object"},"ReportSummaryRevenue":{"additionalProperties":true,"properties":{"calculated_at":{"format":"date-time","type":"string"},"comparison":{"additionalProperties":true,"nullable":true,"properties":{"currency_groups":{"items":{"additionalProperties":true,"properties":{"backlog":{"$ref":"#/components/schemas/ReportMoney"},"currency":{"type":"string"},"delivered":{"$ref":"#/components/schemas/ReportMoney"},"sold":{"$ref":"#/components/schemas/ReportMoney"}},"required":["backlog","currency","delivered","sold"],"type":"object"},"type":"array"}},"required":["currency_groups"],"type":"object"},"current":{"additionalProperties":true,"properties":{"currency_groups":{"items":{"additionalProperties":true,"properties":{"backlog":{"$ref":"#/components/schemas/ReportMoney"},"currency":{"type":"string"},"delivered":{"$ref":"#/components/schemas/ReportMoney"},"sold":{"$ref":"#/components/schemas/ReportMoney"}},"required":["backlog","currency","delivered","sold"],"type":"object"},"type":"array"}},"required":["currency_groups"],"type":"object"},"definitions":{"items":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment"],"type":"string"},"type":"array"},"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"maxItems":0,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observation":{"additionalProperties":true,"nullable":true,"properties":{"counter_units":{"minimum":0,"type":"integer"},"current_available_subscription_units":{"minimum":0,"type":"integer"},"current_period_available_subscription_units":{"minimum":0,"type":"integer"},"excess_units":{"minimum":0,"type":"integer"},"held_units":{"minimum":0,"type":"integer"},"linked_units":{"minimum":0,"type":"integer"},"rollover_available_subscription_units":{"minimum":0,"type":"integer"},"unlinked_units":{"minimum":0,"type":"integer"}},"required":["counter_units","current_available_subscription_units","current_period_available_subscription_units","excess_units","held_units","linked_units","rollover_available_subscription_units","unlinked_units"],"type":"object"},"scope":{"$ref":"#/components/schemas/ReportScope"},"status":{"enum":["available","partial","unavailable"],"type":"string"}},"required":["calculated_at","comparison","current","definitions","evidence","limitations","observation","scope","status"],"type":"object"},"HeadlessBundlePlanAuthoring":{"additionalProperties":false,"properties":{"addons":{"additionalProperties":false,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"id":{"format":"uuid","type":"string"},"quantity":{"type":"integer"}},"required":["addon_id","quantity","billing_scope"],"type":"object"},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"custom":{"type":"boolean"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"type":"integer"},"id":{"format":"uuid","type":"string"},"images":{"additionalProperties":true,"type":"object"},"is_active":{"type":"boolean"},"is_special_offer":{"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"offer_expires_at":{"format":"date-time","nullable":true,"type":"string"},"options":{"additionalProperties":false,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"discount_type":{"type":"string"},"discount_value":{"type":"string"},"id":{"format":"uuid","type":"string"},"price":{"type":"string"},"session_count":{"type":"integer"},"show_discount":{"type":"boolean"},"show_on_home":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["id","session_count","price"],"type":"object"},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"short_description":{"nullable":true,"type":"string"},"show_in_top_bar":{"type":"boolean"},"show_on_home":{"type":"boolean"},"special_offer_badge":{"nullable":true,"type":"string"},"special_offer_card_title":{"nullable":true,"type":"string"},"special_offer_images":{"additionalProperties":true,"type":"object"},"special_offer_text":{"nullable":true,"type":"string"},"target_user_id":{"format":"uuid","nullable":true,"type":"string"},"validity_days":{"maximum":36500,"minimum":1,"nullable":true,"type":"integer"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"}},"required":["id","version_id","version_number","is_active","name","options","addons"],"title":"HeadlessBundlePlanAuthoring","type":"object"},"HeadlessCatalogOverrides":{"additionalProperties":false,"properties":{"prices":{"items":{"additionalProperties":false,"properties":{"price":{"nullable":true,"type":"string"},"service_version_id":{"format":"uuid","type":"string"}},"required":["service_version_id","price"],"type":"object"},"type":"array"},"scheduling":{"additionalProperties":false,"properties":{"buffer_minutes":{"nullable":true,"type":"integer"},"cutoff_hours":{"nullable":true,"type":"integer"},"max_duration_minutes":{"nullable":true,"type":"integer"},"min_duration_minutes":{"nullable":true,"type":"integer"}},"type":"object"},"weekday_rules":{"items":{"additionalProperties":false,"properties":{"day_of_week":{"type":"integer"},"max_duration_minutes":{"nullable":true,"type":"integer"},"min_duration_minutes":{"nullable":true,"type":"integer"}},"required":["day_of_week"],"type":"object"},"type":"array"}},"type":"object"},"HeadlessReportedExternalMoney":{"additionalProperties":false,"description":"Actual studio-reported external money. Amount due is the frozen payable, collections are actual gross, refunds require successful outcomes and retained amount is the actual net balance. Owed compensation is separate from completed purchase value, approval and fulfillment.","properties":{"action_required":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"enum":["external_refund","reconciliation"],"type":"string"},"status":{"enum":["required"],"type":"string"}},"required":["id","kind","status","amount","currency"],"type":"object"},"amount_due":{"type":"string"},"collected_amount":{"type":"string"},"coverage":{"enum":["underfunded","covered","unresolved"],"type":"string"},"currency":{"type":"string"},"refunded_amount":{"type":"string"},"required_action_amount":{"nullable":true,"type":"string"},"required_action_count":{"minimum":0,"type":"integer"},"retained_amount":{"type":"string"},"source":{"enum":["reported_external"],"type":"string"}},"required":["source","currency","amount_due","collected_amount","refunded_amount","retained_amount","coverage","required_action_count","required_action_amount","action_required"],"type":"object"},"ReportPackageRow":{"additionalProperties":true,"properties":{"bundle_delivered_session_count":{"minimum":0,"type":"integer"},"bundle_delivered_units":{"minimum":0,"type":"integer"},"comparison_bundle_delivered_session_count":{"minimum":0,"type":"integer"},"comparison_bundle_delivered_units":{"minimum":0,"type":"integer"},"comparison_purchase_count":{"minimum":0,"type":"integer"},"comparison_renewal_count":{"minimum":0,"type":"integer"},"comparison_subscription_booking_units":{"minimum":0,"type":"integer"},"comparison_subscription_delivered_session_count":{"minimum":0,"type":"integer"},"comparison_subscription_manual_units":{"minimum":0,"type":"integer"},"comparison_subscription_restored_units":{"minimum":0,"type":"integer"},"comparison_units":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"label":{"type":"string"},"package_kind":{"enum":["bundle","subscription"],"type":"string"},"plan_id":{"format":"uuid","nullable":true,"type":"string"},"purchase_count":{"minimum":0,"type":"integer"},"renewal_count":{"minimum":0,"type":"integer"},"subscription_booking_units":{"minimum":0,"type":"integer"},"subscription_delivered_session_count":{"minimum":0,"type":"integer"},"subscription_manual_units":{"minimum":0,"type":"integer"},"subscription_restored_units":{"minimum":0,"type":"integer"},"units":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["bundle_delivered_session_count","bundle_delivered_units","comparison_bundle_delivered_session_count","comparison_bundle_delivered_units","comparison_purchase_count","comparison_renewal_count","comparison_subscription_booking_units","comparison_subscription_delivered_session_count","comparison_subscription_manual_units","comparison_subscription_restored_units","comparison_units","label","package_kind","plan_id","purchase_count","renewal_count","subscription_booking_units","subscription_delivered_session_count","subscription_manual_units","subscription_restored_units","units"],"type":"object"},"ReportRevenueEnvelope":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"type":"array"},"evidence_status":{"enum":["available","partially_withheld","withheld","none"],"type":"string"},"result":{"$ref":"#/components/schemas/ReportRevenueResult"}},"required":["evidence","evidence_status","result"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"},"ReportCapacityFacts":{"additionalProperties":true,"properties":{"available_minutes":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"blocker_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"booked_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"covered_available_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"covered_occupied_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"delivered_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"group_id":{"format":"uuid","nullable":true,"type":"string"},"hold_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"hour":{"maximum":23,"minimum":0,"nullable":true,"type":"integer"},"in_progress_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"invalid_interval_count":{"minimum":0,"type":"integer"},"label":{"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"occupied_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"outside_schedule_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"tour_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"uncovered_occupied_minutes":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"underuse_minutes":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"utilization":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"weekday":{"maximum":7,"minimum":1,"nullable":true,"type":"integer"}},"required":["available_minutes","blocker_minutes","booked_minutes","covered_available_minutes","covered_occupied_minutes","delivered_minutes","hold_minutes","in_progress_minutes","invalid_interval_count","limitations","occupied_minutes","outside_schedule_minutes","tour_minutes","uncovered_occupied_minutes","underuse_minutes","utilization"],"type":"object"},"ReportEvidenceDescriptor":{"additionalProperties":true,"properties":{"basis":{"enum":["recognized_sold","recognized_delivered","recognized_backlog"],"nullable":true,"type":"string"},"cohort":{"enum":["all","returning"],"type":"string"},"component":{"enum":["payments","booking_payments","clients","activity_clients","recognition_contributions","capacity_intervals","bundle_purchases","subscription_purchases","renewal_payments","bundle_redemptions","subscription_uses","subscription_redemptions","bundle_counter_observation","subscription_allowance_observation","selection_lines","attachment_sessions","addon_value_contributions"],"type":"string"},"currency":{"nullable":true,"type":"string"},"currency_selection":{"enum":["known","unknown","not_applicable"],"type":"string"},"description":{"type":"string"},"expires_at":{"format":"date-time","type":"string"},"kind":{"enum":["client_evidence","session_evidence","booking_purchase_evidence","bundle_purchase_evidence","subscription_purchase_evidence","subscription_renewal_evidence","bundle_usage_evidence","subscription_usage_evidence","transaction_evidence"],"type":"string"},"metric":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment"],"type":"string"},"original_headline":{"$ref":"#/components/schemas/ReportEvidenceHeadline"},"reference":{"maxLength":8192,"type":"string"},"side":{"enum":["current","comparison","observation"],"type":"string"}},"required":["basis","cohort","component","currency","currency_selection","description","expires_at","kind","metric","original_headline","reference","side"],"type":"object"},"HeadlessCheckout":{"additionalProperties":false,"properties":{"approval_status":{"enum":["required","approved","not_required"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"booking_status":{"type":"string"},"fulfillment_status":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"instruction":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"type":"string"},"client_secret":{"nullable":true,"type":"string"},"currency":{"type":"string"},"kind":{"enum":["no_payment_required","cash","stripe_elements","square_card","redirect"],"type":"string"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"payment_url":{"nullable":true,"type":"string"},"provider":{"nullable":true,"type":"string"},"provider_options":{"additionalProperties":true,"type":"object"}},"required":["kind","amount","currency"],"type":"object"},"invoice":{"$ref":"#/components/schemas/HeadlessInvoiceOutcome"},"money":{"allOf":[{"$ref":"#/components/schemas/HeadlessReportedExternalMoney"}],"nullable":true},"notifications":{"$ref":"#/components/schemas/HeadlessNotificationProcessing"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"payment_status":{"nullable":true,"type":"string"},"preparation":{"enum":["pending","ready","unknown","failed","cancelled"],"type":"string"},"refund_amount":{"type":"string"}},"required":["id","booking_id","preparation","booking_status","payment_status","fulfillment_status","approval_status"],"type":"object"},"ReportSummaryCapacity":{"additionalProperties":true,"properties":{"calculated_at":{"format":"date-time","type":"string"},"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportCapacityFacts"}],"nullable":true},"current":{"$ref":"#/components/schemas/ReportCapacityFacts"},"definitions":{"items":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment"],"type":"string"},"type":"array"},"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"maxItems":0,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observation":{"additionalProperties":true,"nullable":true,"properties":{"counter_units":{"minimum":0,"type":"integer"},"current_available_subscription_units":{"minimum":0,"type":"integer"},"current_period_available_subscription_units":{"minimum":0,"type":"integer"},"excess_units":{"minimum":0,"type":"integer"},"held_units":{"minimum":0,"type":"integer"},"linked_units":{"minimum":0,"type":"integer"},"rollover_available_subscription_units":{"minimum":0,"type":"integer"},"unlinked_units":{"minimum":0,"type":"integer"}},"required":["counter_units","current_available_subscription_units","current_period_available_subscription_units","excess_units","held_units","linked_units","rollover_available_subscription_units","unlinked_units"],"type":"object"},"scope":{"$ref":"#/components/schemas/ReportScope"},"status":{"enum":["available","partial","unavailable"],"type":"string"}},"required":["calculated_at","comparison","current","definitions","evidence","limitations","observation","scope","status"],"type":"object"},"HeadlessAddonPurchaseCurrent":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"approval_status":{"type":"string"},"booking_id":{"format":"uuid","type":"string"},"booking_slot_id":{"format":"uuid","type":"string"},"client_id":{"format":"uuid","type":"string"},"collected_amount":{"type":"string"},"fulfillment_status":{"type":"string"},"id":{"format":"uuid","type":"string"},"instruction":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"type":"string"},"client_secret":{"nullable":true,"type":"string"},"currency":{"type":"string"},"kind":{"enum":["no_payment_required","cash","stripe_elements","square_card","redirect"],"type":"string"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"payment_url":{"nullable":true,"type":"string"},"provider":{"nullable":true,"type":"string"},"provider_options":{"additionalProperties":true,"type":"object"}},"required":["kind","amount","currency"],"type":"object"},"payment_id":{"format":"uuid","type":"string"},"payment_status":{"nullable":true,"type":"string"},"refunded_amount":{"type":"string"},"required_action_amount":{"type":"string"},"selection_version":{"type":"string"},"status":{"enum":["active","retired"],"type":"string"}},"required":["approval_status","booking_id","booking_slot_id","client_id","fulfillment_status","id","payment_status","payment_id","selection_version","addons","status","instruction","collected_amount","refunded_amount","required_action_amount"],"type":"object"},"HeadlessAddonUpdateRequest":{"additionalProperties":false,"properties":{"base_price":{"description":"Configured decimal amount in studio currency; domain validates precision and rules","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"description":{"nullable":true,"type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"includes_file_transfer":{"type":"boolean"},"max_quantity":{"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"type":"object"},"min_quantity":{"nullable":true,"type":"integer"},"name":{"type":"string"},"price_unit":{"type":"string"},"type":{"enum":["standard","standard_with_file_transfer","file_transfer"],"type":"string"},"visible_on_booking":{"type":"boolean"}},"title":"HeadlessAddonUpdateRequest","type":"object"},"HeadlessSubscriptionQuoteSelection":{"additionalProperties":false,"properties":{"currency":{"type":"string"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"gross":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"name":{"type":"string"},"net":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"offer_expires_at":{"format":"date-time","nullable":true,"type":"string"},"offer_kind":{"enum":["public","private"],"type":"string"},"period_months":{"minimum":1,"type":"integer"},"price":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"price_basis":{"enum":["catalog_rate","committed_gross"],"type":"string"},"provider":{"nullable":true,"type":"string"},"requested_duration_id":{"format":"uuid","type":"string"},"resolution":{"enum":["current","translated"],"type":"string"},"service":{"additionalProperties":false,"nullable":true,"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"sessions_per_month":{"minimum":1,"type":"integer"},"subscription_plan_duration_id":{"format":"uuid","type":"string"},"subscription_plan_id":{"format":"uuid","type":"string"},"subscription_plan_version_id":{"format":"uuid","type":"string"},"tax":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"tax_mode":{"enum":["including_tax","excluding_tax"],"type":"string"},"tax_rate":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"terms":{"additionalProperties":false,"properties":{"cancellation_fee_amount":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"cancellation_policy":{"nullable":true,"type":"string"},"rollover_days":{"minimum":0,"type":"integer"},"rollover_unlimited":{"type":"boolean"}},"required":["rollover_days","rollover_unlimited","cancellation_policy","cancellation_fee_amount"],"type":"object"},"total_sessions":{"minimum":1,"type":"integer"}},"required":["currency","description","duration_minutes","gross","name","net","offer_expires_at","offer_kind","period_months","price","price_basis","provider","requested_duration_id","resolution","service","sessions_per_month","subscription_plan_duration_id","subscription_plan_id","subscription_plan_version_id","tax","tax_mode","tax_rate","terms","total_sessions"],"type":"object"},"ReportPackageTotals":{"additionalProperties":true,"properties":{"bundle_delivered_session_count":{"minimum":0,"type":"integer"},"bundle_delivered_units":{"minimum":0,"type":"integer"},"bundle_purchase_count":{"minimum":0,"type":"integer"},"current_available_subscription_units":{"minimum":0,"type":"integer"},"current_period_available_subscription_units":{"minimum":0,"type":"integer"},"purchase_count":{"minimum":0,"type":"integer"},"renewal_count":{"minimum":0,"type":"integer"},"rollover_available_subscription_units":{"minimum":0,"type":"integer"},"subscription_booking_units":{"minimum":0,"type":"integer"},"subscription_delivered_session_count":{"minimum":0,"type":"integer"},"subscription_manual_units":{"minimum":0,"type":"integer"},"subscription_purchase_count":{"minimum":0,"type":"integer"},"subscription_restored_units":{"minimum":0,"type":"integer"}},"required":["bundle_delivered_session_count","bundle_delivered_units","bundle_purchase_count","current_available_subscription_units","current_period_available_subscription_units","purchase_count","renewal_count","rollover_available_subscription_units","subscription_booking_units","subscription_delivered_session_count","subscription_manual_units","subscription_purchase_count","subscription_restored_units"],"type":"object"},"HeadlessActivationRequest":{"additionalProperties":false,"properties":{"send_invitation":{"default":true,"type":"boolean"}},"title":"HeadlessActivationRequest","type":"object"},"HeadlessBundlePlanCreateRequest":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"quantity":{"type":"integer"}},"required":["addon_id","quantity","billing_scope"],"type":"object"},"type":"array"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"type":"integer"},"images":{"additionalProperties":true,"type":"object"},"is_special_offer":{"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"short_description":{"nullable":true,"type":"string"},"show_in_top_bar":{"type":"boolean"},"show_on_home":{"type":"boolean"},"special_offer_badge":{"nullable":true,"type":"string"},"special_offer_card_title":{"nullable":true,"type":"string"},"special_offer_images":{"additionalProperties":true,"type":"object"},"special_offer_text":{"nullable":true,"type":"string"},"tiers":{"items":{"additionalProperties":false,"properties":{"discount_type":{"type":"string"},"discount_value":{"type":"string"},"price":{"type":"string"},"session_count":{"type":"integer"},"show_discount":{"type":"boolean"},"show_on_home":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["session_count"],"type":"object"},"type":"array"},"validity_days":{"maximum":36500,"minimum":1,"nullable":true,"type":"integer"}},"required":["name","duration_minutes"],"title":"HeadlessBundlePlanCreateRequest","type":"object"},"HeadlessAftercareAcceptance":{"additionalProperties":false,"properties":{"action":{"enum":["accepted","action_required","succeeded","unknown"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"client_id":{"format":"uuid","type":"string"},"payment_id":{"format":"uuid","type":"string"},"replayed":{"type":"boolean"},"resource_id":{"format":"uuid","type":"string"},"resource_type":{"enum":["guest","booking_slot","addon_purchase","session_amendment"],"type":"string"},"session_id":{"format":"uuid","type":"string"}},"required":["action","replayed"],"type":"object"},"HeadlessSubscriptionPlanAuthoring":{"additionalProperties":false,"properties":{"addons":{"additionalProperties":false,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"id":{"format":"uuid","type":"string"},"quantity":{"type":"integer"}},"required":["addon_id","quantity","billing_scope"],"type":"object"},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"cancellation_fee_amount":{"nullable":true,"type":"string"},"cancellation_policy":{"nullable":true,"type":"string"},"card_color":{"nullable":true,"type":"string"},"custom":{"type":"boolean"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"type":"integer"},"id":{"format":"uuid","type":"string"},"images":{"additionalProperties":true,"type":"object"},"is_active":{"type":"boolean"},"is_special_offer":{"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"offer_expires_at":{"format":"date-time","nullable":true,"type":"string"},"options":{"additionalProperties":false,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"discount_type":{"type":"string"},"discount_value":{"type":"string"},"id":{"format":"uuid","type":"string"},"period_months":{"type":"integer"},"price":{"type":"string"},"session_count":{"type":"integer"},"show_on_home":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["id","session_count","price"],"type":"object"},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"rollover_days":{"type":"integer"},"rollover_unlimited":{"type":"boolean"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"show_in_top_bar":{"type":"boolean"},"special_offer_badge":{"nullable":true,"type":"string"},"special_offer_card_title":{"nullable":true,"type":"string"},"special_offer_images":{"additionalProperties":true,"type":"object"},"special_offer_text":{"nullable":true,"type":"string"},"target_user_id":{"format":"uuid","nullable":true,"type":"string"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"}},"required":["id","version_id","version_number","is_active","name","options","addons"],"title":"HeadlessSubscriptionPlanAuthoring","type":"object"},"HeadlessServiceCreateRequest":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"available_for_bundles":{"type":"boolean"},"available_for_subscriptions":{"type":"boolean"},"base_price":{"description":"Configured decimal amount in studio currency; domain validates precision and rules","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"day_rates":{"items":{"additionalProperties":false,"properties":{"min_duration_minutes":{"type":"integer"},"name":{"type":"string"},"price":{"description":"Configured decimal amount in studio currency; domain validates precision and rules","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"}},"required":["name","min_duration_minutes","price"],"type":"object"},"type":"array"},"description":{"nullable":true,"type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"price_unit":{"type":"string"},"promotion":{"additionalProperties":true,"type":"object"},"short_description":{"nullable":true,"type":"string"},"show_day_rates_on_card":{"type":"boolean"},"visible_on_booking":{"type":"boolean"}},"required":["name","base_price"],"title":"HeadlessServiceCreateRequest","type":"object"},"ReportSummaryCustomers":{"additionalProperties":true,"properties":{"calculated_at":{"format":"date-time","type":"string"},"comparison":{"additionalProperties":true,"nullable":true,"properties":{"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"additionalProperties":true,"properties":{"client_count":{"minimum":0,"type":"integer"},"currency":{"type":"string"},"payment_count":{"minimum":0,"type":"integer"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["client_count","currency","payment_count","total"],"type":"object"},"type":"array"},"eligible_client_count":{"minimum":0,"type":"integer"},"inactive_client_count":{"minimum":0,"type":"integer"},"never_visited_client_count":{"minimum":0,"type":"integer"},"returning_client_count":{"minimum":0,"type":"integer"}},"required":["currency_coverage","currency_groups","eligible_client_count","inactive_client_count","never_visited_client_count","returning_client_count"],"type":"object"},"current":{"additionalProperties":true,"properties":{"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"additionalProperties":true,"properties":{"client_count":{"minimum":0,"type":"integer"},"currency":{"type":"string"},"payment_count":{"minimum":0,"type":"integer"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["client_count","currency","payment_count","total"],"type":"object"},"type":"array"},"eligible_client_count":{"minimum":0,"type":"integer"},"inactive_client_count":{"minimum":0,"type":"integer"},"never_visited_client_count":{"minimum":0,"type":"integer"},"returning_client_count":{"minimum":0,"type":"integer"}},"required":["currency_coverage","currency_groups","eligible_client_count","inactive_client_count","never_visited_client_count","returning_client_count"],"type":"object"},"definitions":{"items":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment"],"type":"string"},"type":"array"},"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"maxItems":0,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observation":{"additionalProperties":true,"nullable":true,"properties":{"counter_units":{"minimum":0,"type":"integer"},"current_available_subscription_units":{"minimum":0,"type":"integer"},"current_period_available_subscription_units":{"minimum":0,"type":"integer"},"excess_units":{"minimum":0,"type":"integer"},"held_units":{"minimum":0,"type":"integer"},"linked_units":{"minimum":0,"type":"integer"},"rollover_available_subscription_units":{"minimum":0,"type":"integer"},"unlinked_units":{"minimum":0,"type":"integer"}},"required":["counter_units","current_available_subscription_units","current_period_available_subscription_units","excess_units","held_units","linked_units","rollover_available_subscription_units","unlinked_units"],"type":"object"},"scope":{"$ref":"#/components/schemas/ReportScope"},"status":{"enum":["available","partial","unavailable"],"type":"string"}},"required":["calculated_at","comparison","current","definitions","evidence","limitations","observation","scope","status"],"type":"object"},"ReportAddonCurrency":{"additionalProperties":true,"properties":{"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"comparison_total":{"$ref":"#/components/schemas/ReportMoney"},"currency":{"type":"string"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["comparison","comparison_total","currency","total"],"type":"object"},"ReportAnalysisControls":{"additionalProperties":true,"properties":{"bases":{"items":{"type":"string"},"type":"array"},"cohorts":{"items":{"type":"string"},"type":"array"},"filters":{"items":{"type":"string"},"type":"array"},"groups":{"items":{"type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"metrics":{"items":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment"],"type":"string"},"type":"array"},"presets":{"items":{"type":"string"},"type":"array"},"sorts":{"items":{"type":"string"},"type":"array"}},"required":["bases","cohorts","filters","groups","limitations","metrics","presets","sorts"],"type":"object"},"ReportSummaryAddons":{"additionalProperties":true,"properties":{"calculated_at":{"format":"date-time","type":"string"},"comparison":{"additionalProperties":true,"nullable":true,"properties":{"attachment":{"$ref":"#/components/schemas/ReportAttachment"},"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"additionalProperties":true,"properties":{"currency":{"type":"string"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["currency","total"],"type":"object"},"type":"array"},"effective_selected_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"package_included_line_count":{"minimum":0,"type":"integer"},"raw_selected_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"separately_selected_line_count":{"minimum":0,"type":"integer"},"unknown_provenance_line_count":{"minimum":0,"type":"integer"}},"required":["attachment","currency_coverage","currency_groups","effective_selected_quantity","package_included_line_count","raw_selected_quantity","separately_selected_line_count","unknown_provenance_line_count"],"type":"object"},"current":{"additionalProperties":true,"properties":{"attachment":{"$ref":"#/components/schemas/ReportAttachment"},"currency_coverage":{"$ref":"#/components/schemas/ReportCoverage"},"currency_groups":{"items":{"additionalProperties":true,"properties":{"currency":{"type":"string"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["currency","total"],"type":"object"},"type":"array"},"effective_selected_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"package_included_line_count":{"minimum":0,"type":"integer"},"raw_selected_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"separately_selected_line_count":{"minimum":0,"type":"integer"},"unknown_provenance_line_count":{"minimum":0,"type":"integer"}},"required":["attachment","currency_coverage","currency_groups","effective_selected_quantity","package_included_line_count","raw_selected_quantity","separately_selected_line_count","unknown_provenance_line_count"],"type":"object"},"definitions":{"items":{"enum":["recognized_sold","recognized_delivered","recognized_backlog","client_total_spend","returning_clients","inactive_clients","available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours","package_purchases","package_renewals","package_consumption","addon_selections","addon_value","addon_attachment"],"type":"string"},"type":"array"},"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"maxItems":0,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observation":{"additionalProperties":true,"nullable":true,"properties":{"counter_units":{"minimum":0,"type":"integer"},"current_available_subscription_units":{"minimum":0,"type":"integer"},"current_period_available_subscription_units":{"minimum":0,"type":"integer"},"excess_units":{"minimum":0,"type":"integer"},"held_units":{"minimum":0,"type":"integer"},"linked_units":{"minimum":0,"type":"integer"},"rollover_available_subscription_units":{"minimum":0,"type":"integer"},"unlinked_units":{"minimum":0,"type":"integer"}},"required":["counter_units","current_available_subscription_units","current_period_available_subscription_units","excess_units","held_units","linked_units","rollover_available_subscription_units","unlinked_units"],"type":"object"},"scope":{"$ref":"#/components/schemas/ReportScope"},"status":{"enum":["available","partial","unavailable"],"type":"string"}},"required":["calculated_at","comparison","current","definitions","evidence","limitations","observation","scope","status"],"type":"object"},"ApiErrorResponse":{"additionalProperties":true,"properties":{"code":{"description":"Stable machine-readable error code; clients must tolerate new codes.","type":"string"},"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Field validation messages when code is validation_failed.","type":"object"},"feature":{"description":"Required studio entitlement when code is feature_disabled; clients must tolerate new features.","type":"string"},"permissions":{"description":"Required permissions when code is permission_required.","items":{"$ref":"#/components/schemas/ApiPermission"},"type":"array"},"request_id":{"description":"Request correlation identifier.","type":"string"},"setup_choices":{"description":"Eligible destination setups when code is setup_selection_required.","items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"room_name":{"nullable":true,"type":"string"}},"required":["id","name","room_name"],"type":"object"},"type":"array"},"status":{"description":"HTTP response status.","type":"integer"},"title":{"type":"string"}},"required":["status","code","title","request_id"],"title":"ApiErrorResponse","type":"object"},"HeadlessAddonPurchaseInput":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["none","use"],"type":"string"},"credit_limit":{"type":"string"},"expected_version":{"type":"string"},"payment_source":{"enum":["native","external"],"type":"string"},"replaces_payment_id":{"format":"uuid","type":"string"}},"required":["addons","payment_source","credit_choice","consents"],"type":"object"},"ReportPackageCurrency":{"additionalProperties":true,"properties":{"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"comparison_total":{"$ref":"#/components/schemas/ReportMoney"},"currency":{"type":"string"},"renewal_count":{"minimum":0,"type":"integer"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["comparison","comparison_total","currency","renewal_count","total"],"type":"object"},"HeadlessNotificationProcessing":{"additionalProperties":false,"description":"Fixed-size counts of retained generic notification jobs scoped to the owned resource. Processed means the worker completed and may have skipped delivery. Queued/retrying/exhausted/cancelled are processing facts, never sent/delivered receipts. Missing or pruned history leaves delivery unknown. No recipient, payload or raw error is exposed.","properties":{"cancelled":{"minimum":0,"type":"integer"},"delivery":{"enum":["unknown"],"type":"string"},"exhausted":{"minimum":0,"type":"integer"},"processed":{"minimum":0,"type":"integer"},"queued":{"minimum":0,"type":"integer"},"retrying":{"minimum":0,"type":"integer"}},"required":["queued","retrying","exhausted","cancelled","processed","delivery"],"type":"object"},"HeadlessExternalPaymentResolutionRequest":{"additionalProperties":false,"description":"When resolving against a payment_id, omitting both amount and currency uses its positive outstanding balance after successful refunds. A covered payable returns invalid_request; pending refunds do not reopen the balance. The derived accepted amount is frozen for replay.","properties":{"amount":{"type":"string"},"currency":{"type":"string"},"payment_id":{"format":"uuid","type":"string"}},"type":"object"},"ReportMetricsEnvelope":{"additionalProperties":true,"properties":{"data":{"$ref":"#/components/schemas/ReportMetricDiscovery"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"},"HeadlessServiceUpdateRequest":{"additionalProperties":false,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"available_for_bundles":{"type":"boolean"},"available_for_subscriptions":{"type":"boolean"},"base_price":{"description":"Configured decimal amount in studio currency; domain validates precision and rules","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"day_rates":{"items":{"additionalProperties":false,"properties":{"min_duration_minutes":{"type":"integer"},"name":{"type":"string"},"price":{"description":"Configured decimal amount in studio currency; domain validates precision and rules","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"}},"required":["name","min_duration_minutes","price"],"type":"object"},"type":"array"},"description":{"nullable":true,"type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"price_unit":{"type":"string"},"promotion":{"additionalProperties":true,"type":"object"},"short_description":{"nullable":true,"type":"string"},"show_day_rates_on_card":{"type":"boolean"},"visible_on_booking":{"type":"boolean"}},"title":"HeadlessServiceUpdateRequest","type":"object"},"HeadlessAmendmentStart":{"additionalProperties":false,"properties":{"booking_slot_id":{"format":"uuid","type":"string"},"owner_id":{"format":"uuid","type":"string"},"proposal":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"custom_form_answers":{"additionalProperties":{"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"type":"object"},"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"file_transfer_option_id":{"format":"uuid","nullable":true,"type":"string"},"guests":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"email":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"}},"required":["id","name","email"],"type":"object"},{"additionalProperties":false,"properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["name","email"],"type":"object"}]},"type":"array"},"notes":{"nullable":true,"type":"string"},"recording_seats":{"minimum":1,"type":"integer"},"room_id":{"format":"uuid","type":"string"},"service_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"type":"string"}},"required":["service_id","setup_id","room_id","date","start_time","duration_minutes","recording_seats","addons","file_transfer_option_id","guests","custom_form_answers"],"type":"object"}},"required":["owner_id","booking_slot_id","proposal"],"type":"object"},"ReportFilters":{"additionalProperties":true,"properties":{"client_id":{"format":"uuid","nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"},"inactivity_days":{"maximum":730,"minimum":1,"type":"integer"},"page":{"minimum":1,"type":"integer"},"page_size":{"maximum":100,"minimum":1,"type":"integer"},"plan_id":{"format":"uuid","nullable":true,"type":"string"},"room_id":{"format":"uuid","nullable":true,"type":"string"},"service_id":{"format":"uuid","nullable":true,"type":"string"}},"required":["client_id","currency","inactivity_days","page","page_size","plan_id","room_id","service_id"],"type":"object"},"HeadlessRoomOffer":{"additionalProperties":false,"properties":{"capacity":{"type":"integer"},"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"is_active":{"type":"boolean"},"location":{"type":"string"},"name":{"type":"string"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"}},"required":["id","version_id","version_number","is_active","name","images"],"title":"HeadlessRoomOffer","type":"object"},"HeadlessExternalSubscriptionCycleAcceptance":{"additionalProperties":false,"description":"Immutable result of command acceptance. Accepted means recorded/enqueued, not delivered. Fetch the owned resource for current asynchronous state. Unknown requires reconciliation, not blind duplicate collection.","properties":{"action":{"enum":["accepted","action_required","succeeded","unknown"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"client_id":{"format":"uuid","type":"string"},"collection_id":{"format":"uuid","type":"string"},"payment_id":{"format":"uuid","type":"string"},"reason_code":{"description":"Original external report refusal reason; current resolution is fetched separately.","type":"string"},"replayed":{"type":"boolean"},"resource_id":{"format":"uuid","type":"string"},"resource_type":{"enum":["external_subscription_cycle"],"type":"string"},"session_id":{"format":"uuid","type":"string"}},"required":["action","replayed","resource_type","resource_id"],"title":"HeadlessExternalSubscriptionCycleAcceptance","type":"object"},"ReportComparison":{"additionalProperties":true,"properties":{"absolute_change":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"currency":{"nullable":true,"type":"string"},"current_value":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"current_window":{"$ref":"#/components/schemas/ReportWindow"},"limitations":{"items":{"type":"string"},"type":"array"},"percentage_change":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"previous_value":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"previous_window":{"$ref":"#/components/schemas/ReportWindow"}},"required":["absolute_change","currency","current_value","current_window","limitations","percentage_change","previous_value","previous_window"],"type":"object"},"HeadlessBundleQuoteSelection":{"additionalProperties":false,"properties":{"bundle_plan_id":{"format":"uuid","type":"string"},"bundle_plan_tier_id":{"format":"uuid","type":"string"},"bundle_plan_version_id":{"format":"uuid","type":"string"},"currency":{"type":"string"},"description":{"nullable":true,"type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"gross":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"name":{"type":"string"},"net":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"offer_expires_at":{"format":"date-time","nullable":true,"type":"string"},"offer_kind":{"enum":["public","custom"],"type":"string"},"price":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"price_basis":{"enum":["catalog_rate"],"type":"string"},"requested_tier_id":{"format":"uuid","type":"string"},"resolution":{"enum":["current","translated"],"type":"string"},"service":{"additionalProperties":false,"nullable":true,"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"session_count":{"minimum":1,"type":"integer"},"tax":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"tax_mode":{"enum":["including_tax","excluding_tax"],"type":"string"},"tax_rate":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"validity_days":{"minimum":1,"nullable":true,"type":"integer"}},"required":["bundle_plan_id","bundle_plan_tier_id","bundle_plan_version_id","currency","description","duration_minutes","gross","name","net","offer_expires_at","offer_kind","price","price_basis","requested_tier_id","resolution","service","session_count","tax","tax_mode","tax_rate","validity_days"],"type":"object"},"HeadlessRoomAuthoring":{"additionalProperties":false,"properties":{"capacity":{"type":"integer"},"configured_prices":{"$ref":"#/components/schemas/HeadlessConfiguredPrices"},"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"is_active":{"type":"boolean"},"location":{"type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"overrides":{"$ref":"#/components/schemas/HeadlessCatalogOverrides"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"}},"required":["id","version_id","version_number","is_active","name","images"],"title":"HeadlessRoomAuthoring","type":"object"},"ReportAddonTotals":{"additionalProperties":true,"properties":{"effective_selected_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"package_included_line_count":{"minimum":0,"type":"integer"},"raw_selected_quantity":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"separately_selected_line_count":{"minimum":0,"type":"integer"},"unknown_provenance_line_count":{"minimum":0,"type":"integer"}},"required":["effective_selected_quantity","package_included_line_count","raw_selected_quantity","separately_selected_line_count","unknown_provenance_line_count"],"type":"object"},"HeadlessUpdateClientRequest":{"additionalProperties":false,"minProperties":1,"properties":{"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"}},"title":"HeadlessUpdateClientRequest","type":"object"},"ReportRevenueRow":{"additionalProperties":true,"properties":{"additional":{"$ref":"#/components/schemas/ReportMoney"},"base":{"$ref":"#/components/schemas/ReportMoney"},"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"currency":{"type":"string"},"group_id":{"format":"uuid","nullable":true,"type":"string"},"label":{"type":"string"},"source_count":{"minimum":0,"type":"integer"},"total":{"$ref":"#/components/schemas/ReportMoney"},"unallocated_reasons":{"items":{"type":"string"},"type":"array"}},"required":["additional","base","comparison","currency","group_id","label","source_count","total","unallocated_reasons"],"type":"object"},"HeadlessBundlePurchaseRequest":{"additionalProperties":false,"properties":{"bundle_plan_id":{"format":"uuid","type":"string"},"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["auto","use","none"],"type":"string"},"email":{"format":"email","type":"string"},"invoice_profile":{"additionalProperties":false,"properties":{"billing_fields":{"additionalProperties":{"type":"string"},"type":"object"},"type":{"enum":["individual","business"],"type":"string"}},"type":"object"},"promo_code":{"type":"string"},"tier_id":{"format":"uuid","type":"string"}},"required":["email"],"title":"HeadlessBundlePurchaseRequest","type":"object"},"ReportSummaryRefresh":{"additionalProperties":true,"properties":{"comparison_from_date":{"format":"date","type":"string"},"comparison_to_date":{"format":"date","type":"string"},"from_date":{"format":"date","type":"string"},"to_date":{"format":"date","type":"string"}},"required":["comparison_from_date","comparison_to_date","from_date","to_date"],"type":"object"},"ReportCapacityEnvelope":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"type":"array"},"evidence_status":{"enum":["available","partially_withheld","withheld","none"],"type":"string"},"result":{"$ref":"#/components/schemas/ReportCapacityResult"}},"required":["evidence","evidence_status","result"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"},"HeadlessSubscriptionPurchaseRequest":{"additionalProperties":false,"properties":{"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["auto","use","none"],"type":"string"},"duration_id":{"format":"uuid","type":"string"},"email":{"format":"email","type":"string"},"invoice_profile":{"additionalProperties":false,"properties":{"billing_fields":{"additionalProperties":{"type":"string"},"type":"object"},"type":{"enum":["individual","business"],"type":"string"}},"type":"object"},"promo_code":{"type":"string"},"subscription_plan_id":{"format":"uuid","type":"string"}},"required":["email"],"title":"HeadlessSubscriptionPurchaseRequest","type":"object"},"HeadlessConfiguredPrices":{"additionalProperties":false,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"price":{"$ref":"#/components/schemas/HeadlessConfiguredRate"},"room_id":{"format":"uuid","nullable":true,"type":"string"},"service_version_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","nullable":true,"type":"string"}},"required":["service_version_id","room_id","setup_id","price"],"type":"object"},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"HeadlessSubscriptionManagementInput":{"additionalProperties":false,"properties":{"action":{"enum":["update_payment_method","change_plan","pause","resume"],"type":"string"}},"required":["action"],"type":"object"},"HeadlessCommandResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"description":"Immutable result of command acceptance. Accepted means recorded/enqueued, not delivered. Fetch the owned resource for current asynchronous state. Unknown requires reconciliation, not blind duplicate collection.","properties":{"action":{"enum":["accepted","action_required","succeeded","unknown"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"client_id":{"format":"uuid","type":"string"},"collection_id":{"format":"uuid","type":"string"},"payment_id":{"format":"uuid","type":"string"},"reason_code":{"description":"Original external report refusal reason; current resolution is fetched separately.","type":"string"},"replayed":{"type":"boolean"},"resource_id":{"format":"uuid","type":"string"},"resource_type":{"enum":["services","rooms","setups","addons","bundle_plans","subscription_plans","headless_checkout","headless_purchase","external_payment_report","external_payable"],"type":"string"},"session_id":{"format":"uuid","type":"string"}},"required":["action","replayed"],"title":"HeadlessAcceptance","type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"title":"HeadlessCommandResponse","type":"object"},"HeadlessPurchase":{"additionalProperties":false,"properties":{"approval_status":{"enum":["required","approved","declined","not_required"],"type":"string"},"bundle_validity":{"additionalProperties":false,"nullable":true,"properties":{"days":{"maximum":36500,"minimum":1,"nullable":true,"type":"integer"},"expired":{"type":"boolean"},"valid_until":{"format":"date-time","nullable":true,"type":"string"}},"required":["days","valid_until","expired"],"type":"object"},"fulfillment_status":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"instruction":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"type":"string"},"client_secret":{"nullable":true,"type":"string"},"currency":{"type":"string"},"kind":{"enum":["no_payment_required","cash","stripe_elements","square_card","redirect"],"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"provider":{"nullable":true,"type":"string"}},"required":["kind","amount","currency","options"],"type":"object"},"invoice":{"$ref":"#/components/schemas/HeadlessInvoiceOutcome"},"member_bundle_id":{"format":"uuid","nullable":true,"type":"string"},"member_subscription_id":{"format":"uuid","nullable":true,"type":"string"},"money":{"allOf":[{"$ref":"#/components/schemas/HeadlessReportedExternalMoney"}],"nullable":true},"notifications":{"$ref":"#/components/schemas/HeadlessNotificationProcessing"},"payment_id":{"format":"uuid","nullable":true,"type":"string"},"payment_status":{"nullable":true,"type":"string"},"preparation":{"enum":["pending","ready","unknown","failed","cancelled"],"type":"string"},"purchase_status":{"nullable":true,"type":"string"},"rail":{"enum":["bundle","subscription"],"type":"string"},"subscription_cycle_id":{"format":"uuid","nullable":true,"type":"string"}},"required":["id","rail","preparation","instruction","payment_id","payment_status","fulfillment_status","approval_status","purchase_status","member_bundle_id","member_subscription_id"],"title":"HeadlessPurchase","type":"object"},"HeadlessAftercareCreditChoice":{"additionalProperties":false,"properties":{"credit_choice":{"enum":["none","use"],"type":"string"},"credit_limit":{"type":"string"}},"required":["credit_choice"],"type":"object"},"HeadlessExternalRecoveryAcceptance":{"additionalProperties":false,"description":"Immutable result of command acceptance. Accepted means recorded/enqueued, not delivered. Fetch the owned resource for current asynchronous state. Unknown requires reconciliation, not blind duplicate collection.","properties":{"action":{"enum":["accepted","action_required","succeeded","unknown"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"client_id":{"format":"uuid","type":"string"},"collection_id":{"format":"uuid","type":"string"},"payment_id":{"format":"uuid","type":"string"},"reason_code":{"description":"Original external report refusal reason; current resolution is fetched separately.","type":"string"},"refund_id":{"format":"uuid","type":"string"},"replayed":{"type":"boolean"},"resource_id":{"format":"uuid","type":"string"},"resource_type":{"enum":["services","rooms","setups","addons","bundle_plans","subscription_plans","headless_checkout","headless_purchase","external_payment_report","external_payable","external_refund","external_payable_outcome","cancellation_refund","subscription_cancellation"],"type":"string"},"session_id":{"format":"uuid","type":"string"}},"required":["action","replayed"],"title":"HeadlessExternalRecoveryAcceptance","type":"object"},"HeadlessEmptyInput":{"additionalProperties":false,"properties":{},"type":"object"},"ReportCoverage":{"additionalProperties":true,"properties":{"currency_counts":{"additionalProperties":{"minimum":0,"type":"integer"},"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"total_count":{"minimum":0,"type":"integer"},"unknown_currency_count":{"minimum":0,"type":"integer"}},"required":["currency_counts","limitations","total_count","unknown_currency_count"],"type":"object"},"HeadlessExternalSubscriptionCycle":{"additionalProperties":false,"properties":{"action_required":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"type":"string"},"status":{"type":"string"}},"required":["id","kind","status"],"type":"object"},"applied":{"type":"boolean"},"collected_amount":{"type":"string"},"coverage":{"enum":["covered","underfunded","unresolved"],"type":"string"},"cycle_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"enum":["initial","renewal"],"type":"string"},"member_subscription_id":{"format":"uuid","type":"string"},"payment_id":{"format":"uuid","type":"string"},"predecessor_cycle_id":{"format":"uuid","nullable":true,"type":"string"},"refunded_amount":{"type":"string"},"status":{"enum":["pending","failed","paid"],"type":"string"},"term_end":{"format":"date-time","nullable":true,"type":"string"},"term_start":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","cycle_id","kind","member_subscription_id","payment_id","predecessor_cycle_id","term_start","term_end","status","applied","coverage","collected_amount","refunded_amount","action_required"],"title":"HeadlessExternalSubscriptionCycle","type":"object"},"ReportCustomerResult":{"additionalProperties":true,"properties":{"activity":{"allOf":[{"$ref":"#/components/schemas/ReportActivity"}],"nullable":true},"cohort":{"enum":["all","returning"],"type":"string"},"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"comparison_activity":{"allOf":[{"$ref":"#/components/schemas/ReportActivity"}],"nullable":true},"comparison_currency_coverage":{"allOf":[{"$ref":"#/components/schemas/ReportCoverage"}],"nullable":true},"currency_coverage":{"allOf":[{"$ref":"#/components/schemas/ReportCoverage"}],"nullable":true},"currency_groups":{"items":{"$ref":"#/components/schemas/ReportCustomerCurrency"},"type":"array"},"definition":{"$ref":"#/components/schemas/ReportDefinition"},"eligible_client_count":{"minimum":0,"type":"integer"},"has_more":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"matching_client_count":{"minimum":0,"type":"integer"},"metric":{"enum":["client_total_spend","returning_clients","inactive_clients"],"type":"string"},"next_page":{"minimum":1,"nullable":true,"type":"integer"},"page":{"minimum":1,"type":"integer"},"page_size":{"maximum":100,"minimum":1,"type":"integer"},"refresh_inputs":{"$ref":"#/components/schemas/ReportRefresh"},"row_count":{"minimum":0,"type":"integer"},"rows":{"items":{"$ref":"#/components/schemas/ReportCustomerRow"},"maxItems":100,"type":"array"},"scope":{"$ref":"#/components/schemas/ReportScope"}},"required":["activity","cohort","comparison","comparison_activity","comparison_currency_coverage","currency_coverage","currency_groups","definition","eligible_client_count","has_more","limitations","matching_client_count","metric","next_page","page","page_size","refresh_inputs","row_count","rows","scope"],"type":"object"},"HeadlessTourCheckoutRequest":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"consents":{"additionalProperties":false,"properties":{"terms":{"type":"boolean"}},"type":"object"},"custom_form_answers":{"additionalProperties":{"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"type":"object"},"date":{"format":"date","type":"string"},"email":{"format":"email","type":"string"},"guests":{"items":{"additionalProperties":false,"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"}},"required":["first_name","last_name","email"],"type":"object"},"type":"array"},"invoice_profile":{"additionalProperties":false,"properties":{"billing_fields":{"additionalProperties":{"type":"string"},"type":"object"},"type":{"enum":["individual","business"],"type":"string"}},"type":"object"},"payment_source":{"default":"native","enum":["native","external"],"type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"type":"string"},"tour_id":{"format":"uuid","type":"string"}},"required":["email","tour_id","date","start_time"],"title":"HeadlessTourCheckoutRequest","type":"object"},"HeadlessExternalRefundOutcomeInput":{"additionalProperties":false,"properties":{"outcome":{"enum":["succeeded","failed","reversed"],"type":"string"}},"required":["outcome"],"type":"object"},"HeadlessPackageQuoteInput":{"additionalProperties":false,"properties":{"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"member_package_id":{"format":"uuid","type":"string"},"recording_seats":{"minimum":1,"type":"integer"},"selected_one_off_addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"pattern":"^\\d{2}:\\d{2}(:\\d{2})?$","type":"string"}},"required":["date","member_package_id","setup_id","start_time"],"type":"object"},"HeadlessAddonQuoteSelection":{"additionalProperties":false,"properties":{"lines":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"addon_version_id":{"format":"uuid","type":"string"},"line_total":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"name":{"type":"string"},"quantity":{"minimum":1,"type":"integer"},"unit_price":{"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["addon_id","addon_version_id","name","quantity","unit_price","line_total"],"type":"object"},"type":"array"},"slot_id":{"format":"uuid","type":"string"}},"required":["slot_id","lines"],"type":"object"},"ReportAttachment":{"additionalProperties":true,"properties":{"non_package":{"$ref":"#/components/schemas/ReportCohort"},"package":{"$ref":"#/components/schemas/ReportCohort"}},"required":["non_package","package"],"type":"object"},"HeadlessAddonOffer":{"additionalProperties":false,"properties":{"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"includes_file_transfer":{"type":"boolean"},"is_active":{"type":"boolean"},"max_quantity":{"nullable":true,"type":"integer"},"min_quantity":{"nullable":true,"type":"integer"},"name":{"type":"string"},"price":{"$ref":"#/components/schemas/HeadlessConfiguredRate"},"type":{"enum":["standard","standard_with_file_transfer","file_transfer"],"type":"string"},"version_id":{"format":"uuid","type":"string"},"version_number":{"type":"integer"},"visible_on_booking":{"type":"boolean"}},"required":["id","version_id","version_number","is_active","name","images"],"title":"HeadlessAddonOffer","type":"object"},"HeadlessExternalRefund":{"additionalProperties":false,"properties":{"acceptance":{"additionalProperties":false,"properties":{"action":{"type":"string"},"http_status":{"type":"integer"}},"required":["action","http_status"],"type":"object"},"action_required":{"additionalProperties":false,"nullable":true,"properties":{"amount":{"type":"string"},"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"kind":{"enum":["external_refund"],"type":"string"},"status":{"enum":["required"],"type":"string"}},"required":["id","kind","status","amount","currency"],"type":"object"},"amount":{"type":"string"},"cancellation_refund_item_id":{"format":"uuid","nullable":true,"type":"string"},"collection_id":{"format":"uuid","type":"string"},"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"payment_id":{"format":"uuid","type":"string"},"refund_id":{"format":"uuid","type":"string"},"refunded_amount":{"type":"string"},"replaces_refund_id":{"format":"uuid","nullable":true,"type":"string"},"status":{"enum":["requested","succeeded","failed","reversed"],"type":"string"}},"required":["id","refund_id","payment_id","collection_id","status","amount","currency","refunded_amount","action_required","acceptance"],"type":"object"},"HeadlessExternalSubscriptionCycleInput":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"collection_id":{"format":"uuid","type":"string"},"currency":{"pattern":"^[A-Z]{3}$","type":"string"},"cycle_id":{"format":"uuid","type":"string"},"outcome":{"enum":["failed","paid"],"type":"string"},"predecessor_cycle_id":{"format":"uuid","type":"string"}},"required":["cycle_id","predecessor_cycle_id","outcome"],"title":"HeadlessExternalSubscriptionCycleInput","type":"object"},"ReportAddonsEnvelope":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceDescriptor"},"type":"array"},"evidence_status":{"enum":["available","partially_withheld","withheld","none"],"type":"string"},"result":{"$ref":"#/components/schemas/ReportAddonResult"}},"required":["evidence","evidence_status","result"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"},"HeadlessSubscriptionSessionGrantInput":{"additionalProperties":false,"properties":{"quantity":{"minimum":1,"type":"integer"}},"required":["quantity"],"type":"object"},"HeadlessSessionAmendmentProposal":{"additionalProperties":false,"properties":{"addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"custom_form_answers":{"additionalProperties":{"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"type":"object"},"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"file_transfer_option_id":{"format":"uuid","nullable":true,"type":"string"},"guests":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"email":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"}},"required":["id","name","email"],"type":"object"},{"additionalProperties":false,"properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["name","email"],"type":"object"}]},"type":"array"},"notes":{"nullable":true,"type":"string"},"recording_seats":{"minimum":1,"type":"integer"},"room_id":{"format":"uuid","type":"string"},"service_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"type":"string"}},"required":["service_id","setup_id","room_id","date","start_time","duration_minutes","recording_seats","addons","file_transfer_option_id","guests","custom_form_answers"],"type":"object"},"HeadlessPackageRightsPage":{"additionalProperties":false,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"addons":{"additionalProperties":false,"properties":{"page":{"minimum":1,"type":"integer"},"per_page":{"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["page","per_page","total"],"type":"object"},"coverage":{"enum":["covered","insufficient_allowance"],"type":"string"},"duration_adjustment":{"enum":["none","package_unit"],"type":"string"},"effective_duration_minutes":{"minimum":1,"type":"integer"},"id":{"format":"uuid","type":"string"},"included_addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"addon_version_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"display_quantity":{"type":"string"},"name":{"type":"string"},"omission":{"enum":["insufficient_allowance"],"nullable":true,"type":"string"},"plan_addon_id":{"format":"uuid","type":"string"},"price_unit":{"nullable":true,"type":"string"},"quantity":{"minimum":1,"type":"integer"},"unit_price":{"type":"string"}},"required":["addon_id","addon_version_id","billing_scope","display_quantity","name","omission","plan_addon_id","price_unit","quantity","unit_price"],"type":"object"},"type":"array"},"label":{"type":"string"},"one_off_addon_choices":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"addon_version_id":{"format":"uuid","type":"string"},"available?":{"type":"boolean"},"billing_scope":{"type":"string"},"display_quantity":{"type":"string"},"name":{"type":"string"},"omission":{"enum":["insufficient_allowance"],"nullable":true,"type":"string"},"plan_addon_id":{"format":"uuid","type":"string"},"price_unit":{"nullable":true,"type":"string"},"quantity":{"minimum":1,"type":"integer"},"remaining_quantity":{"minimum":0,"type":"integer"},"unavailable_reason":{"enum":["already_consumed","already_staged","insufficient_allowance"],"nullable":true,"type":"string"},"unit_price":{"type":"string"}},"required":["addon_id","addon_version_id","available?","billing_scope","display_quantity","name","omission","plan_addon_id","price_unit","quantity","remaining_quantity","unavailable_reason","unit_price"],"type":"object"},"type":"array"},"package_type":{"enum":["bundle","subscription"],"type":"string"},"package_units":{"minimum":1,"type":"integer"},"remaining_units":{"minimum":0,"type":"integer"},"requested_duration_minutes":{"minimum":1,"nullable":true,"type":"integer"},"restrictions":{"additionalProperties":false,"properties":{"paid_extras":{"enum":["separate_booking"],"type":"string"},"service_id":{"format":"uuid","nullable":true,"type":"string"}},"required":["paid_extras","service_id"],"type":"object"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"service_label":{"nullable":true,"type":"string"},"unit_duration_minutes":{"minimum":1,"type":"integer"}},"required":["coverage","duration_adjustment","effective_duration_minutes","id","included_addons","label","one_off_addon_choices","package_type","package_units","remaining_units","requested_duration_minutes","restrictions","service_id","service_label","unit_duration_minutes"],"type":"object"},"type":"array"},"page":{"minimum":1,"type":"integer"},"per_page":{"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"ReportRevenueCurrency":{"additionalProperties":true,"properties":{"additional":{"$ref":"#/components/schemas/ReportMoney"},"additional_comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"base":{"$ref":"#/components/schemas/ReportMoney"},"base_comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"comparison":{"allOf":[{"$ref":"#/components/schemas/ReportComparison"}],"nullable":true},"currency":{"type":"string"},"source_count":{"minimum":0,"type":"integer"},"total":{"$ref":"#/components/schemas/ReportMoney"}},"required":["additional","additional_comparison","base","base_comparison","comparison","currency","source_count","total"],"type":"object"},"HeadlessPackageQuote":{"additionalProperties":false,"properties":{"advisory?":{"type":"boolean"},"amount_due":{"type":"string"},"checked_at":{"format":"date-time","type":"string"},"currency":{"type":"string"},"date":{"format":"date","type":"string"},"duration_adjustment":{"enum":["none","package_unit","weekday_minimum"],"type":"string"},"duration_basis":{"enum":["local_wall_time"],"type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"effective_duration_minutes":{"minimum":1,"type":"integer"},"included_addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"addon_version_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"display_quantity":{"type":"string"},"name":{"type":"string"},"omission":{"enum":["insufficient_allowance"],"nullable":true,"type":"string"},"plan_addon_id":{"format":"uuid","type":"string"},"price_unit":{"nullable":true,"type":"string"},"quantity":{"minimum":1,"type":"integer"},"unit_price":{"type":"string"}},"required":["addon_id","addon_version_id","billing_scope","display_quantity","name","omission","plan_addon_id","price_unit","quantity","unit_price"],"type":"object"},"type":"array"},"label":{"type":"string"},"member_package_id":{"format":"uuid","type":"string"},"omitted_addons":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"addon_version_id":{"format":"uuid","type":"string"},"billing_scope":{"type":"string"},"display_quantity":{"type":"string"},"name":{"type":"string"},"omission":{"enum":["insufficient_allowance"],"nullable":true,"type":"string"},"plan_addon_id":{"format":"uuid","type":"string"},"price_unit":{"nullable":true,"type":"string"},"quantity":{"minimum":1,"type":"integer"},"unit_price":{"type":"string"}},"required":["addon_id","addon_version_id","billing_scope","display_quantity","name","omission","plan_addon_id","price_unit","quantity","unit_price"],"type":"object"},"type":"array"},"one_off_addon_choices":{"items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"available?":{"type":"boolean"},"name":{"type":"string"},"plan_addon_id":{"format":"uuid","type":"string"},"quantity":{"minimum":1,"type":"integer"}},"required":["addon_id","available?","name","plan_addon_id","quantity"],"type":"object"},"type":"array"},"package_type":{"enum":["bundle","subscription"],"type":"string"},"package_units":{"minimum":1,"type":"integer"},"package_version_id":{"format":"uuid","type":"string"},"payment_basis":{"enum":["paid_package"],"type":"string"},"requested_duration_minutes":{"minimum":1,"nullable":true,"type":"integer"},"room_id":{"format":"uuid","type":"string"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"service_version_id":{"format":"uuid","nullable":true,"type":"string"},"setup_id":{"format":"uuid","type":"string"},"setup_version_id":{"format":"uuid","type":"string"},"start_time":{"pattern":"^\\d{2}:\\d{2}(:\\d{2})?$","type":"string"},"starts_at":{"format":"date-time","type":"string"},"timezone":{"type":"string"}},"required":["advisory?","amount_due","checked_at","currency","date","duration_adjustment","duration_basis","duration_minutes","effective_duration_minutes","included_addons","label","member_package_id","omitted_addons","one_off_addon_choices","package_type","package_units","package_version_id","payment_basis","requested_duration_minutes","room_id","service_id","service_version_id","setup_id","setup_version_id","start_time","starts_at","timezone"],"type":"object"},"HeadlessCustomerAvailability":{"additionalProperties":false,"properties":{"calendar_status":{"enum":["verified","unverified"],"type":"string"},"checked_at":{"format":"date-time","type":"string"},"date_from":{"format":"date","type":"string"},"date_to":{"format":"date","type":"string"},"duration_basis":{"enum":["local_wall_time"],"type":"string"},"duration_minutes":{"minimum":1,"nullable":true,"type":"integer"},"entries":{"items":{"additionalProperties":false,"properties":{"days":{"items":{"additionalProperties":false,"properties":{"date":{"format":"date","type":"string"},"intervals":{"items":{"additionalProperties":false,"properties":{"end_status":{"enum":["resolved","gap_time"],"type":"string"},"end_time":{"pattern":"^\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?$","type":"string"},"ends_at":{"format":"date-time","nullable":true,"type":"string"},"start_time":{"pattern":"^\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?$","type":"string"},"starts_at":{"format":"date-time","type":"string"}},"required":["end_status","end_time","ends_at","start_time","starts_at"],"type":"object"},"maxItems":100,"type":"array"},"intervals_page":{"minimum":1,"type":"integer"},"intervals_per_page":{"maximum":100,"minimum":1,"type":"integer"},"intervals_total":{"minimum":0,"type":"integer"}},"required":["date","intervals","intervals_page","intervals_per_page","intervals_total"],"type":"object"},"maxItems":31,"type":"array"},"room_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","nullable":true,"type":"string"}},"required":["days","room_id","setup_id"],"type":"object"},"maxItems":100,"type":"array"},"kind":{"enum":["windows","starts"],"type":"string"},"page":{"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"timezone":{"type":"string"},"total":{"minimum":0,"type":"integer"},"unverified_dates":{"items":{"format":"date","type":"string"},"maxItems":31,"type":"array"}},"required":["calendar_status","checked_at","date_from","date_to","duration_basis","duration_minutes","entries","kind","page","per_page","timezone","total","unverified_dates"],"type":"object"},"ReportCohort":{"additionalProperties":true,"properties":{"denominator":{"minimum":0,"type":"integer"},"numerator":{"minimum":0,"type":"integer"},"percentage":{"nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["denominator","numerator","percentage"],"type":"object"},"HeadlessGuestList":{"items":{"additionalProperties":false,"properties":{"booking_slot_id":{"format":"uuid","type":"string"},"email":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"notes":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"},"status":{"type":"string"}},"required":["id","booking_slot_id","name","status"],"type":"object"},"type":"array"},"HeadlessBundleQuoteRequest":{"additionalProperties":false,"properties":{"bundle_plan_id":{"format":"uuid","type":"string"},"client_id":{"format":"uuid","type":"string"},"consents":{"additionalProperties":false,"properties":{"refund_policy":{"type":"boolean"},"short_terms":{"type":"boolean"},"terms":{"type":"boolean"}},"type":"object"},"credit_choice":{"enum":["auto","use","none"],"type":"string"},"invoice_profile":{"additionalProperties":false,"properties":{"billing_fields":{"additionalProperties":{"type":"string"},"type":"object"},"type":{"enum":["individual","business"],"type":"string"}},"type":"object"},"page":{"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"promo_code":{"type":"string"},"tier_id":{"format":"uuid","type":"string"}},"title":"HeadlessBundleQuoteRequest","type":"object"},"HeadlessSubscriptionCancellation":{"additionalProperties":false,"properties":{"failure_code":{"nullable":true,"type":"string"},"fee_payment_id":{"format":"uuid","nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"management_request_id":{"format":"uuid","nullable":true,"type":"string"},"management_status":{"enum":["pending","ready","failed"],"nullable":true,"type":"string"},"member_subscription_id":{"format":"uuid","type":"string"},"saga_id":{"format":"uuid","nullable":true,"type":"string"},"saga_status":{"enum":["pending","schedule_released","completed","fee_uncollectible"],"nullable":true,"type":"string"},"subscription_status":{"type":"string"}},"required":["id","member_subscription_id","subscription_status","saga_id","saga_status","fee_payment_id"],"type":"object"}},"securitySchemes":{"ApiKeyAuth":{"bearerFormat":"opaque API key","description":"Send Authorization: Bearer pdyx_<secret>. The opaque API key resolves its own studio; credentials in query parameters or request bodies are not accepted.","scheme":"bearer","type":"http"}}},"info":{"description":"The public v1 API uses opaque API keys to resolve the studio and its current permissions. This document uses OpenAPI 3.0; the spec library does not emit OpenAPI 3.1.","title":"Podyx Public API","version":"1.0.0"},"openapi":"3.0.0","paths":{"/api/v1/reports/capacity":{"get":{"callbacks":{},"deprecated":false,"description":"Requires current reports:read. Customer identities and signed client filters require clients:read. Evidence rechecks all resource permissions. Typed input, complexity and recorded allocation coverage errors are 422 with no partial headline; invalid or inaccessible references are opaque 404. Busy analysis capacity returns 429 analysis_busy with Retry-After: 1 and no partial headline. Ordinary infrastructure faults retain the native 500/503 contracts.","operationId":"reports_capacity","parameters":[{"description":"Calendar preset; omitted uses month_to_date. Explicit current date bounds take precedence.","in":"query","name":"preset","required":false,"schema":{"enum":["month_to_date","calendar_month","calendar_quarter","calendar_year","custom"],"type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Canonical scope carryover; this family accepts only the default 90 and does not apply inactivity analysis.","in":"query","name":"inactivity_days","required":false,"schema":{"enum":[90],"type":"integer"}},{"description":"Capacity metric; omitted uses available_hours.","in":"query","name":"metric","required":false,"schema":{"enum":["available_hours","delivered_hours","booked_hours","hold_hours","blocker_hours"],"type":"string"}},{"description":"Capacity grouping; omitted uses room.","in":"query","name":"group_by","required":false,"schema":{"enum":["room","weekday","hour"],"type":"string"}},{"description":"Complete-population ordering; unavailable groups sort last. Omitted uses metric.","in":"query","name":"sort","required":false,"schema":{"enum":["metric","underuse","utilization"],"type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"room_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Contribution page; omitted uses 1. Headlines cover the complete population.","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Contribution page size; omitted uses 20.","in":"query","name":"page_size","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCapacityEnvelope"}}},"description":"Analyze studio capacity"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Analysis capacity is busy; retry shortly","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Analyze studio capacity","tags":["Owner reports"]}},"/api/v1/headless/external-bundle-purchases":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates a visitor. External purchase requires family:purchase, payments:report_external and clients:read (clients:create when associating a new Client). The command commits one validated frozen purchase and a pending external/off_platform payable without provider IO or an invented provider subscription ID. Report actual collections through external-payment-reports; partial coverage grants nothing. Approval, fulfillment and collection remain separate. GET purchases exposes the actual pending member and local initial subscription_cycle_id. All new entry requires public_api/headless_api plus deployment external-money readiness; immutable replay and accepted recovery refresh current authority. Native provider configuration is unchanged.","operationId":"headlessV1PurchaseExternalBundle","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBundlePurchaseRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable command acceptance; fetch purchase current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Accept a studio-collected external bundle purchase","tags":["Headless native purchases"]}},"/api/v1/headless/rooms/{id}/archive":{"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1ArchiveRoom","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Archive catalog rooms","tags":["Headless catalog"]}},"/api/v1/headless/subscription-plans/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1GetSubscriptionPlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"options_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"options_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessSubscriptionPlanAuthoring"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized authoring record"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get subscription-plans","tags":["Headless package offers"]},"patch":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1UpdateSubscriptionPlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionPlanUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Update subscription-plans","tags":["Headless package offers"]}},"/api/v1/headless/sessions/{id}/reschedules":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio. Moves retain the sold duration. The setup_id selection applies to studio-tour sessions only; ordinary sessions retain their booked setup. To change an ordinary session's setup, preview /sessions/{id}/amendment-previews, then accept /sessions/{id}/amendments with the returned version and required financial choices.","operationId":"headlessV1AftercareReschedule","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessMoveInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless reschedule","tags":["Headless booking aftercare"]}},"/api/v1/headless/services/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1GetService","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"prices_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessServiceAuthoring"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized authoring record, including inactive drafts"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get catalog services","tags":["Headless catalog"]},"patch":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1UpdateService","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessServiceUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Update catalog services","tags":["Headless catalog"]}},"/api/v1/headless/checkouts/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Studio-owned native checkout. Current key/account/public_api authority and tenant ownership apply on reads, writes and receipt replay. A permitted replacement studio key may recover a known checkout. Accepted obligations remain recoverable when headless new entry is disabled. Instructions are browser capabilities, never proof of settlement. Confirmation verifies the native provider. An uncertain provider outcome retains its frozen request identity; do not create another tender. Token payloads are never in receipts or job arguments.","operationId":"headlessV1GetCheckout","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessCheckout"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized studio resource"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read current checkout instruction, money, booking approval and fulfillment","tags":["Headless native checkout"]}},"/api/v1/headless/purchases/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates the visitor. New purchase entry requires headless_api plus the family purchase permission, clients:read and payments:collect; clients:create is conditional on creating a Client association. GET requires payments:read plus the purchased family's read permission. Recovery requires payments:collect, clients:read and that family's read permission under current studio key/account/public_api authority; accepted recovery remains available with headless new entry disabled. Native provider, credit, promo, approval, private-offer and consent policies apply. Acceptance atomically records a frozen purchase obligation, immutable receipt and required work; no provider IO runs before commit. Instructions carry public SDK capabilities, never proof of settlement. Fetch current state for money, approval and rights separately. Unknown outcomes resume the original frozen tender identity; outcomes beyond the safe replay window require reconciliation and never create another recurring subscription. Cancellation retires unpaid capability before completing; money in flight remains undetermined. No external settlement reports, renewal, aftercare or raw status writes are accepted.","operationId":"headlessV1GetPurchase","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPurchase"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized native purchase"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read current purchase instructions, settlement, approval and fulfillment","tags":["Headless native purchases"]}},"/api/v1/headless/amendments/{id}/retries":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareRetryAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless retry amendment","tags":["Headless booking aftercare"]}},"/api/v1/headless/subscriptions/{id}/management-requests":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesManageSubscription","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionManagementInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch current state separately"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless manage subscription","tags":["Headless package rights and management"]}},"/api/v1/headless/addons":{"get":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1ListAddon","parameters":[{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"view","schema":{"default":"authoring","enum":["authoring","offers"],"type":"string"}},{"in":"query","name":"include_inactive","schema":{"type":"boolean"}},{"in":"query","name":"room_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"setup_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"service_id","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"configured_prices":{"$ref":"#/components/schemas/HeadlessConfiguredPrices"},"entries":{"items":{"anyOf":[{"$ref":"#/components/schemas/HeadlessAddonAuthoring"},{"$ref":"#/components/schemas/HeadlessAddonOffer"}]},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total","configured_prices"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"SQL-paginated authoring or customer offers and configured price conditions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"List catalog addons","tags":["Headless catalog"]},"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1CreateAddon","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessAddonCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Create catalog addons","tags":["Headless catalog"]}},"/api/v1/setups":{"get":{"callbacks":{},"deprecated":false,"description":"The authenticated key resolves the studio. Tenant selectors supplied in the request are ignored. Lists default to page 1 and 20 entries; page sizes are capped at 100.","operationId":"listSetups","parameters":[{"in":"query","name":"page","schema":{"default":1,"maximum":1000000,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":20,"description":"Clamped to 1–100.","type":"integer"}},{"in":"query","name":"include_inactive","schema":{"default":false,"type":"boolean"}},{"in":"query","name":"room_id","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"entries":{"items":{"additionalProperties":true,"properties":{"current_version":{"additionalProperties":true,"nullable":true,"properties":{"addon_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"seat_count":{"type":"integer"},"service_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"version_number":{"type":"integer"}},"required":["id","version_number","name","seat_count","service_ids","addon_ids"],"type":"object"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"room_id":{"format":"uuid","type":"string"},"sort_order":{"type":"integer"}},"required":["id","sort_order","is_active","current_version"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"listSetups","tags":["Studio operations"]}},"/api/v1/rooms":{"get":{"callbacks":{},"deprecated":false,"description":"The authenticated key resolves the studio. Tenant selectors supplied in the request are ignored. Lists default to page 1 and 20 entries; page sizes are capped at 100.","operationId":"listRooms","parameters":[{"in":"query","name":"page","schema":{"default":1,"maximum":1000000,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":20,"description":"Clamped to 1–100.","type":"integer"}},{"in":"query","name":"include_inactive","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"entries":{"items":{"additionalProperties":true,"properties":{"current_version":{"additionalProperties":true,"nullable":true,"properties":{"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"version_number":{"type":"integer"}},"required":["id","version_number","name"],"type":"object"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["id","sort_order","is_active","current_version"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"listRooms","tags":["Studio operations"]}},"/api/v1/reports/customers":{"get":{"callbacks":{},"deprecated":false,"description":"Requires current reports:read. Customer identities and signed client filters require clients:read. Evidence rechecks all resource permissions. Typed input, complexity and recorded allocation coverage errors are 422 with no partial headline; invalid or inaccessible references are opaque 404. Busy analysis capacity returns 429 analysis_busy with Retry-After: 1 and no partial headline. Ordinary infrastructure faults retain the native 500/503 contracts.","operationId":"reports_customers","parameters":[{"description":"Calendar preset; omitted uses month_to_date. Explicit current date bounds take precedence.","in":"query","name":"preset","required":false,"schema":{"enum":["month_to_date","calendar_month","calendar_quarter","calendar_year","custom","lifetime"],"type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Customer metric; omitted uses client_total_spend.","in":"query","name":"metric","required":false,"schema":{"enum":["client_total_spend","returning_clients","inactive_clients"],"type":"string"}},{"description":"Returning applies only to bounded Total Spend; omitted uses all.","in":"query","name":"cohort","required":false,"schema":{"enum":["all","returning"],"type":"string"}},{"description":"Inactivity window; omitted uses 90. Activity only; never a churn prediction.","in":"query","name":"inactivity_days","required":false,"schema":{"maximum":730,"minimum":1,"type":"integer"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"client_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"currency","required":false,"schema":{"type":"string"}},{"description":"Contribution page; omitted uses 1. Headlines cover the complete population.","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Contribution page size; omitted uses 20.","in":"query","name":"page_size","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCustomersEnvelope"}}},"description":"Analyze studio customers"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Analysis capacity is busy; retry shortly","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Analyze studio customers","tags":["Owner reports"]}},"/api/v1/headless/services/{id}/restore":{"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1RestoreService","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Restore catalog services","tags":["Headless catalog"]}},"/api/v1/headless/subscriptions/{id}/approvals":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesApproveSubscription","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch current state separately"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless approve subscription","tags":["Headless package rights and management"]}},"/api/v1/headless/bundle-quotes":{"post":{"callbacks":{},"deprecated":false,"description":"Read-only POST: incomplete selections return status=incomplete and missing_inputs, with current CMS-configured forms, guest limit, recording seats, invoice fields, rail-specific displayed consent documents and paginated file-transfer choices. No client, booking, hold, payment or receipt is created. Prices, tax, promo eligibility and credits are resolved by Podyx; amounts or provider IDs in input are refused. A fingerprint identifies advisory facts, never a price lock or permission to charge. Complete means required selections, details, invoice fields and consent acceptance are supplied; later commands must revalidate. client_id means a currently owned studio Client, requires clients:read in addition to the family read permission, and is never visitor login. Omit it for anonymous preview; email is not accepted here. Existing public_api/account/current-key authority remains required, including after reads. Disabling headless new entry preserves authorized quote reads. Booking sessions are explicit and multi-session; Studio Tour has its own published quote and booking operations. Subscription quotes additionally accept payment_source=native|external, default native: external previews studio collection independently of native provider cadence restrictions; actual studio approval still applies and no collection is reported. Other quote families do not accept payment_source. Bundle/subscription never ask for refund policy; tour consent remains terms only. page/per_page page file-transfer choices only, using the existing 1..100 bounds.","operationId":"headlessV1BundleQuote","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBundleQuoteRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessCustomerQuote"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Advisory complete or incomplete quote; no hold"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"code":{"description":"Stable machine-readable error code; clients must tolerate new codes.","type":"string"},"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Field validation messages when code is validation_failed.","type":"object"},"feature":{"description":"Required studio entitlement when code is feature_disabled; clients must tolerate new features.","type":"string"},"permissions":{"description":"Required permissions when code is permission_required.","items":{"$ref":"#/components/schemas/ApiPermission"},"type":"array"},"request_id":{"description":"Request correlation identifier.","type":"string"},"setup_choices":{"description":"Eligible destination setups when code is setup_selection_required.","items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"room_name":{"nullable":true,"type":"string"}},"required":["id","name","room_name"],"type":"object"},"type":"array"},"status":{"description":"HTTP response status.","type":"integer"},"title":{"type":"string"}},"required":["status","code","title","request_id"],"title":"ApiErrorResponse","type":"object"}}},"description":"Current selection is unavailable or no longer offered"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Preview current customer bundle selections and checkout requirements","tags":["Headless customer quotes"]}},"/api/v1/headless/external-payment-reports/{id}/resolutions":{"post":{"callbacks":{},"deprecated":false,"description":"A studio collection UUID belongs to the tenant independently of each key-bound HTTP receipt. Report only studio-collected money; native Stripe/Square/cash tenders cannot be externally settled. No provider integration or provider proof is required. Inline complete booking selections use current customer policy. Booking refusal retains collected money and an action obligation; it never claims a refund happened. Same immutable collection facts are a financial no-op across keys; repair is a separate resolution command. GET separates original immutable acceptance from current coverage/action state. New commercial entry is deployment-disabled until external recovery/projection readiness; current authority and owned recovery remain required after disablement.","operationId":"headlessV1ResolveExternalPaymentReport","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessExternalPaymentResolutionRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current studio-owned external state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1ResolveExternalPaymentReport","tags":["Headless external payments"]}},"/api/v1/headless/addon-purchases/{id}/retries":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareRetryAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless retry addon","tags":["Headless booking aftercare"]}},"/api/v1/clients":{"get":{"callbacks":{},"deprecated":false,"description":"The CMS client roster, including blocked clients and Personnel with historical client spending. Integration service identities are excluded.","operationId":"listClients","parameters":[{"in":"query","name":"page","schema":{"default":1,"maximum":1000000,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":20,"description":"Clamped to 1–100.","type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"entries":{"items":{"additionalProperties":true,"properties":{"booking_count":{"minimum":0,"type":"integer"},"credits_balance":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"email":{"type":"string"},"id":{"format":"uuid","type":"string"},"is_blocked":{"type":"boolean"},"joined_at":{"format":"date-time","nullable":true,"type":"string"},"money_spent":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"name":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"}},"required":["id","email","is_blocked","credits_balance"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"listClients","tags":["Studio operations"]},"post":{"callbacks":{},"deprecated":false,"description":"Associate a human client by email with the authenticated studio. Existing people keep their shared profile and receive no duplicate initial invitation. Requires clients:create. Replay returns the original committed identifiers and HTTP status; fetch current details separately.","operationId":"createClient","parameters":[{"description":"UUID request key scoped to this API key and operation. Reuse only with the same normalized input.","in":"header","name":"idempotency-key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"email":{"format":"email","minLength":1,"pattern":"^\\s*[^\\s]+@[^\\s]+\\s*$","type":"string"}},"required":["email"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":false,"properties":{"action":{"enum":["client_created"],"type":"string"},"association":{"enum":["created","existing"],"type":"string"},"client_id":{"format":"uuid","type":"string"},"identity":{"enum":["created","existing"],"type":"string"},"invitation":{"enum":["queued","skipped"],"type":"string"},"replayed":{"type":"boolean"}},"required":["action","association","client_id","identity","invitation","replayed"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Original committed write outcome; replay retains this status"},"201":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":false,"properties":{"action":{"enum":["client_created"],"type":"string"},"association":{"enum":["created","existing"],"type":"string"},"client_id":{"format":"uuid","type":"string"},"identity":{"enum":["created","existing"],"type":"string"},"invitation":{"enum":["queued","skipped"],"type":"string"},"replayed":{"type":"boolean"}},"required":["action","association","client_id","identity","invitation","replayed"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Original committed write outcome; replay retains this status"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Request-key, availability or unsettled-payment conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"createClient","tags":["Studio operations"]}},"/api/v1/headless/booking-quotes":{"post":{"callbacks":{},"deprecated":false,"description":"Read-only POST: incomplete selections return status=incomplete and missing_inputs, with current CMS-configured forms, guest limit, recording seats, invoice fields, rail-specific displayed consent documents and paginated file-transfer choices. No client, booking, hold, payment or receipt is created. Prices, tax, promo eligibility and credits are resolved by Podyx; amounts or provider IDs in input are refused. A fingerprint identifies advisory facts, never a price lock or permission to charge. Complete means required selections, details, invoice fields and consent acceptance are supplied; later commands must revalidate. client_id means a currently owned studio Client, requires clients:read in addition to the family read permission, and is never visitor login. Omit it for anonymous preview; email is not accepted here. Existing public_api/account/current-key authority remains required, including after reads. Disabling headless new entry preserves authorized quote reads. Booking sessions are explicit and multi-session; Studio Tour has its own published quote and booking operations. Subscription quotes additionally accept payment_source=native|external, default native: external previews studio collection independently of native provider cadence restrictions; actual studio approval still applies and no collection is reported. Other quote families do not accept payment_source. Bundle/subscription never ask for refund policy; tour consent remains terms only. page/per_page page file-transfer choices only, using the existing 1..100 bounds.","operationId":"headlessV1BookingQuote","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBookingQuoteRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessCustomerQuote"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Advisory complete or incomplete quote; no hold"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"code":{"description":"Stable machine-readable error code; clients must tolerate new codes.","type":"string"},"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Field validation messages when code is validation_failed.","type":"object"},"feature":{"description":"Required studio entitlement when code is feature_disabled; clients must tolerate new features.","type":"string"},"permissions":{"description":"Required permissions when code is permission_required.","items":{"$ref":"#/components/schemas/ApiPermission"},"type":"array"},"request_id":{"description":"Request correlation identifier.","type":"string"},"setup_choices":{"description":"Eligible destination setups when code is setup_selection_required.","items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"room_name":{"nullable":true,"type":"string"}},"required":["id","name","room_name"],"type":"object"},"type":"array"},"status":{"description":"HTTP response status.","type":"integer"},"title":{"type":"string"}},"required":["status","code","title","request_id"],"title":"ApiErrorResponse","type":"object"}}},"description":"Current selection is unavailable or no longer offered"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Preview current customer booking selections and checkout requirements","tags":["Headless customer quotes"]}},"/api/v1/headless/addon-quotes":{"post":{"callbacks":{},"deprecated":false,"description":"Read-only POST: incomplete selections return status=incomplete and missing_inputs, with current CMS-configured forms, guest limit, recording seats, invoice fields, rail-specific displayed consent documents and paginated file-transfer choices. No client, booking, hold, payment or receipt is created. Prices, tax, promo eligibility and credits are resolved by Podyx; amounts or provider IDs in input are refused. A fingerprint identifies advisory facts, never a price lock or permission to charge. Complete means required selections, details, invoice fields and consent acceptance are supplied; later commands must revalidate. client_id means a currently owned studio Client, requires clients:read in addition to the family read permission, and is never visitor login. Omit it for anonymous preview; email is not accepted here. Existing public_api/account/current-key authority remains required, including after reads. Disabling headless new entry preserves authorized quote reads. Booking sessions are explicit and multi-session; Studio Tour has its own published quote and booking operations. Subscription quotes additionally accept payment_source=native|external, default native: external previews studio collection independently of native provider cadence restrictions; actual studio approval still applies and no collection is reported. Other quote families do not accept payment_source. Bundle/subscription never ask for refund policy; tour consent remains terms only. page/per_page page file-transfer choices only, using the existing 1..100 bounds.","operationId":"headlessV1AddonQuote","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessAddonQuoteRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessCustomerQuote"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Advisory complete or incomplete quote; no hold"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"code":{"description":"Stable machine-readable error code; clients must tolerate new codes.","type":"string"},"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Field validation messages when code is validation_failed.","type":"object"},"feature":{"description":"Required studio entitlement when code is feature_disabled; clients must tolerate new features.","type":"string"},"permissions":{"description":"Required permissions when code is permission_required.","items":{"$ref":"#/components/schemas/ApiPermission"},"type":"array"},"request_id":{"description":"Request correlation identifier.","type":"string"},"setup_choices":{"description":"Eligible destination setups when code is setup_selection_required.","items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"room_name":{"nullable":true,"type":"string"}},"required":["id","name","room_name"],"type":"object"},"type":"array"},"status":{"description":"HTTP response status.","type":"integer"},"title":{"type":"string"}},"required":["status","code","title","request_id"],"title":"ApiErrorResponse","type":"object"}}},"description":"Current selection is unavailable or no longer offered"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Preview current customer addon selections and checkout requirements","tags":["Headless customer quotes"]}},"/api/v1/headless/subscription-quotes":{"post":{"callbacks":{},"deprecated":false,"description":"Read-only POST: incomplete selections return status=incomplete and missing_inputs, with current CMS-configured forms, guest limit, recording seats, invoice fields, rail-specific displayed consent documents and paginated file-transfer choices. No client, booking, hold, payment or receipt is created. Prices, tax, promo eligibility and credits are resolved by Podyx; amounts or provider IDs in input are refused. A fingerprint identifies advisory facts, never a price lock or permission to charge. Complete means required selections, details, invoice fields and consent acceptance are supplied; later commands must revalidate. client_id means a currently owned studio Client, requires clients:read in addition to the family read permission, and is never visitor login. Omit it for anonymous preview; email is not accepted here. Existing public_api/account/current-key authority remains required, including after reads. Disabling headless new entry preserves authorized quote reads. Booking sessions are explicit and multi-session; Studio Tour has its own published quote and booking operations. Subscription quotes additionally accept payment_source=native|external, default native: external previews studio collection independently of native provider cadence restrictions; actual studio approval still applies and no collection is reported. Other quote families do not accept payment_source. Bundle/subscription never ask for refund policy; tour consent remains terms only. page/per_page page file-transfer choices only, using the existing 1..100 bounds.","operationId":"headlessV1SubscriptionQuote","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionQuoteRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessCustomerQuote"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Advisory complete or incomplete quote; no hold"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"code":{"description":"Stable machine-readable error code; clients must tolerate new codes.","type":"string"},"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Field validation messages when code is validation_failed.","type":"object"},"feature":{"description":"Required studio entitlement when code is feature_disabled; clients must tolerate new features.","type":"string"},"permissions":{"description":"Required permissions when code is permission_required.","items":{"$ref":"#/components/schemas/ApiPermission"},"type":"array"},"request_id":{"description":"Request correlation identifier.","type":"string"},"setup_choices":{"description":"Eligible destination setups when code is setup_selection_required.","items":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"room_name":{"nullable":true,"type":"string"}},"required":["id","name","room_name"],"type":"object"},"type":"array"},"status":{"description":"HTTP response status.","type":"integer"},"title":{"type":"string"}},"required":["status","code","title","request_id"],"title":"ApiErrorResponse","type":"object"}}},"description":"Current selection is unavailable or no longer offered"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Preview current customer subscription selections and checkout requirements","tags":["Headless customer quotes"]}},"/api/v1/headless/setups/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1GetSetup","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"prices_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessSetupAuthoring"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized authoring record, including inactive drafts"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get catalog setups","tags":["Headless catalog"]},"patch":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1UpdateSetup","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSetupUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Update catalog setups","tags":["Headless catalog"]}},"/api/v1/headless/external-checkouts/{id}/collections":{"get":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1ListExternalRefundCollections","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"after","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":25,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalRefundCollectionPage"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1ListExternalRefundCollections","tags":["Headless external recovery"]}},"/api/v1/headless/amendments/{id}/declines":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareDeclineAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless decline amendment","tags":["Headless booking aftercare"]}},"/api/v1/headless/subscription-plans/{id}/archive":{"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1ArchiveSubscriptionPlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Archive subscription-plans","tags":["Headless package offers"]}},"/api/v1/headless/checkouts/{id}/confirmations":{"post":{"callbacks":{},"deprecated":false,"description":"Studio-owned native checkout. Current key/account/public_api authority and tenant ownership apply on reads, writes and receipt replay. A permitted replacement studio key may recover a known checkout. Accepted obligations remain recoverable when headless new entry is disabled. Instructions are browser capabilities, never proof of settlement. Confirmation verifies the native provider. An uncertain provider outcome retains its frozen request identity; do not create another tender. Token payloads are never in receipts or job arguments.","operationId":"headlessV1ConfirmCheckout","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCheckoutEmptyRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch the checkout for current money, approval and fulfillment"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Request native provider verification of an owned checkout","tags":["Headless native checkout"]}},"/api/v1/headless/amendments/{id}/approvals":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareApproveAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless approve amendment","tags":["Headless booking aftercare"]}},"/api/v1/headless/addon-purchases/{id}/declines":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareDeclineAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless decline addon","tags":["Headless booking aftercare"]}},"/api/v1/headless/addon-purchases/{id}/payment-tokens":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareSubmitAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSquareTokenRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless submit addon","tags":["Headless booking aftercare"]}},"/api/v1/headless/bundle-plans/private-offers":{"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1CreatePrivateOfferBundlePlan","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBundlePlanPrivateOfferRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"CreatePrivateOffer bundle-plans","tags":["Headless package offers"]}},"/api/v1/headless/services":{"get":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1ListService","parameters":[{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"view","schema":{"default":"authoring","enum":["authoring","offers"],"type":"string"}},{"in":"query","name":"include_inactive","schema":{"type":"boolean"}},{"in":"query","name":"room_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"setup_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"service_id","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"configured_prices":{"$ref":"#/components/schemas/HeadlessConfiguredPrices"},"entries":{"items":{"anyOf":[{"$ref":"#/components/schemas/HeadlessServiceAuthoring"},{"$ref":"#/components/schemas/HeadlessServiceOffer"}]},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total","configured_prices"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"SQL-paginated authoring or customer offers and configured price conditions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"List catalog services","tags":["Headless catalog"]},"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1CreateService","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessServiceCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Create catalog services","tags":["Headless catalog"]}},"/api/v1/headless/addons/{id}/restore":{"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1RestoreAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Restore catalog addons","tags":["Headless catalog"]}},"/api/v1/headless/external-checkouts/{id}/outcomes":{"post":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1ReportExternalPayableOutcome","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessExternalPayableOutcomeInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalRecoveryAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1ReportExternalPayableOutcome","tags":["Headless external recovery"]}},"/api/v1/headless/subscription-cycles/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"The studio key owns the tenant. Cycle UUID, financial collection UUID, delivery Idempotency-Key and monthly grant period are distinct. The predecessor must be the subscription's committed local cycle; dates and recurring amount come from the purchased snapshot. Paid outcomes use actual aggregate external coverage and shared fulfillment. Partial coverage grants nothing; approval remains separate. Failed renewal marks overdue; recovery extends that same term once. Cancellation/nonrenewal and terminal access remain authoritative: collected money stays recorded with an action instead of resurrecting rights. POST requires subscriptions:report_external_cycle plus payments:report_external under current account/key authority; GET requires subscriptions:read plus payments:read. New cycles require headless entry and external writer readiness; accepted cycle recovery survives commercial disable. Native provider subscription IDs cannot be reported here.","operationId":"headlessV1GetExternalSubscriptionCycle","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalSubscriptionCycle"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized cycle and actual collection/application"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read a local external subscription term cycle","tags":["Headless external subscriptions"]}},"/api/v1/studio":{"get":{"callbacks":{},"deprecated":false,"description":"The authenticated key resolves the studio. Tenant selectors supplied in the request are ignored. Lists default to page 1 and 20 entries; page sizes are capped at 100.","operationId":"getStudio","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"currency":{"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"timezone":{"type":"string"}},"required":["id","name","timezone","currency"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"getStudio","tags":["Studio operations"]}},"/api/v1/reports/revenue":{"get":{"callbacks":{},"deprecated":false,"description":"Requires current reports:read. Customer identities and signed client filters require clients:read. Evidence rechecks all resource permissions. Typed input, complexity and recorded allocation coverage errors are 422 with no partial headline; invalid or inaccessible references are opaque 404. Busy analysis capacity returns 429 analysis_busy with Retry-After: 1 and no partial headline. Ordinary infrastructure faults retain the native 500/503 contracts.","operationId":"reports_revenue","parameters":[{"description":"Calendar preset; omitted uses month_to_date. Explicit current date bounds take precedence.","in":"query","name":"preset","required":false,"schema":{"enum":["month_to_date","calendar_month","calendar_quarter","calendar_year","custom"],"type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Canonical scope carryover; this family accepts only the default 90 and does not apply inactivity analysis.","in":"query","name":"inactivity_days","required":false,"schema":{"enum":[90],"type":"integer"}},{"description":"Recognition metric; omitted uses recognized_sold.","in":"query","name":"metric","required":false,"schema":{"enum":["recognized_sold","recognized_delivered","recognized_backlog"],"type":"string"}},{"description":"Contribution grouping; omitted uses service.","in":"query","name":"group_by","required":false,"schema":{"enum":["room","service"],"type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"room_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"service_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"plan_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"client_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"currency","required":false,"schema":{"type":"string"}},{"description":"Contribution page; omitted uses 1. Headlines cover the complete population.","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Contribution page size; omitted uses 20.","in":"query","name":"page_size","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRevenueEnvelope"}}},"description":"Analyze studio revenue"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Analysis capacity is busy; retry shortly","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Analyze studio revenue","tags":["Owner reports"]}},"/api/v1/headless/subscription-plans/private-offers":{"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1CreatePrivateOfferSubscriptionPlan","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionPlanPrivateOfferRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"CreatePrivateOffer subscription-plans","tags":["Headless package offers"]}},"/api/v1/sessions/{id}/cancel":{"post":{"callbacks":{},"deprecated":false,"description":"Cancel one session identified by its booking-slot UUID using its current ordinary, package or tour policy. Accepts an absent body or an empty object; cancellation terms come from the server. Requires sessions:update. HTTP 200 reports the committed cancellation, while refund settlement and downstream effects remain asynchronous and may be pending or require recovery. Replay preserves the original committed session and booking IDs and HTTP 200 without another cancellation; fetch current details separately.","operationId":"cancelSession","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"UUID request key scoped to this API key and operation. Reuse only with the same normalized input.","in":"header","name":"idempotency-key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":false,"properties":{"action":{"enum":["session_cancelled"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"replayed":{"type":"boolean"},"session_id":{"format":"uuid","type":"string"}},"required":["action","booking_id","replayed","session_id"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Original committed write outcome; replay retains this status"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Request-key, availability or unsettled-payment conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"cancelSession","tags":["Studio operations"]}},"/api/v1/headless/purchases/{id}/cancellation-requests":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates the visitor. New purchase entry requires headless_api plus the family purchase permission, clients:read and payments:collect; clients:create is conditional on creating a Client association. GET requires payments:read plus the purchased family's read permission. Recovery requires payments:collect, clients:read and that family's read permission under current studio key/account/public_api authority; accepted recovery remains available with headless new entry disabled. Native provider, credit, promo, approval, private-offer and consent policies apply. Acceptance atomically records a frozen purchase obligation, immutable receipt and required work; no provider IO runs before commit. Instructions carry public SDK capabilities, never proof of settlement. Fetch current state for money, approval and rights separately. Unknown outcomes resume the original frozen tender identity; outcomes beyond the safe replay window require reconciliation and never create another recurring subscription. Cancellation retires unpaid capability before completing; money in flight remains undetermined. No external settlement reports, renewal, aftercare or raw status writes are accepted.","operationId":"headlessV1CancelPurchase","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCheckoutEmptyRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable command acceptance; fetch purchase current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Request retirement of an unpaid native purchase","tags":["Headless native purchases"]}},"/api/v1/headless/external-checkouts":{"post":{"callbacks":{},"deprecated":false,"description":"A studio collection UUID belongs to the tenant independently of each key-bound HTTP receipt. Report only studio-collected money; native Stripe/Square/cash tenders cannot be externally settled. No provider integration or provider proof is required. Inline complete booking selections use current customer policy. Booking refusal retains collected money and an action obligation; it never claims a refund happened. Same immutable collection facts are a financial no-op across keys; repair is a separate resolution command. GET separates original immutable acceptance from current coverage/action state. New commercial entry is deployment-disabled until external recovery/projection readiness; current authority and owned recovery remain required after disablement.","operationId":"headlessV1CreateExternalCheckout","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBookingCheckoutRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current studio-owned external state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1CreateExternalCheckout","tags":["Headless external payments"]}},"/api/v1/headless/rooms/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1GetRoom","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"prices_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessRoomAuthoring"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized authoring record, including inactive drafts"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get catalog rooms","tags":["Headless catalog"]},"patch":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1UpdateRoom","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessRoomUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Update catalog rooms","tags":["Headless catalog"]}},"/api/v1/headless/subscriptions/{id}/cancellations":{"post":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1CancelSubscription","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionCancellationInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalRecoveryAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1CancelSubscription","tags":["Headless external recovery"]}},"/api/v1/headless/bundle-plans/{id}/archive":{"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1ArchiveBundlePlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Archive bundle-plans","tags":["Headless package offers"]}},"/api/v1/headless/clients/{id}/subscription-redemption-quotes":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesSubscriptionQuote","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessPackageQuoteInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageQuote"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current purchased rights or advisory quote"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless subscription quote","tags":["Headless package rights and management"]}},"/api/v1/headless/clients/{id}/subscription-rights":{"get":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesSubscriptionRights","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"service_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"member_package_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"duration_minutes","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageRightsPage"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current purchased rights or advisory quote"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless subscription rights","tags":["Headless package rights and management"]}},"/api/v1/headless/clients/{id}/bundle-rights":{"get":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesBundleRights","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"service_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"member_package_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"duration_minutes","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageRightsPage"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current purchased rights or advisory quote"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless bundle rights","tags":["Headless package rights and management"]}},"/api/v1/headless/addon-purchases/{id}/confirmations":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareConfirmAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless confirm addon","tags":["Headless booking aftercare"]}},"/api/v1/headless/tour":{"get":{"callbacks":{},"deprecated":false,"description":"Studio-owned native checkout. Current key/account/public_api authority and tenant ownership apply on reads, writes and receipt replay. A permitted replacement studio key may recover a known checkout. Accepted obligations remain recoverable when headless new entry is disabled. Instructions are browser capabilities, never proof of settlement. Confirmation verifies the native provider. An uncertain provider outcome retains its frozen request identity; do not create another tender. Token payloads are never in receipts or job arguments.","operationId":"headlessV1GetPublishedTour","parameters":[{"description":"Published slug; omit for a published home tour","in":"query","name":"slug","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessTourOffer"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized studio resource"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read the currently published tour, required questions, guest policy and consent metadata","tags":["Headless native checkout"]}},"/api/v1/headless/addon-purchases/{id}/payment-preparations":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercarePrepareAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless prepare addon","tags":["Headless booking aftercare"]}},"/api/v1/headless/subscriptions/{id}/declines":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesDeclineSubscription","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch current state separately"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless decline subscription","tags":["Headless package rights and management"]}},"/api/v1/headless/purchases/{id}/payment-tokens":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates the visitor. New purchase entry requires headless_api plus the family purchase permission, clients:read and payments:collect; clients:create is conditional on creating a Client association. GET requires payments:read plus the purchased family's read permission. Recovery requires payments:collect, clients:read and that family's read permission under current studio key/account/public_api authority; accepted recovery remains available with headless new entry disabled. Native provider, credit, promo, approval, private-offer and consent policies apply. Acceptance atomically records a frozen purchase obligation, immutable receipt and required work; no provider IO runs before commit. Instructions carry public SDK capabilities, never proof of settlement. Fetch current state for money, approval and rights separately. Unknown outcomes resume the original frozen tender identity; outcomes beyond the safe replay window require reconciliation and never create another recurring subscription. Cancellation retires unpaid capability before completing; money in flight remains undetermined. No external settlement reports, renewal, aftercare or raw status writes are accepted.","operationId":"headlessV1SubmitPurchaseToken","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSquareTokenRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable command acceptance; fetch purchase current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Submit a private Square token for the owned purchase","tags":["Headless native purchases"]}},"/api/v1/key":{"get":{"callbacks":{},"description":"Returns safe key metadata, the studio resolved from the bearer credential, and the service account's current effective permissions. No tenant host is required.","operationId":"getApiKey","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyIntrospectionResponse"}}},"description":"API key metadata and permissions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Inspect the authenticated API key","tags":["API keys"]}},"/api/v1/headless/sessions/{id}/amendments":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareAcceptAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSessionAmendmentConfirmInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless accept amendment","tags":["Headless booking aftercare"]}},"/api/v1/booking-quotes":{"post":{"callbacks":{},"deprecated":false,"description":"Read-only price preview using the CMS client roster and server-loaded catalog, credits and payment configuration. Accepts optional add-on IDs and quantities offered by the setup, returning their current version, unit price and line total. Duration bounds follow the CMS weekday-enforcement rollout. Date and time are studio-local. Does not check slot availability, reserve inventory or guarantee the later booking price. File transfer and promo codes are excluded. Unknown top-level input fields are ignored; add-on entries accept only IDs and quantities, never submitted prices or trusted snapshots.","operationId":"quoteBooking","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"addons":{"description":"Optional unique add-on IDs and quantities; omission or an empty list selects none. Prices are server-controlled.","items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"maximum":2147483647,"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"client_id":{"format":"uuid","type":"string"},"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"service_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"example":"10:00","pattern":"^\\d{2}:\\d{2}(:\\d{2})?$","type":"string"}},"required":["client_id","setup_id","service_id","date","start_time","duration_minutes"],"type":"object"}}},"description":"Client and catalog selections to price","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"addon_total":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"addons":{"items":{"additionalProperties":true,"properties":{"addon_id":{"format":"uuid","type":"string"},"addon_version_id":{"format":"uuid","type":"string"},"line_total":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"quantity":{"minimum":1,"type":"integer"},"unit_price":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["addon_id","addon_version_id","quantity","unit_price","line_total"],"type":"object"},"type":"array"},"catalog_service_price":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"configured_service_price":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"credits_applied":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"currency":{"type":"string"},"discount_amount":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"gross":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"net":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"payment_link_needed":{"type":"boolean"},"remaining":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"service_id":{"format":"uuid","type":"string"},"setup_version_id":{"format":"uuid","type":"string"},"tax":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["net","tax","gross","discount_amount","credits_applied","remaining","addon_total","addons","currency","duration_minutes","service_id","setup_version_id"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"quoteBooking","tags":["Studio operations"]}},"/api/v1/headless/subscription-plans/{id}/payment-link-requests":{"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1RequestPaymentLinkSubscriptionPlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"RequestPaymentLink subscription-plans","tags":["Headless package offers"]}},"/api/v1/headless/bundle-plans":{"get":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1ListBundlePlan","parameters":[{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"included_items_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"included_items_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"options_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"options_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"view","schema":{"default":"authoring","enum":["authoring","offers"],"type":"string"}},{"in":"query","name":"scope","schema":{"default":"public","enum":["public","private","all"],"type":"string"}},{"in":"query","name":"include_inactive","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"entries":{"items":{"anyOf":[{"$ref":"#/components/schemas/HeadlessBundlePlanAuthoring"},{"$ref":"#/components/schemas/HeadlessBundlePlanOffer"}]},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Bounded authoring or consumer offer page"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"List bundle-plans","tags":["Headless package offers"]},"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1CreateBundlePlan","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBundlePlanCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Create bundle-plans","tags":["Headless package offers"]}},"/api/v1/headless/setups":{"get":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1ListSetup","parameters":[{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"view","schema":{"default":"authoring","enum":["authoring","offers"],"type":"string"}},{"in":"query","name":"include_inactive","schema":{"type":"boolean"}},{"in":"query","name":"room_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"setup_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"service_id","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"configured_prices":{"$ref":"#/components/schemas/HeadlessConfiguredPrices"},"entries":{"items":{"anyOf":[{"$ref":"#/components/schemas/HeadlessSetupAuthoring"},{"$ref":"#/components/schemas/HeadlessSetupOffer"}]},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total","configured_prices"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"SQL-paginated authoring or customer offers and configured price conditions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"List catalog setups","tags":["Headless catalog"]},"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1CreateSetup","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSetupCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Create catalog setups","tags":["Headless catalog"]}},"/api/v1/headless/tours/{id}/availability":{"get":{"callbacks":{},"deprecated":false,"description":"Studio-owned native checkout. Current key/account/public_api authority and tenant ownership apply on reads, writes and receipt replay. A permitted replacement studio key may recover a known checkout. Accepted obligations remain recoverable when headless new entry is disabled. Instructions are browser capabilities, never proof of settlement. Confirmation verifies the native provider. An uncertain provider outcome retains its frozen request identity; do not create another tender. Token payloads are never in receipts or job arguments.","operationId":"headlessV1GetTourAvailability","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"date","required":true,"schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessTourAvailability"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized studio resource"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read native setup-bound or roomless studio-wide tour start times","tags":["Headless native checkout"]}},"/api/v1/headless/external-checkouts/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"A studio collection UUID belongs to the tenant independently of each key-bound HTTP receipt. Report only studio-collected money; native Stripe/Square/cash tenders cannot be externally settled. No provider integration or provider proof is required. Inline complete booking selections use current customer policy. Booking refusal retains collected money and an action obligation; it never claims a refund happened. Same immutable collection facts are a financial no-op across keys; repair is a separate resolution command. GET separates original immutable acceptance from current coverage/action state. New commercial entry is deployment-disabled until external recovery/projection readiness; current authority and owned recovery remain required after disablement.","operationId":"headlessV1GetExternalCheckout","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalPayable"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current studio-owned external state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1GetExternalCheckout","tags":["Headless external payments"]}},"/api/v1/headless/amendments/{id}/confirmations":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareConfirmAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless confirm amendment","tags":["Headless booking aftercare"]}},"/api/v1/headless/bundle-plans/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1GetBundlePlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"options_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"options_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessBundlePlanAuthoring"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized authoring record"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get bundle-plans","tags":["Headless package offers"]},"patch":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1UpdateBundlePlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBundlePlanUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Update bundle-plans","tags":["Headless package offers"]}},"/api/v1/headless/bundle-plans/{id}/private-offer":{"patch":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1UpdatePrivateOfferBundlePlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBundlePlanPrivateOfferRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"UpdatePrivateOffer bundle-plans","tags":["Headless package offers"]}},"/api/v1/bookings/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Active session purchases, excluding calendar records and manual blocker-only records. Blocking slots are omitted from mixed purchases. Original payment status describes only the first linked payment, not later add-on charges. Money may be null for historical/unpriced records and otherwise uses the booking currency precision.","operationId":"getBooking","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"client_id":{"format":"uuid","nullable":true,"type":"string"},"currency":{"type":"string"},"discount_amount":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"id":{"format":"uuid","type":"string"},"inserted_at":{"format":"date-time","type":"string"},"member_bundle_id":{"format":"uuid","nullable":true,"type":"string"},"member_subscription_id":{"format":"uuid","nullable":true,"type":"string"},"notes":{"nullable":true,"type":"string"},"original_payment_status":{"description":"Status of the first linked payment only; does not summarize later add-on charges.","nullable":true,"type":"string"},"promo_code_id":{"format":"uuid","nullable":true,"type":"string"},"slots":{"items":{"additionalProperties":true,"properties":{"addons":{"items":{"additionalProperties":true,"properties":{"addon_version_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"quantity":{"type":"integer"},"unit_price":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["id","addon_version_id","quantity","unit_price"],"type":"object"},"type":"array"},"date":{"format":"date","type":"string"},"duration_minutes":{"type":"integer"},"end_time":{"type":"string"},"id":{"format":"uuid","type":"string"},"is_confirmed":{"type":"boolean"},"label":{"nullable":true,"type":"string"},"room_id":{"format":"uuid","nullable":true,"type":"string"},"start_time":{"type":"string"}},"required":["id","date","start_time","end_time","duration_minutes","room_id","is_confirmed","addons"],"type":"object"},"type":"array"},"source":{"type":"string"},"status":{"type":"string"},"tax_amount":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"total_amount":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"type":{"type":"string"},"user_email":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id","type","status","currency","total_amount","slots","original_payment_status"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"getBooking","tags":["Studio operations"]}},"/api/v1/headless/subscriptions/{id}/management":{"get":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesSubscriptionManagement","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessSubscriptionManagement"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current purchased rights or advisory quote"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless subscription management","tags":["Headless package rights and management"]}},"/api/v1/headless/checkouts/{id}/retries":{"post":{"callbacks":{},"deprecated":false,"description":"Studio-owned native checkout. Current key/account/public_api authority and tenant ownership apply on reads, writes and receipt replay. A permitted replacement studio key may recover a known checkout. Accepted obligations remain recoverable when headless new entry is disabled. Instructions are browser capabilities, never proof of settlement. Confirmation verifies the native provider. An uncertain provider outcome retains its frozen request identity; do not create another tender. Token payloads are never in receipts or job arguments.","operationId":"headlessV1RetryCheckout","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCheckoutEmptyRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch the checkout for current money, approval and fulfillment"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Resume the existing checkout and its frozen provider identity","tags":["Headless native checkout"]}},"/api/v1/headless/amendments/{id}/withdrawals":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareWithdrawAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless withdraw amendment","tags":["Headless booking aftercare"]}},"/api/v1/headless/clients/{id}":{"get":{"callbacks":{},"deprecated":false,"operationId":"headlessV1GetClient","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessClient"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current owned client"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read the currently owned studio client and its scoped references","tags":["Headless clients"]},"patch":{"callbacks":{},"deprecated":false,"operationId":"headlessV1UpdateClient","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessUpdateClientRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable acceptance; fetch client for current account lifecycle"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Update explicitly supplied shared client profile fields","tags":["Headless clients"]}},"/api/v1/headless/amendments/{id}/payment-tokens":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareSubmitAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSquareTokenRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless submit amendment","tags":["Headless booking aftercare"]}},"/api/v1/availability":{"get":{"callbacks":{},"deprecated":false,"description":"Available studio-local start times for one room/setup/date using the CMS duration rollout, buffer, cutoff and occupied slots. Invalid durations return the allowed bounds. Availability is advisory and rechecked on booking; this follows the admin rail and does not add the storefront Google free/busy check.","operationId":"getBookingAvailability","parameters":[{"in":"query","name":"date","required":true,"schema":{"format":"date","type":"string"}},{"in":"query","name":"room_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"setup_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"duration_minutes","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"room_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_times":{"items":{"type":"string"},"type":"array"},"timezone":{"type":"string"}},"required":["date","room_id","setup_id","duration_minutes","timezone","start_times"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"getBookingAvailability","tags":["Studio operations"]}},"/api/v1/headless/sessions/{id}/amendment-previews":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareAmendmentPreview","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSessionAmendmentPreviewInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAmendmentPreview"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current state or optional preview"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless amendment preview","tags":["Headless booking aftercare"]}},"/api/v1/reports/summary":{"get":{"callbacks":{},"deprecated":false,"description":"Requires current reports:read. Customer identities and signed client filters require clients:read. Evidence rechecks all resource permissions. Typed input, complexity and recorded allocation coverage errors are 422 with no partial headline; invalid or inaccessible references are opaque 404. Busy analysis capacity returns 429 analysis_busy with Retry-After: 1 and no partial headline. Ordinary infrastructure faults retain the native 500/503 contracts.","operationId":"reports_summary","parameters":[{"description":"Calendar preset; omitted uses month_to_date. Explicit current date bounds take precedence.","in":"query","name":"preset","required":false,"schema":{"enum":["month_to_date","calendar_month","calendar_quarter","calendar_year","custom"],"type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_to_date","required":false,"schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportSummaryEnvelope"}}},"description":"Read compact business summary"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Analysis capacity is busy; retry shortly","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read compact business summary","tags":["Owner reports"]}},"/api/v1/headless/subscription-purchases":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates the visitor. New purchase entry requires headless_api plus the family purchase permission, clients:read and payments:collect; clients:create is conditional on creating a Client association. GET requires payments:read plus the purchased family's read permission. Recovery requires payments:collect, clients:read and that family's read permission under current studio key/account/public_api authority; accepted recovery remains available with headless new entry disabled. Native provider, credit, promo, approval, private-offer and consent policies apply. Acceptance atomically records a frozen purchase obligation, immutable receipt and required work; no provider IO runs before commit. Instructions carry public SDK capabilities, never proof of settlement. Fetch current state for money, approval and rights separately. Unknown outcomes resume the original frozen tender identity; outcomes beyond the safe replay window require reconciliation and never create another recurring subscription. Cancellation retires unpaid capability before completing; money in flight remains undetermined. No external settlement reports, renewal, aftercare or raw status writes are accepted.","operationId":"headlessV1PurchaseSubscription","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionPurchaseRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable command acceptance; fetch purchase current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Accept a native initial subscription purchase by studio-owned client email","tags":["Headless native purchases"]}},"/api/v1/headless/bookings":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves a studio Client and never authenticates a visitor. Requires sessions:create and clients:read; clients:create only when a Client association must be created; payments:collect is required for the native checkout. Podyx revalidates complete current selection, amount, details and consent before writing one hold/obligation/immutable receipt/required job in one transaction. No payment provider request runs before commit. Ordinary bookings run the configured native final Google Calendar guard before acceptance; current local inventory and selection are revalidated during acceptance. Booking approval and payment settlement stay separate. No caller price, provider or paid flag is accepted. New entry requires headless_api; tours also require current studio_tour entitlement. Existing customer/CMS semantics are preserved. Tour answers use the private custom_form_answers container; phone-required tours need the client's owned profile to contain a valid phone, obtainable through the separate client API.","operationId":"headlessV1CheckoutBooking","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBookingCheckoutRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch the checkout for current money, approval and fulfillment"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Accept a complete single or multi-session customer booking by email","tags":["Headless native checkout"]}},"/api/v1/headless/subscriptions/{id}/cancellation":{"get":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1GetSubscriptionCancellation","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessSubscriptionCancellation"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1GetSubscriptionCancellation","tags":["Headless external recovery"]}},"/api/v1/bookings":{"get":{"callbacks":{},"deprecated":false,"description":"Active session purchases, excluding calendar records and manual blocker-only records. Blocking slots are omitted from mixed purchases. Original payment status describes only the first linked payment, not later add-on charges. Money may be null for historical/unpriced records and otherwise uses the booking currency precision.","operationId":"listBookings","parameters":[{"in":"query","name":"page","schema":{"default":1,"maximum":1000000,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":20,"description":"Clamped to 1–100.","type":"integer"}},{"in":"query","name":"status","schema":{"type":"string"}},{"in":"query","name":"client_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"user_id","schema":{"deprecated":true,"description":"Compatibility alias; client_id takes precedence when both are supplied.","format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"entries":{"items":{"additionalProperties":true,"properties":{"client_id":{"format":"uuid","nullable":true,"type":"string"},"currency":{"type":"string"},"discount_amount":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"id":{"format":"uuid","type":"string"},"inserted_at":{"format":"date-time","type":"string"},"member_bundle_id":{"format":"uuid","nullable":true,"type":"string"},"member_subscription_id":{"format":"uuid","nullable":true,"type":"string"},"notes":{"nullable":true,"type":"string"},"original_payment_status":{"description":"Status of the first linked payment only; does not summarize later add-on charges.","nullable":true,"type":"string"},"promo_code_id":{"format":"uuid","nullable":true,"type":"string"},"slots":{"items":{"additionalProperties":true,"properties":{"addons":{"items":{"additionalProperties":true,"properties":{"addon_version_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"quantity":{"type":"integer"},"unit_price":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["id","addon_version_id","quantity","unit_price"],"type":"object"},"type":"array"},"date":{"format":"date","type":"string"},"duration_minutes":{"type":"integer"},"end_time":{"type":"string"},"id":{"format":"uuid","type":"string"},"is_confirmed":{"type":"boolean"},"label":{"nullable":true,"type":"string"},"room_id":{"format":"uuid","nullable":true,"type":"string"},"start_time":{"type":"string"}},"required":["id","date","start_time","end_time","duration_minutes","room_id","is_confirmed","addons"],"type":"object"},"type":"array"},"source":{"type":"string"},"status":{"type":"string"},"tax_amount":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"total_amount":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"type":{"type":"string"},"user_email":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id","type","status","currency","total_amount","slots","original_payment_status"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"listBookings","tags":["Studio operations"]},"post":{"callbacks":{},"deprecated":false,"description":"Create one ordinary studio-local session for an existing client, with optional add-on IDs and quantities offered by the setup, using current server-owned catalog, pricing and payment policy. Add-ons are repriced at creation. Quotes are advisory and do not establish eligibility or reserve availability. Requires sessions:create; send_payment_link=false additionally requires sessions:resend_payment_link. Notification outcomes queued, skipped and failed describe initial enqueue only, never delivery or payment settlement. Replay preserves the original 201 status, identifiers and enqueue outcomes without another booking.","operationId":"createBooking","parameters":[{"description":"UUID request key scoped to this API key and operation. Reuse only with the same normalized input.","in":"header","name":"idempotency-key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"addons":{"description":"Optional unique add-on IDs and quantities; omission or an empty list selects none. Prices are server-controlled.","items":{"additionalProperties":false,"properties":{"addon_id":{"format":"uuid","type":"string"},"quantity":{"maximum":2147483647,"minimum":1,"type":"integer"}},"required":["addon_id","quantity"],"type":"object"},"type":"array"},"client_id":{"format":"uuid","type":"string"},"date":{"format":"date","type":"string"},"duration_minutes":{"minimum":1,"type":"integer"},"send_payment_link":{"default":true,"type":"boolean"},"service_id":{"format":"uuid","type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"example":"10:00","pattern":"^\\d{2}:\\d{2}(:\\d{2})?$","type":"string"}},"required":["client_id","setup_id","service_id","date","start_time","duration_minutes"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":false,"properties":{"action":{"enum":["session_created"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"client_invitation":{"enum":["queued","skipped","failed"],"type":"string"},"payment_id":{"format":"uuid","type":"string"},"payment_link_notification":{"enum":["queued","skipped","failed"],"type":"string"},"replayed":{"type":"boolean"},"session_id":{"format":"uuid","type":"string"}},"required":["action","booking_id","client_invitation","payment_id","payment_link_notification","replayed","session_id"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Original committed write outcome; replay retains this status"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Request-key, availability or unsettled-payment conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"createBooking","tags":["Studio operations"]}},"/api/v1/sessions/{id}/reschedule":{"post":{"callbacks":{},"deprecated":false,"description":"Move one session identified by its booking-slot UUID to a studio-local date and start time using its current ordinary, package or tour policy. Sold duration and economics are preserved. A tour may require a destination setup chosen from setup_choices returned with setup_selection_required. Requires sessions:update. Replay preserves the original committed session and booking IDs and HTTP 200 without another move; fetch current details separately.","operationId":"rescheduleSession","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"UUID request key scoped to this API key and operation. Reuse only with the same normalized input.","in":"header","name":"idempotency-key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"date":{"format":"date","type":"string"},"setup_id":{"format":"uuid","type":"string"},"start_time":{"example":"10:00","pattern":"^\\d{2}:\\d{2}(:\\d{2})?$","type":"string"}},"required":["date","start_time"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":false,"properties":{"action":{"enum":["session_rescheduled"],"type":"string"},"booking_id":{"format":"uuid","type":"string"},"replayed":{"type":"boolean"},"session_id":{"format":"uuid","type":"string"}},"required":["action","booking_id","replayed","session_id"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Original committed write outcome; replay retains this status"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Request-key, availability or unsettled-payment conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"rescheduleSession","tags":["Studio operations"]}},"/api/v1/headless/bookings/{id}/cancellations":{"post":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1CancelBooking","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBookingCancellationInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalRecoveryAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1CancelBooking","tags":["Headless external recovery"]}},"/api/v1/headless/bundle-plans/{id}/payment-link-requests":{"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1RequestPaymentLinkBundlePlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"RequestPaymentLink bundle-plans","tags":["Headless package offers"]}},"/api/v1/headless/amendments/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessSessionAmendmentCurrent"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current state or optional preview"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless amendment","tags":["Headless booking aftercare"]}},"/api/v1/headless/addons/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1GetAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"prices_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAddonAuthoring"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current authorized authoring record, including inactive drafts"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Get catalog addons","tags":["Headless catalog"]},"patch":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1UpdateAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessAddonUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Update catalog addons","tags":["Headless catalog"]}},"/api/v1/reports/evidence":{"get":{"callbacks":{},"deprecated":false,"description":"Requires current reports:read. Customer identities and signed client filters require clients:read. Evidence rechecks all resource permissions. Typed input, complexity and recorded allocation coverage errors are 422 with no partial headline; invalid or inaccessible references are opaque 404. Busy analysis capacity returns 429 analysis_busy with Retry-After: 1 and no partial headline. Ordinary infrastructure faults retain the native 500/503 contracts.","operationId":"reports_evidence","parameters":[{"description":"Opaque report-issued reference, valid for one hour; it grants no authority. On not_found, rerun the original report using its refresh_inputs and use the newly issued reference.","in":"query","name":"reference","required":true,"schema":{"maxLength":8192,"minLength":1,"type":"string"}},{"description":"Cursor issued for this exact reference, valid for at most one hour; pages remain live. On invalid_cursor, refresh the original report and use its new reference/cursor.","in":"query","name":"cursor","required":false,"schema":{"maxLength":8192,"minLength":1,"type":"string"}},{"description":"Bounded evidence page size; omitted uses 20.","in":"query","name":"page_size","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportEvidenceEnvelope"}}},"description":"Read permitted live analysis evidence"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Analysis capacity is busy; retry shortly","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read permitted live analysis evidence","tags":["Owner reports"]}},"/api/v1/headless/subscriptions/{id}/external-cycles":{"post":{"callbacks":{},"deprecated":false,"description":"The studio key owns the tenant. Cycle UUID, financial collection UUID, delivery Idempotency-Key and monthly grant period are distinct. The predecessor must be the subscription's committed local cycle; dates and recurring amount come from the purchased snapshot. Paid outcomes use actual aggregate external coverage and shared fulfillment. Partial coverage grants nothing; approval remains separate. Failed renewal marks overdue; recovery extends that same term once. Cancellation/nonrenewal and terminal access remain authoritative: collected money stays recorded with an action instead of resurrecting rights. POST requires subscriptions:report_external_cycle plus payments:report_external under current account/key authority; GET requires subscriptions:read plus payments:read. New cycles require headless entry and external writer readiness; accepted cycle recovery survives commercial disable. Native provider subscription IDs cannot be reported here.","operationId":"headlessV1ReportExternalSubscriptionCycle","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessExternalSubscriptionCycleInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalSubscriptionCycleAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable cycle outcome acceptance; use GET for current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Report failed or paid outcome for a local subscription term","tags":["Headless external subscriptions"]}},"/api/v1/headless/rooms/{id}/restore":{"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1RestoreRoom","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Restore catalog rooms","tags":["Headless catalog"]}},"/api/v1/headless/subscription-redemptions/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesSubscriptionRedemption","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageRedemption"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current purchased rights or advisory quote"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless subscription redemption","tags":["Headless package rights and management"]}},"/api/v1/headless/sessions/{id}/staff-reschedules":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio. Moves retain the sold duration. The setup_id selection applies to studio-tour sessions only; ordinary sessions retain their booked setup. To change an ordinary session's setup, preview /sessions/{id}/amendment-previews, then accept /sessions/{id}/amendments with the returned version and required financial choices.","operationId":"headlessV1AftercareStaffReschedule","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessStaffMoveInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless staff reschedule","tags":["Headless booking aftercare"]}},"/api/v1/headless/setups/{id}/restore":{"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1RestoreSetup","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Restore catalog setups","tags":["Headless catalog"]}},"/api/v1/headless/sessions/{id}/amendment":{"get":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareStartAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAmendmentStart"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current state or optional preview"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless start amendment","tags":["Headless booking aftercare"]}},"/api/v1/headless/bookings/{id}/cancellation-previews":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareCancellationPreview","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBookingCancellationInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessCancellationPreview"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current state or optional preview"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless cancellation preview","tags":["Headless booking aftercare"]}},"/api/v1/headless/external-refunds/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1GetExternalRefund","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalRefund"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1GetExternalRefund","tags":["Headless external recovery"]}},"/api/v1/addons":{"get":{"callbacks":{},"deprecated":false,"description":"The authenticated key resolves the studio. Tenant selectors supplied in the request are ignored. Lists default to page 1 and 20 entries; page sizes are capped at 100.","operationId":"listAddons","parameters":[{"in":"query","name":"page","schema":{"default":1,"maximum":1000000,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":20,"description":"Clamped to 1–100.","type":"integer"}},{"in":"query","name":"include_inactive","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"entries":{"items":{"additionalProperties":true,"properties":{"current_version":{"additionalProperties":true,"nullable":true,"properties":{"base_price":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"max_quantity":{"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"price_unit":{"type":"string"},"version_number":{"type":"integer"},"visible_on_booking":{"type":"boolean"}},"required":["id","version_number","name","base_price","price_unit"],"type":"object"},"id":{"format":"uuid","type":"string"},"includes_file_transfer":{"type":"boolean"},"is_active":{"type":"boolean"},"sort_order":{"type":"integer"},"type":{"type":"string"}},"required":["id","sort_order","is_active","current_version"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"listAddons","tags":["Studio operations"]}},"/api/v1/headless/addons/{id}/archive":{"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1ArchiveAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Archive catalog addons","tags":["Headless catalog"]}},"/api/v1/headless/external-refunds":{"post":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1RequestExternalRefund","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessExternalRefundInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalRecoveryAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1RequestExternalRefund","tags":["Headless external recovery"]}},"/api/v1/headless/services/{id}/archive":{"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1ArchiveService","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Archive catalog services","tags":["Headless catalog"]}},"/api/v1/headless/clients/{id}/subscription-redemptions":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesRedeemSubscription","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessPackageRedemptionInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch current state separately"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless redeem subscription","tags":["Headless package rights and management"]}},"/api/v1/headless/rooms":{"get":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1ListRoom","parameters":[{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"prices_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"view","schema":{"default":"authoring","enum":["authoring","offers"],"type":"string"}},{"in":"query","name":"include_inactive","schema":{"type":"boolean"}},{"in":"query","name":"room_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"setup_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"service_id","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"configured_prices":{"$ref":"#/components/schemas/HeadlessConfiguredPrices"},"entries":{"items":{"anyOf":[{"$ref":"#/components/schemas/HeadlessRoomAuthoring"},{"$ref":"#/components/schemas/HeadlessRoomOffer"}]},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total","configured_prices"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"SQL-paginated authoring or customer offers and configured price conditions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"List catalog rooms","tags":["Headless catalog"]},"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1CreateRoom","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessRoomCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Create catalog rooms","tags":["Headless catalog"]}},"/api/v1/headless/clients/{id}/bundle-redemption-quotes":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesBundleQuote","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessPackageQuoteInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageQuote"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current purchased rights or advisory quote"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless bundle quote","tags":["Headless package rights and management"]}},"/api/v1/sessions/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"History-aware sessions, including fact-backed cancellations and roomless studio tours. Dates and times are studio-local. A session ID identifies a slot and differs from its booking ID. Status is the derived session state; booking_status is the persisted purchase state. Original payment status describes only the first linked payment, not later add-on charges.","operationId":"getSession","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"include","schema":{"description":"Optional comma-separated sections: details, links, guests, files, brief. Omitted/empty preserves the base response. Restricted sections are withheld.","type":"string"}},{"in":"query","name":"files_page","schema":{"default":1,"description":"Independent section pagination; per_page is clamped to 1–100.","type":"integer"}},{"in":"query","name":"files_per_page","schema":{"default":20,"description":"Independent section pagination; per_page is clamped to 1–100.","type":"integer"}},{"in":"query","name":"guests_page","schema":{"default":1,"description":"Independent section pagination; per_page is clamped to 1–100.","type":"integer"}},{"in":"query","name":"guests_per_page","schema":{"default":20,"description":"Independent section pagination; per_page is clamped to 1–100.","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"addons":{"items":{"additionalProperties":true,"properties":{"addon_version_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"quantity":{"type":"integer"},"unit_price":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["id","addon_version_id","quantity","unit_price"],"type":"object"},"type":"array"},"booking_id":{"format":"uuid","type":"string"},"booking_status":{"description":"Persisted purchase state.","type":"string"},"booking_type":{"description":"Booking-type category from the shared domain policy; differs from raw source.","enum":["individual","admin","bundle","subscription","studio_tour","calendar"],"type":"string"},"brief":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"nullable":true,"properties":{"client_preferences":{"nullable":true,"type":"string"},"prep_notes":{"nullable":true,"type":"string"},"show_details":{"nullable":true,"type":"string"},"show_name":{"nullable":true,"type":"string"},"technical_requirements":{"nullable":true,"type":"string"}},"required":["show_name","show_details","client_preferences","technical_requirements","prep_notes"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"cancelled_at":{"format":"date-time","nullable":true,"type":"string"},"client_id":{"format":"uuid","nullable":true,"type":"string"},"currency":{"type":"string"},"date":{"format":"date","type":"string"},"details":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"nullable":true,"properties":{"file_transfer_option":{"additionalProperties":false,"nullable":true,"properties":{"name":{"type":"string"},"version_id":{"format":"uuid","type":"string"}},"required":["version_id","name"],"type":"object"},"notes":{"nullable":true,"type":"string"},"recording_seats":{"minimum":1,"type":"integer"},"timezone":{"type":"string"}},"required":["timezone","notes","recording_seats","file_transfer_option"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"duration_minutes":{"type":"integer"},"end_time":{"type":"string"},"files":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"nullable":true,"properties":{"folder_count":{"minimum":0,"type":"integer"},"has_video_files":{"type":"boolean"},"items":{"additionalProperties":false,"properties":{"data":{"additionalProperties":true,"nullable":true,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"collaboration_started_at":{"format":"date-time","nullable":true,"type":"string"},"display_name":{"type":"string"},"folder_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"latest_version":{"additionalProperties":false,"nullable":true,"properties":{"approved_at":{"format":"date-time","nullable":true,"type":"string"},"duration_ms":{"nullable":true,"type":"integer"},"id":{"format":"uuid","type":"string"},"label":{"type":"string"},"playback_state":{"enum":["ready","preparing","failed","unavailable"],"type":"string"},"provider_mime_type":{"type":"string"},"provider_name":{"type":"string"},"provider_size_bytes":{"nullable":true,"type":"integer"},"sequence_number":{"type":"integer"}},"required":["id","sequence_number","label","provider_name","provider_mime_type","provider_size_bytes","duration_ms","approved_at","playback_state"],"type":"object"}},"required":["id","display_name","folder_id","collaboration_started_at","latest_version"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"video_count":{"minimum":0,"type":"integer"}},"required":["has_video_files","video_count"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"guests":{"additionalProperties":false,"properties":{"data":{"additionalProperties":true,"nullable":true,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"email":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"status":{"type":"string"}},"required":["id","name","email","status"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"id":{"format":"uuid","type":"string"},"is_confirmed":{"type":"boolean"},"label":{"nullable":true,"type":"string"},"links":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"nullable":true,"properties":{"client_links":{"nullable":true,"type":"string"},"studio_links":{"nullable":true,"type":"string"}},"required":["studio_links","client_links"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"original_payment_status":{"description":"Status of the first linked payment only; does not summarize later add-on charges.","nullable":true,"type":"string"},"room_id":{"format":"uuid","nullable":true,"type":"string"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"service_name":{"nullable":true,"type":"string"},"setup_id":{"format":"uuid","nullable":true,"type":"string"},"setup_name":{"nullable":true,"type":"string"},"setup_version_id":{"format":"uuid","nullable":true,"type":"string"},"source":{"type":"string"},"start_time":{"type":"string"},"status":{"description":"Derived session state, including live cancellation facts.","type":"string"},"studio_tour_mode":{"nullable":true,"type":"string"},"type":{"type":"string"},"user_email":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id","booking_id","status","booking_status","booking_type","date","start_time","end_time","room_id"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"getSession","tags":["Studio operations"]}},"/api/v1/clients/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"The CMS client roster, including blocked clients and Personnel with historical client spending. Integration service identities are excluded.","operationId":"getClient","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"booking_count":{"minimum":0,"type":"integer"},"credits_balance":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"email":{"type":"string"},"id":{"format":"uuid","type":"string"},"is_blocked":{"type":"boolean"},"joined_at":{"format":"date-time","nullable":true,"type":"string"},"money_spent":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"name":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"}},"required":["id","email","is_blocked","credits_balance"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"getClient","tags":["Studio operations"]},"patch":{"callbacks":{},"deprecated":false,"description":"Update names and phone on a studio-associated shared human account; other studios associated with that person see these profile changes. Omitted fields stay unchanged; blank or null clears a supplied field. Requires clients:update. Replay returns the original identifiers without restoring old profile data.","operationId":"updateClientProfile","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"UUID request key scoped to this API key and operation. Reuse only with the same normalized input.","in":"header","name":"idempotency-key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"minProperties":1,"properties":{"first_name":{"nullable":true,"type":"string"},"last_name":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"phone":{"nullable":true,"type":"string"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":false,"properties":{"action":{"enum":["client_updated"],"type":"string"},"client_id":{"format":"uuid","type":"string"},"replayed":{"type":"boolean"}},"required":["action","client_id","replayed"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Original committed write outcome; replay retains this status"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Request-key, availability or unsettled-payment conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"updateClientProfile","tags":["Studio operations"]}},"/api/v1/headless/member-bundles/{id}/approvals":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesApproveBundle","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch current state separately"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless approve bundle","tags":["Headless package rights and management"]}},"/api/v1/headless/bundle-redemptions/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesBundleRedemption","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageRedemption"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current purchased rights or advisory quote"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless bundle redemption","tags":["Headless package rights and management"]}},"/api/v1/headless/external-subscription-purchases":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates a visitor. External purchase requires family:purchase, payments:report_external and clients:read (clients:create when associating a new Client). The command commits one validated frozen purchase and a pending external/off_platform payable without provider IO or an invented provider subscription ID. Report actual collections through external-payment-reports; partial coverage grants nothing. Approval, fulfillment and collection remain separate. GET purchases exposes the actual pending member and local initial subscription_cycle_id. All new entry requires public_api/headless_api plus deployment external-money readiness; immutable replay and accepted recovery refresh current authority. Native provider configuration is unchanged.","operationId":"headlessV1PurchaseExternalSubscription","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionPurchaseRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable command acceptance; fetch purchase current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Accept an external initial subscription with a local term cycle","tags":["Headless native purchases"]}},"/api/v1/headless/tours/{id}/quote":{"post":{"callbacks":{},"deprecated":false,"description":"Advisory selection pricing using the Tour's current price, current addon versions, quantities and duration. Malformed or unavailable selected addons are refused. This read creates no Client, booking, hold, payment, receipt or job and makes no completeness or charge-ready assertion. Read the Tour offer for required details and consents and availability for scheduling choices; checkout still validates every current requirement. Requires sessions:read, current key/account/public_api authority and studio_tour entitlement. Pricing reads remain available when headless new entry is disabled. No Idempotency-Key is required.","operationId":"headlessV1QuoteTour","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessTourQuoteRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessTourPriceQuote"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current advisory Tour selection price"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Read advisory Tour pricing for strictly validated selected addons","tags":["Headless native checkout"]}},"/api/v1/headless/purchases/{id}/retries":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates the visitor. New purchase entry requires headless_api plus the family purchase permission, clients:read and payments:collect; clients:create is conditional on creating a Client association. GET requires payments:read plus the purchased family's read permission. Recovery requires payments:collect, clients:read and that family's read permission under current studio key/account/public_api authority; accepted recovery remains available with headless new entry disabled. Native provider, credit, promo, approval, private-offer and consent policies apply. Acceptance atomically records a frozen purchase obligation, immutable receipt and required work; no provider IO runs before commit. Instructions carry public SDK capabilities, never proof of settlement. Fetch current state for money, approval and rights separately. Unknown outcomes resume the original frozen tender identity; outcomes beyond the safe replay window require reconciliation and never create another recurring subscription. Cancellation retires unpaid capability before completing; money in flight remains undetermined. No external settlement reports, renewal, aftercare or raw status writes are accepted.","operationId":"headlessV1RetryPurchase","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCheckoutEmptyRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable command acceptance; fetch purchase current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Recover the same purchase or retry a definitively failed native attempt","tags":["Headless native purchases"]}},"/api/v1/headless/amendments/{id}/payment-preparations":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercarePrepareAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessAftercareCreditChoice"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless prepare amendment","tags":["Headless booking aftercare"]}},"/api/v1/reports/metrics":{"get":{"callbacks":{},"deprecated":false,"description":"Requires current reports:read. Customer identities and signed client filters require clients:read. Evidence rechecks all resource permissions. Typed input, complexity and recorded allocation coverage errors are 422 with no partial headline; invalid or inaccessible references are opaque 404. Busy analysis capacity returns 429 analysis_busy with Retry-After: 1 and no partial headline. Ordinary infrastructure faults retain the native 500/503 contracts.","operationId":"reports_metrics","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportMetricsEnvelope"}}},"description":"Describe business metrics and connected studio"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Analysis capacity is busy; retry shortly","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Describe business metrics and connected studio","tags":["Owner reports"]}},"/api/v1/headless/tour-bookings":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves a studio Client and never authenticates a visitor. Requires sessions:create and clients:read; clients:create only when a Client association must be created. payment_source defaults to native, which requires payments:collect; explicit native and omission share the same receipt input. External requires payments:report_external and current external-money readiness for new entry. A positive external total reserves an off-platform payable for later reporting through external-payments; no native provider configuration is needed. Zero totals confirm through the native no-payment flow and create no payment. Current tour geometry, availability, setup, questions, phone, guests, invoice and consent rules apply before acceptance; custom_form_answers contains question responses, and phone-required tours need a valid phone in the client's owned profile. Prices always come from current native Tour pricing, including selected addons. Caller prices, provider and paid flags are refused. Booking approval and payment settlement stay separate. New entry requires headless_api and studio_tour. Current key/account/public_api and source-specific permissions apply before receipt replay; replay precedes the new-entry readiness gate. Fetch the returned native checkout or external payable for current money, approval and fulfillment.","operationId":"headlessV1CheckoutTour","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessTourCheckoutRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch the returned native checkout or external payable for current money, approval and fulfillment"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Accept a complete published Studio Tour booking by email","tags":["Headless native checkout"]}},"/api/v1/reports/packages":{"get":{"callbacks":{},"deprecated":false,"description":"Requires current reports:read. Customer identities and signed client filters require clients:read. Evidence rechecks all resource permissions. Typed input, complexity and recorded allocation coverage errors are 422 with no partial headline; invalid or inaccessible references are opaque 404. Busy analysis capacity returns 429 analysis_busy with Retry-After: 1 and no partial headline. Ordinary infrastructure faults retain the native 500/503 contracts.","operationId":"reports_packages","parameters":[{"description":"Calendar preset; omitted uses month_to_date. Explicit current date bounds take precedence.","in":"query","name":"preset","required":false,"schema":{"enum":["month_to_date","calendar_month","calendar_quarter","calendar_year","custom"],"type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Canonical scope carryover; this family accepts only the default 90 and does not apply inactivity analysis.","in":"query","name":"inactivity_days","required":false,"schema":{"enum":[90],"type":"integer"}},{"description":"Package metric; omitted uses package_purchases.","in":"query","name":"metric","required":false,"schema":{"enum":["package_purchases","package_renewals","package_consumption"],"type":"string"}},{"description":"Package grouping is plan.","in":"query","name":"group_by","required":false,"schema":{"enum":["plan"],"type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"plan_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"client_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"currency","required":false,"schema":{"type":"string"}},{"description":"Contribution page; omitted uses 1. Headlines cover the complete population.","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Contribution page size; omitted uses 20.","in":"query","name":"page_size","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPackagesEnvelope"}}},"description":"Analyze studio packages"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Analysis capacity is busy; retry shortly","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Analyze studio packages","tags":["Owner reports"]}},"/api/v1/headless/bundle-purchases":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates the visitor. New purchase entry requires headless_api plus the family purchase permission, clients:read and payments:collect; clients:create is conditional on creating a Client association. GET requires payments:read plus the purchased family's read permission. Recovery requires payments:collect, clients:read and that family's read permission under current studio key/account/public_api authority; accepted recovery remains available with headless new entry disabled. Native provider, credit, promo, approval, private-offer and consent policies apply. Acceptance atomically records a frozen purchase obligation, immutable receipt and required work; no provider IO runs before commit. Instructions carry public SDK capabilities, never proof of settlement. Fetch current state for money, approval and rights separately. Unknown outcomes resume the original frozen tender identity; outcomes beyond the safe replay window require reconciliation and never create another recurring subscription. Cancellation retires unpaid capability before completing; money in flight remains undetermined. No external settlement reports, renewal, aftercare or raw status writes are accepted.","operationId":"headlessV1PurchaseBundle","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessBundlePurchaseRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable command acceptance; fetch purchase current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Accept a native bundle purchase by studio-owned client email","tags":["Headless native purchases"]}},"/api/v1/headless/clients/{id}/bundle-redemptions":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesRedeemBundle","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessPackageRedemptionInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch current state separately"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless redeem bundle","tags":["Headless package rights and management"]}},"/api/v1/headless/amendments/{id}/cancellation-requests":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareCancelAmendment","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless cancel amendment","tags":["Headless booking aftercare"]}},"/api/v1/headless/subscription-plans/{id}/restore":{"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1RestoreSubscriptionPlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Restore subscription-plans","tags":["Headless package offers"]}},"/api/v1/headless/clients/{id}/activation-requests":{"post":{"callbacks":{},"deprecated":false,"operationId":"headlessV1RequestClientActivation","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessActivationRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable acceptance; fetch client for current account lifecycle"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Request explicit email-owner activation of an external client","tags":["Headless clients"]}},"/api/v1/headless/bundle-plans/{id}/restore":{"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1RestoreBundlePlan","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Restore bundle-plans","tags":["Headless package offers"]}},"/api/v1/headless/subscription-plans":{"get":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1ListSubscriptionPlan","parameters":[{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"included_items_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"included_items_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"options_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"options_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"addons_per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"view","schema":{"default":"authoring","enum":["authoring","offers"],"type":"string"}},{"in":"query","name":"scope","schema":{"default":"public","enum":["public","private","all"],"type":"string"}},{"in":"query","name":"include_inactive","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"entries":{"items":{"anyOf":[{"$ref":"#/components/schemas/HeadlessSubscriptionPlanAuthoring"},{"$ref":"#/components/schemas/HeadlessSubscriptionPlanOffer"}]},"type":"array"},"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Bounded authoring or consumer offer page"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"List subscription-plans","tags":["Headless package offers"]},"post":{"callbacks":{},"deprecated":false,"description":"Packages owns JSON normalization, scoped references, computed prices, version snapshots and lifecycle. Public authoring permits repairable drafts and never grants. Omitted options/addons preserve; [] clears. Authoring scope=private/all also requires clients:read. view=offers uses current public purchasability and excludes private plans; images and terms are available for display. options_page/options_per_page and addons_page/addons_per_page independently bound nested collections. Private commands require clients:read. Direct grants separately require grant. Subscription sales require resend_payment_link; bundle sales use create/update authority. Explicit bundle payment-link saves use the shared default validity window when omitted, including private edits; resends preserve the stored deadline. Bundle grants remain open-ended; subscription private deadlines and targets are immutable. Archive deactivates without changing prior purchases. UUID Idempotency-Key required; replay checks current authority and returns immutable acceptance only. GET reads current state.","operationId":"headlessV1CreateSubscriptionPlan","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionPlanCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Current offer state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Create subscription-plans","tags":["Headless package offers"]}},"/api/v1/headless/purchases/{id}/confirmations":{"post":{"callbacks":{},"deprecated":false,"description":"Email resolves the studio-owned Client and never authenticates the visitor. New purchase entry requires headless_api plus the family purchase permission, clients:read and payments:collect; clients:create is conditional on creating a Client association. GET requires payments:read plus the purchased family's read permission. Recovery requires payments:collect, clients:read and that family's read permission under current studio key/account/public_api authority; accepted recovery remains available with headless new entry disabled. Native provider, credit, promo, approval, private-offer and consent policies apply. Acceptance atomically records a frozen purchase obligation, immutable receipt and required work; no provider IO runs before commit. Instructions carry public SDK capabilities, never proof of settlement. Fetch current state for money, approval and rights separately. Unknown outcomes resume the original frozen tender identity; outcomes beyond the safe replay window require reconciliation and never create another recurring subscription. Cancellation retires unpaid capability before completing; money in flight remains undetermined. No external settlement reports, renewal, aftercare or raw status writes are accepted.","operationId":"headlessV1ConfirmPurchase","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCheckoutEmptyRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable command acceptance; fetch purchase current state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessErrorResponse"}}},"description":"Native payment or offer requires reconciliation"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Request native provider confirmation","tags":["Headless native purchases"]}},"/api/v1/headless/subscriptions/{id}/session-grants":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesGrantSessions","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSubscriptionSessionGrantInput"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch current state separately"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless grant sessions","tags":["Headless package rights and management"]}},"/api/v1/headless/addon-purchases/{id}/cancellation-requests":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareCancelAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless cancel addon","tags":["Headless booking aftercare"]}},"/api/v1/services":{"get":{"callbacks":{},"deprecated":false,"description":"The authenticated key resolves the studio. Tenant selectors supplied in the request are ignored. Lists default to page 1 and 20 entries; page sizes are capped at 100.","operationId":"listServices","parameters":[{"in":"query","name":"page","schema":{"default":1,"maximum":1000000,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":20,"description":"Clamped to 1–100.","type":"integer"}},{"in":"query","name":"include_inactive","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"entries":{"items":{"additionalProperties":true,"properties":{"current_version":{"additionalProperties":true,"nullable":true,"properties":{"base_price":{"description":"Decimal amount in the resource's currency.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"price_unit":{"type":"string"},"version_number":{"type":"integer"},"visible_on_booking":{"type":"boolean"}},"required":["id","version_number","name","base_price","price_unit"],"type":"object"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["id","sort_order","is_active","current_version"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"listServices","tags":["Studio operations"]}},"/api/v1/headless/setups/{id}/archive":{"post":{"callbacks":{},"deprecated":false,"description":"Catalog owns JSON normalization, versioning, links, configured prices and lifecycle. Authoring includes drafts; view=offers reuses customer buyability. Configured prices are independently paginated with prices_page/prices_per_page and refer to current service versions. Amounts are configured catalog rates, not a dated customer quote. Omitted links/override sections preserve; [] clears the submitted collection. Archive deactivates; restore reactivates and enforces existing room allowances. Mutations require a UUID Idempotency-Key and current primary/linked-resource authority, including receipt replay.","operationId":"headlessV1ArchiveSetup","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable resource acceptance; GET for current version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Archive catalog setups","tags":["Headless catalog"]}},"/api/v1/headless/sessions/{id}/addon-purchases":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareCreateAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessAddonPurchaseInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless create addon","tags":["Headless booking aftercare"]}},"/api/v1/sessions":{"get":{"callbacks":{},"deprecated":false,"description":"History-aware sessions, including fact-backed cancellations and roomless studio tours. Dates and times are studio-local. A session ID identifies a slot and differs from its booking ID. Status is the derived session state; booking_status is the persisted purchase state. Original payment status describes only the first linked payment, not later add-on charges.","operationId":"listSessions","parameters":[{"in":"query","name":"page","schema":{"default":1,"maximum":1000000,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":20,"description":"Clamped to 1–100.","type":"integer"}},{"in":"query","name":"status","schema":{"type":"string"}},{"in":"query","name":"client_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"user_id","schema":{"deprecated":true,"description":"Compatibility alias; client_id takes precedence when both are supplied.","format":"uuid","type":"string"}},{"in":"query","name":"include","schema":{"description":"Optional comma-separated sections: files. Omitted/empty preserves the base response. Restricted sections are withheld.","type":"string"}},{"in":"query","name":"has_video_files","schema":{"description":"Filter active video presence before count/pagination; requires collaborations:read for either value. Null/omission leaves the population unchanged. Implies the files summary.","nullable":true,"type":"boolean"}},{"in":"query","name":"room_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"date_from","schema":{"format":"date","type":"string"}},{"in":"query","name":"date_to","schema":{"format":"date","type":"string"}},{"in":"query","name":"timeframe","schema":{"description":"Defaults to all when a date bound is present, otherwise upcoming.","enum":["upcoming","past","all"],"type":"string"}},{"in":"query","name":"search","schema":{"type":"string"}},{"in":"query","name":"source","schema":{"description":"Booking-type category; matches booking_type in the session payload.","enum":["individual","admin","bundle","subscription","studio_tour"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"properties":{"data":{"additionalProperties":true,"properties":{"entries":{"items":{"additionalProperties":true,"properties":{"addons":{"items":{"additionalProperties":true,"properties":{"addon_version_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"quantity":{"type":"integer"},"unit_price":{"description":"Decimal amount in the resource's currency.","pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"}},"required":["id","addon_version_id","quantity","unit_price"],"type":"object"},"type":"array"},"booking_id":{"format":"uuid","type":"string"},"booking_status":{"description":"Persisted purchase state.","type":"string"},"booking_type":{"description":"Booking-type category from the shared domain policy; differs from raw source.","enum":["individual","admin","bundle","subscription","studio_tour","calendar"],"type":"string"},"brief":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"nullable":true,"properties":{"client_preferences":{"nullable":true,"type":"string"},"prep_notes":{"nullable":true,"type":"string"},"show_details":{"nullable":true,"type":"string"},"show_name":{"nullable":true,"type":"string"},"technical_requirements":{"nullable":true,"type":"string"}},"required":["show_name","show_details","client_preferences","technical_requirements","prep_notes"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"cancelled_at":{"format":"date-time","nullable":true,"type":"string"},"client_id":{"format":"uuid","nullable":true,"type":"string"},"currency":{"type":"string"},"date":{"format":"date","type":"string"},"details":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"nullable":true,"properties":{"file_transfer_option":{"additionalProperties":false,"nullable":true,"properties":{"name":{"type":"string"},"version_id":{"format":"uuid","type":"string"}},"required":["version_id","name"],"type":"object"},"notes":{"nullable":true,"type":"string"},"recording_seats":{"minimum":1,"type":"integer"},"timezone":{"type":"string"}},"required":["timezone","notes","recording_seats","file_transfer_option"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"duration_minutes":{"type":"integer"},"end_time":{"type":"string"},"files":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"nullable":true,"properties":{"folder_count":{"minimum":0,"type":"integer"},"has_video_files":{"type":"boolean"},"items":{"additionalProperties":false,"properties":{"data":{"additionalProperties":true,"nullable":true,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"collaboration_started_at":{"format":"date-time","nullable":true,"type":"string"},"display_name":{"type":"string"},"folder_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"latest_version":{"additionalProperties":false,"nullable":true,"properties":{"approved_at":{"format":"date-time","nullable":true,"type":"string"},"duration_ms":{"nullable":true,"type":"integer"},"id":{"format":"uuid","type":"string"},"label":{"type":"string"},"playback_state":{"enum":["ready","preparing","failed","unavailable"],"type":"string"},"provider_mime_type":{"type":"string"},"provider_name":{"type":"string"},"provider_size_bytes":{"nullable":true,"type":"integer"},"sequence_number":{"type":"integer"}},"required":["id","sequence_number","label","provider_name","provider_mime_type","provider_size_bytes","duration_ms","approved_at","playback_state"],"type":"object"}},"required":["id","display_name","folder_id","collaboration_started_at","latest_version"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"video_count":{"minimum":0,"type":"integer"}},"required":["has_video_files","video_count"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"guests":{"additionalProperties":false,"properties":{"data":{"additionalProperties":true,"nullable":true,"properties":{"entries":{"items":{"additionalProperties":false,"properties":{"email":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"nullable":true,"type":"string"},"status":{"type":"string"}},"required":["id","name","email","status"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"id":{"format":"uuid","type":"string"},"is_confirmed":{"type":"boolean"},"label":{"nullable":true,"type":"string"},"links":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"nullable":true,"properties":{"client_links":{"nullable":true,"type":"string"},"studio_links":{"nullable":true,"type":"string"}},"required":["studio_links","client_links"],"type":"object"},"status":{"enum":["available","withheld","unavailable"],"type":"string"}},"required":["status","data"],"type":"object"},"original_payment_status":{"description":"Status of the first linked payment only; does not summarize later add-on charges.","nullable":true,"type":"string"},"room_id":{"format":"uuid","nullable":true,"type":"string"},"service_id":{"format":"uuid","nullable":true,"type":"string"},"service_name":{"nullable":true,"type":"string"},"setup_id":{"format":"uuid","nullable":true,"type":"string"},"setup_name":{"nullable":true,"type":"string"},"setup_version_id":{"format":"uuid","nullable":true,"type":"string"},"source":{"type":"string"},"start_time":{"type":"string"},"status":{"description":"Derived session state, including live cancellation facts.","type":"string"},"studio_tour_mode":{"nullable":true,"type":"string"},"type":{"type":"string"},"user_email":{"nullable":true,"type":"string"},"user_name":{"nullable":true,"type":"string"}},"required":["id","booking_id","status","booking_status","booking_type","date","start_time","end_time","room_id"],"type":"object"},"type":"array"},"page":{"maximum":1000000,"minimum":1,"type":"integer"},"per_page":{"maximum":100,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["entries","page","per_page","total"],"type":"object"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Studio-scoped domain result"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"listSessions","tags":["Studio operations"]}},"/api/v1/headless/sessions/{id}/guests":{"get":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareGuests","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessGuestList"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current state or optional preview"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless guests","tags":["Headless booking aftercare"]},"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareInviteGuest","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessGuestInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless invite guest","tags":["Headless booking aftercare"]}},"/api/v1/headless/clients":{"post":{"callbacks":{},"deprecated":false,"operationId":"headlessV1CreateClient","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCreateClientRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable acceptance; fetch client for current account lifecycle"},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCommandResponse"}}},"description":"Immutable acceptance; fetch client for current account lifecycle"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Find or create a studio's client without implicit login","tags":["Headless clients"]}},"/api/v1/headless/addon-purchases/{id}/approvals":{"post":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareApproveAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless approve addon","tags":["Headless booking aftercare"]}},"/api/v1/reports/addons":{"get":{"callbacks":{},"deprecated":false,"description":"Requires current reports:read. Customer identities and signed client filters require clients:read. Evidence rechecks all resource permissions. Typed input, complexity and recorded allocation coverage errors are 422 with no partial headline; invalid or inaccessible references are opaque 404. Busy analysis capacity returns 429 analysis_busy with Retry-After: 1 and no partial headline. Ordinary infrastructure faults retain the native 500/503 contracts.","operationId":"reports_addons","parameters":[{"description":"Calendar preset; omitted uses month_to_date. Explicit current date bounds take precedence.","in":"query","name":"preset","required":false,"schema":{"enum":["month_to_date","calendar_month","calendar_quarter","calendar_year","custom"],"type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_from_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Inclusive studio-local date; provide both bounds for a window.","in":"query","name":"comparison_to_date","required":false,"schema":{"format":"date","type":"string"}},{"description":"Canonical scope carryover; this family accepts only the default 90 and does not apply inactivity analysis.","in":"query","name":"inactivity_days","required":false,"schema":{"enum":[90],"type":"integer"}},{"description":"Add-on metric; omitted uses addon_selections.","in":"query","name":"metric","required":false,"schema":{"enum":["addon_selections","addon_value","addon_attachment"],"type":"string"}},{"description":"Selections support sold/delivered; attachment uses delivered; value also supports backlog. Omitted uses the metric's domain default.","in":"query","name":"basis","required":false,"schema":{"enum":["recognized_sold","recognized_delivered","recognized_backlog"],"type":"string"}},{"description":"Add-on grouping is addon.","in":"query","name":"group_by","required":false,"schema":{"enum":["addon"],"type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"room_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"service_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"plan_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"client_id","required":false,"schema":{"format":"uuid","type":"string"}},{"description":"Supported family filter; client_id additionally requires current clients:read. Currency never implies conversion.","in":"query","name":"currency","required":false,"schema":{"type":"string"}},{"description":"Contribution page; omitted uses 1. Headlines cover the complete population.","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Contribution page size; omitted uses 20.","in":"query","name":"page_size","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportAddonsEnvelope"}}},"description":"Analyze studio addons"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Analysis capacity is busy; retry shortly","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Analyze studio addons","tags":["Owner reports"]}},"/api/v1/headless/external-payment-reports":{"post":{"callbacks":{},"deprecated":false,"description":"A studio collection UUID belongs to the tenant independently of each key-bound HTTP receipt. Report only studio-collected money; native Stripe/Square/cash tenders cannot be externally settled. No provider integration or provider proof is required. Inline complete booking selections use current customer policy. Booking refusal retains collected money and an action obligation; it never claims a refund happened. Same immutable collection facts are a financial no-op across keys; repair is a separate resolution command. GET separates original immutable acceptance from current coverage/action state. New commercial entry is deployment-disabled until external recovery/projection readiness; current authority and owned recovery remain required after disablement.","operationId":"headlessV1ReportExternalPayment","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessExternalPaymentReportRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current studio-owned external state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1ReportExternalPayment","tags":["Headless external payments"]}},"/api/v1/headless/addon-purchases/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareAddon","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAddonPurchaseCurrent"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Current state or optional preview"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless addon","tags":["Headless booking aftercare"]}},"/api/v1/headless/sessions/{id}/guests/{guest_id}":{"delete":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareRemoveGuest","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"guest_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless remove guest","tags":["Headless booking aftercare"]},"patch":{"callbacks":{},"deprecated":false,"description":"Current key authority and stored tenant ownership apply. Customer policies differ from explicit staff actions. Acceptance freezes the target and selection; GET states actual payment, approval and fulfillment. Provider instructions are fetched separately after preparation; external money is reported by the studio.","operationId":"headlessV1AftercareUpdateGuest","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"guest_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessGuestUpdateInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAftercareAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless update guest","tags":["Headless booking aftercare"]}},"/api/v1/headless/checkouts/{id}/cancellation-requests":{"post":{"callbacks":{},"deprecated":false,"description":"Studio-owned native checkout. Current key/account/public_api authority and tenant ownership apply on reads, writes and receipt replay. A permitted replacement studio key may recover a known checkout. Accepted obligations remain recoverable when headless new entry is disabled. Instructions are browser capabilities, never proof of settlement. Confirmation verifies the native provider. An uncertain provider outcome retains its frozen request identity; do not create another tender. Token payloads are never in receipts or job arguments.","operationId":"headlessV1CancelCheckout","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessCheckoutEmptyRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch the checkout for current money, approval and fulfillment"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Withdraw an unpaid customer checkout and retire its payment capability","tags":["Headless native checkout"]}},"/api/v1/headless/external-payment-reports/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"A studio collection UUID belongs to the tenant independently of each key-bound HTTP receipt. Report only studio-collected money; native Stripe/Square/cash tenders cannot be externally settled. No provider integration or provider proof is required. Inline complete booking selections use current customer policy. Booking refusal retains collected money and an action obligation; it never claims a refund happened. Same immutable collection facts are a financial no-op across keys; repair is a separate resolution command. GET separates original immutable acceptance from current coverage/action state. New commercial entry is deployment-disabled until external recovery/projection readiness; current authority and owned recovery remain required after disablement.","operationId":"headlessV1GetExternalPaymentReport","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalPaymentReport"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current studio-owned external state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1GetExternalPaymentReport","tags":["Headless external payments"]}},"/api/v1/headless/external-refunds/{id}/outcomes":{"post":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1ReportExternalRefund","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessExternalRefundOutcomeInput"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessExternalRecoveryAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1ReportExternalRefund","tags":["Headless external recovery"]}},"/api/v1/headless/member-bundles/{id}/declines":{"post":{"callbacks":{},"deprecated":false,"description":"Package kind is fixed by the route. Purchased snapshots and current ledger allowance determine rights and effective session lengths. Quotes are advisory. Redemption atomically creates all sessions and required delivery intents, or writes nothing. Paid extras use the existing separate session add-on purchase flow. Current authority is checked on replay. Cancellation uses the existing subscription cancellation routes. Native provider work is deferred; management GET exposes pending, ready or failed delivery. A ready billing portal URL is disclosed only to a key with current subscriptions:manage authority; read-only keys retain state and capability visibility without the live instruction. Plan changes, pause and resume are unsupported. Paid external decline retains an actionable refund obligation without executing a refund.","operationId":"headlessV1PackagesDeclineBundle","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessEmptyInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessPackageAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch current state separately"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Headless decline bundle","tags":["Headless package rights and management"]}},"/api/v1/headless/checkouts/{id}/payment-tokens":{"post":{"callbacks":{},"deprecated":false,"description":"Studio-owned native checkout. Current key/account/public_api authority and tenant ownership apply on reads, writes and receipt replay. A permitted replacement studio key may recover a known checkout. Accepted obligations remain recoverable when headless new entry is disabled. Instructions are browser capabilities, never proof of settlement. Confirmation verifies the native provider. An uncertain provider outcome retains its frozen request identity; do not create another tender. Token payloads are never in receipts or job arguments.","operationId":"headlessV1SubmitCheckoutToken","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeadlessSquareTokenRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessAcceptance"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance; fetch the checkout for current money, approval and fulfillment"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Submit a Square browser token for the owned native checkout","tags":["Headless native checkout"]}},"/api/v1/headless/cancellations/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"Acceptance is an immutable delivery receipt. A refund request reserves a real outstanding obligation; only a studio report of actual success counts returned money. Studio refund UUIDs are independent from HTTP keys. Replacements explicitly name a failed or reversed attempt in the identical frozen scope and share its obligation. GET exposes current money and cancellation state. Recovery requires current key, tenant and owning-resource authority even after new commercial entry is disabled. Provider IDs are never accepted or manufactured.","operationId":"headlessV1GetCancellation","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessCancellation"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Immutable acceptance or current actual recovery state"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Current resource state or idempotency conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"headlessV1GetCancellation","tags":["Headless external recovery"]}},"/api/v1/headless/availability":{"get":{"callbacks":{},"deprecated":false,"description":"Omit duration_minutes for physical room windows without a guessed setup/duration. Supply a positive duration for starts, with distinct concrete setup variants when setup_id is absent. Select date or paired date_from/date_to; at most 31 inclusive studio-local days. page/per_page SQL-page rooms (windows) or setups (starts); intervals_page/intervals_per_page independently page each target/day's derived intervals, with truthful totals. Duration uses nominal local wall minutes; gap starts are unavailable and overlap starts choose the earlier occurrence. A nominal end in a DST gap remains a native wall-time candidate with ends_at=null, end_status=gap_time and unverified calendar status; no resolved-end guarantee exists for it. Physical window gap boundaries resolve to valid matching local/UTC endpoints; midnight ends are next-day exclusive. verified means no unresolved configured guard, including no configured integration/room mapping or disabled guard; it does not claim Google was polled. checked_at is advisory and no hold is created; writes must recheck availability. Current public_api/account/key/availability:read authority is required; disabling headless new entry preserves authorized reads.","operationId":"headlessV1CustomerAvailability","parameters":[{"in":"query","name":"date","schema":{"format":"date","type":"string"}},{"in":"query","name":"date_from","schema":{"format":"date","type":"string"}},{"in":"query","name":"date_to","schema":{"format":"date","type":"string"}},{"in":"query","name":"room_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"setup_id","schema":{"format":"uuid","type":"string"}},{"in":"query","name":"duration_minutes","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"intervals_page","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"intervals_per_page","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/HeadlessCustomerAvailability"},"request_id":{"type":"string"}},"required":["data","request_id"],"type":"object"}}},"description":"Paged customer availability targets and interval pages"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Missing, invalid, or revoked API key","headers":{"WWW-Authenticate":{"description":"The Bearer authentication challenge.","required":true,"schema":{"example":"Bearer realm=\"api/v1\"","type":"string"},"style":"simple"}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Inactive studio account, disabled public API, or required permission"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Resource not found or inaccessible"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Field validation failed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Internal error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Infrastructure temporarily unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","required":true,"schema":{"minimum":1,"type":"integer"},"style":"simple"}}}},"security":[{"ApiKeyAuth":[]}],"summary":"Browse customer room windows or concrete setup starts","tags":["Headless availability"]}}},"security":[],"servers":[{"url":"https://app.podyx.com","variables":{}}],"tags":[]}