Generate a Virtual Account

Alfred’s virtual accounts are local depository accounts that allow businesses to collect payments in local currencies across Latin America. These accounts provide fast, transparent, and compliant settlement rails — enabling businesses to operate locally without setting up local entities.

Once you have created a customer, the moment they complete their KYC and are approved - a virtual account will automatically be generated in the available geographies. Once approved, you can consult to GET Retrieve Virtual Account with the customerID . This will consult the Virtual account information generated for that customer.

In order to receive deposits into alfred's generated virtual accounts you must register a "liquidation address,” this is a permanent payment route which ties an alfred Virtual account to a blockchain address. If the destination payment rail is any of our supported chains, the funds are promptly sent upon receipt.

Virtual Account Creation

To create a virtual account, the onboarding process must be completed by creating the customer profile and then completing the KYC (Know Your Customer) process, either via API or in-frame. Once the customer has successfully completed KYC verification (status: completed), the system will proceed to create the associated virtual account.

Virtual Account Access

It is important to note that the virtual account will only be available if the customer has successfully completed the account creation process. The first time the customer accesses their virtual account, the CVU and Alias ​​fields will be displayed. The alias will be available for use after a maximum of 24 hours from the virtual account creation date.

Virtual Account example in Argentina:

curl --location 'https://penny-api-restricted-dev.alfredpay.io/api/v1/third-party-service/penny/virtual-account/6e3dd476-1ea0-458d-9394-e4e99d16d51c' \
--header 'Content-Type: application/json' \
--header 'accept: /' \
--header 'api-key: ***' \
--header 'api-secret: ***'
{
  "id": 115,
  "CVU":1234567890123456789012 // 22 Digit CVU
	"accountId": 2,
}
{
  "id": 115,
  "Clabe":1234567890123456789012 // 18 Digit CLABE
	"accountId": 2,
}

Create a New Liquidation Address

curl --request POST \  
  \--url https://penny-api-restricted-dev.alfredpay.io/api/v1/third-party-service/penny/liquidation-addresses/d4c64bf5-f373-4d8a-afe9-98a66f084787 \
  \--header 'Content-Type: application/json' \
  \--header 'accept: */*' \
  \--header 'api-key: alfredpay.3kievYX/8Np29gkoTt~9NhhwhksoaoDt' \
  \--header 'api-secret: Fk/Dlo48b6nP4~Ez-+20T_xc8+9GIhu+' \
  \--data '{
   "chain": "XLM",
   "currency": "USDC",
   "address": "GBLJYDV5E2DRB5X4JG3DVOG3I2BUJ2UPVFBPNLYVDNVGYEER2ZWIPRNE",
   "default": true,
   "memo": "TRANSACTION_001"
}'

Sample Response

{  
  "id": "f4991dbf-2a58-4246-9576-aa49c99d435b",
  "chain": "XLM",
  "currency": "USDC",
  "address": "GBLJYDV5E2DRB5X4JG3DVOG3I2BUJ2UPVFBPNLYVDNVGYEER2ZWIPRNE",
  "default": true,
  "memo": "TRANSACTION_001",
  "createdAt": "2025-07-29T16:21:03.210Z"
}

Example Request

curl --location 'https://penny-api-restricted-dev.alfredpay.io/api/v1/third-party-service/penny/virtual-account/AR/347ce7ea-6b3a-4bc1-b2f0-4abfb6fcc574'
--header 'api-key: **********************'
--header 'api-secret: **********************'

Initial response (account has been created):

{
   "customerId":"347ce7ea-6b3a-4bc1-b2f0-4abfb6fcc574",
   "country":"AR",
   "cvu":"0000058103298983456365",
   "alias":"blanco.lobo.352",
   "accountholder":"Martin Smith"
}

Response after 24 hours:

{
"customerId": "347ce7ea-6b3a-4bc1-b2f0-4abfb6fcc574",
"country": "AR",
"cvu": "0000058103298983456365",
"alias": "BlancoLobo",
"accountholder": "Martin Smith"
}

Error Case:

{
   "errorCode":111415,
   "errorMessage":"Customer not found"
}

Updating the virtual account alias

The virtual account alias can be updated using a PUT request. Once the update is complete, the new alias will be reflected within a maximum of 24 hours.

Request example (cURL):

curl --location --request PUT 'https://penny-api-restricted-dev.alfredpay.io/api/v1/third-party-service/penny/virtual-account/alias-update' \
--header 'Content-Type: application/json' \
--header 'api-key: *********************' \
--header 'api-secret: *********************' \
--data '{
"customerId": "347ce7ea-6b3a-4bc1-b2f0-4abfb6fcc574",
"alias": "my.alias-123"
}'

Error case:

{
   "errorCode":111415,
   "errorMessage":"Customer not found"
},
{
    "errorCode": 110002,
    "errorMessage": "Invalid field(s)",
    "errorMetadata": {
        "fields": [
            "alias"
        ],
        "message": "Alias can only be changed after 24 hours of user creation"
    }
}