{"openapi":"3.0.3","info":{"title":"sham-pay API","version":"1.0.0","description":"Merchant payment requests. Amounts are decimal strings. Authentication and payment verification happen server-side."},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer"}},"schemas":{}},"paths":{"/health/live":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/health/ready":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/openapi.json":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/auth/state":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/auth/setup":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":200},"password":{"type":"string","minLength":12,"maxLength":128}},"required":["email","password"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/auth/login":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":200},"password":{"type":"string","minLength":12,"maxLength":128}},"required":["email","password"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/auth/logout":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/auth/password":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"currentPassword":{"type":"string","minLength":12,"maxLength":128},"newPassword":{"type":"string","minLength":12,"maxLength":128}},"required":["currentPassword","newPassword"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/admin/tenants":{"get":{"responses":{"200":{"description":"Default Response"}}},"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"email":{"type":"string","format":"email","maxLength":200},"password":{"type":"string","minLength":12,"maxLength":128},"status":{"type":"string","enum":["active","suspended"]},"expires":{"type":"integer","minimum":1},"quota":{"type":"integer","minimum":1,"maximum":1000000},"fee":{"type":"string","maxLength":20,"pattern":"^(|[0-9]{1,8}(\\.[0-9]{1,2})?)$"},"feeCurrency":{"type":"string","enum":["USD","SYP","EUR"]}},"required":["name","email","password","expires","quota","fee","feeCurrency"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/admin/summary":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/admin/tenants/{id}":{"patch":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["active","suspended"]},"expires":{"type":"integer","minimum":1},"quota":{"type":"integer","minimum":1,"maximum":1000000},"fee":{"type":"string","maxLength":20,"pattern":"^(|[0-9]{1,8}(\\.[0-9]{1,2})?)$"},"feeCurrency":{"type":"string","enum":["USD","SYP","EUR"]}},"required":["status","expires","quota","fee","feeCurrency"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/admin/emergency/wipe-links":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"string","minLength":1,"maxLength":100}},"required":["confirm"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/admin/audit":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/merchant/summary":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/merchant/link":{"get":{"responses":{"200":{"description":"Default Response"}}},"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}},"delete":{"responses":{"200":{"description":"Default Response"}}}},"/merchant/keys":{"get":{"responses":{"200":{"description":"Default Response"}}},"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/merchant/keys/{id}":{"delete":{"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/merchant/webhook":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":1000,"format":"uri"}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/merchant/deliveries":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/merchant/deliveries/{id}/retry":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/merchant/orders":{"get":{"responses":{"200":{"description":"Default Response"}}},"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reference":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":100},"amount":{"type":"string","pattern":"^\\d{1,10}(\\.\\d{1,2})?$"},"currency":{"type":"string","enum":["SYP","USD","EUR"]},"returnUrl":{"type":"string","minLength":1,"maxLength":500}},"required":["reference","title","amount","currency"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/checkout/{id}":{"get":{"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/checkout/{id}/qr":{"get":{"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/checkout/{id}/claim":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transactionId":{"type":"string","pattern":"^\\d{1,20}$"}},"required":["transactionId"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/payments":{"post":{"summary":"Create an idempotent 30-minute payment request","tags":["Merchant API"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reference":{"type":"string","minLength":1,"maxLength":100},"title":{"type":"string","minLength":1,"maxLength":100},"amount":{"type":"string","pattern":"^\\d{1,10}(\\.\\d{1,2})?$"},"currency":{"type":"string","enum":["SYP","USD","EUR"]},"returnUrl":{"type":"string","minLength":1,"maxLength":500}},"required":["reference","title","amount","currency"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":100},"in":"header","name":"idempotency-key","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response"}}}},"/v1/payments/{id}":{"get":{"summary":"Read a payment belonging to the authenticated merchant","tags":["Merchant API"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response"}}}},"/v1/account":{"get":{"summary":"Subscription and connection status","tags":["Merchant API"],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response"}}}},"/merchant/demo":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/demo-api/{id}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/demo-api/{id}/orders":{"post":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["attempt"],"properties":{"attempt":{"type":"string","pattern":"^[a-zA-Z0-9_-]{16,100}$"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/demo-orders/{id}":{"get":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/demo-webhook/{id}":{"post":{"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}}},"servers":[{"url":"https://sham-pay.169.58.63.201.sslip.io"}]}