{"openapi":"3.1.0","info":{"title":"Mile High Locksmith service requests","version":"1.0.0","description":"A service request sent to the office for technician coordination."},"servers":[{"url":"https://www.denver-locksmith.net"}],"paths":{"/api/service-requests":{"get":{"operationId":"getLocksmithServiceInformation","summary":"Read services, contact information, hours, and online request availability.","responses":{"200":{"description":"Public business information and request availability."}}},"post":{"operationId":"sendLocksmithServiceRequest","summary":"Email a customer-authorized service request to the office.","description":"Send the customer’s problem, callback number, location and preferred timing to the office to arrange a technician. Save requestId and reuse it when retrying the same request. After success with state sent, open confirmationUrl in the customer’s browser to display the existing thank-you page. Do not open a confirmation page for an invalid or unconfirmed request.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"Same ID for retries of the same request."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string","enum":["general","locked-out","car-key-replacement","rekey-change-locks","lock-repair"]},"name":{"type":"string","minLength":1,"maxLength":120,"description":"Customer name."},"phone":{"type":"string","minLength":10,"maxLength":30,"description":"Customer callback number including area code."},"location":{"type":"string","minLength":1,"maxLength":150,"description":"City or ZIP code where help is needed."},"address":{"type":"string","maxLength":250},"timing":{"type":"string","maxLength":120,"description":"When the customer would like a technician to arrive."},"details":{"type":"string","maxLength":2000,"description":"Problem and any vehicle year, make, and model relevant to the request."},"contact":{"type":"string","enum":["phone","text","email"],"default":"phone"},"email":{"type":"string","maxLength":200,"description":"Required when contact is email."},"requestId":{"type":"string","format":"uuid","description":"Keep this ID unchanged when retrying the same request; create a new ID for a different request."}},"required":["service","name","phone","location"],"additionalProperties":false}}}},"responses":{"200":{"description":"Request emailed to the office; appointment not yet confirmed.","content":{"application/json":{"schema":{"type":"object","required":["success","state","message","appointmentConfirmed"],"properties":{"success":{"type":"boolean"},"state":{"type":"string","enum":["sent","invalid","not_confirmed"]},"message":{"type":"string"},"appointmentConfirmed":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"confirmationUrl":{"type":"string","description":"Relative confirmation-page URL, returned only after confirmed delivery."}}}}}},"403":{"description":"Submission origin rejected; not sent.","content":{"application/json":{"schema":{"type":"object","required":["success","state","message","appointmentConfirmed"],"properties":{"success":{"type":"boolean"},"state":{"type":"string","enum":["sent","invalid","not_confirmed"]},"message":{"type":"string"},"appointmentConfirmed":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"confirmationUrl":{"type":"string","description":"Relative confirmation-page URL, returned only after confirmed delivery."}}}}}},"422":{"description":"Invalid or incomplete request; not sent.","content":{"application/json":{"schema":{"type":"object","required":["success","state","message","appointmentConfirmed"],"properties":{"success":{"type":"boolean"},"state":{"type":"string","enum":["sent","invalid","not_confirmed"]},"message":{"type":"string"},"appointmentConfirmed":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"confirmationUrl":{"type":"string","description":"Relative confirmation-page URL, returned only after confirmed delivery."}}}}}},"503":{"description":"Delivery unavailable or not confirmed. Preserve requestId and do not claim success.","content":{"application/json":{"schema":{"type":"object","required":["success","state","message","appointmentConfirmed"],"properties":{"success":{"type":"boolean"},"state":{"type":"string","enum":["sent","invalid","not_confirmed"]},"message":{"type":"string"},"appointmentConfirmed":{"type":"boolean","const":false},"requestId":{"type":"string","format":"uuid"},"confirmationUrl":{"type":"string","description":"Relative confirmation-page URL, returned only after confirmed delivery."}}}}}}}}}}}