Create Pay-In

To initiate a payment process, send the POST /api/v1/pay/summary request with the following body parameters. Remember to add the mandatory payInDetails object to return the cryptocurrency address required for the deposit on the correct blockchain.

{
  "merchantId": "00a4af9d-ad4b-42d5-bec4-b7a8c90161fe",
  "amount": "100",
  "expiryMinutes": "60",
  "currency": "USD",
  "returnUrl": "https://yourwebsitename.com",
  "reference": "6a4013c2-5fa9-4e2f-bef7-88c5570b6501",
  "type": "IN",
  "payInDetails": {
    "currency": "USDT",
    "protocol": "TRC20"
  },
}'

The details to be sent in this request are as follows:

ParameterTypeRequiredDescription
merchantIdstringYesMerchant ID indicating the wallet where the payment should settle. You can find it on the Portal, in Merchant Payments > Accounts > Merchant Details
amountintegerYesTotal amount to complete the payment
expiryMinutesintegerNoTime frame for the end-user to complete the payment. Defaults to 1440 minutes if not specified otherwise
currencystringYesCurrency code for displaying prices in the local currency. Can be any supported local currency and does not have to be a cryptocurrency
returnUrlstringNoURL to redirect the user back to the merchant's site from the payment flow
referencestringYesUnique reference for the payment, visible to you and your customer
typestringYesTransaction type. Select IN for incoming payments
payInDetails.currencystringNoCryptocurrency the end-user will use
payInDetails.protocolstringNoCryptocurrency protocol. Specify when payInDetails.currency uses a currency with multiple protocols. This helps identify the exact protocol to use

Upon successfully submitting the request, you'll receive a response like the following:

{
  "uuid": "fef4e99d-b41d-4efe-89fd-4fdf41f3f33f",
  "merchantDisplayName": "Metallica Inc",
  "merchantId": "00a4af9d-ad4b-42d5-bec4-b7a8c90161fe",
  "dateCreated": 1704807605678,
  "expiryDate": 1704808805678,
  "quoteExpiryDate": 1704808806000,
  "acceptanceExpiryDate": 1704807636000,
  "quoteStatus": "ACCEPTED",
  "reference": "a003cec4-abf5-42aa-baf0-43a1cc815536",
  "type": "IN",
  "subType": "merchantPayIn",
  "status": "PENDING",
  "displayCurrency": {
    "currency": "USD",
    "amount": 100,
    "actual": 0
  },
  "walletCurrency": {
    "currency": "EUR",
    "amount": 92.74,
    "actual": 0
  },
  "paidCurrency": {
    "currency": "USDT",
    "amount": 99.935377,
    "actual": 0
  },
  "feeCurrency": {
    "currency": "EUR",
    "amount": 0.93,
    "actual": 0
  },
  "displayRate": {
    "base": "USDT",
    "counter": "USD",
    "rate": 0.998867803322
  },
  "exchangeRate": {
    "base": "USDT",
    "counter": "EUR",
    "rate": 0.92635
  },
  "address": {
    "address": "TTwyxkKzenGBhVX2TsjYLVFfApEQ3hPXGc",
    "tag": null,
    "protocol": "TRC20",
    "uri": "TTwyxkKzenGBhVX2TsjYLVFfApEQ3hPXGc",
    "alternatives": []
  },
  "returnUrl": "https://yourwebsitename.com",
  "redirectUrl": "https://pay.sandbox.bvnk.com/payin?uuid=fef4e99d-b41d-4efe-89fd-4fdf41f3f33f",
  "transactions": [],
  "refund": null,
  "refunds": []
}

Key takeaways include the following:

  • address.address is the address to be shown to the end user so that they can make a deposit.
  • paidCurrency.amountis the total amount of the relevant currency that needs to be paid by the end user to complete the payment, and should be shown to the end user.
  • uuid is used to query the payment as needed.

This setup ensures a tailored payment experience, directly linking to the specified payment address. All Exchange rates are provided given that the payment currency is known at the time the payment is created.


What’s Next

After creating the payment, your next action is to display these details your end-user for them to complete their payment. Once shown, wait for the payment to fire off a number of webhooks to let you know it has occurred.