{"openapi":"3.1.0","info":{"title":"Harbour Row Stays (PAP Sandbox)","version":"1","description":"Room availability and rates, the guest's bookings, and changes to a booking A reference store for personal agents: nothing is charged and nothing ships. Every request carries a Session Token with the DPoP scheme and a DPoP proof (Personal Agent Protocol 4.3). Endpoints that change an order or booking return operations (operations extension v1, HTTP 202)."},"servers":[{"url":"https://stays.papsandbox.com"}],"paths":{"/poppy/availability":{"get":{"operationId":"availability","summary":"Rooms free for the dates, with the lowest total for each.","security":[{"dpop":[]}],"x-poppy-scope":null,"parameters":[{"name":"check_in","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"Arrival, YYYY-MM-DD."},{"name":"check_out","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"Departure, YYYY-MM-DD."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"invalid_token or invalid_dpop_proof, in WWW-Authenticate."}}}},"/poppy/rates":{"get":{"operationId":"rates","summary":"Every rate plan for a room and dates, with totals and cancellation terms.","security":[{"dpop":[]}],"x-poppy-scope":null,"parameters":[{"name":"check_in","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"Arrival, YYYY-MM-DD."},{"name":"check_out","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"Departure, YYYY-MM-DD."},{"name":"room_type","in":"query","required":true,"schema":{"type":"string"},"description":"A room_type from availability."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"invalid_token or invalid_dpop_proof, in WWW-Authenticate."}}}},"/poppy/bookings":{"get":{"operationId":"my_bookings","summary":"The signed-in guest's upcoming bookings.","security":[{"dpop":["poppy:read"]}],"x-poppy-scope":"poppy:read","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"invalid_token or invalid_dpop_proof, in WWW-Authenticate."},"403":{"description":"sign_in_required or insufficient_scope, in WWW-Authenticate."}}}},"/poppy/bookings/{booking_id}/changes":{"post":{"operationId":"change_booking","summary":"Propose a change to a booking: new dates, room or rate plan (add breakfast with rp_flex_bb). Returns HTTP 202 with an operation (operations extension v1); nothing changes until it is confirmed.","security":[{"dpop":["poppy:write"]}],"x-poppy-scope":"poppy:write","parameters":[{"name":"booking_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"check_in":{"type":"string","format":"date","description":"Arrival, YYYY-MM-DD."},"check_out":{"type":"string","format":"date","description":"Departure, YYYY-MM-DD."},"room_type":{"type":"string"},"rate_plan":{"type":"string","description":"A rate plan id from rates."}}}}}},"responses":{"202":{"description":"An operation with the proposed terms (operations extension v1). Confirm it at the operations endpoint after the User approves.","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"$ref":"#/components/schemas/Operation"}}}}}},"401":{"description":"invalid_token or invalid_dpop_proof, in WWW-Authenticate."},"403":{"description":"sign_in_required or insufficient_scope, in WWW-Authenticate."}}}}},"components":{"securitySchemes":{"dpop":{"type":"http","scheme":"DPoP","description":"A Session Token from the token endpoint, bound to the DPoP key (RFC 9449). Account scopes: poppy:read, poppy:write."}},"schemas":{"Operation":{"type":"object","required":["operation_id","revision","state","summary","confirmation","result"],"properties":{"operation_id":{"type":"string"},"revision":{"type":"integer"},"state":{"type":"string","enum":["proposed","in_progress","succeeded","failed","cancelled","expired"]},"summary":{"type":"string"},"terms":{"type":"object"},"expires_at":{"type":["string","null"]},"user_approval_required":{"type":"boolean"},"url":{"type":"string"},"confirmation":{"type":["object","null"]},"result":{"type":["object","null"]}}}}}}