Off Ramp Hiding Receiving Address Page
Introduction:
Before integrate Off Ramp Hiding Receiving Address Page, please contact technical support team for configuration.
- This function allows merchant send crypto to ACH for selling and user enter bank information for fund received on ACH page.
- Needs to send the exact crypto amount specified in the order. Please take the network fee into consideration. We recommend setting a limit on the decimal precision to avoid withdrawal failures caused by minor differences.
- User is required enter email address and login on Alchemy Pay page.
- Provide all sever IP for whitelist.Any changes must be reported to ACH in advance.
- After transfer crypto, please send notification to Alchemy Pay.
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 |
| timestamp | Y | Thirteen-digit timestamp |
| sign | Y | For the generation rules of the sign, please refer to this Click Here .URL encoding is required when concatenating to the request URL. |
| 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 | Follow the ISO 3166-1 alpha-2 standard. The country code corresponding to the fiat currency. Example: fiat: EUR → country: DE fiat: USD → country: 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
sourceparameter 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-formUserInfoACH 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 14 days ago