{"openapi":"3.1.0","info":{"title":"Amazing Bungalow public accommodation and stay quotes","version":"1.0.0","description":"Read-only. No API key required. No reservations or payment creation. PHP; Asia/Manila stay dates. Quotes use the current website calculation and existing synchronized calendar, not an AI model. Unconfirmed fields are null, never zero. Public requests are limited to 30/minute per client per app instance; identical successful selections may be reused for 10 seconds. Calendar data must be no older than 45 minutes. Quotes expire in at most 5 minutes. No personal information in URLs. Client IP is derived using one trusted proxy hop. See /assistants for limitations."},"servers":[{"url":"/"}],"paths":{"/api/public/accommodations":{"get":{"summary":"List public villas, capacity and fact/booking URLs","responses":{"200":{"description":"Public catalog. No provider IDs or guest records."},"429":{"description":"Rate limited."},"503":{"description":"Catalog temporarily unavailable."}}}},"/api/public/accommodations/{villa}":{"get":{"summary":"Current public villa facts, owner policy text and calculation configuration","parameters":[{"name":"villa","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Facts. Missing information is null; never infer eligibility from absence."},"404":{"description":"Villa not found."}}}},"/api/public/quotes":{"get":{"summary":"Calculate a stay without reserving inventory","parameters":[{"name":"villa","in":"query","description":"Villa slug or property_id from the public catalog.","required":true,"schema":{"type":"string"}},{"name":"checkin","in":"query","description":"Check-in date in Asia/Manila; YYYY-MM-DD, not before today.","required":true,"schema":{"type":"string","format":"date"}},{"name":"checkout","in":"query","description":"Exclusive checkout date. 1–60 nights maximum.","required":true,"schema":{"type":"string","format":"date"}},{"name":"adults","in":"query","description":"Number of adults. At least one.","required":true,"schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"children","in":"query","description":"Children count. All adults plus children count toward capacity.","required":false,"schema":{"type":"integer","minimum":0,"maximum":50,"default":0}},{"name":"child_ages","in":"query","description":"One age 0–17 per child, comma-separated. Required for children, e.g. 1,8.","required":false,"schema":{"type":"string","pattern":"^([0-9]+(,[0-9]+)*)?$"}},{"name":"pets","in":"query","description":"Number of pets, not a yes/no flag.","required":false,"schema":{"type":"integer","minimum":0,"maximum":10,"default":0}},{"name":"pet_type","in":"query","description":"Required for pets; ask the customer. Current policies permit dog only.","required":false,"schema":{"type":"string","maxLength":30}},{"name":"pet_size","in":"query","description":"Required for pets; ask the customer. Current policies permit small only.","required":false,"schema":{"type":"string","maxLength":30}},{"name":"pet_potty_trained","in":"query","description":"Required for pets; true/false, obtained from customer.","required":false,"schema":{"type":"boolean"}},{"name":"pet_puppy","in":"query","description":"Required for pets; true/false, obtained from customer.","required":false,"schema":{"type":"boolean"}},{"name":"pet_rules_accepted","in":"query","description":"Customer accepts diaper/no-pool/no-bed rules in the current policy. Required for pets.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"quoted, unavailable, or confirmation_required. Only quoted has a confirmed total_stay_price.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StayQuote"}}}},"400":{"description":"invalid_input; invalid dates/counts, child ages missing, capacity exceeded or unknown parameters."},"404":{"description":"invalid_input; unknown villa."},"429":{"description":"rate_limited; honor Retry-After."},"503":{"description":"pricing_unavailable; missing/stale calendar, missing rates, database/provider failure, or busy service. Never substitute a starting price; send the customer to the booking page."}}}}},"components":{"schemas":{"StayQuote":{"type":"object","required":["status","available","currency","timezone","total_stay_price","quoted_at","expires_at","booking_url"],"properties":{"status":{"type":"string","enum":["quoted","unavailable","confirmation_required"]},"available":{"type":["boolean","null"],"description":"Full-stay availability, checkout exclusive. null means not verifiable."},"calendar_available":{"type":["boolean","null"],"description":"Inventory on every stay night plus imported calendar restrictions; not a guarantee of complete global booking eligibility."},"selection":{"type":"object","description":"Echo of normalized non-personal input selections."},"villa":{"type":"object","description":"Public slug, name and property_id."},"currency":{"const":"PHP"},"timezone":{"const":"Asia/Manila"},"quoted_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"},"calendar_as_of":{"type":["string","null"],"description":"Oldest calendar update for the requested stay."},"availability_scope":{"type":"string"},"stay_restrictions":{"type":"object","description":"verified, violations, updated_at. Checks arrival min_stay, closed_for_checkin, and checkout-date closed_for_checkout from the existing provider calendar sync."},"nights":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"available":{"type":"boolean"},"base_rate":{"type":["number","null"],"minimum":0},"guest_charge":{"type":["number","null"],"minimum":0},"rate":{"type":["number","null"],"minimum":0},"rate_source":{"type":"string"},"updated_at":{"type":["string","null"]}}}},"discounts":{"type":["array","null"],"description":"Best configured eligible stay-length percentage discount on accommodation only, not stacked. null means pricing cannot be verified.","items":{"type":"object","properties":{"label":{"type":"string"},"percent":{"type":"number"},"amount":{"type":["number","null"],"minimum":0}}}},"charges":{"type":"object","description":"accommodation, extra_guests, pets, mandatory_fees and mandatory_fees_complete. Quote total excludes refundable security deposit."},"calculated_website_subtotal":{"type":["number","null"],"minimum":0,"description":"Current legacy website amount, never a confirmed all-in total when policies conflict or fee certification is missing."},"total_stay_price":{"type":["number","null"],"minimum":0},"refundable_deposit":{"type":["object","null"],"description":"Separate amount/currency/refundable/due fields. Not a stay charge."},"amount_payable_now":{"type":["object","null"],"description":"amount, currency, due_date. null until total and payment terms are confirmed."},"balance":{"type":["object","null"],"description":"amount, currency, due_date. Manila local date."},"terms":{"type":["object","null"],"description":"Payment schedule from the current owner policy."},"unavailable_dates":{"type":"array","items":{"type":"string"}},"unknown_dates":{"type":"array","items":{"type":"string"}},"issues":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}},"limitations":{"type":"array","items":{"type":"string"}},"reserves_inventory":{"const":false},"booking_must_revalidate":{"const":true},"quote_url":{"type":"string"},"booking_url":{"type":"string"},"booking_notice":{"type":"string"}}}}}}