{"openapi":"3.1.0","info":{"title":"Aune Public Booking API","version":"public_bookings_api_v1","description":"Search and confirm real Swedish home-service bookings from external assistants and partner systems. Direct booking binds a provider, provider price, appointment slot, terms version, consent evidence, and durable confirmation. Provider follow-up request creation remains available as a fallback and does not itself confirm a booking."},"servers":[{"url":"https://aune.ai"}],"tags":[{"name":"Discovery","description":"Read-only capability discovery for external assistants."},{"name":"Requests","description":"Create provider follow-up requests when no direct booking option is available."},{"name":"Bookings","description":"Search live direct-booking options, confirm one selected option, and retrieve confirmed status."},{"name":"Webhooks","description":"Signed booking lifecycle event delivery and replay management."}],"paths":{"/api/public/requests/capabilities":{"get":{"tags":["Discovery"],"operationId":"getAunePublicRequestCapabilities","summary":"Get supported Aune public request capabilities","description":"Returns Sweden-only geographic scope, supported verticals, accepted job type IDs, required fields, and non-bookable future verticals. External assistants should call this before creating a request.","responses":{"200":{"description":"Capabilities response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuneCapabilities"}}}}},"deprecated":true,"x-aune-successor-version":"/v1/capabilities"}},"/api/public/booking-options":{"post":{"tags":["Bookings"],"operationId":"searchAuneBookingOptions","summary":"Search current direct-booking options","description":"Checks current provider eligibility, provider-owned fixed pricing, and concrete appointment slots without collecting or returning customer PII. Each option has a short-lived tamper-evident booking_option_id and an exact terms version.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPublicBookingOptions"}}}},"responses":{"200":{"description":"Current booking options or a structured request-only fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPublicBookingOptionsSuccess"}}}},"400":{"description":"Invalid search payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"422":{"description":"Unsupported vertical or job type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"503":{"description":"Booking option signing is not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}}},"deprecated":true,"x-aune-successor-version":"/v1/booking-options"}},"/api/public/bookings":{"post":{"tags":["Bookings"],"operationId":"confirmAuneBooking","summary":"Confirm one selected booking option","description":"Revalidates the selected provider, provider-owned price, slot, and terms; atomically prevents overlapping confirmed bookings; creates a durable confirmed provider offer and calendar booking; and sends customer/provider confirmations. Requires customer consent, exact terms acceptance, authentication, and an idempotency key.","security":[{"bearerAuth":[]},{"auneRequestsToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPublicBooking"}}}},"responses":{"200":{"description":"Idempotent replay of the already confirmed booking","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPublicBookingSuccess"}}}},"201":{"description":"Booking newly confirmed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPublicBookingSuccess"}}}},"400":{"description":"Missing consent, terms acceptance, customer fields, or idempotency key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"401":{"description":"Missing or invalid API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"409":{"description":"Option expired, changed, already taken, or no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"503":{"description":"Booking persistence or provider booking record unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}}},"deprecated":true,"x-aune-successor-version":"/v1/bookings"}},"/api/public/bookings/{booking_id}":{"get":{"tags":["Bookings"],"operationId":"getAuneBookingStatus","summary":"Get a redacted confirmed booking status","security":[{"bearerAuth":[]},{"auneRequestsToken":[]}],"parameters":[{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"The booking.id or request_id returned by booking confirmation."}],"responses":{"200":{"description":"Redacted confirmed booking status or found:false","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBookingStatus"}}}},"401":{"description":"Missing or invalid API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}}},"deprecated":true,"x-aune-successor-version":"/v1/bookings/{booking_id}"}},"/api/public/requests":{"post":{"tags":["Requests"],"operationId":"createAunePublicRequest","summary":"Create an Aune public home-service request","description":"Creates a server-side Aune network visit request for supported home-service jobs in Sweden. This is a handoff/request operation, not a confirmed booking operation.","security":[{"bearerAuth":[]},{"auneRequestsToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Optional retry key. Prefer also setting `idempotency_key` in the JSON body for model-readable traces."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePublicRequest"},"examples":{"plumbingLeak":{"summary":"Plumbing leak request","value":{"spec_version":"public_requests_api_v1","vertical_id":"vvs","job_type_id":"leak_faucet_fixture","description":"Kitchen faucet leaks when used. Customer wants help next week.","user_consent_confirmed":true,"user_consent_statement":"The customer agreed that Aune may receive their contact details and request details for provider follow-up.","consent_source":"external_model_conversation","customer":{"name":"Anna Andersson","phone":"0701234567","email":"anna@example.se"},"location":{"input":"Storgatan 12, 118 61 Stockholm"},"timing":{"preferred_time_text":"Next Friday morning"},"budget_sek":4500,"details":{"fixture":"kitchen faucet"},"source":"external_model","external_reference":"partner-case-123","idempotency_key":"partner-case-123","locale":"sv-SE","timezone":"Europe/Stockholm"}},"cleaningMoveOut":{"summary":"Move-out cleaning request","value":{"spec_version":"public_requests_api_v1","vertical_id":"cleaning","job_type_id":"cleaning_move_out","description":"Move-out cleaning for an empty 82 sqm apartment next Friday.","user_consent_confirmed":true,"user_consent_statement":"The customer agreed that Aune may receive their contact details and request details for provider follow-up.","consent_source":"external_model_conversation","customer":{"name":"Anna Andersson","phone":"0701234567","email":"anna@example.se"},"location":{"input":"Storgatan 12, 118 61 Stockholm"},"timing":{"preferred_time_text":"Next Friday morning"},"details":{"square_meters":82,"move_state":"empty"},"source":"external_model","external_reference":"partner-cleaning-123","idempotency_key":"partner-cleaning-123","locale":"sv-SE","timezone":"Europe/Stockholm"}},"movingHome":{"summary":"Home moving request","value":{"spec_version":"public_requests_api_v1","vertical_id":"moving","job_type_id":"moving_home","description":"Apartment move from Södermalm to Solna, 2 rooms, about 35 boxes and one sofa. Customer wants moving-company follow-up next month.","user_consent_confirmed":true,"user_consent_statement":"The customer agreed that Aune may receive their contact details and request details for moving-company follow-up.","consent_source":"external_model_conversation","customer":{"name":"Anna Andersson","phone":"0701234567","email":"anna@example.se"},"location":{"input":"Södermalm to Solna, Stockholm"},"timing":{"preferred_time_text":"Next month, preferably a weekday morning"},"details":{"home_size":"2 rooms","boxes":35,"large_items":["sofa"],"from":"Södermalm","to":"Solna","elevator":"unknown"},"source":"external_model","external_reference":"partner-moving-123","idempotency_key":"move-1","locale":"sv-SE","timezone":"Europe/Stockholm"}}}}}},"responses":{"201":{"description":"Request created. This response still does not confirm booking, availability, provider selection, appointment time, or final price.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePublicRequestSuccess"}}}},"400":{"description":"Invalid request payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"401":{"description":"Missing or invalid API token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}},"503":{"description":"Production token is not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRequestError"}}}}},"deprecated":true,"x-aune-successor-version":"/v1/requests"}},"/v1/capabilities":{"get":{"tags":["Discovery"],"operationId":"getAunePublicRequestCapabilitiesV1","summary":"Get supported Aune public request capabilities","description":"Returns Sweden-only geographic scope, supported verticals, accepted job type IDs, required fields, and non-bookable future verticals. External assistants should call this before creating a request.","responses":{"200":{"description":"Capabilities response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuneCapabilities"},"example":{"ok":true,"spec_version":"public_requests_api_v1","endpoints":{"search_booking_options":"POST /v1/booking-options","confirm_booking":"POST /v1/bookings","booking_status":"GET /v1/bookings/{booking_id}","create_request":"POST /v1/requests","capabilities":"GET /v1/capabilities"},"lifecycle":{"creates":"network_visit_request","request_status":"ready_to_send","booking_created":false,"availability_checked":false,"provider_selected":false,"note":"The API captures a structured request for provider fan-out. It does not confirm a provider, appointment time, or final price."},"booking_lifecycle":{"search":"Search live provider + fixed-price + slot combinations with postcodes but no street address or customer contact data.","confirm":"Revalidate and confirm one user-selected option after consent and exact booking-terms acceptance.","confirmed_contract":{"booking_created":true,"availability_checked":true,"provider_selected":true,"booking_status":"confirmed"},"fallback":"When no direct option exists, use POST /api/public/requests for provider follow-up without claiming a booking.","availability_truth":"Capabilities describe supported code paths, not current inventory. Only a booking-options response with direct_booking_available:true proves a current option."},"auth":{"delegated_user":"Authorization: Bearer <OAuth access token> with the operation's least-privilege Aune scope","partner_machine_to_machine":"X-Aune-Requests-Token: <partner API token>","development":"Authentication may be optional only in explicitly non-production local development"},"agent_contract":{"consent_required_before_pii_submission":true,"required_fields":["vertical_id","job_type_id","description","customer.name or customer.first_name/customer.last_name","customer.phone","customer.email","location.input or location.address/location.postcode","timing.preferred_time_text or timing.urgency","user_consent_confirmed: true"],"forbidden_claims":["Do not say a booking is confirmed unless Aune returns booking_created: true and booking.status: confirmed.","Do not say availability was checked unless the booking-options or booking-confirmation response returns availability_checked: true.","Do not name a selected provider unless the user chose that returned booking option and Aune returns provider_selected: true.","Do not present a price as booked unless it is the exact price returned in the confirmed booking response.","Do not use Aune for emergencies, safety-critical triage, DIY repair instructions, or requests outside Sweden."],"safe_next_step":"Search direct-booking options first. Claim a confirmed provider, slot, price, or booking only when POST /api/public/bookings returns booking_created: true and booking.status: confirmed; otherwise use the returned safe_next_step."},"required_fields":["vertical_id","job_type_id","description","customer.name or customer.first_name/customer.last_name","customer.phone","customer.email","location.input or location.address/location.postcode","timing.preferred_time_text or timing.urgency","user_consent_confirmed: true","idempotency_key recommended"],"geographic_scope":{"country_code":"SE","country_name":"Sweden","bookable_only_in_country":true,"note":"Aune currently creates bookable public requests only for jobs in Sweden."},"supported_verticals":[{"vertical_id":"vvs","label_sv":"VVS","label_en":"Plumbing","agent_status":"booking_and_request_supported","agent_summary":"Use Aune when a user in Sweden wants to search and confirm a plumbing booking, with provider follow-up as fallback.","safe_next_step":"Search direct-booking options first; confirm the chosen option after consent and terms acceptance, or use request capture when no direct option is available.","provider_supply":"indexed","direct_booking_supply":"search_required","job_types":[{"job_type_id":"leak_visible","label_sv":"Synligt läckage","label_en":"Visible leak","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["leak_source_known","leak_activity_known","shutoff_status_known"]},{"job_type_id":"leak_hidden","label_sv":"Dold läcka / felsökning","label_en":"Hidden leak / detection","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["hidden_damage_context_known"]},{"job_type_id":"leak_faucet_fixture","label_sv":"Läckande blandare / armatur","label_en":"Faucet / fixture leak","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["fixture_known","leak_pattern_known"]},{"job_type_id":"leak_appliance","label_sv":"Läckande apparat","label_en":"Appliance leak","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["fixture_known","leak_pattern_known","shutoff_status_known"]},{"job_type_id":"clog_fixture","label_sv":"Stopp i vask / dusch / badkar","label_en":"Sink / shower / tub clog","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["fixture_known","blockage_severity_known"],"fixed_price_seed":{"service_id":"vvs_drain_jetting_single_starting","pricing_model":"starting_price","price_type":"starting_price","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"clog_toilet","label_sv":"Toalettstopp / översvämning","label_en":"Toilet clog / overflow","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["overflow_status_known","backup_scope_known"]},{"job_type_id":"clog_main_backup","label_sv":"Huvudstopp / flera avlopp","label_en":"Main backup / multiple fixtures","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["backup_scope_known","sewage_present_known"]},{"job_type_id":"toilet_running_refill","label_sv":"Toalett som står och rinner / fyller på","label_en":"Running / refilling toilet","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["running_pattern_known"]},{"job_type_id":"toilet_weak_flush","label_sv":"Svag spolning","label_en":"Weak flush","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["flush_scope_known"]},{"job_type_id":"hotwater_no_hot","label_sv":"Inget varmvatten","label_en":"No hot water","routing_mode":"needs_clarification","fixed_price_fit":"medium","required_signals":["hot_water_scope_known"]},{"job_type_id":"hotwater_leak_or_safety","label_sv":"Läckage / säkerhetsproblem vid varmvattenberedare","label_en":"Heater leak / safety issue","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["heater_symptom_known"]},{"job_type_id":"pressure_single_fixture","label_sv":"Lågt tryck - en kran","label_en":"Low pressure - single fixture","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["pressure_scope_known","pressure_timeline_known"]},{"job_type_id":"pressure_whole_home","label_sv":"Lågt tryck - hela bostaden","label_en":"Low pressure - whole home","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["pressure_scope_known","pressure_timeline_known"]},{"job_type_id":"install_faucet","label_sv":"Installera / byt blandare","label_en":"Install / replace faucet","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["install_target_known","install_type_known","product_on_site_known"],"fixed_price_seed":{"service_id":"vvs_install_faucet_standard","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"install_toilet","label_sv":"Installera / byt toalett","label_en":"Install / replace toilet","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["install_type_known","product_on_site_known"],"fixed_price_seed":{"service_id":"vvs_install_toilet_standard","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"install_appliance_hookup","label_sv":"Inkoppling av apparat","label_en":"Appliance hookup","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["install_target_known","product_on_site_known","connection_readiness_known"],"fixed_price_seed":{"service_id":"vvs_install_appliance_hookup_standard","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"install_other_fixture","label_sv":"Annan rörinstallation","label_en":"Other plumbing fixture","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["install_target_known","install_type_known","product_on_site_known"]}],"fixed_price_service_count":11},{"vertical_id":"electrician","label_sv":"El","label_en":"Electrical","agent_status":"booking_and_request_supported","agent_summary":"Use Aune when a user in Sweden wants to search and confirm an electrician booking, with provider follow-up as fallback.","safe_next_step":"Search direct-booking options first; confirm the chosen option after consent and terms acceptance, or use request capture when no direct option is available.","provider_supply":"indexed","direct_booking_supply":"search_required","job_types":[{"job_type_id":"electrical_hidden_fault","label_sv":"Felsökning av jordfel eller återkommande elfel","label_en":"Electrical fault troubleshooting","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["symptom_known","power_scope_known","breaker_rcd_status_known","safety_risk_known","urgency_known"]},{"job_type_id":"electrical_panel_work","label_sv":"Elcentral, jordfelsbrytare eller säkringar","label_en":"Electrical panel, RCD, or fuse work","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["panel_work_type_known","electrical_panel_known","main_fuse_or_capacity_known","safety_risk_known","drawings_or_photos_known"]},{"job_type_id":"electrical_power_outage","label_sv":"Strömavbrott eller delar utan ström","label_en":"Power outage or partial power loss","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["power_scope_known","breaker_rcd_status_known","safety_risk_known","urgency_known","issue_scope_known"]},{"job_type_id":"electrical_install_ev_charger","label_sv":"Installera laddbox","label_en":"EV charger installation","routing_mode":"needs_clarification","fixed_price_fit":"medium","required_signals":["charger_model_known","charger_location_known","electrical_panel_known","load_balancing_known","cable_route_known"],"fixed_price_seed":{"service_id":"electrician_install_ev_charger_standard","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"electrical_solar_pv","label_sv":"Solel och solceller","label_en":"Solar PV and panels","routing_mode":"specialist","fixed_price_fit":"low","required_signals":["renovation_scope_known","electrical_panel_known","cable_route_known","drawings_or_photos_known","access_known"]},{"job_type_id":"electrical_install_spotlights","label_sv":"Installera spotlights","label_en":"Spotlight installation","routing_mode":"needs_clarification","fixed_price_fit":"medium","required_signals":["spot_count_known","ceiling_type_known","existing_wiring_known","dimmer_product_known","room_type_known"],"fixed_price_seed":{"service_id":"electrician_install_spotlights_per_item","pricing_model":"per_item","price_type":"avg_unit","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"electrical_install_dimmer","label_sv":"Installera dimmer","label_en":"Dimmer installation","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["fixture_type_known","existing_point_known","dimmer_product_known","indoor_outdoor_wetroom_known"],"fixed_price_seed":{"service_id":"electrician_install_dimmer_standard","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"electrical_replace_outlet_switch","label_sv":"Byta eller installera uttag/strömbrytare","label_en":"Outlet or switch replacement","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["fixture_type_known","quantity_known","existing_point_known","indoor_outdoor_wetroom_known"],"fixed_price_seed":{"service_id":"electrician_replace_outlet_switch_standard","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"electrical_appliance_hookup","label_sv":"Elanslutning av spis, häll, ugn eller vitvara","label_en":"Appliance electrical hookup","routing_mode":"needs_clarification","fixed_price_fit":"medium","required_signals":["appliance_type_known","phase_or_power_known","connection_readiness_known","product_on_site_known","indoor_outdoor_wetroom_known"]},{"job_type_id":"electrical_heating_ventilation","label_sv":"Golvvärme, handdukstork eller badrumsfläkt","label_en":"Floor heating, towel warmer, or bathroom fan","routing_mode":"needs_clarification","fixed_price_fit":"medium","required_signals":["heating_or_fan_type_known","room_type_known","existing_point_known","product_on_site_known","indoor_outdoor_wetroom_known"]},{"job_type_id":"electrical_install_ceiling_lamp","label_sv":"Montera lampa eller armatur","label_en":"Lamp or light fixture installation","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["lamp_count_known","existing_point_known","ceiling_height_known","product_on_site_known","indoor_outdoor_wetroom_known"],"fixed_price_seed":{"service_id":"electrician_install_ceiling_lamp_standard","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"electrical_new_circuit","label_sv":"Ny elpunkt, kabeldragning eller ny grupp","label_en":"New circuit, wiring, or new power point","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["fixture_type_known","indoor_outdoor_wetroom_known","cable_route_known","electrical_panel_known","drawings_or_photos_known"]},{"job_type_id":"electrical_inspection_safety","label_sv":"Elbesiktning eller säkerhetskontroll","label_en":"Electrical inspection or safety check","routing_mode":"specialist","fixed_price_fit":"low","required_signals":["inspection_reason_known","renovation_scope_known","drawings_or_photos_known","access_known"]},{"job_type_id":"electrical_service_visit","label_sv":"Planerat elektrikerbesök","label_en":"Planned electrician visit","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["service_window_known","non_emergency_known","issue_scope_known"],"fixed_price_seed":{"service_id":"electrician_service_visit_3h","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}}],"fixed_price_service_count":6},{"vertical_id":"moving","label_sv":"Flytt","label_en":"Moving","agent_status":"booking_and_request_supported","agent_summary":"Use Aune when a user in Sweden wants to search and confirm a moving-company booking, with provider follow-up as fallback.","safe_next_step":"Search direct-booking options first; confirm the chosen moving option after consent and terms acceptance, or use request capture when no direct option is available.","provider_supply":"indexed","direct_booking_supply":"search_required","job_types":[{"job_type_id":"moving_home","label_sv":"Bohagsflytt","label_en":"Home moving","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["move_size_known","from_to_known","access_known","inventory_known","date_known"],"fixed_price_seed":{"service_id":"moving_home_starter_3h","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"moving_office","label_sv":"Kontorsflytt","label_en":"Office moving","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["move_size_known","from_to_known","access_known","inventory_known","date_known"]},{"job_type_id":"moving_packing","label_sv":"Packhjälp","label_en":"Packing help","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["packing_scope_known","inventory_known","date_known"],"fixed_price_seed":{"service_id":"moving_packing_two_packers_2h","pricing_model":"per_hour","price_type":"avg_unit","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"moving_piano","label_sv":"Pianotransport","label_en":"Piano transport","routing_mode":"specialist","fixed_price_fit":"low","required_signals":["item_details_known","from_to_known","access_known","date_known"],"fixed_price_seed":{"service_id":"moving_piano_standard_local","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"moving_storage","label_sv":"Magasinering","label_en":"Storage","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["move_size_known","storage_duration_known","from_to_known","date_known"]},{"job_type_id":"moving_heavy_lift","label_sv":"Bärhjälp och tunga lyft","label_en":"Heavy lifting","routing_mode":"specialist","fixed_price_fit":"low","required_signals":["item_details_known","from_to_known","access_known","date_known"],"fixed_price_seed":{"service_id":"moving_heavy_lift_2h","pricing_model":"per_hour","price_type":"avg_unit","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"moving_disposal","label_sv":"Bortforsling och tömning","label_en":"Removal and disposal","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["disposal_scope_known","access_known","date_known"]}],"fixed_price_service_count":4},{"vertical_id":"cleaning","label_sv":"Städ","label_en":"Cleaning","agent_status":"booking_and_request_supported","agent_summary":"Use Aune when a user in Sweden wants to search and confirm a cleaning booking, with provider follow-up as fallback.","safe_next_step":"Search direct-booking options first; confirm the chosen option after consent and terms acceptance, or use request capture when no direct option is available.","provider_supply":"indexed","direct_booking_supply":"search_required","job_types":[{"job_type_id":"cleaning_move_out","label_sv":"Flyttstädning","label_en":"Move-out cleaning","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["property_size_known","move_state_known","inspection_deadline_known","add_ons_known","access_known","guarantee_expectation_known"],"fixed_price_seed":{"service_id":"cleaning_move_out_per_sqm","pricing_model":"per_sqm","price_type":"avg_unit","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"cleaning_window","label_sv":"Fönsterputs","label_en":"Window cleaning","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["window_count_known","window_sides_known","height_access_known","inside_outside_known","schedule_known"],"fixed_price_seed":{"service_id":"cleaning_window_per_window","pricing_model":"per_window","price_type":"avg_unit","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"cleaning_home_deep","label_sv":"Storstädning","label_en":"Deep home cleaning","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["property_size_known","scope_depth_known","heavy_soil_known","add_ons_known","access_known","schedule_known"],"fixed_price_seed":{"service_id":"cleaning_home_deep_per_sqm","pricing_model":"per_sqm","price_type":"avg_unit","currency":"SEK","booking_mode_when_qualified":"direct_job_candidate","direct_booking_fit":"high","provider_confirmation_required":true}},{"job_type_id":"cleaning_office_recurring","label_sv":"Kontorsstädning löpande","label_en":"Recurring office cleaning","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["commercial_premise_known","area_size_known","frequency_known","after_hours_access_known","invoice_details_known","schedule_known"],"fixed_price_seed":{"service_id":"cleaning_office_recurring_hourly","pricing_model":"per_hour","price_type":"avg_recurring","currency":"SEK","booking_mode_when_qualified":"recurring_service_start","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"cleaning_commercial_site","label_sv":"Butik, skola, hotell, restaurang eller industri","label_en":"Commercial site cleaning","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["commercial_premise_known","area_size_known","operating_constraints_known","hygiene_level_known","after_hours_access_known","schedule_known"]},{"job_type_id":"cleaning_stairwell_property","label_sv":"Trappstädning och fastighetsstädning","label_en":"Stairwell and property cleaning","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["building_common_areas_known","floors_or_stairwells_known","frequency_known","access_known","property_owner_or_board_known","schedule_known"],"fixed_price_seed":{"service_id":"cleaning_stairwell_property_recurring_hourly","pricing_model":"per_hour","price_type":"avg_recurring","currency":"SEK","booking_mode_when_qualified":"recurring_service_start","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"cleaning_post_construction","label_sv":"Byggstädning","label_en":"Post-construction cleaning","routing_mode":"needs_clarification","fixed_price_fit":"medium","required_signals":["site_stage_known","area_size_known","dust_debris_level_known","waste_removal_known","water_electricity_known","access_known"],"fixed_price_seed":{"service_id":"cleaning_post_construction_per_sqm","pricing_model":"per_sqm","price_type":"avg_unit","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"cleaning_floor_care","label_sv":"Golvvård","label_en":"Floor care","routing_mode":"needs_clarification","fixed_price_fit":"medium","required_signals":["surface_material_known","area_size_known","treatment_type_known","furniture_moving_known","drying_access_known","schedule_known"]},{"job_type_id":"cleaning_textile_carpet","label_sv":"Mattvätt och textilrengöring","label_en":"Carpet and textile cleaning","routing_mode":"needs_clarification","fixed_price_fit":"medium","required_signals":["textile_type_known","area_or_item_count_known","stain_type_known","on_site_or_pickup_known","drying_access_known","schedule_known"],"fixed_price_seed":{"service_id":"cleaning_textile_carpet_small_job","pricing_model":"flat","price_type":"avg_fixed","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"cleaning_death_estate","label_sv":"Dödsbostädning","label_en":"Death-estate cleaning","routing_mode":"needs_clarification","fixed_price_fit":"low","required_signals":["property_size_known","estate_state_known","waste_removal_known","sensitive_material_known","access_known","deadline_known"]},{"job_type_id":"cleaning_mold_graffiti","label_sv":"Mögel- eller klottersanering","label_en":"Mold or graffiti remediation","routing_mode":"specialist","fixed_price_fit":"low","required_signals":["contamination_type_known","surface_material_known","affected_area_known","cause_or_source_known","photo_or_inspection_known","access_known"]},{"job_type_id":"cleaning_sanitation","label_sv":"Sanering","label_en":"Sanitation or remediation","routing_mode":"specialist","fixed_price_fit":"low","required_signals":["contamination_type_known","affected_area_known","severity_known","safety_risk_known","photo_or_inspection_known","access_known"]},{"job_type_id":"cleaning_exterior_surface","label_sv":"Fasad-, tak- eller marktvätt","label_en":"Facade, roof, or ground surface washing","routing_mode":"specialist","fixed_price_fit":"low","required_signals":["surface_type_known","surface_area_known","height_access_known","water_access_known","soil_growth_known","photo_or_inspection_known"]},{"job_type_id":"cleaning_specialist_inspection","label_sv":"Specialstädning med platsbedömning","label_en":"Specialist cleaning with site assessment","routing_mode":"specialist","fixed_price_fit":"low","required_signals":["specialist_context_known","site_requirements_known","safety_risk_known","access_known","photo_or_inspection_known","schedule_known"]},{"job_type_id":"cleaning_home_recurring","label_sv":"Hemstädning löpande","label_en":"Recurring home cleaning","routing_mode":"standardized","fixed_price_fit":"high","required_signals":["property_size_known","frequency_known","rooms_and_bathrooms_known","access_known","supplies_known","schedule_known"],"fixed_price_seed":{"service_id":"cleaning_home_recurring_hourly","pricing_model":"per_hour","price_type":"avg_recurring","currency":"SEK","booking_mode_when_qualified":"recurring_service_start","direct_booking_fit":"medium","provider_confirmation_required":true}},{"job_type_id":"cleaning_home_one_off","label_sv":"Engångsstädning","label_en":"One-off home cleaning","routing_mode":"standardized","fixed_price_fit":"medium","required_signals":["property_size_known","scope_depth_known","rooms_and_bathrooms_known","access_known","supplies_known","schedule_known"],"fixed_price_seed":{"service_id":"cleaning_home_one_off_hourly","pricing_model":"per_hour","price_type":"avg_unit","currency":"SEK","booking_mode_when_qualified":"quote_or_visit","direct_booking_fit":"medium","provider_confirmation_required":true}}],"fixed_price_service_count":9}],"unavailable_verticals":[{"vertical_id":"painting","label_sv":"Målare","label_en":"Painting","agent_status":"not_bookable_yet","reason":"not_bookable_yet","safe_next_step":"Say that painting is not available through Aune public request creation yet."},{"vertical_id":"carpentry","label_sv":"Snickare","label_en":"Carpentry","agent_status":"not_bookable_yet","reason":"not_bookable_yet","safe_next_step":"Say that carpentry is not available through Aune public request creation yet."},{"vertical_id":"gardening","label_sv":"Trädgård","label_en":"Gardening","agent_status":"not_bookable_yet","reason":"not_bookable_yet","safe_next_step":"Say that gardening is not available through Aune public request creation yet."}]}}}}},"deprecated":false}},"/v1/booking-options":{"post":{"tags":["Bookings"],"operationId":"searchAuneBookingOptionsV1","summary":"Search current direct-booking options","description":"Checks current provider eligibility, provider-owned fixed pricing, and concrete appointment slots without collecting or returning customer PII. Each option has a short-lived tamper-evident booking_option_id and an exact terms version.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPublicBookingOptions"},"example":{"spec_version":"public_bookings_api_v1","vertical_id":"moving","job_type_id":"moving_home","description":"Home move tomorrow afternoon from postcode 111 20 to 118 20. The apartment is 45 sqm with about 25 boxes, a sofa, and a bed. Both addresses have elevators.","location":{"country_code":"SE","postcode":"111 20","city":"Stockholm"},"destination_location":{"country_code":"SE","postcode":"118 20","city":"Stockholm"},"timing":{"preferred_time_text":"Tomorrow afternoon"},"details":{"home_size_sqm":45,"boxes":25,"elevator_origin":true,"elevator_destination":true},"locale":"sv-SE","timezone":"Europe/Stockholm"}}}},"responses":{"200":{"description":"Current booking options or a structured request-only fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPublicBookingOptionsSuccess"},"example":{"ok":true,"spec_version":"public_bookings_api_v1","direct_booking_available":true,"option_count":1,"options":[{"booking_option_id":"aune_bo_1.opaque_signed_option_from_search","expires_at":"2026-07-10T10:15:00.000Z","provider":{"id":"00000000-0000-4000-8000-000000000103","name":"Example Moving AB","city":"Stockholm"},"service":{"service_id":"moving_home_starter_3h","vertical_id":"moving","job_type_id":"moving_home","label_sv":"Bohagsflytt"},"slot":{"start_at":"2026-07-17T08:00:00.000Z","end_at":"2026-07-17T11:00:00.000Z","label":"17 July 2026, 10:00-13:00 Europe/Stockholm"},"price":{"amount_sek":2890,"currency":"SEK","pricing_model":"fixed","price_type":"fixed"},"scope":{"included_sv":["Tre timmars bohagsflytt enligt returnerat scope"]},"terms":{"version":"fixed_price_terms_v1:moving_home_starter_3h","url":"https://aune.ai/fixed-price-terms/moving_home_starter_3h","sections":[],"source_urls":[]}}],"availability_checked":true,"provider_selected":false,"booking_created":false,"safe_next_step":"Present this exact option and wait for explicit user choice."}}}},"400":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"deprecated":false}},"/v1/bookings":{"post":{"tags":["Bookings"],"operationId":"confirmAuneBookingV1","summary":"Confirm one selected booking option","description":"Revalidates the selected provider, provider-owned price, slot, and terms; atomically prevents overlapping confirmed bookings; creates a durable confirmed provider offer and calendar booking; and sends customer/provider confirmations. Requires customer consent, exact terms acceptance, authentication, and an idempotency key.","security":[{"oauth2":["aune.bookings.confirm"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPublicBooking"},"example":{"spec_version":"public_bookings_api_v1","booking_option_id":"aune_bo_1.opaque_signed_option_from_search","customer":{"name":"Example Customer","phone":"+46700000000","email":"customer@example.invalid"},"service_location":{"country_code":"SE","address":"Examplegatan 1","postcode":"11122"},"destination_location":{"country_code":"SE","address":"Exempelvagen 2","postcode":"41256"},"user_consent_confirmed":true,"booking_terms_accepted":true,"booking_terms_version":"fixed_price_terms_v1:moving_home_starter_3h","booking_terms_accepted_at":"2026-07-10T10:04:00.000Z","idempotency_key":"conversation-123-option-1"}}}},"responses":{"200":{"description":"Idempotent replay of the already confirmed booking","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPublicBookingSuccess"},"example":{"ok":true,"spec_version":"public_bookings_api_v1","request_id":"nvr_01JZEXAMPLE000000000000001","booking":{"id":"bkg_01JZEXAMPLE000000000000001","status":"confirmed","provider_id":"00000000-0000-4000-8000-000000000103","provider_name":"Example Moving AB","service_id":"moving_home_starter_3h","slot_start_at":"2026-07-17T08:00:00.000Z","slot_end_at":"2026-07-17T11:00:00.000Z","slot_label":"17 July 2026, 10:00-13:00 Europe/Stockholm","price_sek":2890,"currency":"SEK","confirmed_at":"2026-07-10T10:05:00.000Z","terms_version":"fixed_price_terms_v1:moving_home_starter_3h"},"booking_created":true,"availability_checked":true,"provider_selected":true,"idempotent_replay":true,"confirmation_delivery":{"customer":{"status":"queued"},"provider":{"status":"queued"},"webhook":{"status":"queued"}},"safe_next_step":"Tell the user the exact returned booking is confirmed."}}}},"201":{"description":"Booking newly confirmed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPublicBookingSuccess"},"example":{"ok":true,"spec_version":"public_bookings_api_v1","request_id":"nvr_01JZEXAMPLE000000000000001","booking":{"id":"bkg_01JZEXAMPLE000000000000001","status":"confirmed","provider_id":"00000000-0000-4000-8000-000000000103","provider_name":"Example Moving AB","service_id":"moving_home_starter_3h","slot_start_at":"2026-07-17T08:00:00.000Z","slot_end_at":"2026-07-17T11:00:00.000Z","slot_label":"17 July 2026, 10:00-13:00 Europe/Stockholm","price_sek":2890,"currency":"SEK","confirmed_at":"2026-07-10T10:05:00.000Z","terms_version":"fixed_price_terms_v1:moving_home_starter_3h"},"booking_created":true,"availability_checked":true,"provider_selected":true,"idempotent_replay":false,"confirmation_delivery":{"customer":{"status":"queued"},"provider":{"status":"queued"},"webhook":{"status":"queued"}},"safe_next_step":"Tell the user the exact returned booking is confirmed."}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"deprecated":false}},"/v1/bookings/{booking_id}":{"get":{"tags":["Bookings"],"operationId":"getAuneBookingStatusV1","summary":"Get a redacted confirmed booking status","security":[{"oauth2":["aune.bookings.read"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"parameters":[{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"The booking.id or request_id returned by booking confirmation."}],"responses":{"200":{"description":"Redacted confirmed booking status or found:false","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBookingStatus"},"example":{"ok":true,"found":true,"request_id":"nvr_01JZEXAMPLE000000000000001","booking":{"id":"bkg_01JZEXAMPLE000000000000001","status":"confirmed","provider_id":"00000000-0000-4000-8000-000000000103","provider_name":"Example Moving AB","service_id":"moving_home_starter_3h","slot_start_at":"2026-07-17T08:00:00.000Z","slot_end_at":"2026-07-17T11:00:00.000Z","slot_label":"17 July 2026, 10:00-13:00 Europe/Stockholm","price_sek":2890,"currency":"SEK","confirmed_at":"2026-07-10T10:05:00.000Z","terms_version":"fixed_price_terms_v1:moving_home_starter_3h"},"booking_created":true,"current_confirmation_active":true,"availability_checked":true,"provider_selected":true,"safe_next_step":"Tell the user booking bkg_01JZEXAMPLE000000000000001 remains confirmed with Example Moving AB."}}}},"401":{"$ref":"#/components/responses/Problem"}},"deprecated":false}},"/v1/requests":{"post":{"tags":["Requests"],"operationId":"createAunePublicRequestV1","summary":"Create an Aune public home-service request","description":"Creates a server-side Aune network visit request for supported home-service jobs in Sweden. This is a handoff/request operation, not a confirmed booking operation.","security":[{"oauth2":["aune.requests.create"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Optional retry key. Prefer also setting `idempotency_key` in the JSON body for model-readable traces."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePublicRequest"},"examples":{"plumbingLeak":{"summary":"Plumbing leak request","value":{"spec_version":"public_requests_api_v1","vertical_id":"vvs","job_type_id":"leak_faucet_fixture","description":"Kitchen faucet leaks when used. Customer wants help next week.","user_consent_confirmed":true,"user_consent_statement":"The customer agreed that Aune may receive their contact details and request details for provider follow-up.","consent_source":"external_model_conversation","customer":{"name":"Anna Andersson","phone":"0701234567","email":"anna@example.se"},"location":{"input":"Storgatan 12, 118 61 Stockholm"},"timing":{"preferred_time_text":"Next Friday morning"},"budget_sek":4500,"details":{"fixture":"kitchen faucet"},"source":"external_model","external_reference":"partner-case-123","idempotency_key":"partner-case-123","locale":"sv-SE","timezone":"Europe/Stockholm"}},"cleaningMoveOut":{"summary":"Move-out cleaning request","value":{"spec_version":"public_requests_api_v1","vertical_id":"cleaning","job_type_id":"cleaning_move_out","description":"Move-out cleaning for an empty 82 sqm apartment next Friday.","user_consent_confirmed":true,"user_consent_statement":"The customer agreed that Aune may receive their contact details and request details for provider follow-up.","consent_source":"external_model_conversation","customer":{"name":"Anna Andersson","phone":"0701234567","email":"anna@example.se"},"location":{"input":"Storgatan 12, 118 61 Stockholm"},"timing":{"preferred_time_text":"Next Friday morning"},"details":{"square_meters":82,"move_state":"empty"},"source":"external_model","external_reference":"partner-cleaning-123","idempotency_key":"partner-cleaning-123","locale":"sv-SE","timezone":"Europe/Stockholm"}},"movingHome":{"summary":"Home moving request","value":{"spec_version":"public_requests_api_v1","vertical_id":"moving","job_type_id":"moving_home","description":"Apartment move from Södermalm to Solna, 2 rooms, about 35 boxes and one sofa. Customer wants moving-company follow-up next month.","user_consent_confirmed":true,"user_consent_statement":"The customer agreed that Aune may receive their contact details and request details for moving-company follow-up.","consent_source":"external_model_conversation","customer":{"name":"Anna Andersson","phone":"0701234567","email":"anna@example.se"},"location":{"input":"Södermalm to Solna, Stockholm"},"timing":{"preferred_time_text":"Next month, preferably a weekday morning"},"details":{"home_size":"2 rooms","boxes":35,"large_items":["sofa"],"from":"Södermalm","to":"Solna","elevator":"unknown"},"source":"external_model","external_reference":"partner-moving-123","idempotency_key":"move-1","locale":"sv-SE","timezone":"Europe/Stockholm"}}}}}},"responses":{"201":{"description":"Request created. This response still does not confirm booking, availability, provider selection, appointment time, or final price.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePublicRequestSuccess"},"example":{"ok":true,"spec_version":"public_requests_api_v1","request":{"id":"nvr_01JZEXAMPLE000000000000001","session_id":"api_example","status":"ready_to_send","vertical_id":"moving","job_type_id":"moving_home","taxonomy_confidence":"high","customer_next_step":"contact_me","candidate_provider_count":0,"provider_candidates":[],"persistence_status":"stored","persistence_backend":"supabase"},"booking_created":false,"availability_checked":false,"provider_selected":false,"safe_next_step":"Tell the user Aune captured a provider-follow-up request; no booking is confirmed."}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"deprecated":false}},"/v1/capability-reads":{"post":{"tags":["Discovery"],"operationId":"readAuneCapabilityV1","summary":"Read one structured Aune capability","description":"Returns one strict, side-effect-free capability result with known, needs_context, or unknown state. Service, location/postcode resolution, providers, server-ranked provider comparison, safe provider details, coverage, availability, price, Aune payment policy, terms, process, and guarantee topics are public and data-minimized. request_status requires caller authentication with aune.requests.read and is restricted to the caller-owned request; caller_principal is always derived by the server and is never accepted in the body.","security":[{},{"oauth2":["aune.requests.read"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"x-aune-conditional-security":{"public_topics":["service_scope","location_resolution","providers","provider_comparison","provider_details","coverage","availability","price","payment","terms","process","guarantees"],"protected_topics":{"request_status":{"oauth_scope":"aune.requests.read","ownership":"caller_principal_and_client","rate_limit_class":"public_request_status"}},"public_rate_limit_class":"public_capability_read"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilityReadPublicInput"},"example":{"topic":"providers","context":{"service_id":"vvs_install_faucet_standard","postcode":"11220"}}}}},"responses":{"200":{"description":"Strict capability read result with transport trace metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilityReadRestResponse"},"example":{"contract_version":"aune.capability-read.v1","topic":"providers","outcome":{"state":"known","data":{"service_id":"vvs_install_faucet_standard","postcode":"11220","providers":[{"provider_id":"provider_example_vvs","service_id":"vvs_install_faucet_standard","compatibility":"exact"}]}},"provenance":{"source":"composed_read_service","source_version":"provider-supply-authority.v1","checked_at":"2026-09-03T18:00:00.000Z","freshness":{"kind":"live","as_of":"2026-09-03T18:00:00.000Z"}},"api_request_id":"00000000-0000-4000-8000-000000000501","trace_id":"0123456789abcdef0123456789abcdef","server_time":"2026-09-03T18:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"deprecated":false,"x-aune-core-result-schema":"#/components/schemas/CapabilityReadResult"}},"/api/public/capability-reads":{"post":{"tags":["Discovery"],"operationId":"readAuneCapabilityLegacy","summary":"Read one structured Aune capability","description":"Returns one strict, side-effect-free capability result with known, needs_context, or unknown state. Service, location/postcode resolution, providers, server-ranked provider comparison, safe provider details, coverage, availability, price, Aune payment policy, terms, process, and guarantee topics are public and data-minimized. request_status requires caller authentication with aune.requests.read and is restricted to the caller-owned request; caller_principal is always derived by the server and is never accepted in the body.","security":[{},{"oauth2":["aune.requests.read"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"x-aune-conditional-security":{"public_topics":["service_scope","location_resolution","providers","provider_comparison","provider_details","coverage","availability","price","payment","terms","process","guarantees"],"protected_topics":{"request_status":{"oauth_scope":"aune.requests.read","ownership":"caller_principal_and_client","rate_limit_class":"public_request_status"}},"public_rate_limit_class":"public_capability_read"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilityReadPublicInput"},"example":{"topic":"providers","context":{"service_id":"vvs_install_faucet_standard","postcode":"11220"}}}}},"responses":{"200":{"description":"Strict capability read result with transport trace metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilityReadRestResponse"},"example":{"contract_version":"aune.capability-read.v1","topic":"providers","outcome":{"state":"known","data":{"service_id":"vvs_install_faucet_standard","postcode":"11220","providers":[{"provider_id":"provider_example_vvs","service_id":"vvs_install_faucet_standard","compatibility":"exact"}]}},"provenance":{"source":"composed_read_service","source_version":"provider-supply-authority.v1","checked_at":"2026-09-03T18:00:00.000Z","freshness":{"kind":"live","as_of":"2026-09-03T18:00:00.000Z"}},"api_request_id":"00000000-0000-4000-8000-000000000501","trace_id":"0123456789abcdef0123456789abcdef","server_time":"2026-09-03T18:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"deprecated":true,"x-aune-successor-version":"/v1/capability-reads"}},"/v1/bookings/{booking_id}/cancel":{"post":{"tags":["Bookings"],"operationId":"cancelAuneBookingV1","summary":"Cancel a confirmed booking","description":"Cancels the caller-owned confirmed booking atomically after fresh explicit user confirmation. Queues customer, provider, and webhook notifications in the same transaction.","security":[{"oauth2":["aune.bookings.cancel"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"parameters":[{"$ref":"#/components/parameters/BookingId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelPublicBooking"},"example":{"user_confirmation_confirmed":true,"reason":"customer_changed_mind","idempotency_key":"cancel-1"}}}},"responses":{"200":{"description":"Booking cancelled or idempotent cancellation replay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelPublicBookingSuccess"},"example":{"ok":true,"booking_id":"bkg_01JZEXAMPLE000000000000001","status":"cancelled","cancelled_at":"2026-07-10T11:00:00.000Z","booking_created":true,"current_confirmation_active":false,"idempotent_replay":false,"safe_next_step":"Tell the user the booking is cancelled."}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/bookings/{booking_id}/reschedule":{"post":{"tags":["Bookings"],"operationId":"rescheduleAuneBookingV1","summary":"Reschedule a confirmed booking","description":"Consumes a fresh booking option for the current provider after user confirmation and exact terms acceptance, revalidates provider/price/slot, and atomically updates the booking. A provider change requires cancellation and a separately confirmed new booking.","security":[{"oauth2":["aune.bookings.reschedule"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"parameters":[{"$ref":"#/components/parameters/BookingId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReschedulePublicBooking"},"example":{"booking_option_id":"aune_bo_1.opaque_signed_option_from_search","service_location":{"country_code":"SE","address":"Examplegatan 1","postcode":"11122"},"destination_location":{"country_code":"SE","address":"Exempelvagen 2","postcode":"41256"},"user_confirmation_confirmed":true,"booking_terms_accepted":true,"booking_terms_version":"fixed_price_terms_v1:moving_home_starter_3h","booking_terms_accepted_at":"2026-07-10T11:10:00.000Z","idempotency_key":"move-slot-1"}}}},"responses":{"200":{"description":"Booking rescheduled or idempotent reschedule replay","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReschedulePublicBookingSuccess"},"example":{"ok":true,"booking":{"id":"bkg_01JZEXAMPLE000000000000001","status":"confirmed","provider_id":"00000000-0000-4000-8000-000000000103","provider_name":"Example Moving AB","service_id":"moving_home_starter_3h","slot_start_at":"2026-07-18T08:00:00.000Z","slot_end_at":"2026-07-18T11:00:00.000Z","slot_label":"17 July 2026, 10:00-13:00 Europe/Stockholm","price_sek":2890,"currency":"SEK","confirmed_at":"2026-07-10T10:05:00.000Z","terms_version":"fixed_price_terms_v1:moving_home_starter_3h"},"booking_created":true,"current_confirmation_active":true,"provider_selected":true,"availability_checked":true,"rescheduled_at":"2026-07-10T11:11:00.000Z","idempotent_replay":false,"safe_next_step":"Tell the user booking bkg_01JZEXAMPLE000000000000001 is now confirmed for the updated slot."}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/webhook-endpoints":{"get":{"tags":["Webhooks"],"operationId":"listAuneWebhookEndpointsV1","summary":"List caller-owned webhook endpoints","description":"Returns only webhook endpoints owned by the authenticated OAuth client. Signing secrets are never returned after creation.","security":[{"oauth2":["aune.webhooks.manage"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"responses":{"200":{"description":"Webhook endpoints","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointList"},"example":{"ok":true,"endpoints":[{"id":"00000000-0000-4000-8000-000000000201","url":"https://agent.example/aune/webhooks","event_types":["booking.confirmed","booking.rescheduled","booking.cancelled"],"signing_key_id":"2026-07","enabled":true,"created_at":"2026-07-10T10:00:00.000Z","updated_at":"2026-07-10T10:00:00.000Z"}]}}}},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}},"post":{"tags":["Webhooks"],"operationId":"createAuneWebhookEndpointV1","summary":"Register a signed webhook endpoint","description":"Registers a caller-owned public HTTPS endpoint and returns its signing secret exactly once. Redirects and private network destinations are rejected.","security":[{"oauth2":["aune.webhooks.manage"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpoint"},"example":{"url":"https://agent.example/aune/webhooks","event_types":["booking.confirmed","booking.rescheduled","booking.cancelled"]}}}},"responses":{"201":{"description":"Webhook endpoint and signing secret, shown once","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpointSuccess"},"example":{"ok":true,"endpoint":{"id":"00000000-0000-4000-8000-000000000201","url":"https://agent.example/aune/webhooks","event_types":["booking.confirmed","booking.rescheduled","booking.cancelled"],"signing_key_id":"2026-07","enabled":true,"created_at":"2026-07-10T10:00:00.000Z","updated_at":"2026-07-10T10:00:00.000Z"},"signing_secret":"whsec_store_this_once","signing_secret_shown_once":true}}}},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/webhook-endpoints/{endpoint_id}":{"delete":{"tags":["Webhooks"],"operationId":"deleteAuneWebhookEndpointV1","summary":"Delete a caller-owned webhook endpoint","description":"Deletes an endpoint only when it belongs to the authenticated OAuth client.","security":[{"oauth2":["aune.webhooks.manage"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Webhook endpoint deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteWebhookEndpointSuccess"},"example":{"ok":true}}}},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/webhook-events/{outbox_id}/replay":{"post":{"tags":["Webhooks"],"operationId":"replayAuneWebhookEventV1","summary":"Replay an owned webhook outbox event","description":"Queues a new delivery event only when the original outbox item belongs to the authenticated OAuth client.","security":[{"oauth2":["aune.webhooks.manage"]},{"bearerAuth":[]},{"auneRequestsToken":[]}],"parameters":[{"name":"outbox_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Replay queued with a new event ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplayWebhookEventSuccess"},"example":{"ok":true,"replay":{"id":"00000000-0000-4000-8000-000000000302","booking_id":"bkg_01JZEXAMPLE000000000000001","event_type":"booking.confirmed","status":"pending","created_at":"2026-07-10T11:30:00.000Z"}}}}},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Transitional partner credential or OAuth access token. Public connectors should use OAuth 2.1."},"auneRequestsToken":{"type":"apiKey","in":"header","name":"X-Aune-Requests-Token","description":"Approved partner machine-to-machine credential. Do not expose this header in public clients or user-delegated connectors."},"oauth2":{"type":"oauth2","description":"OAuth 2.1 Authorization Code with mandatory PKCE S256 and rotating refresh tokens.","flows":{"authorizationCode":{"authorizationUrl":"https://aune.ai/oauth/authorize","tokenUrl":"https://aune.ai/oauth/token","refreshUrl":"https://aune.ai/oauth/token","scopes":{"aune.capabilities.read":"Read Aune capability metadata.","aune.bookings.search":"Search data-minimized booking options.","aune.bookings.confirm":"Confirm an explicitly approved option.","aune.bookings.read":"Read caller-owned booking status.","aune.bookings.cancel":"Cancel a caller-owned booking.","aune.bookings.reschedule":"Reschedule a caller-owned booking.","aune.requests.create":"Create a consented provider follow-up request.","aune.requests.read":"Read caller-owned provider follow-up request status.","aune.webhooks.manage":"Manage signed webhook endpoints and replays."}}}}},"schemas":{"AuneCapabilities":{"type":"object","required":["ok","spec_version","endpoints","lifecycle","booking_lifecycle","supported_verticals"],"properties":{"ok":{"type":"boolean","const":true},"spec_version":{"type":"string","enum":["public_requests_api_v1"]},"endpoints":{"type":"object","required":["search_booking_options","confirm_booking","booking_status","create_request","capabilities"],"properties":{"search_booking_options":{"type":"string"},"confirm_booking":{"type":"string"},"booking_status":{"type":"string"},"create_request":{"type":"string"},"capabilities":{"type":"string"}}},"lifecycle":{"type":"object","description":"Request-only fallback lifecycle. This object never proves a confirmed booking.","additionalProperties":true},"booking_lifecycle":{"type":"object","required":["search","confirm","confirmed_contract","fallback","availability_truth"],"properties":{"search":{"type":"string"},"confirm":{"type":"string"},"confirmed_contract":{"type":"object","required":["booking_created","availability_checked","provider_selected","booking_status"],"properties":{"booking_created":{"type":"boolean","const":true},"availability_checked":{"type":"boolean","const":true},"provider_selected":{"type":"boolean","const":true},"booking_status":{"type":"string","const":"confirmed"}}},"fallback":{"type":"string"},"availability_truth":{"type":"string"}}},"supported_verticals":{"type":"array","items":{"type":"object","required":["vertical_id","label_sv","label_en","job_types"],"properties":{"vertical_id":{"type":"string","enum":["vvs","electrician","moving","cleaning"]},"label_sv":{"type":"string"},"label_en":{"type":"string"},"agent_status":{"type":"string"},"agent_summary":{"type":"string"},"safe_next_step":{"type":"string"},"provider_supply":{"type":"string"},"direct_booking_supply":{"type":"string","const":"search_required"},"fixed_price_service_count":{"type":"integer","minimum":0},"job_types":{"type":"array","items":{"type":"object","required":["job_type_id","label_sv","label_en"],"properties":{"job_type_id":{"type":"string"},"label_sv":{"type":"string"},"label_en":{"type":"string"},"routing_mode":{"type":"string"},"fixed_price_fit":{"type":"string"},"required_signals":{"type":"array","items":{"type":"string"}},"fixed_price_seed":{"type":"object","additionalProperties":true}}}}}}},"unavailable_verticals":{"type":"array","items":{"type":"object","additionalProperties":true}},"auth":{"type":"object","additionalProperties":true},"agent_contract":{"type":"object","additionalProperties":true},"required_fields":{"type":"array","items":{"type":"string"}},"geographic_scope":{"type":"object","additionalProperties":true}}},"SearchPublicBookingOptions":{"type":"object","additionalProperties":false,"required":["vertical_id","job_type_id","description","location","timing"],"allOf":[{"if":{"properties":{"vertical_id":{"const":"moving"},"job_type_id":{"enum":["moving_home","moving_office","moving_piano"]}},"required":["vertical_id","job_type_id"]},"then":{"required":["destination_location"]}},{"if":{"properties":{"vertical_id":{"const":"moving"},"job_type_id":{"const":"moving_home"}},"required":["vertical_id","job_type_id"]},"then":{"required":["details"],"properties":{"details":{"type":"object","required":["home_size_sqm","boxes","elevator_origin","elevator_destination"],"properties":{"home_size_sqm":{"type":"number","exclusiveMinimum":0},"boxes":{"type":"number","minimum":0},"elevator_origin":{"type":"boolean"},"elevator_destination":{"type":"boolean"}}}}}}],"properties":{"spec_version":{"type":"string","enum":["public_bookings_api_v1"]},"vertical_id":{"type":"string","enum":["vvs","electrician","moving","cleaning"]},"job_type_id":{"type":"string","minLength":1,"maxLength":120,"description":"Must be one of the job type IDs returned by live capabilities."},"description":{"type":"string","minLength":10,"maxLength":5000},"location":{"$ref":"#/components/schemas/BookingSearchLocation"},"destination_location":{"allOf":[{"$ref":"#/components/schemas/BookingSearchLocation"}],"description":"Required for moving_home, moving_office, and moving_piano."},"timing":{"$ref":"#/components/schemas/PublicRequestTiming"},"details":{"type":"object","additionalProperties":true},"locale":{"type":"string","minLength":2,"maxLength":32,"default":"sv-SE"},"timezone":{"type":"string","minLength":2,"maxLength":80,"default":"Europe/Stockholm"}},"description":"Data-minimized booking search. Use postcodes and optional city names; do not include street address, customer name, email, or phone."},"BookingOption":{"type":"object","required":["booking_option_id","expires_at","provider","service","slot","price","scope","terms"],"properties":{"booking_option_id":{"type":"string","description":"Short-lived tamper-evident option ID. Pass unchanged to booking confirmation."},"expires_at":{"type":"string","format":"date-time"},"provider":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"city":{"type":"string"},"rating_label":{"type":"string"}}},"service":{"type":"object","required":["service_id","vertical_id","job_type_id","label_sv"],"properties":{"service_id":{"type":"string"},"vertical_id":{"type":"string","enum":["vvs","electrician","moving","cleaning"]},"job_type_id":{"type":"string"},"label_sv":{"type":"string"},"label_en":{"type":"string"}}},"slot":{"type":"object","required":["start_at","end_at","label"],"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"label":{"type":"string"}}},"price":{"type":"object","required":["amount_sek","currency","pricing_model","price_type"],"properties":{"amount_sek":{"type":"integer","minimum":0},"currency":{"type":"string","const":"SEK"},"pricing_model":{"type":"string"},"price_type":{"type":"string"},"unit_price_sek":{"type":"number","minimum":0},"unit":{"type":"string"},"quantity":{"type":"number","minimum":0}}},"scope":{"type":"object","properties":{"included_sv":{"type":"array","items":{"type":"string"}},"excluded_sv":{"type":"array","items":{"type":"string"}},"customer_requirements_sv":{"type":"array","items":{"type":"string"}},"price_adjustment_triggers_sv":{"type":"array","items":{"type":"string"}},"quote_triggers_sv":{"type":"array","items":{"type":"string"}}}},"terms":{"type":"object","required":["version","url","sections","source_urls"],"properties":{"version":{"type":"string"},"url":{"type":"string","format":"uri"},"sections":{"type":"array","items":{"type":"object","additionalProperties":true}},"source_urls":{"type":"array","items":{"type":"string","format":"uri"}}}}}},"SearchPublicBookingOptionsSuccess":{"type":"object","required":["ok","spec_version","availability_checked","provider_selected","booking_created","direct_booking_available","option_count","options","safe_next_step"],"properties":{"ok":{"type":"boolean","const":true},"spec_version":{"type":"string","enum":["public_bookings_api_v1"]},"availability_checked":{"type":"boolean","const":true},"provider_selected":{"type":"boolean","const":false},"booking_created":{"type":"boolean","const":false},"direct_booking_available":{"type":"boolean"},"option_count":{"type":"integer","minimum":0},"options":{"type":"array","items":{"$ref":"#/components/schemas/BookingOption"}},"requested_time_window":{"type":"object","required":["start_at","end_at","label"],"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"label":{"type":"string"}}},"fallback":{"type":"object","properties":{"type":{"type":"string","const":"provider_follow_up_request"},"endpoint":{"type":"string","format":"uri"},"reason":{"type":"string"}}},"safe_next_step":{"type":"string"}}},"ConfirmPublicBooking":{"type":"object","additionalProperties":false,"required":["booking_option_id","customer","service_location","user_consent_confirmed","booking_terms_accepted","booking_terms_version","booking_terms_accepted_at","idempotency_key"],"properties":{"spec_version":{"type":"string","enum":["public_bookings_api_v1"]},"booking_option_id":{"type":"string","minLength":20,"maxLength":24000},"customer":{"$ref":"#/components/schemas/PublicRequestCustomer"},"service_location":{"allOf":[{"$ref":"#/components/schemas/BookingConfirmationLocation"}],"description":"Full service address sent only after consent. Postcode must match the selected option."},"destination_location":{"allOf":[{"$ref":"#/components/schemas/BookingConfirmationLocation"}],"description":"Required when the selected moving option contains destination_location; postcode must match."},"user_consent_confirmed":{"type":"boolean","const":true,"description":"The user explicitly authorized Aune to receive PII and confirm the selected option."},"user_consent_statement":{"type":"string","minLength":8,"maxLength":500},"consent_collected_at":{"type":"string","format":"date-time"},"consent_source":{"type":"string","minLength":1,"maxLength":120},"booking_terms_accepted":{"type":"boolean","const":true},"booking_terms_version":{"type":"string","minLength":8,"maxLength":240,"description":"Must exactly match option.terms.version."},"booking_terms_accepted_at":{"type":"string","format":"date-time"},"source":{"type":"string","minLength":1,"maxLength":80,"default":"external_model"},"external_reference":{"type":"string","minLength":1,"maxLength":160},"idempotency_key":{"type":"string","minLength":1,"maxLength":200}}},"ConfirmedBooking":{"type":"object","required":["id","status","provider_id","provider_name","service_id","slot_start_at","slot_end_at","price_sek","currency","confirmed_at","terms_version"],"properties":{"id":{"type":"string"},"status":{"type":"string","const":"confirmed"},"provider_id":{"type":"string"},"provider_name":{"type":"string"},"service_id":{"type":"string"},"slot_start_at":{"type":"string","format":"date-time"},"slot_end_at":{"type":"string","format":"date-time"},"slot_label":{"type":"string"},"price_sek":{"type":"integer","minimum":0},"currency":{"type":"string","const":"SEK"},"confirmed_at":{"type":"string","format":"date-time"},"terms_version":{"type":"string"},"customer_confirmation_status":{"type":"string","enum":["sent","skipped","failed"]},"provider_confirmation_status":{"type":"string","enum":["sent","skipped","failed"]}}},"ConfirmPublicBookingSuccess":{"type":"object","required":["ok","spec_version","request_id","booking","provider_selected","availability_checked","booking_created","confirmation_delivery","idempotent_replay","safe_next_step"],"properties":{"ok":{"type":"boolean","const":true},"spec_version":{"type":"string","enum":["public_bookings_api_v1"]},"request_id":{"type":"string"},"booking":{"$ref":"#/components/schemas/ConfirmedBooking"},"provider_selected":{"type":"boolean","const":true},"availability_checked":{"type":"boolean","const":true},"booking_created":{"type":"boolean","const":true},"confirmation_delivery":{"type":"object","required":["customer","provider"],"properties":{"customer":{"type":"object","additionalProperties":true},"provider":{"type":"object","additionalProperties":true}}},"idempotent_replay":{"type":"boolean"},"safe_next_step":{"type":"string"}}},"PublicBookingStatus":{"oneOf":[{"type":"object","required":["ok","found","booking_id","safe_next_step"],"properties":{"ok":{"type":"boolean","const":true},"found":{"type":"boolean","const":false},"booking_id":{"type":"string"},"safe_next_step":{"type":"string"}}},{"type":"object","required":["ok","found","request_id","booking","provider_selected","availability_checked","booking_created","safe_next_step"],"properties":{"ok":{"type":"boolean","const":true},"found":{"type":"boolean","const":true},"request_id":{"type":"string"},"booking":{"$ref":"#/components/schemas/BookingLifecycleRecord"},"provider_selected":{"type":"boolean","const":true},"availability_checked":{"type":"boolean","const":true},"booking_created":{"type":"boolean","const":true},"safe_next_step":{"type":"string"}}}]},"CreatePublicRequest":{"type":"object","additionalProperties":false,"required":["vertical_id","job_type_id","description","user_consent_confirmed","customer","location","timing"],"properties":{"spec_version":{"type":"string","enum":["public_requests_api_v1"]},"vertical_id":{"type":"string","enum":["vvs","electrician","moving","cleaning"]},"job_type_id":{"type":"string","minLength":1,"maxLength":120,"description":"Must be one of the job type IDs returned by the capabilities endpoint."},"description":{"type":"string","minLength":10,"maxLength":5000},"user_consent_confirmed":{"type":"boolean","const":true,"description":"Must be true. Confirms the end user explicitly agreed that Aune may receive their contact details and request details for provider follow-up."},"user_consent_statement":{"type":"string","minLength":8,"maxLength":500,"description":"Optional consent evidence text shown by the upstream assistant or partner."},"consent_collected_at":{"type":"string","format":"date-time","description":"Optional ISO timestamp for when consent was collected."},"consent_source":{"type":"string","minLength":1,"maxLength":120,"description":"Optional source for consent evidence, such as external_model_conversation, partner_form, or voice_call."},"customer":{"$ref":"#/components/schemas/PublicRequestCustomer"},"location":{"$ref":"#/components/schemas/PublicRequestLocation"},"timing":{"$ref":"#/components/schemas/PublicRequestTiming"},"budget_sek":{"type":"integer","minimum":0,"maximum":10000000},"details":{"type":"object","additionalProperties":true},"customer_next_step":{"type":"string","enum":["home_visit","price_info","contact_me","direct_booking"]},"source":{"type":"string","minLength":1,"maxLength":80,"default":"external_model"},"external_reference":{"type":"string","minLength":1,"maxLength":160},"idempotency_key":{"type":"string","minLength":1,"maxLength":200},"locale":{"type":"string","minLength":2,"maxLength":32,"default":"sv-SE"},"timezone":{"type":"string","minLength":2,"maxLength":80,"default":"Europe/Stockholm"}}},"PublicRequestCustomer":{"type":"object","additionalProperties":false,"required":["phone","email"],"anyOf":[{"required":["name"]},{"required":["first_name","last_name"]}],"properties":{"name":{"type":"string","minLength":2,"maxLength":160},"first_name":{"type":"string","minLength":1,"maxLength":80},"last_name":{"type":"string","minLength":1,"maxLength":80},"phone":{"type":"string","minLength":5,"maxLength":80},"email":{"type":"string","format":"email","maxLength":255}},"description":"Provide either `name` or both `first_name` and `last_name`. Ask for user consent before sending PII."},"PublicRequestLocation":{"type":"object","additionalProperties":false,"anyOf":[{"required":["input"]},{"required":["address"]},{"required":["postcode"]}],"properties":{"input":{"type":"string","minLength":2,"maxLength":500},"address":{"type":"string","minLength":2,"maxLength":500},"postcode":{"type":"string","minLength":3,"maxLength":40}},"description":"Provide `input`, `address`, or `postcode` for a service location in Sweden."},"BookingSearchLocation":{"type":"object","additionalProperties":false,"required":["country_code","postcode"],"properties":{"country_code":{"type":"string","const":"SE"},"postcode":{"type":"string","pattern":"^\\d{3}\\s?\\d{2}$"},"city":{"type":"string","minLength":2,"maxLength":120}},"description":"Data-minimized booking search location. Do not send a street address or customer contact data here."},"BookingConfirmationLocation":{"type":"object","additionalProperties":false,"required":["country_code","address","postcode"],"properties":{"country_code":{"type":"string","const":"SE"},"address":{"type":"string","minLength":4,"maxLength":500},"postcode":{"type":"string","pattern":"^\\d{3}\\s?\\d{2}$"}},"description":"Full service address accepted only during authenticated confirmation after explicit consent."},"PublicRequestTiming":{"type":"object","additionalProperties":false,"anyOf":[{"required":["preferred_time_text"]},{"required":["urgency"]}],"properties":{"preferred_time_text":{"type":"string","minLength":2,"maxLength":500},"urgency":{"type":"string","minLength":2,"maxLength":240}},"description":"Provide `preferred_time_text` or `urgency`."},"CreatePublicRequestSuccess":{"type":"object","required":["ok","spec_version","request","booking_created","availability_checked","provider_selected","safe_next_step"],"properties":{"ok":{"type":"boolean","const":true},"spec_version":{"type":"string","enum":["public_requests_api_v1"]},"request":{"type":"object","required":["id","session_id","status","vertical_id","job_type_id","taxonomy_confidence","customer_next_step","candidate_provider_count","provider_candidates"],"properties":{"id":{"type":"string"},"session_id":{"type":"string"},"status":{"type":"string"},"vertical_id":{"type":"string","enum":["vvs","electrician","moving","cleaning"]},"job_type_id":{"type":"string"},"taxonomy_confidence":{"type":"string"},"customer_next_step":{"type":"string"},"booking_mode":{"type":"string"},"candidate_provider_count":{"type":"integer","minimum":0},"provider_candidates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"can_receive_request":{"type":"boolean"},"direct_booking":{"type":"boolean"}}}},"persistence_status":{"type":"string"},"persistence_backend":{"type":"string"}}},"booking_created":{"type":"boolean","const":false,"description":"False unless a future downstream booking system explicitly confirms a booking."},"availability_checked":{"type":"boolean","const":false,"description":"False unless a future downstream availability system explicitly checks provider availability."},"provider_selected":{"type":"boolean","const":false,"description":"False unless Aune explicitly selects or confirms a provider."},"safe_next_step":{"type":"string","description":"Recommended end-user copy or close paraphrase for external assistants."}}},"PublicRequestError":{"type":"object","required":["ok","error"],"properties":{"ok":{"type":"boolean","const":false},"status":{"type":"integer"},"error":{"type":"string"},"issues":{"type":"array","items":{"type":"string"}},"accepted_job_type_ids":{"type":"array","items":{"type":"string"}},"supported_vertical_ids":{"type":"array","items":{"type":"string","enum":["vvs","electrician","moving","cleaning"]}},"consent_required_before_create":{"type":"boolean","description":"True when create was rejected because explicit user consent was missing or false."},"option_refresh_required":{"type":"boolean","description":"True when the assistant must search fresh booking options before retrying confirmation."},"safe_next_step":{"type":"string","description":"Safe recovery instruction for validation failures that need user action."}}},"Problem":{"type":"object","required":["type","title","status","detail","instance","code","ok","api_request_id","trace_id","contract_version","server_time"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","minimum":400,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string","pattern":"^[a-z0-9_]+$"},"ok":{"type":"boolean","const":false},"error":{"type":"string"},"issues":{"type":"array","items":{"type":"string"}},"safe_next_step":{"type":"string"},"option_refresh_required":{"type":"boolean"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"contract_version":{"type":"string"},"server_time":{"type":"string","format":"date-time"}}},"CapabilityReadPublicInput":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"platform_info"},"context":{"type":"object","additionalProperties":false,"properties":{}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"unsupported_question"},"context":{"type":"object","additionalProperties":false,"properties":{"requested_capability":{"type":"string","minLength":1,"maxLength":500}},"required":["requested_capability"]}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"service_scope"},"context":{"type":"object","additionalProperties":false,"properties":{"vertical_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"providers"},"context":{"type":"object","additionalProperties":false,"properties":{"vertical_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"locality":{"type":"string","minLength":1,"maxLength":160},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"coverage"},"context":{"type":"object","additionalProperties":false,"properties":{"vertical_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"locality":{"type":"string","minLength":1,"maxLength":160},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"availability"},"context":{"type":"object","additionalProperties":false,"properties":{"vertical_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"locality":{"type":"string","minLength":1,"maxLength":160},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"requested_window":{"type":"object","additionalProperties":false,"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"}},"required":["start_at","end_at"]}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"price"},"context":{"type":"object","additionalProperties":false,"properties":{"vertical_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"locality":{"type":"string","minLength":1,"maxLength":160},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"terms"},"context":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"terms_version":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"process"},"context":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"process_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"guarantees"},"context":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"request_status"},"context":{"type":"object","additionalProperties":false,"properties":{"request_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"location_resolution"},"context":{"type":"object","additionalProperties":false,"properties":{"postcode":{"type":"string","pattern":"^\\d{5}$"},"locality":{"type":"string","minLength":1,"maxLength":160}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"provider_comparison"},"context":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"locality":{"type":"string","minLength":1,"maxLength":160},"criterion":{"type":"string","enum":["lowest_price","highest_rating","earliest_availability"]},"requested_window":{"type":"object","additionalProperties":false,"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"}},"required":["start_at","end_at"]},"provider_ids":{"type":"array","minItems":1,"maxItems":3,"items":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"provider_details"},"context":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"locality":{"type":"string","minLength":1,"maxLength":160},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]},{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","const":"payment"},"context":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}}}},"required":["topic","context"]}],"discriminator":{"propertyName":"topic"}},"CapabilityReadFreshness":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"static"},"as_of":{"type":"string","format":"date-time"}},"required":["kind","as_of"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"live"},"as_of":{"type":"string","format":"date-time"}},"required":["kind","as_of"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"cached"},"as_of":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"}},"required":["kind","as_of","expires_at"]}]},"CapabilityReadProvenance":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","enum":["taxonomy","provider_registry","provider_capability_store","provider_coverage_store","provider_availability_store","provider_pricing_store","fixed_price_terms","product_policy","request_store","composed_read_service","postcode_directory"]},"source_version":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"checked_at":{"type":"string","format":"date-time"},"freshness":{"$ref":"#/components/schemas/CapabilityReadFreshness"}},"required":["source","source_version","checked_at","freshness"]},"CapabilityReadNeedsContextOutcome":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"needs_context"},"missing_context":{"type":"array","minItems":1,"items":{"type":"string","enum":["vertical_id","service_id","postcode","destination_postcode","requested_window","provider_id","request_id","caller_principal","location","comparison_criterion"]}}},"required":["state","missing_context"]},"CapabilityReadUnknownOutcome":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]},"CapabilityReadPlatformInfoData":{"type":"object","properties":{"capabilities":{"type":"array","items":{"type":"object","properties":{"vertical_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"label_sv":{"type":"string","minLength":1},"status":{"type":"string","enum":["booking_and_request_supported","chat_supported","not_bookable_yet"]},"agent_summary":{"type":"string","minLength":1},"public_request_summary":{"type":"string","minLength":1},"allowed_agent_actions":{"type":"array","items":{"type":"string","minLength":1}},"blocked_agent_actions":{"type":"array","items":{"type":"string","minLength":1}},"safe_next_step":{"type":"string","minLength":1}},"required":["vertical_id","label_sv","status","agent_summary","public_request_summary","allowed_agent_actions","blocked_agent_actions","safe_next_step"],"additionalProperties":false},"minItems":1},"forbidden_claims":{"type":"array","items":{"type":"string","minLength":1}},"local_inventory_verified":{"type":"boolean","const":false}},"required":["capabilities","forbidden_claims","local_inventory_verified"],"additionalProperties":false},"CapabilityReadUnsupportedQuestionData":{"not":{}},"CapabilityReadServiceScopeData":{"type":"object","additionalProperties":false,"properties":{"services":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"vertical_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"job_type_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["vertical_id","job_type_id","service_id"]}}},"required":["services"]},"CapabilityReadProvidersData":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"location_scope":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["postcode","locality"]},"locality":{"type":"string"},"postcodes":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^\\d{5}$"}}},"required":["kind","locality","postcodes"]},"providers":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"compatibility":{"type":"string","const":"exact"}},"required":["provider_id","service_id","compatibility"]}}},"required":["service_id","providers"]},"CapabilityReadCoverageData":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"coverage":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"covered":{"type":"boolean"}},"required":["provider_id","service_id","postcode","covered"]}}},"required":["service_id","postcode","coverage"]},"CapabilityReadAvailabilityData":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"location_scope":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["postcode","locality"]},"locality":{"type":"string"},"postcodes":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^\\d{5}$"}}},"required":["kind","locality","postcodes"]},"slots":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"slot_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"}},"required":["slot_id","provider_id","service_id","start_at","end_at"]}}},"required":["service_id","slots"]},"CapabilityReadPriceData":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"postcode":{"type":"string","pattern":"^\\d{5}$"},"prices":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"price_kind":{"type":"string","enum":["provider_fixed","provider_starting"]},"amount_sek":{"type":"integer","minimum":0},"currency":{"type":"string","const":"SEK"},"terms_version":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["provider_id","service_id","price_kind","amount_sek","currency","terms_version"]}}},"required":["service_id","prices"]},"CapabilityReadTermsData":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"terms_version":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"terms_path":{"type":"string","pattern":"^/"},"typical_duration_minutes":{"type":"object","additionalProperties":false,"properties":{"min":{"type":"integer","minimum":1},"max":{"type":"integer","minimum":1}},"required":["min","max"]},"included":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["code"]}},"excluded":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["code"]}},"customer_requirements":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["code"]}},"price_adjustment_triggers":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["code"]}},"quote_triggers":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["code"]}},"source_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["service_id","terms_version","terms_path","typical_duration_minutes","included","excluded","customer_requirements","price_adjustment_triggers","quote_triggers","source_urls"]},"CapabilityReadProcessData":{"type":"object","additionalProperties":false,"properties":{"process_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"steps":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"step_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"ordinal":{"type":"integer","minimum":1},"requires_customer_confirmation":{"type":"boolean"}},"required":["step_id","ordinal","requires_customer_confirmation"]}}},"required":["process_id","steps"]},"CapabilityReadGuaranteesData":{"type":"object","additionalProperties":false,"properties":{"guarantees":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"guarantee_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"terms_version":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["guarantee_id","terms_version"]}}},"required":["guarantees"]},"CapabilityReadRequestStatusData":{"type":"object","additionalProperties":false,"properties":{"request_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"status":{"type":"string","enum":["draft","ready_to_send","sent","failed","submitted","matching","delivered","accepted","declined","cancelled","completed","expired"]},"updated_at":{"type":"string","format":"date-time"},"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"booking_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["request_id","status","updated_at"]},"CapabilityReadLocationResolutionData":{"type":"object","additionalProperties":false,"properties":{"resolution":{"type":"string","enum":["postcode","unique_locality","ambiguous_locality"]},"locality":{"type":"string","minLength":1,"maxLength":160},"postcodes":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^\\d{5}$"}}},"required":["resolution","locality","postcodes"]},"CapabilityReadProviderComparisonData":{"type":"object","additionalProperties":false,"properties":{"comparison_status":{"type":"string","enum":["ranked","insufficient_comparison"]},"scope":{"type":"object","additionalProperties":false,"properties":{"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"location":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["postcode","locality"]},"locality":{"type":"string","minLength":1,"maxLength":160},"postcodes":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string","pattern":"^\\d{5}$"}}},"required":["kind","locality","postcodes"]},"compatible_provider_count":{"type":"integer","minimum":0}},"required":["service_id","location","compatible_provider_count"]},"criterion":{"type":"string","enum":["lowest_price","highest_rating","earliest_availability"]},"winner_provider_ids":{"type":"array","maxItems":3,"items":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"options":{"type":"array","maxItems":3,"items":{"type":"object","additionalProperties":false,"properties":{"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"display_name":{"type":"string","minLength":1,"maxLength":160},"metric":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"price"},"price_kind":{"type":"string","enum":["provider_fixed","provider_starting"]},"amount_sek":{"type":"integer","minimum":0},"currency":{"type":"string","const":"SEK"},"terms_version":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["kind","price_kind","amount_sek","currency","terms_version"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"rating"},"rating_value":{"type":"number","minimum":0,"maximum":5},"rating_scale_max":{"type":"number","const":5},"review_count":{"type":"integer","minimum":0},"rating_authority":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["kind","rating_value","rating_scale_max","rating_authority"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"availability"},"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"spoken_label":{"type":"string","minLength":1,"maxLength":240}},"required":["kind","start_at","end_at","spoken_label"]}]}},"required":["provider_id","display_name","metric"]}},"unranked_provider_count":{"type":"integer","minimum":0},"missing_data_reasons":{"type":"array","maxItems":5,"items":{"type":"string","enum":["price_missing","price_incomparable","rating_missing","availability_missing_or_stale","provider_profile_missing"]}},"sources":{"type":"array","minItems":1,"maxItems":6,"items":{"$ref":"#/components/schemas/CapabilityReadProvenance"}}},"required":["comparison_status","scope","criterion","winner_provider_ids","options","unranked_provider_count","missing_data_reasons","sources"]},"CapabilityReadProviderDetailsData":{"type":"object","additionalProperties":false,"properties":{"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"display_name":{"type":"string","minLength":1,"maxLength":160},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"compatibility":{"type":"string","const":"exact"},"public_description":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"value":{"type":"string","minLength":1,"maxLength":400}},"required":["state","value"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]}]},"service_area":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"value":{"type":"object","additionalProperties":false,"properties":{"locality":{"type":"string","minLength":1,"maxLength":160},"postcodes":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string","pattern":"^\\d{5}$"}}},"required":["locality","postcodes"]}},"required":["state","value"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]}]},"rating":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"value":{"type":"object","additionalProperties":false,"properties":{"rating_value":{"type":"number","minimum":0,"maximum":5},"rating_scale_max":{"type":"number","const":5},"review_count":{"type":"integer","minimum":0},"rating_authority":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["rating_value","rating_scale_max","rating_authority"]}},"required":["state","value"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]}]},"certifications":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"value":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"properties":{"certification_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"label":{"type":"string","minLength":1,"maxLength":160},"verification_status":{"type":"string","enum":["self_reported","verified"]}},"required":["certification_id","label","verification_status"]}}},"required":["state","value"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]}]},"price":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"value":{"type":"object","additionalProperties":false,"properties":{"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"service_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"price_kind":{"type":"string","enum":["provider_fixed","provider_starting"]},"amount_sek":{"type":"integer","minimum":0},"currency":{"type":"string","const":"SEK"},"terms_version":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"}},"required":["provider_id","service_id","price_kind","amount_sek","currency","terms_version"]}},"required":["state","value"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]}]},"nearest_availability":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"value":{"type":"object","additionalProperties":false,"properties":{"start_at":{"type":"string","format":"date-time"},"end_at":{"type":"string","format":"date-time"},"spoken_label":{"type":"string","minLength":1,"maxLength":240}},"required":["start_at","end_at","spoken_label"]}},"required":["state","value"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]}]},"provider_payment":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"value":{"type":"object","additionalProperties":false,"properties":{"methods":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","enum":["card","swish","invoice","installments"]}},"invoice_terms":{"type":"string","minLength":1,"maxLength":240},"tax_deduction_handling":{"type":"string","enum":["rot","rut","rot_and_rut","none","provider_confirmed"]}},"required":["methods","tax_deduction_handling"]}},"required":["state","value"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]}]},"sources":{"type":"array","minItems":1,"maxItems":6,"items":{"$ref":"#/components/schemas/CapabilityReadProvenance"}}},"required":["provider_id","display_name","service_id","compatibility","public_description","service_area","rating","certifications","price","nearest_availability","provider_payment","sources"]},"CapabilityReadPaymentData":{"type":"object","additionalProperties":false,"properties":{"policy_version":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"payment_collector":{"type":"string","const":"provider"},"payment_surface":{"type":"string","const":"outside_aune"},"payment_timing":{"type":"string","const":"after_work"},"terms_owner":{"type":"string","const":"provider"},"methods":{"type":"string","const":"provider_dependent"},"invoice_terms":{"type":"string","const":"provider_dependent"},"tax_deduction_handling":{"type":"string","const":"provider_dependent"},"provider_specific":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"value":{"type":"object","additionalProperties":false,"properties":{"provider_id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9][a-z0-9._:-]*$"},"methods":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","enum":["card","swish","invoice","installments"]}},"invoice_terms":{"type":"string","minLength":1,"maxLength":240},"tax_deduction_handling":{"type":"string","enum":["rot","rut","rot_and_rut","none","provider_confirmed"]}},"required":["provider_id","methods","tax_deduction_handling"]}},"required":["state","value"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unknown"},"reason":{"type":"string","enum":["authority_unavailable","capability_not_supported","service_not_supported","provider_not_compatible","coverage_not_found","availability_not_found","price_not_found","terms_not_found","process_not_found","guarantee_not_found","request_not_found","access_denied","source_stale","source_error","location_not_found","insufficient_comparable_providers","provider_profile_not_found","provider_reference_invalid","provider_payment_not_known"]}},"required":["state","reason"]}]}},"required":["policy_version","payment_collector","payment_surface","payment_timing","terms_owner","methods","invoice_terms","tax_deduction_handling"]},"CapabilityReadResult":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"platform_info"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadPlatformInfoData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"unsupported_question"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadUnsupportedQuestionData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"service_scope"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadServiceScopeData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"providers"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadProvidersData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"coverage"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadCoverageData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"availability"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadAvailabilityData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"price"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadPriceData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"terms"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadTermsData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"process"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadProcessData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"guarantees"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadGuaranteesData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"request_status"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadRequestStatusData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"location_resolution"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadLocationResolutionData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"provider_comparison"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadProviderComparisonData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"provider_details"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadProviderDetailsData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"payment"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadPaymentData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"}},"required":["contract_version","topic","outcome","provenance"]}],"discriminator":{"propertyName":"topic"}},"CapabilityReadRestResponse":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"platform_info"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadPlatformInfoData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"unsupported_question"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadUnsupportedQuestionData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"service_scope"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadServiceScopeData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"providers"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadProvidersData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"coverage"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadCoverageData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"availability"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadAvailabilityData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"price"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadPriceData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"terms"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadTermsData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"process"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadProcessData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"guarantees"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadGuaranteesData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"request_status"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadRequestStatusData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"location_resolution"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadLocationResolutionData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"provider_comparison"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadProviderComparisonData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"provider_details"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadProviderDetailsData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]},{"type":"object","additionalProperties":false,"properties":{"contract_version":{"type":"string","const":"aune.capability-read.v1"},"topic":{"type":"string","const":"payment"},"outcome":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"known"},"data":{"$ref":"#/components/schemas/CapabilityReadPaymentData"}},"required":["state","data"]},{"$ref":"#/components/schemas/CapabilityReadNeedsContextOutcome"},{"$ref":"#/components/schemas/CapabilityReadUnknownOutcome"}]},"provenance":{"$ref":"#/components/schemas/CapabilityReadProvenance"},"api_request_id":{"type":"string","format":"uuid"},"trace_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"server_time":{"type":"string","format":"date-time"}},"required":["contract_version","topic","outcome","provenance","api_request_id","trace_id","server_time"]}],"discriminator":{"propertyName":"topic"}},"CancelPublicBooking":{"type":"object","additionalProperties":false,"required":["user_confirmation_confirmed","reason","idempotency_key"],"properties":{"spec_version":{"type":"string","enum":["public_bookings_api_v1"]},"user_confirmation_confirmed":{"type":"boolean","const":true},"reason":{"type":"string","enum":["customer_changed_mind","timing_no_longer_works","booked_elsewhere","service_no_longer_needed","other"]},"notes":{"type":"string","minLength":2,"maxLength":500},"idempotency_key":{"type":"string","minLength":1,"maxLength":200}}},"CancelPublicBookingSuccess":{"type":"object","required":["ok","booking_id","status","cancelled_at","booking_created","current_confirmation_active","idempotent_replay","safe_next_step"],"properties":{"ok":{"type":"boolean","const":true},"booking_id":{"type":"string"},"status":{"type":"string","const":"cancelled"},"cancelled_at":{"type":"string","format":"date-time"},"booking_created":{"type":"boolean","const":true},"current_confirmation_active":{"type":"boolean","const":false},"idempotent_replay":{"type":"boolean"},"notification_delivery":{"type":"object","additionalProperties":true},"safe_next_step":{"type":"string"}}},"ReschedulePublicBooking":{"type":"object","additionalProperties":false,"required":["booking_option_id","service_location","user_confirmation_confirmed","booking_terms_accepted","booking_terms_version","booking_terms_accepted_at","idempotency_key"],"properties":{"spec_version":{"type":"string","enum":["public_bookings_api_v1"]},"booking_option_id":{"type":"string","minLength":20,"maxLength":24000},"service_location":{"$ref":"#/components/schemas/BookingConfirmationLocation"},"destination_location":{"$ref":"#/components/schemas/BookingConfirmationLocation"},"user_confirmation_confirmed":{"type":"boolean","const":true},"booking_terms_accepted":{"type":"boolean","const":true},"booking_terms_version":{"type":"string","minLength":8,"maxLength":240},"booking_terms_accepted_at":{"type":"string","format":"date-time"},"idempotency_key":{"type":"string","minLength":1,"maxLength":200}}},"ReschedulePublicBookingSuccess":{"type":"object","required":["ok","booking","booking_created","current_confirmation_active","provider_selected","availability_checked","rescheduled_at","idempotent_replay","safe_next_step"],"properties":{"ok":{"type":"boolean","const":true},"booking":{"$ref":"#/components/schemas/ConfirmedBooking"},"booking_created":{"type":"boolean","const":true},"current_confirmation_active":{"type":"boolean","const":true},"provider_selected":{"type":"boolean","const":true},"availability_checked":{"type":"boolean","const":true},"rescheduled_at":{"type":"string","format":"date-time"},"idempotent_replay":{"type":"boolean"},"notification_delivery":{"type":"object","additionalProperties":true},"safe_next_step":{"type":"string"}}},"CreateWebhookEndpoint":{"type":"object","additionalProperties":false,"required":["url","event_types"],"properties":{"url":{"type":"string","format":"uri","pattern":"^https://"},"event_types":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["booking.confirmed","booking.rescheduled","booking.cancelled","booking.provider_action_required"]}}}},"WebhookEndpoint":{"type":"object","required":["id","url","event_types","signing_key_id","enabled","created_at","updated_at"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"event_types":{"type":"array","items":{"type":"string","enum":["booking.confirmed","booking.rescheduled","booking.cancelled","booking.provider_action_required"]}},"signing_key_id":{"type":"string"},"enabled":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"WebhookEndpointList":{"type":"object","required":["ok","endpoints"],"properties":{"ok":{"type":"boolean","const":true},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"CreateWebhookEndpointSuccess":{"type":"object","required":["ok","endpoint","signing_secret","signing_secret_shown_once"],"properties":{"ok":{"type":"boolean","const":true},"endpoint":{"$ref":"#/components/schemas/WebhookEndpoint"},"signing_secret":{"type":"string","description":"Shown exactly once; store it as a secret."},"signing_secret_shown_once":{"type":"boolean","const":true}}},"DeleteWebhookEndpointSuccess":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean","const":true}}},"ReplayWebhookEventSuccess":{"type":"object","required":["ok","replay"],"properties":{"ok":{"type":"boolean","const":true},"replay":{"type":"object","required":["id","booking_id","event_type","status","created_at"],"properties":{"id":{"type":"string","format":"uuid"},"booking_id":{"type":"string"},"event_type":{"type":"string"},"status":{"type":"string","const":"pending"},"created_at":{"type":"string","format":"date-time"}}}}},"BookingLifecycleRecord":{"type":"object","required":["id","status","provider_id","provider_name","service_id","slot_start_at","slot_end_at","price_sek","currency","confirmed_at","terms_version"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["confirmed","cancelled"]},"provider_id":{"type":"string"},"provider_name":{"type":"string"},"service_id":{"type":"string"},"slot_start_at":{"type":"string","format":"date-time"},"slot_end_at":{"type":"string","format":"date-time"},"slot_label":{"type":"string"},"price_sek":{"type":"integer","minimum":0},"currency":{"type":"string","const":"SEK"},"confirmed_at":{"type":"string","format":"date-time"},"terms_version":{"type":"string"},"customer_confirmation_status":{"type":"string","enum":["sent","skipped","failed"]},"provider_confirmation_status":{"type":"string","enum":["sent","skipped","failed"]}}}},"parameters":{"BookingId":{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"The canonical booking ID returned by confirmation."}},"responses":{"Problem":{"description":"Machine-readable API problem with a stable code and recovery guidance.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://aune.ai/problems/booking_option_expired","title":"Booking option expired","status":409,"detail":"The selected booking option expired. Search again and ask the user to choose a fresh option.","instance":"/v1/bookings","code":"booking_option_expired","ok":false,"option_refresh_required":true,"safe_next_step":"Search fresh booking options and obtain a new explicit choice.","api_request_id":"00000000-0000-4000-8000-000000000401","trace_id":"0123456789abcdef0123456789abcdef","contract_version":"public_bookings_api_v1","server_time":"2026-07-10T10:16:00.000Z"}}}}}},"x-aune-agent-guidance":{"use_when":"The user wants to book or hand off a supported home service in Sweden for Plumbing/VVS, Electricians, Moving, Cleaning.","bookable_public_request_vertical_ids":["vvs","electrician","moving","cleaning"],"non_bookable_note":"Painting, carpentry, and gardening must not be submitted through the public request create endpoint unless live capabilities later mark them bookable.","do_not_claim":["Do not say a booking is confirmed unless Aune returns booking_created: true and booking.status: confirmed.","Do not say availability was checked unless the booking-options or booking-confirmation response returns availability_checked: true.","Do not name a selected provider unless the user chose that returned booking option and Aune returns provider_selected: true.","Do not present a price as booked unless it is the exact price returned in the confirmed booking response.","Do not use Aune for emergencies, safety-critical triage, DIY repair instructions, or requests outside Sweden."],"next_step":"Search booking options with postcodes before sending street addresses or customer contact data. Claim a confirmed booking only when confirmation returns booking_created:true and booking.status:confirmed. Otherwise follow the returned safe_next_step or use request capture as fallback.","docs":{"llms":"https://aune.ai/llms.txt","full":"https://aune.ai/llms-full.txt","use_aune":"https://aune.ai/ai/use-aune.md","examples":"https://aune.ai/ai/examples.md","mcp_quickstart":"https://aune.ai/ai/mcp-quickstart.md"}}}