{"description":"API-only payment orchestration service. Stateless SOA module with idempotent write APIs and multi-provider routing.","details":{"api_style":"REST JSON","auth":"Bearer JWT / Sanctum / debug","idempotency":"Idempotency-Key required on mutating endpoints","providers":["fawaterk","paymob","gidea","opay","fawry","kashier"]},"endpoints":{"DELETE /v1/payments/intents/{id}":"Cancel payment intent","GET /":"API landing page","GET /docs":"Swagger UI","GET /health":"Service health check","GET /openapi.yaml":"OpenAPI specification","GET /v1/payments/intents/{id}":"Get payment intent","GET /v1/payments/intents?order=":"List intents by order","GET /v1/payments/{id}/refunds":"List refunds","GET /v1/payments/{id}/refunds/{ref}":"Get refund by reference","GET /v1/webhooks/health":"Webhook health probe","POST /internal/dlq/{id}/replay":"Replay dead-letter event","POST /v1/payments/intents":"Create payment intent","POST /v1/payments/{id}/capture":"Capture authorized payment","POST /v1/payments/{id}/refunds":"Refund payment","POST /v1/webhooks/{provider}":"Provider webhook callback"},"health":{"checked_at":"2026-08-06T16:24:54.293265051Z","dependencies":{"app":{"name":"app","status":"up","required":true,"backend":"payment-service","latency_ms":0},"auth_db":{"name":"auth_db","status":"skipped","required":false,"backend":"none","latency_ms":0},"cache":{"name":"cache","status":"up","required":false,"backend":"memory","latency_ms":0},"event_bus":{"name":"event_bus","status":"up","required":false,"backend":"memory","latency_ms":0},"storage":{"name":"storage","status":"up","required":true,"backend":"memory","latency_ms":0}},"status":"healthy"},"links":{"docs":"http://pay.billq.co/docs","health":"http://pay.billq.co/health","openapi":"http://pay.billq.co/openapi.yaml","webhook_health":"http://pay.billq.co/v1/webhooks/health"},"name":"BillPay Payment Service API","service":"billpay-payment-service","status":"ok","version":"1.0.0"}
