Create Virtual Account
curl --request POST \
--url https://test-api-kore.kravata.co/api/v1/virtual-account \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Virtual Account USD",
"type": "VIRTUAL_ACCOUNT",
"destinationAddress": "0x1234567890abcdef1234567890abcdef12345678",
"currency": "USD",
"sourceRails": "ach",
"destinationToken": "usdc",
"destinationNetwork": "polygon",
"customerType": "INDIVIDUAL",
"bankId": null,
"bankName": null,
"accountMetadata": []
}
'import requests
url = "https://test-api-kore.kravata.co/api/v1/virtual-account"
payload = {
"name": "Virtual Account USD",
"type": "VIRTUAL_ACCOUNT",
"destinationAddress": "0x1234567890abcdef1234567890abcdef12345678",
"currency": "USD",
"sourceRails": "ach",
"destinationToken": "usdc",
"destinationNetwork": "polygon",
"customerType": "INDIVIDUAL",
"bankId": None,
"bankName": None,
"accountMetadata": []
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Virtual Account USD',
type: 'VIRTUAL_ACCOUNT',
destinationAddress: '0x1234567890abcdef1234567890abcdef12345678',
currency: 'USD',
sourceRails: 'ach',
destinationToken: 'usdc',
destinationNetwork: 'polygon',
customerType: 'INDIVIDUAL',
bankId: null,
bankName: null,
accountMetadata: []
})
};
fetch('https://test-api-kore.kravata.co/api/v1/virtual-account', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Accounts
Create Virtual Account
Validates whether the authenticated user already has a virtual account for the given currency. If an APPROVED account already exists, returns it (idempotent). If a PENDING account exists, attempts to advance it. Otherwise creates a new virtual account and starts its activation flow.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| name | String | Yes | Custom alias for the virtual account. |
| type | String | Yes | Account type, always “VIRTUAL_ACCOUNT”. |
| destinationAddress | String | Yes | Destination crypto address that receives the funds. |
| currency | String | Yes | Fiat currency code for the virtual account (e.g. USD). |
| sourceRails | String | Yes | Payment rail the virtual account will accept (e.g. ach, wire). |
| destinationToken | String | Yes | Destination token/stablecoin (e.g. usdc). |
| destinationNetwork | String | Yes | Destination blockchain network (e.g. polygon). |
| customerType | String | Yes | ”INDIVIDUAL” or “CORPORATE”. |
| bankId | Numeric | No | Optional bank identifier. |
| bankName | String | No | Optional bank name. |
| accountMetadata | Array | No | Additional account metadata entries. |
POST
/
api
/
v1
/
virtual-account
Create Virtual Account
curl --request POST \
--url https://test-api-kore.kravata.co/api/v1/virtual-account \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Virtual Account USD",
"type": "VIRTUAL_ACCOUNT",
"destinationAddress": "0x1234567890abcdef1234567890abcdef12345678",
"currency": "USD",
"sourceRails": "ach",
"destinationToken": "usdc",
"destinationNetwork": "polygon",
"customerType": "INDIVIDUAL",
"bankId": null,
"bankName": null,
"accountMetadata": []
}
'import requests
url = "https://test-api-kore.kravata.co/api/v1/virtual-account"
payload = {
"name": "Virtual Account USD",
"type": "VIRTUAL_ACCOUNT",
"destinationAddress": "0x1234567890abcdef1234567890abcdef12345678",
"currency": "USD",
"sourceRails": "ach",
"destinationToken": "usdc",
"destinationNetwork": "polygon",
"customerType": "INDIVIDUAL",
"bankId": None,
"bankName": None,
"accountMetadata": []
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Virtual Account USD',
type: 'VIRTUAL_ACCOUNT',
destinationAddress: '0x1234567890abcdef1234567890abcdef12345678',
currency: 'USD',
sourceRails: 'ach',
destinationToken: 'usdc',
destinationNetwork: 'polygon',
customerType: 'INDIVIDUAL',
bankId: null,
bankName: null,
accountMetadata: []
})
};
fetch('https://test-api-kore.kravata.co/api/v1/virtual-account', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Authorizations
Access token from POST /api/v1/client/token.
Body
application/json
Response
200
Successful response

