Gaming
Take player deposits, hold a spendable balance, and pay out winnings or refunds on demand. The flow mirrors debt settlement, money in, balance held, money out, but leans on the instant card rails.
Your app sends the customer's details; RAMFi runs KYC, opens the account, and returns a client record with Active status when verification passes.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| firstName | string | REQUIRED | Client's legal first name. | |
| lastName | string | REQUIRED | Client's legal last name. | |
| address | string | REQUIRED | Street address. | |
| city | string | REQUIRED | City. | |
| state | string | REQUIRED | State code. | |
| zip | string | REQUIRED | ZIP code. | |
| taxID | string | REQUIRED | SSN (or EIN for business accounts). | |
| dob | string (date) | REQUIRED | Date of birth (YYYY-MM-DD). | |
| clientID | string | REQUIRED | Your external identifier for this client. | |
| string | REQUIRED | Email address (validated). |
curl --request POST \
--url 'https://FQDN/api/FE/NewClient' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>' \
--header 'Content-Type: application/json' \
--data '{
"firstName": "string",
"lastName": "string",
"taxID": "string",
"clientID": "player-id",
"email": "user@example.com"
}'const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"firstName": "string",
"lastName": "string",
"taxID": "string",
"clientID": "player-id",
"email": "user@example.com"
})
};
fetch('https://FQDN/api/FE/NewClient', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/FE/NewClient"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>",
"Content-Type": "application/json"
}
payload = {
"firstName": "string",
"lastName": "string",
"taxID": "string",
"clientID": "player-id",
"email": "user@example.com"
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json()){
"id": "string",
"clientID": "player-id",
"accountStatus": "Active",
"email": "user@example.com"
}Active means the client is verified and can transact.- RAMFiTokenize & storeRAMFi returns cardId / saves bank
- 1
- RAMFiCredit player balanceRAMFi debits card / drafts bank
- 2
- RAMFiDisburse to playerRAMFi pushes funds out
- PlayerPlayer paidfunds on card / in bank
Show full interaction diagram
Player wallet lifecycle. App-lane boxes are API calls; RAMFi tokenizes, debits, credits, and disburses. Card rails are instant; ACH is the lower-cost alternative.
Pull a deposit from the player's card on file and credit the player's balance instantly.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| clientID | string | REQUIRED | The RAMFi clientID of the end user whose account will be credited. | |
| cardId | string | REQUIRED | The tokenized card ID returned from the Card Capture SDK or GetCardOnFile. Never pass raw card numbers. | |
| amount | number | REQUIRED | Transaction amount. | |
| externalReference | string | REQUIRED | Unique transaction ID from your system, used for reconciliation. Character limit not yet confirmed. | |
| currency | string | optional | ISO 4217 currency code. | |
| memo | string | optional | Optional descriptor. |
curl --request POST \
--url 'https://FQDN/api/FE/Card/PullFromCard' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>' \
--header 'Content-Type: application/json' \
--data '{
"clientID": "player-id",
"cardId": "card-token",
"amount": 50.00,
"externalReference": "dep-001"
}'const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"clientID": "player-id",
"cardId": "card-token",
"amount": 50.00,
"externalReference": "dep-001"
})
};
fetch('https://FQDN/api/FE/Card/PullFromCard', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/FE/Card/PullFromCard"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>",
"Content-Type": "application/json"
}
payload = {
"clientID": "player-id",
"cardId": "card-token",
"amount": 50.00,
"externalReference": "dep-001"
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json()){
"isSuccess": true,
"result": "tx-7001",
"errorMessage": null
}For lower-cost, non-instant funding, draft the player's linked bank (open banking) instead.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| clientID | string | REQUIRED | The client to fund. | |
| amount | number | REQUIRED | USD amount to draft via ACH. | |
| transactionDate | string (date) | optional | Date to initiate the ACH draft (YYYY-MM-DD). | |
| externalReference | string | REQUIRED | Your unique reconciliation key. |
curl --request POST \
--url 'https://FQDN/api/FE/AddClientFunds' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>' \
--header 'Content-Type: application/json' \
--data '{
"clientID": "player-id",
"amount": 50.00,
"transactionDate": "2026-01-15",
"externalReference": "dep-002"
}'const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"clientID": "player-id",
"amount": 50.00,
"transactionDate": "2026-01-15",
"externalReference": "dep-002"
})
};
fetch('https://FQDN/api/FE/AddClientFunds', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/FE/AddClientFunds"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>",
"Content-Type": "application/json"
}
payload = {
"clientID": "player-id",
"amount": 50.00,
"transactionDate": "2026-01-15",
"externalReference": "dep-002"
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json())6001Push winnings to the player's tokenized card.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| clientID | string | REQUIRED | The RAMFi clientID of the end user whose card will receive funds. | |
| cardId | string | REQUIRED | The tokenized card ID from the Card Capture SDK. | |
| amount | number | REQUIRED | Amount to send. | |
| externalReference | string | REQUIRED | Unique transaction ID from your system, used for reconciliation. Character limit not yet confirmed. | |
| currency | string | optional | ISO 4217 currency code. | |
| memo | string | optional | Optional descriptor. |
curl --request POST \
--url 'https://FQDN/api/FE/Card/PushToCard' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>' \
--header 'Content-Type: application/json' \
--data '{
"clientID": "player-id",
"cardId": "card-token",
"amount": 120.00,
"externalReference": "pay-001"
}'const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"clientID": "player-id",
"cardId": "card-token",
"amount": 120.00,
"externalReference": "pay-001"
})
};
fetch('https://FQDN/api/FE/Card/PushToCard', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/FE/Card/PushToCard"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>",
"Content-Type": "application/json"
}
payload = {
"clientID": "player-id",
"cardId": "card-token",
"amount": 120.00,
"externalReference": "pay-001"
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json()){
"isSuccess": true,
"result": "tx-7050",
"errorMessage": null
}Return funds to the player over the card rail (or use WithdrawClientFunds for ACH).
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| clientID | string | REQUIRED | The RAMFi clientID of the end user whose card will receive funds. | |
| cardId | string | REQUIRED | The tokenized card ID from the Card Capture SDK. | |
| amount | number | REQUIRED | Amount to send. | |
| externalReference | string | REQUIRED | Unique transaction ID from your system, used for reconciliation. Character limit not yet confirmed. | |
| currency | string | optional | ISO 4217 currency code. | |
| memo | string | optional | Optional descriptor. |
curl --request POST \
--url 'https://FQDN/api/FE/Card/PushToCard' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>' \
--header 'Content-Type: application/json' \
--data '{
"clientID": "player-id",
"cardId": "card-token",
"amount": 50.00,
"externalReference": "ref-001"
}'const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"clientID": "player-id",
"cardId": "card-token",
"amount": 50.00,
"externalReference": "ref-001"
})
};
fetch('https://FQDN/api/FE/Card/PushToCard', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/FE/Card/PushToCard"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>",
"Content-Type": "application/json"
}
payload = {
"clientID": "player-id",
"cardId": "card-token",
"amount": 50.00,
"externalReference": "ref-001"
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json()){
"isSuccess": true,
"result": "tx-7051",
"errorMessage": null
}externalReference on every movement for reconciliation via GET /Reporting/Transactions.cardId. PullFromCard and PushToCard operate on a tokenized cardId (never a raw PAN), retrieved via GetCardOnFile; raw card numbers never reach your app. Card endpoints are not yet enabled, confirm availability with RAMFi.