NOTE: This is a beta product available for use in your mobile app. If you are interested in using this product, please notify your Relationship Manager and / or Project Manager to support you during the integration process.
Welcome to Hyperwallet's iOS SDK. This library will help you create transfer methods in your iOS app, such as bank account, PayPal account, etc. See our iOS Integration Guide to get started!
Note that this SDK is geared towards those who only require backend data, which means you will have to build your own UI.
We also provide an out-of-the-box Hyperwallet iOS UI SDK for you if you decide not to build your own UI.
- A Hyperwallet merchant account
- Set Up your server to manage the user's authentication process on the Hyperwallet platform. See the Authentication section for more information.
- iOS 13.0+
- Xcode 10.2+
- Swift 5.0
Use Carthage or CocoaPods to integrate to HyperwalletSDK.
Specify it in your Cartfile:
github "hyperwallet/hyperwallet-ios-sdk" "1.0.0-beta17"
Specify it in your Podfile:
pod 'HyperwalletSDK', '~> 1.0.0-beta17'
After you're done installing the SDK, you need to initialize an instance in order to utilize core SDK functions. Also, you need to provide a HyperwalletAuthenticationTokenProvider object to retrieve an authentication token.
Add in the header:
import HyperwalletSDK
Initialize the HyperwalletSDK
with a HyperwalletAuthenticationTokenProvider
implementation instance:
Hyperwallet.setup(authenticationTokenProvider :HyperwalletAuthenticationTokenProvider)
Your server side should be able to send a POST request to Hyperwallet endpoint /rest/v3/users/{user-token}/authentication-token
to retrieve an authentication token.
Then, you need to provide a class (an authentication provider) which implements HyperwalletAuthenticationTokenProvider to retrieve an authentication token from your server.
An example implementation using the URLRequest
from Swift Foundation :
import Foundation
import HyperwalletSDK
public class AuthenticationTokenProvider: HyperwalletAuthenticationTokenProvider {
private let url = URL(string: "http://your/server/to/retrieve/authenticationToken")!
public func retrieveAuthenticationToken(
completionHandler: @escaping HyperwalletAuthenticationTokenProvider.CompletionHandler) {
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let defaultSession = URLSession(configuration: .default)
let task = defaultSession.dataTask(with: request) {(data, response, error) in
DispatchQueue.main.async {
guard let data = data,
let clientToken = String(data: data, encoding: .utf8),
let response = response as? HTTPURLResponse else {
completionHandler(nil, HyperwalletAuthenticationErrorType.unexpected(error?.localizedDescription ??
"authentication token cannot be retrieved"))
return
}
switch response.statusCode {
case 200 ..< 300:
completionHandler(clientToken, nil)
default:
completionHandler(nil, HyperwalletAuthenticationErrorType
.unexpected("authentication token cannot be retrieved"))
}
}
}
task.resume()
}
}
The functions in the core SDK are available to use once the authentication is done.
Hyperwallet.shared.getUser { (user, error) in
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
print(user?.firstName)
print(user?.lastName)
}
let payPalAccount = HyperwalletPayPalAccount.Builder(transferMethodCountry: "US", transferMethodCurrency: "USD")
.email("[email protected]")
.build()
Hyperwallet.shared.createPayPalAccount(account: payPalAccount, completion: { (result, error) in
// Code to handle successful response or error
// On successful creation, response (HyperwalletPayPalAccount in this case) will contain information about the user’s PayPal account
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of PayPal account creation
})
Hyperwallet.shared.getPayPalAccount(transferMethodToken: "123123", completion: { (result, error) in
// On success, response (HyperwalletPayPalAccount? in this case) will contain information about the user’s PayPal account or nil if not exist.
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
})
let payPalAccount = HyperwalletPayPalAccount.Builder(token: "trm-12345")
.email("[email protected]")
.build()
Hyperwallet.shared.updatePayPalAccount(account: payPalAccount, completion: { (result, error) in
// Code to handle successful response or error
// On successful update, response (HyperwalletPayPalAccount in this case) will contain information about the user’s PayPal account
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of PayPal account updating
})
Hyperwallet.shared.deactivatePayPalAccount(transferMethodToken: "trm-12345", notes: "deactivate PayPal account", completion: { (result, error) in
// Code to handle successful response or error
// On successful deactivation, response (HyperwalletStatusTransition in this case) will contain information about the status transition
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of PayPal account deactivation
})
let payPalQueryParam = HyperwalletPayPalAccountQueryParam()
payPalQueryParam.status = HyperwalletPayPalAccountQueryParam.QueryStatus.activated.rawValue
payPalQueryParam.sortBy = HyperwalletTransferMethodQueryParam.QuerySortable.ascendantCreatedOn.rawValue
Hyperwallet.shared.listPayPalAccounts(queryParam: payPalQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletPayPalAccount>? in this case) will contain information about or nil if not exist.
if let payPalAccounts = result?.data {
for payPalAccount in payPalAccounts {
print(payPalAccount.getField(fieldName: .token) ?? "")
}
}
}
let venmoAccount = HyperwalletVenmoAccount.Builder(transferMethodCountry: "US", transferMethodCurrency: "USD")
.accountId("9876543210")
.build()
Hyperwallet.shared.createVenmoAccount(account: venmoAccount, completion: { (result, error) in
// Code to handle successful response or error
// On successful creation, response (HyperwalletVenmoAccount in this case) will contain information about the user’s Venmo account
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of Venmo account creation
})
Hyperwallet.shared.getVenmoAccount(transferMethodToken: "123123", completion: { (result, error) in
// On success, response (HyperwalletVenmoAccount? in this case) will contain information about the user’s Venmo account or nil if not exist.
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
})
let venmoAccount = HyperwalletVenmoAccount.Builder(token: "trm-12345")
.accountId("9876543210")
.build()
Hyperwallet.shared.updateVenmoAccount(account: venmoAccount, completion: { (result, error) in
// Code to handle successful response or error
// On successful update, response (HyperwalletVenmoAccount in this case) will contain information about the user’s Venmo account
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of Venmo account updating
})
Hyperwallet.shared.deactivateVenmoAccount(transferMethodToken: "trm-12345", notes: "deactivate Venmo account", completion: { (result, error) in
// Code to handle successful response or error
// On successful deactivation, response (HyperwalletStatusTransition in this case) will contain information about the status transition
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of Venmo account deactivation
})
let venmoQueryParam = HyperwalletVenmoQueryParam()
venmoQueryParam.status = HyperwalletVenmoQueryParam.QueryStatus.activated.rawValue
venmoQueryParam.sortBy = HyperwalletVenmoQueryParam.QuerySortable.ascendantCreatedOn.rawValue
Hyperwallet.shared.listVenmoAccounts(queryParam: venmoQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletVenmoAccount>? in this case) will contain information about or nil if not exist.
if let venmoAccounts = result?.data {
for venmoAccount in venmoAccounts {
print(venmoAccount.getField(fieldName: .token) ?? "")
}
}
}
let bankAccount = HyperwalletBankAccount.Builder(transferMethodCountry: "US",
transferMethodCurrency: "USD",
transferMethodProfileType: "INDIVIDUAL")
.bankAccountId("12345")
.branchId("123456")
.bankAccountPurpose(.checking)
.build()
Hyperwallet.shared.createBankAccount(account: bankAccount, completion: { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of account creation
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On successful creation, response (HyperwalletBankAccount in this case) payload will contain information about the account created
print(result)
})
Hyperwallet.shared.getBankAccount(transferMethodToken: "123123", completion: { (result, error) in
// On success, response (HyperwalletBankCard? in this case) will contain information about the user’s bank account or nil if not exist.
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
})
let bankAccount = HyperwalletBankAccount
.Builder(token: "12345")
.branchId("026009593")
.build()
Hyperwallet.shared.updateBankAccount(account: bankAccount, completion: { (response, error) in
// Code to handle successful response or error
// On successful update, response (HyperwalletBankAccount in this case) payload will contain information about the account updated
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of account updating
})
Hyperwallet.shared.deactivateBankAccount(transferMethodToken: "trm-12345", notes: "deactivate bank account", completion: { (result, error) in
// Code to handle successful response or error
// On successful deactivation, response (HyperwalletStatusTransition in this case) will contain information about the status transition
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of account deactivation
})
let bankAccountQueryParam = HyperwalletBankAccountQueryParam()
bankAccountQueryParam.status = HyperwalletBankAccountQueryParam.QueryStatus.activated.rawValue
bankAccountQueryParam.sortBy = HyperwalletBankAccountQueryParam.QuerySortable.ascendantCreatedOn.rawValue
Hyperwallet.shared.listBankAccounts(queryParam: bankAccountQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletBankAccount>? in this case) will contain information about or nil if not exist.
if let bankAccounts = result?.data {
for bankAccount in bankAccounts {
print(bankAccount.token ?? "")
}
}
}
let paperCheck = HyperwalletPaperCheck.Builder(transferMethodCountry: "US",
transferMethodCurrency: "USD",
transferMethodProfileType: "INDIVIDUAL")
.shippingMethod("STANDARD")
.build()
Hyperwallet.shared.createPaperCheck(account: paperCheck, completion: { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of account creation
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On successful creation, response (HyperwalletPaperCheck in this case) payload will contain information about the paper check created
print(result)
})
Hyperwallet.shared.getPaperCheck(transferMethodToken: "123123", completion: { (result, error) in
// On success, response (HyperwalletPaperCheck? in this case) will contain information about the user’s paper check or nil if not exist.
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
})
let paperCheck = HyperwalletPaperCheck
.Builder(token: "12345")
.shippingMethod("STANDARD")
.build()
Hyperwallet.shared.updatePaperCheck(account: paperCheck, completion: { (response, error) in
// Code to handle successful response or error
// On successful update, response (HyperwalletPaperCheck in this case) payload will contain information about the paper check updated
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure while updating
})
Hyperwallet.shared.deactivatePaperCheck(transferMethodToken: "trm-12345", notes: "deactivate paper check", completion: { (result, error) in
// Code to handle successful response or error
// On successful deactivation, response (HyperwalletStatusTransition in this case) will contain information about the status transition
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
})
let paperCheckQueryParam = HyperwalletPaperCheckQueryParam()
paperCheckQueryParam.status = HyperwalletPaperCheckQueryParam.QueryStatus.activated.rawValue
paperCheckQueryParam.sortBy = HyperwalletPaperCheckQueryParam.QuerySortable.ascendantCreatedOn.rawValue
Hyperwallet.shared.listPaperChecks(queryParam: paperCheckQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletPaperCheck>? in this case) will contain information about or nil if not exist.
if let paperChecks = result?.data {
for paperCheck in paperChecks {
print(paperCheck.token ?? "")
}
}
}
let bankCard = HyperwalletBankCard.Builder(transferMethodCountry: "US",
transferMethodCurrency: "USD",
transferMethodProfileType: "INDIVIDUAL")
.cardNumber("1234123412341234")
.dateOfExpiry("2022-12")
.cvv("123")
.build()
Hyperwallet.shared.createBankCard(account: bankCard, completion: { (result, error) in
// Code to handle successful response or error
// On successful creation, response (HyperwalletBankCard in this case) will contain information about the user’s bank card
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of bank card creation
})
Hyperwallet.shared.getBankCard(transferMethodToken: "123123", completion: { (result, error) in
// On success, response (HyperwalletBankCard? in this case) will contain information about the user’s bank card or nil if not exist.
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
})
let bankCard = HyperwalletBankCard
.Builder(token: "trm-12345")
.dateOfExpiry("2022-12")
.build()
Hyperwallet.shared.updateBankCard(account: bankCard, completion: { (result, error) in
// Code to handle successful response or error
// On successful update, response (HyperwalletBankCard in this case) will contain information about the user’s bank card
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of bank card updating
})
Hyperwallet.shared.deactivateBankCard(transferMethodToken: "trm-12345", notes: "deactivate bank card", completion: { (result, error) in
// Code to handle successful response or error
// On successful deactivation, response (HyperwalletStatusTransition in this case) will contain information about the status transition
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of bank card deactivation
})
let bankCardQueryParam = HyperwalletBankCardQueryParam()
bankCardQueryParam.status = HyperwalletBankCardQueryParam.QueryStatus.activated.rawValue
bankCardQueryParam.sortBy = HyperwalletBankCardQueryParam.QuerySortable.ascendantCreatedOn.rawValue
Hyperwallet.shared.listBankCards(queryParam: bankCardQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletBankCard>? in this case) will contain information about or nil if not exist.
if let bankCards = result?.data {
for bankCard in bankCards {
print(bankCard.token ?? "")
}
}
}
Hyperwallet.shared.getPrepaidCard(transferMethodToken: "123123", completion: { (result, error) in
// On success, response (HyperwalletPrepaidCard? in this case) will contain information about the user’s prepaid card or nil if not exist.
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
})
let prepaidCardQueryParam = HyperwalletPrepaidCardQueryParam()
prepaidCardQueryParam.status = HyperwalletPrepaidCardQueryParam.QueryStatus.activated.rawValue
prepaidCardQueryParam.sortBy = HyperwalletPrepaidCardQueryParam.QuerySortable.ascendantCreatedOn.rawValue
Hyperwallet.shared.listPrepaidCards(queryParam: prepaidCardQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletPrepaidCard>? in this case) will contain information about or nil if not exist.
if let prepaidCards = result?.data {
for prepaidCard in prepaidCards {
print(prepaidCard.token)
}
}
}
let receiptQueryParam = HyperwalletReceiptQueryParam()
receiptQueryParam.createdAfter = ISO8601DateFormatter.ignoreTimeZone.date(from: "2016-12-01T00:00:00")
Hyperwallet.shared.listPrepaidCardReceipts(prepaidCardToken: prepaidCardToken,
queryParam: receiptQueryParam,
completion: { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletReceipt>? in this case) will contain information about or nil if not exist.
if let receipts = result?.data {
for receipt in receipts {
print(receipt.destinationToken ?? "")
}
}
}
let receiptQueryParam = HyperwalletReceiptQueryParam()
receiptQueryParam.createdAfter = ISO8601DateFormatter.ignoreTimeZone.date(from: "2018-12-01T00:00:00")
receiptQueryParam.currency = "USD"
receiptQueryParam.sortBy = HyperwalletReceiptQueryParam.QuerySortable.descendantAmount.rawValue
Hyperwallet.shared.listUserReceipts(queryParam: receiptQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletReceipt>? in this case) will contain information about or nil if not exist.
if let receipts = result?.data {
for receipt in receipts {
print(receipt.destinationToken ?? "")
}
}
}
let transferMethodQueryParam = HyperwalletTransferMethodQueryParam()
transferMethodQueryParam.sortBy = HyperwalletTransferMethodQueryParam.QuerySortable.ascendantCreatedOn.rawValue
Hyperwallet.shared.listTransferMethods(queryParam: transferMethodQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletTransferMethod>? in this case) will contain information about or nil if not exist.
if let transferMethods = result?.data {
for transferMethod in transferMethods {
print(transferMethod.token ?? "")
}
}
}
let transfer = HyperwalletTransfer.Builder(clientTransferId: "6712348070812",
sourceToken: "source-token",
destinationToken: "destination-token")
.sourceAmount("100")
.sourceCurrency("CAD")
.destinationAmount("62.29")
.destinationCurrency("USD")
.memo("TransferClientId56387")
.notes("Partial-Balance Transfer")
.build()
Hyperwallet.shared.createTransfer(transfer: transfer, completion: { (result, error) in
//Code to handle successful response or error
//On successfull creation, response (HyperwalletTransfer in this case) will contain information about the transfer
//in case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of transfer creation
})
Hyperwallet.shared.scheduleTransfer(transferToken: "trf-123456", completion: { (result, error) in
//Code to handle successful response or error
// On successful scheduling, response (HyperwalletStatusTransition in this case) will contain information about the status transition
//in case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure of transfer creation
})
Hyperwallet.shared.getTransfer(transferToken: "trf-123456", completion: { (result, error) in
// On success, response (HyperwalletTransfer? in this case) will contain information about the transfer or nil if not exist.
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
})
Hyperwallet.shared.listTransfers { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletTransfer>? in this case) will contain information about or nil if not exist.
if let transfers = result?.data {
for transfer in transfers {
print(transfer.token ?? "")
}
}
})
let balanceQueryParam = HyperwalletBalanceQueryParam()
balanceQueryParam.currency = "USD"
balanceQueryParam.sortBy = HyperwalletBalanceQueryParam.QuerySortable.descendantAmount.rawValue
Hyperwallet.shared.listUserBalances(queryParam: balanceQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletBalance>? in this case) will contain information about or nil if not exist.
if let balances = result?.data {
for balance in balances {
print(balance.amount ?? "")
}
}
}
let prepaidCardBalanceQueryParam = HyperwalletPrepaidCardBalanceQueryParam()
prepaidCardBalanceQueryParam.sortBy = HyperwalletPrepaidCardBalanceQueryParam.QuerySortable.descendantAmount.rawValue
Hyperwallet.shared.listPrepaidCardBalances(prepaidCardToken: "trm-1234", queryParam: prepaidCardBalanceQueryParam) { (result, error) in
// In case of failure, error (HyperwalletErrorType) will contain HyperwalletErrors containing information about what caused the failure
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
// On success, response (HyperwalletPageList<HyperwalletBalance>? in this case) will contain information about or nil if not exist.
if let balances = result?.data {
for balance in balances {
print(balance.amount ?? "")
}
}
}
let keysQuery = HyperwalletTransferMethodConfigurationKeysQuery()
Hyperwallet.shared.retrieveTransferMethodConfigurationKeys(request: keysQuery) { (result, error) in
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
guard let result = result else { return }
// Get countries
let countries = result.countries()
// Get currencies based on the first available country code
var currencies: [HyperwalletCurrency]?
if let countries = result.countries(), !countries.isEmpty {
currencies = result.currencies(from: countries.first!.code)
}
print(countries)
print(currencies)
}
let country = "CA"
let currency = "CAD"
let keysQuery = HyperwalletTransferMethodTypesFeesAndProcessingTimesQuery(country: country, currency: currency)
Hyperwallet
.shared
.retrieveTransferMethodTypesFeesAndProcessingTimes(request: keysQuery) { (result, error) in
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
guard let result = result else { return }
// Get transfer method types based on the first country code and its first currency code
transferMethodTypes = result.transferMethodTypes(countryCode: country, currencyCode: currency)
print(transferMethodTypes)
print(transferMethodTypes?.first?.fees)
print(transferMethodTypes?.first?.processingTimes)
}
let fieldQuery = HyperwalletTransferMethodConfigurationFieldQuery(country: "CA",
currency: "USD",
transferMethodType: "BANK_ACCOUNT",
profile: "INDIVIDUAL")
Hyperwallet.shared.retrieveTransferMethodConfigurationFields(request: fieldQuery) { (result, error) in
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList?)
return
}
guard let result = result else { return }
print(result.transferMethodType()))
print(result.fieldGroups()?.fields))
}
let fieldQuery = HyperwalletTransferMethodUpdateConfigurationFieldQuery(transferMethodToken: "trm-0000001")
Hyperwallet.shared.retrieveTransferMethodUpdateConfigurationFields(request: fieldQuery) { (result, error) in
guard error == nil else {
print(error?.getHyperwalletErrors()?.errorList)
return
}
guard let result = result else { return }
print(result.transferMethodUpdateConfiguration()?.fieldGroups?.nodes)
print(result.transferMethodUpdateConfiguration()?.transferMethodType)
}
The Hyperwallet iOS SDK is open source and available under the MIT license