Deposits
Flow
create session → show deposit address → user pays → DEPOSIT webhook → you credit1. Create a session
curl -X POST https://api.abstrapay.com/session/create \
-H "Authorization: Bearer <OPERATOR_SECRET_KEY>" -H "Content-Type: application/json" \
-d '{ "externalUserId": "user-123", "lang": "en", "platformFiatCurrency": "USD", "userBalance": "0" }'
# → { "status": "success", "message": "...", "data": { "url": "https://widget.abstrapay.com/?sid=<SESSION_ID>" } }Required: externalUserId, lang, platformFiatCurrency, userBalance (string, e.g. "0"). Optional: email (forwarded to KYC-requiring providers).
externalUserId is your user id; it links every deposit/withdrawal back to the user.
2. Embed the deposit widget — drop the url returned in step 1 into an <iframe>; it drives the entire deposit flow (network/token pick, address, QR, live status):
<iframe
src="https://widget.abstrapay.com/?sid=<SESSION_ID>"
width="420" height="640" allow="clipboard-write">
</iframe>Use the exact data.url from /session/create. Brand it to your look with a custom theme created in your panel, then append &theme=<slug>. There are no embedding restrictions — see operator-demo.abstrapay.com for a live working embed.
3. On confirmation you receive a signed DEPOSIT webhook → verify it, credit amountInDollar to externalUserId.
Missed a deposit? Very rarely a payment may not be auto-detected (an unusual token route, a chain hiccup, a user sending to the wrong network, etc.). If a user insists they paid but wasn't credited, get their transaction hash and send it to us (or your admin enters it in the panel — see Management Panel). We verify it on-chain and replay it as a manual deposit, which fires the same signed DEPOSIT webhook — so you credit the user exactly as you would for any other deposit. No special handling on your side.