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.
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"
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
walletId | string | Yes | The Wallet ID of your customer |
type | string | Yes | "IN" for incoming payment. Currently, only pay-ins are supported |
amount | long | Yes | The amount required to complete the payment |
currency | string | Yes | Currency code displayed to the user (e.g., "USD") |
expiryMinutes | integer | No | Optional time limit for payment. Defaults to 20 minutes |
embeddedPartnerWalletId | string | Yes | Wallet LSID to account for peg adjustment fees |
reference | string | Yes | A reference visible to the customer and merchant |
returnUrl | string | No | URL for redirection after payment |
customerId | string | No | The ID of your customer |
complianceDetails | object | No | Details required for compliance checks |
complianceDetails.requesterIpAddress | string | No | IP address of the requester |
complianceDetails.partyDetails | array | No | Parties involved in the transaction |
partyDetails[].type | string | No | Type of party (e.g., "ORIGINATOR") |
partyDetails[].entityType | string | No | "INDIVIDUAL" or "COMPANY" |
partyDetails[].firstName | string | No | First name |
partyDetails[].lastName | string | No | Last name |
partyDetails[].dateOfBirth | string | No | Format: YYYY-MM-DD |
partyDetails[].relationshipType | string | No | "SELF" or "THIRD_PARTY" |
partyDetails[].countryCode | string | No | ISO 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
}
}
redirectUrl from the responseUse the redirectUrl from the response to redirect the customer to the payment page.