Deposit & Withdraw
Who it's for: Users topping up or cashing out their cGHS balance via mobile money or bank transfer, and developers integrating deposit and withdrawal flows into their apps. Why it matters: Moving money on and off chain is as simple as a mobile money transfer — users pay in GHS through familiar channels and receive spendable cGHS immediately on confirmation.
cGHS is minted when a user deposits fiat via Transakt (mobile money / bank transfer gateway) and burned on redemption. The flow is two-step: initiate the payment, then confirm/mint once the payment is verified.
POST /deposit — Initiate Fiat Deposit
Starts a Transakt payment collection. Returns a Transakt reference the user pays into.
Request{
"amount": "100.00",
"channel": "mobile_money",
"phoneNumber": "+233241234567",
"userAddress": "0xabc..."
}| Field | Notes |
|---|---|
amount | Fiat amount (GHS, human-readable) |
channel | "mobile_money" or "bank" |
phoneNumber | Mobile money number (with country code) |
userAddress | User's wallet address to receive cGHS |
{
"success": true,
"depositId": "d1-uuid",
"amountGHS": "100.00",
"transaktRef": "TRX-123456",
"transaktError": null
}POST /deposit/confirm — Confirm & Mint
Called after Transakt payment is verified (or triggered by the Transakt webhook automatically). Mints cGHS on-chain.
Request — either by deposit ID:
{ "depositId": "d1-uuid" }Or by address + amount (manual override):
{ "amount": "100.00", "userAddress": "0xabc..." }{
"success": true,
"depositId": "d1-uuid",
"proofHash": "0xproofhash...",
"txId": "tx-uuid"
}GET /deposit/:id — Deposit Status
{
"depositId": "d1-uuid",
"userAddress": "0xabc...",
"amountGHS": "100.00",
"status": "complete",
"transaktRef": "TRX-123456",
"txId": "tx-uuid",
"txHash": "0xdeadbeef...",
"createdAt": "2026-03-19T10:00:00Z"
}POST /withdraw — Withdraw (Burn cGHS)
Burns cGHS and triggers a Transakt payout to the user's bank/mobile money.
Request{
"userAddress": "0xabc...",
"amount": "50000000",
"channel": "mobile_money",
"receiver": "+233241234567"
}amount is in base units (6 decimals) — 50000000 = 50 cGHS.
{
"success": true,
"withdrawId": "d1-uuid",
"amountGHS": "50.00",
"userAddress": "0xabc...",
"receiver": "+233241234567",
"txId": "tx-uuid"
}GET /withdraw/:id — Withdrawal Status
{
"withdrawId": "d1-uuid",
"userAddress": "0xabc...",
"amountGHS": "50.00",
"receiver": "+233241234567",
"status": "complete",
"transaktRef": "TRX-789012",
"txId": "tx-uuid",
"txHash": "0xdeadbeef...",
"createdAt": "2026-03-19T10:05:00Z"
}Webhooks
| Path | Sender | Purpose |
|---|---|---|
POST /webhook/transakt | Transakt | Payment confirmed → triggers mint |
POST /webhook/shika | Shika Wallet | On-chain tx confirmed → updates status |