Off Ramp Hiding Receiving Address Page
Introduction:
This function allows merchant send crypto to ACH for selling and user enter bank information for fund received on ACH page.
Through this integration method, it is possible to hide the deposit address page, but it requires a successful ACH deposit notification. Please refer to the following diagram for the process:

Supported Token List
Note: Only support the following cryptocurrencies for this feature.
Crypto | Network |
---|---|
USDC | BSC |
USDT | BSC |
ETH | ETH |
USDC | ETH |
USDT | ETH |
MATIC | MATIC |
USDC | MATIC |
USDT | MATIC |
USDC | TRX |
USDT | TRX |
API Description
Merchant Create Order - Request Parameters
Parameter | Required | Description |
---|---|---|
appId | Y | Merchant application ID, eg:ahzxh0klegv1fzol |
crypto | Y | Cryptocurrency name, eg:USDT |
network | Y | Network, eg:ETH |
cryptoAmount | Y | Sold cryptocurrency amount |
fiat | Y | Fiat currency code, eg:USD |
country | Y | Country code, eg:US |
callbackUrl | Y | Callback URL for synchronizing order information with the merchant |
withdrawUrl | Y | URL to redirect back to the merchant after user click "Confirm" |
source | Y | Source. Default: 3. Uploading this field will hide the deposit address page |
type | Y | Type, eg:sell |
merchantOrderNo | Y | Merchant's custom order number, eg:1112957819622420480 |
showAddress | Y | Whether to display the address QR code. Optional: Y/N |
merchantName | Y | Merchant name |
urlType | Y | Can only be "app" or "web",representing the type of withdrawUrl the user will be redirected to |
Note:
If the
source
parameter is passed, the URL should be appended with #/sell-formUserInfo.This will directly navigate to the bank information filling page without a back button and menu bar.
If not passed, it will directly enter the sell coin homepage.
Bank Information Filling Page:

Request Example:
https://ramp.alchemypay.org?appId=ahzxh0klegv1fzol&crypto=ELF&network=ELF&fiat=USD&country=US&cryptoAmount=100&callbackUrl=https://localhost:9090/test/test&withdrawUrl=www.baidu.com&type=sell&source=3&urlType=web&merchantName=AELF&merchantOrderNo=2134545343544334&showAddress=N#/sell-formUserInfo
ACH Send Order Status Webhook
ACH will send order webhook to callbackUrl
after an order generate. Webhook will send when order status updated.
Path: callbackUrl
Body Parameters:
Parameter | Required | Description |
---|---|---|
orderNo | Y | Order number |
merchantOrderNo | N | Merchant order number |
crypto | Y | Cryptocurrency |
network | Y | Network |
cryptoPrice | N | Cryptocurrency price |
cryptoAmount | Y | Cryptocurrency quantity |
fiatAmount | N | Fiat currency quantity |
appId | Y | Merchant appId |
fiat | Y | Fiat currency code |
txHash | N | Transaction hash |
N | User email | |
status | Y | Order status: 1: Order created successfully 2: User coin deposit completed 3: Start payment 4: Payment successful 5: Payment failed 6: Refund successful 7: Order timeout |
address | Y | Coin deposit address |
cryptoActualAmount | N | Actual coin deposit quantity |
rampFee | N | Service fee |
receiptTime | N | Payment completed |
paymentType | Y | Payment method |
name | Y | User name |
card | N | Card number |
account | N | Account |
orderAddress | Y | Order details page URL |
signature | Y | Signature, refer to "Notification Signature Method" below |
Merchant Notification to ACH
Merchant send notification to ACH after user complete crypto deposit process.
Request Method: POST
Content Type: application/json
Request Path: https://api.alchemypay.org/webhooks/off/merchant
Request Parameters
Body Parameters:
Parameter | Required | Description |
---|---|---|
orderNo | Y | Order number |
crypto | Y | Cryptocurrency |
cryptoAmount | Y | Cryptocurrency quantity |
network | Y | Network |
txHash | Y | Transfer hash |
address | Y | ACH notification, the "address" in the parameters. |
appId | Y | Merchant appId |
signature | Y | Signature, refer to "Notification Signature Method" below |
Request Parameter Example:
{
"orderNo": "string",
"crypto": "string",
"cryptoAmount": "string",
"txHash": "string",
"network": "string",
"address": "string",
"appId": "string",
"sourceAddress": "string",
"signature": "string"
}
Response Parameters
Body Parameters:
Parameter | Required | Description |
---|---|---|
success | Y | boolean |
returnCode | string | |
returnMsg | Y | string |
extend | string | |
data | Y | object |
Response Example:
{
"success": true,
"returnCode": "string",
"returnMsg": "string",
"extend": "string",
"data": {}
}
Notification Signature Method
Concatenated parameters: appId
+appSecret
+orderNo
+crypto
+network
+address
Note
public class MerSignCheckUtil {
private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
private static String encode(String algorithm, String value) {
if (value == null) {
return null;
}
try {
MessageDigest messageDigest= MessageDigest.getInstance(algorithm);
messageDigest.update(value.getBytes());
return getFormattedText(messageDigest.digest());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static String getFormattedText(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
for (int j = 0; j < len; j++) {
buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
}
return buf.toString();
}
public static void main(String[] args) {
String appId = "";
String appSecret = "";
String crypto = "";
String orderNo = "";
String network = "";
String address = "";
String rawString = appId + appSecret + orderNo + crypto + network + address;
String sign = encode("sha1", rawString);
}
}
Note
Merchants can whitelist their Egress IP (for sending notifications to ACH) in the merchant dashboard, as shown in the screenshot below.
Updated 25 days ago