createRampClient
The five functions
ramp.createSession(input)
POST /api/partner/v0/sessions (create), GET /api/partner/v0/sessions/{sessionRef} (status).
ramp.attachPaneBridge(handlers)
PaneBridge with .close(), .sendZecSendResult(requestId, txid), .sendZecSendCancel(requestId, reason), .getStats().
ramp.getStatus(sessionRef, opts?)
{ statusTicket } explicitly if running more than 16 concurrent sessions or after a fresh client process.
ramp.restoreSession(saved)
Revalidates the full session and origin, restores the status ticket without a POST.ramp.parseReturnUrl(url)
null; only unparseable input throws InvalidReturnUrl.
ramp.isAllowedPaneUrl(url)
Returnsboolean. Checks against configured pane origins.
Bridge events (pane to host)
Envelope:{ v: 1, type, sessionRef, payload }
Host to pane replies
Transaction arrays: 1-32 individual 64-hex IDs. Evidence for reconciliation, not proof of settlement.
Send request payload
Session lifecycle
created -> opened -> user-active -> { settled | failed | expired | cancelled }
expired is reversible — keep the saved session and journal for late-deposit reconciliation.
Error codes
All SDK errors extendPspError. Branch on error.code, never on message text.
Versioning
0.x until pilot completes. PSP-v1 frozen at 0.1.0: additive changes only afterward. Breaking change = new envelope version (psp/v2). ESM, strictly typed, React-free. Targets React Native, Electron, browsers.