{"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://www.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."}],"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"}}}}}}},"/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"}}}}}}},"/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"}}}}}}},"/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"}}}}}}},"/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":"partner-moving-123","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"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Use `Authorization: Bearer <AUNE_PUBLIC_REQUESTS_API_TOKEN>`."},"auneRequestsToken":{"type":"apiKey","in":"header","name":"X-Aune-Requests-Token","description":"Alternative API token header."}},"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/ConfirmedBooking"},"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."}}}}},"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://www.aune.ai/llms.txt","full":"https://www.aune.ai/llms-full.txt","use_aune":"https://www.aune.ai/ai/use-aune.md","examples":"https://www.aune.ai/ai/examples.md","mcp_quickstart":"https://www.aune.ai/ai/mcp-quickstart.md"}}}