{"openapi":"3.1.0","info":{"title":"Tingg Middleware","version":"0.1.0","description":"Multi-tenant Tingg payment middleware for Sankofa Marketplace deployments."},"servers":[{"url":"https://cbsgroup.sankofa.nexus"}],"paths":{"/healthz":{"get":{"summary":"Health check","responses":{"200":{"description":"OK"}}}},"/readyz":{"get":{"summary":"Readiness check","responses":{"200":{"description":"Ready"}}}},"/metrics":{"get":{"summary":"Prometheus-style metrics","responses":{"200":{"description":"Metrics"}}}},"/v1/admin/tenants":{"get":{"summary":"List tenants","security":[{"adminApiKey":[]}],"responses":{"200":{"description":"Tenant list"}}},"post":{"summary":"Create or update tenant","security":[{"adminApiKey":[]}],"responses":{"200":{"description":"Saved"}}}},"/v1/admin/tenants/{tenantId}/rotate-credentials":{"post":{"summary":"Rotate tenant Tingg or callback credentials","security":[{"adminApiKey":[]}],"responses":{"200":{"description":"Rotated"}}}},"/v1/admin/tenants/{tenantId}/sandbox-proof":{"post":{"summary":"Run a Tingg sandbox proof flow and return proof artifacts","description":"Creates a checkout-charge request, runs the Tingg sandbox simulation endpoint, polls payment status, and returns an evidence bundle.","security":[{"adminApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["merchantTransactionId","requestAmount","msisdn","customerFirstName","customerLastName","customerEmail","accountNumber"],"properties":{"merchantTransactionId":{"type":"string"},"requestAmount":{"type":"number"},"msisdn":{"type":"string"},"customerFirstName":{"type":"string"},"customerLastName":{"type":"string"},"customerEmail":{"type":"string","format":"email"},"accountNumber":{"type":"string"},"narration":{"type":"string"},"countryCode":{"type":"string"},"currencyCode":{"type":"string"},"paymentOptionCode":{"type":"string"},"pollIntervalMs":{"type":"integer","minimum":1,"maximum":60000,"default":1000},"pollTimeoutMs":{"type":"integer","minimum":1,"maximum":300000,"default":30000}}}}}},"responses":{"200":{"description":"Proof bundle"}}}},"/v1/marketplace/install":{"post":{"summary":"Provision a tenant from a signed marketplace install request","security":[{"marketplaceSignature":[]}],"responses":{"200":{"description":"Installed"}}}},"/v1/marketplace/uninstall":{"post":{"summary":"Remove or disable a tenant from a signed marketplace uninstall request","security":[{"marketplaceSignature":[]}],"responses":{"200":{"description":"Uninstalled"}}}},"/v1/marketplace/reinstall":{"post":{"summary":"Rotate or replace an existing tenant from a signed marketplace reinstall request","security":[{"marketplaceSignature":[]}],"responses":{"200":{"description":"Reinstalled"}}}},"/v1/tenants/{tenantId}/payments":{"post":{"summary":"Create a Tingg checkout request","responses":{"200":{"description":"Created"}}}},"/v1/tenants/{tenantId}/payments/{merchantTransactionId}/status":{"get":{"summary":"Query Tingg payment status","responses":{"200":{"description":"Status"}}}},"/v1/tenants/{tenantId}/payments/{merchantTransactionId}/refund":{"post":{"summary":"Initiate Tingg refund","responses":{"200":{"description":"Refund queued"}}}},"/v1/tenants/{tenantId}/payments/{merchantTransactionId}/acknowledge":{"post":{"summary":"Acknowledge Tingg payment","responses":{"200":{"description":"Acknowledged"}}}},"/v1/webhooks/tingg/{tenantId}":{"post":{"summary":"Tingg payment callback","description":"Accepts Tingg webhook callbacks. Tenant configuration may require bearer auth or basic auth.","security":[{"bearerAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"Accepted"}}}}},"components":{"securitySchemes":{"adminApiKey":{"type":"apiKey","in":"header","name":"X-Admin-Api-Key"},"marketplaceSignature":{"type":"apiKey","in":"header","name":"X-Sankofa-Signature"},"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"basicAuth":{"type":"http","scheme":"basic"}}}}