{"openapi":"3.1.0","info":{"title":"Dehuyz Gateway","description":"**Dehuyz Gateway** — Multi-tenant QRIS payment gateway via BRI Merchant.\n\nGenerate QRIS dinamis, deteksi pembayaran real-time (polling 2s ke BRI), kirim webhook bertanda HMAC-SHA256.\n\nAuth: `Authorization: Bearer sk_live_...` atau `sk_test_...`.\n\nIdempotency: kirim `external_id` unik per request — duplicate calls return invoice yang sama.","contact":{"name":"Dehuyz","url":"https://github.com/Dehuyz1/qris-gateway"},"license":{"name":"Private"},"version":"1.0"},"paths":{"/api/v1/invoices":{"post":{"summary":"Create Invoice","operationId":"create_invoice_api_v1_invoices_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInvoiceReq"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invoices/{invoice_id}":{"get":{"summary":"Get Invoice","operationId":"get_invoice_api_v1_invoices__invoice_id__get","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invoices/{invoice_id}/cancel":{"post":{"summary":"Cancel Invoice","operationId":"cancel_invoice_api_v1_invoices__invoice_id__cancel_post","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/health":{"get":{"summary":"Health","operationId":"health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}}}}}}},"components":{"schemas":{"CreateInvoiceReq":{"properties":{"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount","description":"Nominal dalam Rupiah"},"description":{"type":"string","maxLength":256,"title":"Description","default":""},"external_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"External Id"},"metadata":{"type":"object","title":"Metadata"}},"type":"object","required":["amount"],"title":"CreateInvoiceReq"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthOut":{"properties":{"status":{"type":"string","title":"Status"},"bri_session":{"type":"string","title":"Bri Session"},"active_monitors":{"type":"integer","title":"Active Monitors"},"pending_invoices":{"type":"integer","title":"Pending Invoices"},"uptime_seconds":{"type":"number","title":"Uptime Seconds"}},"type":"object","required":["status","bri_session","active_monitors","pending_invoices","uptime_seconds"],"title":"HealthOut"},"InvoiceOut":{"properties":{"invoice_id":{"type":"string","title":"Invoice Id"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"status":{"type":"string","title":"Status"},"amount":{"type":"integer","title":"Amount"},"description":{"type":"string","title":"Description"},"refnum_bri":{"type":"string","title":"Refnum Bri"},"tracenum_bri":{"type":"string","title":"Tracenum Bri"},"qr_string":{"type":"string","title":"Qr String"},"qr_image":{"type":"string","title":"Qr Image"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","title":"Created At"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid At"},"metadata":{"type":"object","title":"Metadata","default":{}}},"type":"object","required":["invoice_id","external_id","status","amount","description","refnum_bri","tracenum_bri","qr_string","qr_image","expires_at","created_at","paid_at"],"title":"InvoiceOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"Public API","description":"Endpoint untuk customer integrator (Bearer API key)."},{"name":"Health","description":"Health checks."}]}