Routefusion Node.js SDK
Please see the wiki for more detailed information about Routefusion's primary concepts.
Contents
Get Started
For API access, register for an API key at https://routefusion.co/sign_up.
Aftern signup, login and go to 'developer'. Create an API key (CLIENT_ID) / (SECRET) pair.
If you plan to use the SDK set your API key / secret pair as environment variables, or create a credentials file where you can manage all of your keys in one place. The location of your credentials file should be ~/.rf/credentials
for unix systems and C:\%USERPROFILE%\.rf\credentials
for windows systems.
Note: API and SDK are compatible with async / await.
Initialize an instance of the sdk like so
const rf = require('routefusion-sdk').Instance({
RF_CLIENT_ID: '137F1AA06E004F96BEE9B4644F8F7A46CDA45CACB0052B2583D674C530252B6C',
RF_SECRET: '6C075288B9E43af4e329d9999dEB180D6b5fbE6F1565939DBCabB626ae886C59',
RF_BASE_URL: 'https://sandbox.api.routefusion.co'
});
Or, if you would like to use environment variables or a credientials file instead initialize without any arguments and setup your credentials. This pattern is used in the rest of the docs
const rf = require('routefusion-sdk').Instance();
Set environment variables for the SDK to access
export RF_CLIENT_ID=137F1AA06E004F96BEE9B4644F8F7A46CDA45CACB0052B2583D674C530252B6C
export RF_SECRET=6C075288B9E43af4e329d9999dEB180D6b5fbE6F1565939DBCabB626ae886C59
export RF_BASE_URL='https://sandbox.api.routefusion.co'
Or, create a credentials file
~/.rf/credentials
[Rich] #profile name
client_id=137F1AA06E004F96BEE9B4644F8F7A46CDA45CACB0052B2583D674C530252B6C
secret=6C075288B9E43af4e329d9999dEB180D6b5fbE6F1565939DBCabB626ae886C59
base_url=https://sandbox.api.routefusion.co # will default to sandbox
[Paul]
client_id=25D0A96BA42FBFDF3D68A86950523B23DBF65F276D3D340DC2FA5716D7662548
secret=57B1144d25FEB3a8c68a9A6a803844f09d644278947dB63E211EFc43D49Ed26E
Then, set your desired profile as an environment variable
then export your desired profile
export RF_PROFILE=Rich
Note: The credentials lookup priority is Instance config, environment variables, then credentials file
Users
Get User
const rf = require('routefusion-sdk').Instance();
rf.getUser()
.then(resp => resp)
.catch(err => err)
response:
{
"id": 1,
"uuid": "d48cb8b3-8945-4748-9bed-kd3d9vc15m",
"wyre_id": null,
"wyre_pusher_channel": null,
"username": "",
"first_name": "Rico",
"last_name": "Suave",
"occupation": "",
"date_of_birth": "1980-03-12",
"email": "email@email.com",
"phone_number": "",
"country": "US",
"city": "Austin",
"street": "100 Congress",
"state": "TX",
"zipcode": "78750",
"verified": true,
"admin": false,
"type": null,
"verification_submitted": true,
"company_name": null,
"created_at": "2018-08-10T22:31:55.972Z",
"updated_at": "2018-12-09T20:56:27.258Z",
"deleted_at": null,
"password_reset_token": null,
"password_reset_token_expires_at": null,
"third_party_ids": null
}
Update User
const rf = require('routefusion-sdk').Instance();
let body = {
first_name: "Bob",
last_name: "TheBuilder",
street: "1250 San Jacinto"
};
rf.updateUser(body)
.then(resp => resp)
.catch(err => err)
response:
{
"id": 1,
"uuid": "d48cb8b3-8945-4748-9bed-kd3d9vc15m",
"wyre_id": null,
"wyre_pusher_channel": null,
"username": "",
"first_name": "Bob",
"last_name": "TheBuilder",
"occupation": "",
"date_of_birth": "1980-03-12",
"email": "email@email.com",
"phone_number": "",
"country": "US",
"city": "Austin",
"street": "1250 San Jacinto",
"state": "TX",
"zipcode": "78750",
"verified": true,
"admin": false,
"type": null,
"verification_submitted": true,
"company_name": null,
"created_at": "2018-08-10T22:31:55.972Z",
"updated_at": "2018-12-09T20:56:27.258Z",
"deleted_at": null,
"password_reset_token": null,
"password_reset_token_expires_at": null,
"third_party_ids": null
}
Create User account
const rf = require('routefusion-sdk').Instance();
let body = {
name_on_account: 'Bob TheBuilder',
account_number: '123',
routing_number: '1234',
currency: 'USD',
bank_country: 'US'
};
rf.createUserAccount(body)
.then(resp => resp)
.catch(err => err)
response:
{
"uuid": "d48cb8b3-8945-4748-9bed-kd3d9vc15m"
}
Get User accounts
const rf = require('routefusion-sdk').Instance();
rf.getUserAccounts(userUuid)
.then(resp => resp)
.catch(err => err)
response:
[{
"id": 6,
"uuid": "b45b64de-c620-4f18-bfad-5bdefcb522c1",
"user_id": 1,
"company_name": "",
"account_number": "123",
"routing_number": "123",
"bank_name": "Citibank",
"bank_address": "5252 Madison Ave.",
"default_currency": "USD",
"created_at": "2018-12-14T00:41:38.661Z",
"name_on_account": "bob theBuilder",
"currency": "1231231234",
"primary_account": true,
"bank_country": "us"
}]
Get User accounts byUuid
const rf = require('routefusion-sdk').Instance();
rf.getUserAccountByUuid(userUuid, accountUuid)
.then(resp => resp)
.catch(err => err)
response:
{
"id": 6,
"uuid": "b45b64de-c620-4f18-bfad-5bdefcb522c1",
"user_id": 1,
"company_name": "",
"account_number": "123",
"routing_number": "123",
"bank_name": "Citibank",
"bank_address": "5252 Madison Ave.",
"default_currency": "USD",
"created_at": "2018-12-14T00:41:38.661Z",
"name_on_account": "bob theBuilder",
"currency": "1231231234",
"primary_account": true,
"bank_country": "us"
}
Banks
Find a bank
const rf = require('routefusion-sdk').Instance();
const findByIBAN = {
iban: 'GB29NWBK60161331926819'
};
rf.findBank(findByIBAN)
response:
{
"bank_name": "NATIONAL WESTMINSTER BANK PLC",
"branch_name": "NATIONAL WESTMINSTER BANK PLC",
"bank_address1": "PREMIER PLACE, DEVONSHIRE SQUARE",
"bank_address2": null,
"bank_city": "LONDON",
"bank_state_province": null,
"bank_country": "GB",
"bank_postal_code": "EC2M 4XB",
"swift_bic": "NWBKGB2LXXX",
"bank_code": null,
"branch_code": "601613"
}
Batches
Get Transfer Batch
const rf = require('routefusion-sdk').Instance();
const uuid = "BA-c96f27dd-50d2-4cf9-be30-5006bf6fa94b";
rf.getTransferBatch(uuid)
.then(resp => resp)
.catch(err => err)
response:
{
"uuid": "BA-c96f27dd-50d2-4cf9-be30-5006bf6fa94b",
"status": "created",
"transfers": [
{
"source_currency": null,
"source_amount": "1000.00",
"destination_amount": null,
"beneficiary_uuid": "b45b64de-c620-4f18-bfad-5bdefcb522c1"
},
{
"source_currency": null,
"source_amount": "250.00",
"destination_amount": null,
"beneficiary_uuid": "27bdb938-3d45-4b64-bf39-1eb7602c8cd4"
}
]
}
Create Transfer Batch
const rf = require('routefusion-sdk').Instance();
const batch = {
transfers: [
{
source_amount: 1000,
beneficiary_uuid: "b45b64de-c620-4f18-bfad-5bdefcb522c1"
},
{
source_amount: 250,
beneficiary_uuid: "27bdb938-3d45-4b64-bf39-1eb7602c8cd4"
}
]
}
rf.createTransferBatch(batch)
.then(resp => resp)
.catch(err => err)
response:
{
"uuid": "BA-c96f27dd-50d2-4cf9-be30-5006bf6fa94b",
"status": "created",
"transfers": [
{
"source_amount": "1000.00",
"beneficiary_uuid": "b45b64de-c620-4f18-bfad-5bdefcb522c1"
},
{
"source_amount": "250.00",
"beneficiary_uuid": "27bdb938-3d45-4b64-bf39-1eb7602c8cd4"
}
]
}
Create Quote Batch
const rf = require('routefusion-sdk').Instance();
const transferBatchId = "BA-c96f27dd-50d2-4cf9-be30-5006bf6fa94b";
rf.createQuoteBatch(transferBatchId);
response:
note the uuid here is the Quote Batch uuid
{
"uuid": "cfdc73e6-92cb-493a-8a76-f9b9f84f1bb9",
"quotes": [
{
"quote_uuid": "QU12bf9abb-da29-47dc-abb6-84b66bdf2545",
"source_currency": "SGD",
"destination_currency": "HKD",
"rate": "5.7445",
"inverted_rate": "0.17407955435634084",
"fee": "3.00",
"payment_method": "local"
},
{
"quote_uuid": "QUd8b6daba-9cda-4359-acae-932818ccccc0",
"source_currency": "SGD",
"destination_currency": "USD",
"rate": "0.7326",
"inverted_rate": "1.365001365001365",
"fee": "3.00",
"payment_method": "local"
}
],
"expires_at": "2020-09-10T16:39:41.186Z"
}
Process Transfer Batch
const rf = require('routefusion-sdk').Instance();
const uuid = "BA-c96f27dd-50d2-4cf9-be30-5006bf6fa94b";
rf.processTransferBatch(uuid)
.then(resp => resp)
.catch(err => err)
response:
{
"uuid": "BA-c96f27dd-50d2-4cf9-be30-5006bf6fa94b",
"status": "processing",
"transfers": [
{
"source_currency": null,
"source_amount": "1000.00",
"destination_amount": null,
"beneficiary_uuid": "b45b64de-c620-4f18-bfad-5bdefcb522c1"
},
{
"source_currency": null,
"source_amount": "250.00",
"destination_amount": null,
"beneficiary_uuid": "27bdb938-3d45-4b64-bf39-1eb7602c8cd4"
}
]
}
Beneficiaries
Get Beneficiaries
const rf = require('routefusion-sdk').Instance();
rf.getBenefiaries()
.then(resp => resp)
.catch(err => err)
response:
[
{
"id": 6,
"uuid": "b45b64de-c620-4f18-bfad-5bdefcb522c1",
"user_id": 1,
"company_name": "",
"first_name_on_account": "China",
"last_name_on_accout": "China",
"type": "personal",
"bank_name": "中国建设银行",
"branch_name": "中国建设银行",
"bank_city": "中国建设银行",
"account_type": "personal",
"account_number": "12345678910",
"beneficiary_email": "china.china@china.com",
"beneficiary_phone_number": "1231231234",
"country": "CN",
"city": null,
"bank_province": "中国建设银行",
"currency": "CNY",
"cpfcnpj": ""
},
{
...
]
Get Beneficiary
const rf = require('routefusion-sdk').Instance();
let beneficiaryId = 6;
rf.getBenefiary(beneficiaryId)
.then(resp => resp)
.catch(err => err)
response:
{
"id": 6,
"uuid": "b45b64de-c620-4f18-bfad-5bdefcb522c1",
"user_id": 1,
"company_name": "",
"first_name_on_account": "China",
"last_name_on_accout": "China",
"type": "personal",
"bank_name": "中国建设银行",
"branch_name": "中国建设银行",
"bank_city": "中国建设银行",
"account_type": "personal",
"account_number": "12345678910",
"beneficiary_email": "china.china@china.com",
"beneficiary_phone_number": "1231231234",
"country": "CN",
"city": null,
"bank_province": "中国建设银行",
"currency": "CNY",
"cpfcnpj": ""
}
Create Beneficiary
const rf = require('routefusion-sdk').Instance();
let beneficiaryData = {
company_name: "beneficiaryCompanyName",
first_name_on_account: "companyOwnerFirstName",
last_name_on_account: "companyOwnerLastName",
type: "business",
currency: "USD",
bank_name: "Citibank",
branch_name: "",
bank_address1: "5252 Madison Ave.",
bank_address2: "",
bank_city: "New York City",
bank_state_province: "New York",
bank_postal_code: "00000",
bank_country: "US",
bank_code: "",
branch_code: "",
swift_bic: "CITINY732",
account_type: "business",
account_number: "2315345432",
routing_number: "113193532",
clabe: "",
tax_number: "",
cpfcpnj: "",
email: "company@email.com",
phone_number: "",
address1: "beneficiaryAddress",
address2: "",
city: "beneficiaryCity",
state_province: "beneficiaryStateOrProvince",
postal_code: "00000",
country: "US"
};
rf.createBenefiary(beneficiaryData)
.then(resp => resp)
.catch(err => err)
response:
{
"company_name": "beneficiaryCompany",
"first_name_on_account": "companyOwnerFirstName",
"last_name_on_account": "companyOwnerLastName",
"type": "business",
"currency": "USD",
"bank_name": "Citibank",
"branch_name": "",
"bank_address1": "5252 Madison Ave.",
"bank_address2": "",
"bank_city": "New York City",
"bank_state_province": "New York",
"bank_postal_code": "00000",
"bank_country": "US",
"bank_code": "",
"branch_code": "",
"swift_bic": "CITINY732",
"account_type": "business",
"account_number": "2315345432",
"routing_number": "113193532",
"clabe": "",
"tax_number": "",
"cpfcpnj": "",
"email": "company@email.com",
"phone_number": "",
"address1": "beneficiaryAddress",
"address2": "",
"city": "beneficiaryCity",
"state_province": "beneficiaryStateOrProvince",
"postal_code": "00000",
"country": "US"
}
Update Beneficiary
const rf = require('routefusion-sdk').Instance();
let beneficiaryData = {
address1: "newBeneficiaryAddress",
};
rf.updateBenefiary(beneficiaryData)
.then(resp => resp)
.catch(err => err)
response:
{
"company_name": "beneficiaryCompany",
"first_name_on_account": "companyOwnerFirstName",
"last_name_on_account": "companyOwnerLastName",
"type": "business",
"currency": "USD",
"bank_name": "Citibank",
"branch_name": "",
"bank_address1": "5252 Madison Ave.",
"bank_address2": "",
"bank_city": "New York City",
"bank_state_province": "New York",
"bank_postal_code": "00000",
"bank_country": "US",
"bank_code": "",
"branch_code": "",
"swift_bic": "CITINY732",
"account_type": "business",
"account_number": "2315345432",
"routing_number": "113193532",
"clabe": "",
"tax_number": "",
"cpfcpnj": "",
"email": "company@email.com",
"phone_number": "",
"address1": "newBeneficiaryAddress",
"address2": "",
"city": "beneficiaryCity",
"state_province": "beneficiaryStateOrProvince",
"postal_code": "00000",
"country": "US"
}
Transfers
Create Transfer
const rf = require('routefusion-sdk').Instance();
let transferData = {
beneficiary_id: 6,
source_amount: 1000
};
rf.createTransfer(transferData)
.then(resp => resp)
.catch(err => err)
response:
{
"id": 120,
"user_id": 1,
"account_id": null,
"beneficiary_id": 6,
"source_amount": "1000",
"exchange_rate": null,
"fee": null,
"currency_pairs": "USDUSD",
"created_at": "2018-12-14T00:41:38.661Z",
"updated_at": null,
"uuid": "b1e3f2fa-27f1-4424-987c-105009fed4fe",
"state": "created",
"payout_partner_uuid": null,
"authorizing_ip": "::1",
"transfer_states": [
{
"state": "created",
"created_at": "2018-12-14T00:41:38.643Z"
}
],
"source_currency": "USD",
"destination_amount": null,
"destination_currency": "USD",
"payout_partner_fee": null,
"payout_partner": null,
"payout_partner_status": null
}
Get Transfer
const rf = require('routefusion-sdk').Instance();
let transferUuid = '1c511f62-f8b1-4070-a27a-c1581e7fg79a';
rf.createTransfer(transferUuid)
.then(resp => resp)
.catch(err => err)
response:
{
"state": "processing",
"created_at": "2018-12-03T20:35:31.017Z"
}
Cancel Transfer
const rf = require('routefusion-sdk').Instance();
let transferUuid = '1c511f62-f8b1-4070-a27a-c1581e7fg79a';
rf.cancelTransfer(transferUuid)
.then(resp => resp)
.catch(err => err)
response:
{
"message": "transfer 1c511f62-f8b1-4070-a27a-c1581e7fg79a cancelled"
}
Cancel Transfer on behalf of User
const rf = require('routefusion-sdk').Instance();
let transferUuid = '1c511f62-f8b1-4070-a27a-c1581e7fg79a';
let userUuid = 'd48cb8b3-8945-4748-9bed-kd3d9vc15m';
rf.cancelTransferForUser(userUuid, transferUuid)
.then(resp => resp)
.catch(err => err)
response:
{
"message": "transfer 1c511f62-f8b1-4070-a27a-c1581e7fg79a cancelled"
}
Rates
Get Rate
const rf = require('routefusion-sdk').Instance();
const body = {
source_currency: "USD",
destination_currency: "MXN"
}
rf.getRate(body)
.then(resp => resp)
.catch(err => err)
response
{
"source_currency": "USD",
"destination_currency": "MXN",
"rate": 1.24
}
Balance
Get Balance
const rf = require('routefusion-sdk').Instance();
rf.getBalance()
.then(resp => resp)
.catch(err => err)
response
{
"balance": 200
}
Verify
Send Verification Data
const rf = require('routefusion-sdk').Instance();
let userUuid = 'a1d40a18-723d-45fe-b362-10a94d5072bf';
let verificationData = {
agreedToTerms: true,
allowAccountManagement: true,
address: "600 Congress Ave.",
city: "Austin",
companyName: "Routefusion",
country: "US",
dateOfIncorporation: "2009-04-07",
dba: true,
dbaName: "Some Cool Name",
incorporationNumber: "29-1234567",
officers: [
{
address: "777 Lucky St.",
citizenship: "US",
city: "Palmer",
dob: "1978-06-22",
firstName: "John",
idNumber: "123456789",
idType: "ssn",
jobTitle: "Director of Sales",
lastName: "Doe",
owner: true,
ownership: "50",
postalCode: "78949",
state: "TX",
title: "Mr."
}
],
owners: [
{
address: "900 Test Dr.",
citizenship: "US",
city: "Goergetown",
dob: "1981-03-23",
firstName: "Jason",
idNumber: "987654321",
idType: "ssn",
jobTitle: "Technical Director",
lastName: "Stathom",
owner: true,
ownership: "50",
postalCode: "75765",
state: "TX",
title: "Mr."
}
],
payments: {
countries: [
"IT",
"MX",
"AU"
],
frequency: "monthly",
purpose: "Contract Labor",
volume: "100000"
},
phone: "88881355888",
postalCode: "75745",
state: "TX",
structure: "llc",
website: "www.testCompany.com"
};
rf.sendVerificationData(verificationData, userUuid)
.then(resp => resp)
.catch(err => err);
response
{
"message": "Success"
}
Get Verification Data
const rf = require('routefusion-sdk').Instance();
let userUuid = 'a1d40a18-723d-45fe-b362-10a94d5072bf';
rf.getVerificationData(userUuid)
.then(resp => resp)
.catch(err => err);
response
{
"owners": [
{
"address": "900 Test Dr.",
"citizenship": "US",
"city": "Goergetown",
"dob": "1981-03-23",
"firstName": "Jason",
"idNumber": "987654321",
"idType": "ssn",
"jobTitle": "Technical Director",
"lastName": "Stathom",
"owner": true,
"ownership": "50",
"postalCode": "75765",
"state": "TX",
"title": "Mr."
}
],
"dbaName": "Some Cool Name",
"dateOfIncorporation": "2009-04-07",
"phone": "88881355888",
"companyName": "Routefusion",
"allowAccountManagement": true,
"dba": true,
"agreedToTerms": true,
"address": "600 Congress Ave",
"postalCode": "75745",
"incorporationNumber": "29-1234567",
"state": "TX",
"structure": "llc",
"officers": [
{
"address": "777 Lucky St.",
"citizenship": "US",
"city": "Palmer",
"dob": "1978-06-22",
"firstName": "John",
"idNumber": "123456789",
"idType": "ssn",
"jobTitle": "Director of Sales",
"lastName": "Doe",
"owner": true,
"ownership": "50",
"postalCode": "78949",
"state": "TX",
"title": "Mr."
}
],
"payments": {
"volume": "100000",
"frequency": "monthly",
"countries": [
"IT",
"MX",
"AU"
],
"purpose": "Contract Labor"
},
"website": "www.testCompany.com",
"city": "Austin",
"country": "US"
}
Update Verification Data
const rf = require('routefusion-sdk').Instance();
let userUuid = 'a1d40a18-723d-45fe-b362-10a94d5072bf';
let verificationData = {
agreedToTerms: true,
allowAccountManagement: true,
address: "1234 Updated Address",
city: "Austin",
companyName: "Routefusion",
country: "US",
dateOfIncorporation: "2009-04-07",
dba: true,
dbaName: "Updated Cool Name",
incorporationNumber: "29-1234567",
officers: [
{
address: "777 Lucky St.",
citizenship: "US",
city: "Palmer",
dob: "1978-06-22",
firstName: "John",
idNumber: "123456789",
idType: "ssn",
jobTitle: "Director of Sales",
lastName: "Doe",
owner: true,
ownership: "50",
postalCode: "78949",
state: "TX",
title: "Mr."
}
],
owners: [
{
address: "900 Test Dr.",
citizenship: "US",
city: "Goergetown",
dob: "1981-03-23",
firstName: "Jason",
idNumber: "987654321",
idType: "ssn",
jobTitle: "Technical Director",
lastName: "Stathom",
owner: true,
ownership: "50",
postalCode: "75765",
state: "TX",
title: "Mr."
}
],
payments: {
countries: [
"IT",
"MX",
"AU"
],
frequency: "monthly",
purpose: "Contract Labor",
volume: "100000"
},
phone: "88881355888",
postalCode: "75745",
state: "TX",
structure: "llc",
website: "www.testCompany.com"
};
rf.updateVerificationData(verificationData, userUuid)
.then(resp => resp)
.catch(err => err);
response
{
"message": "Success"
}
Delete Verification Data
const rf = require('routefusion-sdk').Instance();
let userUuid = 'a1d40a18-723d-45fe-b362-10a94d5072bf';
rf.deleteVerificationData(userUuid)
.then(resp => resp)
.catch(err => err);
response
{
"message": "Success"
}
Wallets
const rf = require('routefusion-sdk').Instance();
rf.getWalletBalances()
.then(resp => resp)
.catch(err => err);
response
{
"usd": {
"liquidity_provider_account": 100
}
}