Virtual Account External Transactions
Sila’s Virtual Accounts feature allows customers to open a virtual account for their end users and provide them with an account and routing number that can be used for incoming "external" ACH transactions. "External" means that these transactions are originated from a bank outside of Sila, and we receive those transactions to the virtual account. Those incoming external ACH transactions can be credits or debits.
Testing External Incoming ACH Transactions on Virtual Accounts
You must be pre-approved for access to Virtual Accounts
/create_test_virtual_account_ach_transaction
/create_test_virtual_account_ach_transaction
This endpoint, which is only callable in Sandbox, will create an external, incoming virtual account ACH transaction for testing purposes.
Requests
Authorization / Authentication
Apps using Access Token Authorization
Use a valid access token in an Authorization: Bearer request header.
See Authenticating with an Access Token for more details.
Apps using ECDSA Authentication
Only the authsignature
header is required for this request. See the section on ECDSA Authentication for more detail about ECDSA signature generation.
Note - We recently renamed the field auth_handle
to app_handle
. For backward compatibility, auth_handle
is still valid but has been removed from our documentation.
POST /0.2/create_test_virtual_account_ach_transaction HTTP/1.1
Content-Type: application/json
// if using OAuth2
Authorization: Bearer [GENERATED JWT TOKEN HERE]
// if using ECDSA
authsignature: [GENERATED AUTHSIGNATURE HEX STRING HERE]
{
"header": {
"created": 1234567890,
"app_handle": "handle.silamoney.eth",
"user_handle":"user.silamoney.eth",
"version": "0.2",
"crypto": "ETH",
"reference": "<your unique id>"
},
"amount": "amount of sila to fund the virtual account with",
"virtual_account_number": "vaccount number to transact with",
"tran_code": "transaction code for the generated file transaction",
"effective_date": "effective date for the generated file transaction",
"entity_name": "Name of test entity for transaction",
"ced": "PAYROLL",
"ach_name": "ach business name"
}
***
HTTP/1.1 200 OK
{
"success": true,
"status": "SUCCESS",
"response_time_ms": "171",
"reference": "<your unique id>",
"message": "Transaction submitted to the processing queue."
}
let vAccountId = 'virtual account id';
let accountNumber = 'virtual account number';
const res = await sila.createTestVirtualAccountAchTransaction(userHandle, userPrivateKey, vAccountId,accountNumber);
// Success Response Object
{
"statusCode": 200,
"headers": {
"server": "nginx/1.14.0 (Ubuntu)",
"date": "Fri, 25 Mar 2022 11:45:18 GMT",
"content-type": "application/json",
"content-length": "166",
"connection": "close",
"access-control-allow-origin": "*",
"access-control-allow-headers": "*",
"allow": "POST, OPTIONS",
"vary": "Cookie"
},
"data": {
"success": true,
"status": "SUCCESS",
"message": "Transaction submitted to processing queue.",
"reference": "44cfa09b-794a-43ca-bae3-6b796e5dd26b",
"response_time_ms": "188"
}
}
payload = {
"user_handle": user_handle,
"amount": 50,
"virtual_account_number": v_no,
"tran_code": 22,
"entity_name": "Test transfer",
}
User.testVirtualAaccountAchTransaction(app, payload, eth_private_key)
# Success
{
"success":true,
"status":"SUCCESS",
"message":"Transaction submitted to processing queue.",
"reference":"c0326578-137c-4a73-8970-151f27478a54",
"response_time_ms":"194",
"status_code":200
}
String userHandle = "user.silamoney.eth";
String userPrivateKey = "some private key";
int amount = 50; // amount of sila to fund the virtual account with
String virtualAccountNumber = "vaccount number to transact with";
Date effectiveDate = new LocalDate(2022, 03, 23).toDate(); // Optional. effective date for the generated file transaction
int tranCode= "transaction code for the generated file transaction";
String entityName ="Name of test entity for transaction";
String ced= "PAYROLL"; // Optional
String achName= "ach business name"; // Optional
ApiResponse response = api.createTestVirtualAccountAchTransaction(userHandle,userPrivateKey, amount, virtualAccountNumber, effectiveDate, tranCode,entityName,ced,achName);
// Success Response
System.out.println(response.getStatusCode()); // 200
BaseResponse parsedResponse = (BaseResponse) response.getData();
System.out.println(parsedResponse.getStatus()); // SUCCESS
System.out.println(parsedResponse.getSuccess()); // true
System.out.println(parsedResponse.getReference()); // Reference number
System.out.println(parsedResponse.getMessage());
//Load your information
$userHandle = 'user.silamoney.eth';
$userPrivateKey = 'some private key';
$virtualAccountNumber = "Virtual Account Number";
$amount = 100;
$tranCode = 22;
$entityName = "entity Name";
$effectiveDate = null;// Optional
$ced = null;// Optional
$achName = null;// Optional
$response = self::$config->api->createTestVirtualAccountAchTransaction($handle, $privateKey, $virtualAccountNumber, $amount, $tranCode, $entityName, $effectiveDate, $ced, $achName);
//Load your informations
int amount = 100;
string virtualAccountNumber = "9710000000000101";
int tranCode = 22;
string entityName = "Sally Smith";
DateTime? effectiveDate = DateTime.Now;
string ced = "PAYROLL";
string achName = "SILA INC";
var response = api.CreateTestVirtualAccountAchTransaction(userHandle, userPrivateKey, amount, virtualAccountNumber, tranCode, entityName, effectiveDate, ced, achName);
// Success Object Response
Console.WriteLine(response.StatusCode); // 200
Console.WriteLine(((BaseResponse)response.Data).Message); // Message
Console.WriteLine(((BaseResponse)response.Data).Success); // true
Console.WriteLine(((BaseResponse)response.Data).Status); // SUCCESS
Console.WriteLine(((BaseResponse)response.Data).Reference); // ccb35eb8-xxxx-xxxx-xxxx-xxxxx
Console.WriteLine(((BaseResponse)response.Data).ResponseTimeMs); // API responses time
Testing External Outgoing ACH Transactions on Virtual Accounts
You must be pre-approved for access to Virtual Accounts
This endpoint is not available at this time.
Key | Type | Description |
---|---|---|
header | JSON object | Required. Requires these keys in JSON format: created, app_handle, user_handle. See the /check_handle endpoint for the complete list of fields in this object. |
amount | Integer | Required. Amount of sila to transact with. Example: 100 |
virtual_account_number | String | Required. Account number of the virtual account. Example: 971000123456789 |
effective_date | Date | Optional. This is the date that the transaction will settle. Defaults to the current date |
tran_code | Integer | Required. Transaction code to determine operation to be preformed on the virtual account. A list of transaction codes can be found here: 22: Automated deposit (checking credit) 23: Prenote of checking credit 27: Automated payment (checking debit) 28: Prenote of checking debit 32: Automated deposit (savings credit) 33: Prenote of savings credit 37: Automated payment (savings debit) 38: Prenote of savings debit |
entity_name | String | Required. Any string. Will show up as the entity name for the virtual account ACH transaction |
ced | String | Optional. Defaults to "PAYROLL" |
ach_name | String | Optional. ACH business name for the transaction. Defaults to "SILA INC" |
Responses
Status Code | Description |
---|---|
200 | Successfully created a transaction. |
400 | The specified virtual account number does not exist. |
Updated 4 months ago