Skip to main content

Accept Stablecoin Pay-in with 1:1 Peg

This feature is a part of Payment Links product and offers customers a 1:1 exchange rate for Stablecoin to USD incoming payments. The stablecoin amount is automatically adjusted to maintain parity with the display currency, ensuring customers receive the exact equivalent regardless of market fluctuations. Any necessary adjustments are handled as fees charged to a specified Partner wallet.

🚧 If you're a Merchant

Contact your Account Manager to enable 1:1 stablecoin peg.

To create a payment with a 1:1 peg, send the POST /v1/pay/summary request with the following body parameters.

To add custom metadata, include a top-level JSON object with the key metadata to the request. The metadata will be associated with the payment and added to the webhook events related to this payment.

{
"walletId": "{{wallet_id}}",
"type": "IN",
"amount": 100,
"currency": "USD",
"expiryMinutes": 30,
"embeddedPartnerWalletId": "a:25021382554759:6kmtunl:1",
"reference": "EmbeddedPegTest3",
"returnUrl": "https://your-url-here.com/status",
"customerId": "ba388054-4512-441e-a9c4-cbe9b0fe033a",
"complianceDetails": {
"requesterIpAddress": "77.71.188.87",
"partyDetails": [
{
"type": "ORIGINATOR",
"entityType": "INDIVIDUAL",
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1990-10-25",
"relationshipType": "THIRD_PARTY",
"countryCode": "UK"
}
]
}
}
{
"walletId": "{{wallet_id}}",
"type": "IN",
"amount": 100,
"currency": "USD",
"expiryMinutes": 30,
"embeddedPartnerWalletId": "a:25021382554759:6kmtunl:1",
"reference": "EmbeddedPegTest3",
"returnUrl": "https://your-url-here.com/status",
"customerId": "ba388054-4512-441e-a9c4-cbe9b0fe033a",
"complianceDetails": {
"requesterIpAddress": "77.71.188.87",
"partyDetails": [
{
"type": "ORIGINATOR",
"entityType": "INDIVIDUAL",
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1990-10-25",
"relationshipType": "THIRD_PARTY",
"countryCode": "UK"
}
]
},
"metadata": {
"orderId": "PO-2025-002",
"internalUserId": "user-789",
"serviceType": "premium"
}
}
ParameterTypeRequiredDescription
walletIdstringYesThe Wallet ID of your customer
typestringYes"IN" for incoming payment. Currently, only pay-ins are supported
amountlongYesThe amount required to complete the payment
currencystringYesCurrency code displayed to the user (e.g., "USD")
expiryMinutesintegerNoOptional time limit for payment. Defaults to 20 minutes
embeddedPartnerWalletIdstringYesWallet LSID to account for peg adjustment fees
referencestringYesA reference visible to the customer and merchant
returnUrlstringNoURL for redirection after payment
customerIdstringNoThe ID of your customer
complianceDetailsobjectNoDetails required for compliance checks
complianceDetails.requesterIpAddressstringNoIP address of the requester
complianceDetails.partyDetailsarrayNoParties involved in the transaction
partyDetails[].typestringNoType of party (e.g., "ORIGINATOR")
partyDetails[].entityTypestringNo"INDIVIDUAL" or "COMPANY"
partyDetails[].firstNamestringNoFirst name
partyDetails[].lastNamestringNoLast name
partyDetails[].dateOfBirthstringNoFormat: YYYY-MM-DD
partyDetails[].relationshipTypestringNo"SELF" or "THIRD_PARTY"
partyDetails[].countryCodestringNoISO 3166-1 alpha-2 code (e.g., "UK")

After a 1:1 pegged payment has been received successfully, you'll receive a response similar to the following. Note the pegStablecoinDetails and pegged fields.

{
"source": "payment",
"event": "statusChanged",
"data": {
"uuid": "1f718f59-4f44-420b-9211-a354f4f0d8ef",
"merchantDisplayName": "ach test",
"merchantId": "5c91a2c9-1cb7-4af7-a5d9-03f997c647e5",
"dateCreated": 1748507102000,
"expiryDate": 1748508902000,
"quoteExpiryDate": 1748508902000,
"acceptanceExpiryDate": 1748507231000,
"quoteStatus": "ACCEPTED",
"reference": "EmbeddedPegTest1",
"type": "IN",
"subType": "merchantPayIn",
"status": "COMPLETE",
"displayCurrency": {
"currency": "USD",
"amount": 100,
"actual": 50
},
"walletCurrency": {
"currency": "USD",
"amount": 100,
"actual": 50
},
"paidCurrency": {
"currency": "USDC",
"amount": 200,
"actual": 100
},
"feeCurrency": {
"currency": "USD",
"amount": 1,
"actual": 1
},
"networkFeeCurrency": {
"currency": null,
"amount": 0,
"actual": 0
},
"displayRate": {
"base": "USDC",
"counter": "USD",
"rate": 0.5
},
"exchangeRate": {
"base": "USDC",
"counter": "USD",
"rate": 0.5
},
"address": {
"address": "0x47f622a092d208a6ecb1432dd4a0696c557b2a53",
"tag": null,
"protocol": "ERC20",
"uri": "ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48/transfer?address=0x47f622a092d208a6ecb1432dd4a0696c557b2a53&uint256=2E+8",
"alternatives": []
},
"returnUrl": "https://your-url-here.com/status",
"redirectUrl": "https://pay.sandbox.bvnk.com/payin/1f718f59-4f44-420b-9211-a354f4f0d8ef",
"transactions": [
{
"dateCreated": 1748507322000,
"dateConfirmed": 1748507372000,
"hash": "0xa8522a3bba06edf5de248082cbc65b03a10fda2b655bea5e0abd7e7dbb8512e9",
"amount": 100,
"networkFeeCurrency": "USDC",
"networkFeeAmount": 0.000086,
"sources": [
"0xa7d78498f7010e8ffac098d0b3a208c46896e00d"
],
"displayRate": {
"base": "USDC",
"counter": "USD",
"rate": 0.5
},
"exchangeRate": {
"base": "USDC",
"counter": "USD",
"rate": 0.5
},
"protocol": "ERC20",
"isOnHold": false
}
],
"refund": null,
"refunds": [],
"currencyOptions": null,
"flow": null,
"twoStep": false,
"metadata": {},
"customerId": "ba388054-4512-441e-a9c4-cbe9b0fe033a",
"pegStablecoinDetails": {
"paidCurrency": {
"currency": "USDC",
"amount": 100,
"actual": 100
},
"pegRateAdjustmentFee": {
"currency": "USD",
"amount": -50,
"actual": -50
},
"exchangeRate": {
"base": "USDC",
"counter": "USD",
"rate": 1
}
},
"pegged": true
}
}
📘 Use the redirectUrl from the response

Use the redirectUrl from the response to redirect the customer to the payment page.