Class: Airwallex::ConnectedAccount

Inherits:
APIResource show all
Extended by:
APIOperations::Create, APIOperations::List, APIOperations::Retrieve
Includes:
APIOperations::Update
Defined in:
lib/airwallex/resources/connected_account.rb

Overview

Represents a Connected Account (Scale product) — a sub-account container used to onboard and track funds for a platform's connected entities.

Examples:

Create a connected account (business entity)

# account_details is a required top-level wrapper. customer_agreements,
# nickname, and primary_contact are top-level siblings, not nested
# inside it. legal_entity_type is "BUSINESS" or "INDIVIDUAL", not
# "COMPANY" (business_structure below is the field that uses "COMPANY").
# This is a minimal subset of Airwallex's real KYB schema — the full
# schema also supports trustee entities and much more optional detail
# (identity documents, store details, business person details, etc).
 = Airwallex::ConnectedAccount.create(
  nickname: "Acme Advertiser",
  primary_contact: { email: "contact@acme.example" },
  customer_agreements: {
    agreed_to_terms_and_conditions: true,
    agreed_to_data_usage: true,
    terms_and_conditions: { service_agreement_type: "FULL" }
  },
  account_details: {
    legal_entity_type: "BUSINESS",
    business_details: {
      business_name: "Acme Corp",
      business_structure: "COMPANY",
      business_address: {
        address_line1: "200 Collins Street",
        country_code: "AU",
        postcode: "3000",
        state: "VIC",
        suburb: "Melbourne"
      }
    }
  }
)

Trigger KYC/KYB verification

.submit

Look up whichever account you're currently authenticated as

Airwallex::ConnectedAccount.current

Get the legal_entity_id needed by BillingCustomer/BillingSubscription

 = Airwallex::ConnectedAccount.retrieve("acct_123")
.legal_entity_id

Constant Summary collapse

CURRENT_ACCOUNT_PATH =

Not nested under /accounts/APIResource#id — these endpoints are implicitly scoped to whichever account the request is authenticated as (the platform's own account, or a connected account via x-on-behalf-of).

"/api/v1/account"
WALLET_INFO_PATH =
"/api/v1/account/wallet_info"

Instance Attribute Summary

Attributes inherited from APIResource

#attributes, #id

Class Method Summary collapse

Instance Method Summary collapse

Methods included from APIOperations::Create

create

Methods included from APIOperations::Retrieve

retrieve

Methods included from APIOperations::List

list

Methods included from APIOperations::Update

included, #save, #update

Methods inherited from APIResource

#changed_attributes, #dirty?, #initialize, #inspect, #method_missing, #refresh, #refresh_from, resource_name, #respond_to_missing?, #to_hash, #to_json, #to_s

Constructor Details

This class inherits a constructor from Airwallex::APIResource

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Airwallex::APIResource

Class Method Details

.current(params = {}) ⇒ ConnectedAccount

Retrieve whichever account the current request is authenticated as

Parameters:

  • params (Hash) (defaults to: {})

    additional params

Returns:



69
70
71
72
# File 'lib/airwallex/resources/connected_account.rb', line 69

def self.current(params = {})
  response = Airwallex.client.get(CURRENT_ACCOUNT_PATH, params)
  new(response)
end

.resource_pathString

Returns API resource path for connected accounts.

Returns:

  • (String)

    API resource path for connected accounts



61
62
63
# File 'lib/airwallex/resources/connected_account.rb', line 61

def self.resource_path
  "/api/v1/accounts"
end

.wallet_info(params = {}) ⇒ Hash

Retrieve wallet info for whichever account the current request is authenticated as

Parameters:

  • params (Hash) (defaults to: {})

    additional params

Returns:

  • (Hash)

    raw wallet info response



79
80
81
# File 'lib/airwallex/resources/connected_account.rb', line 79

def self.wallet_info(params = {})
  Airwallex.client.get(WALLET_INFO_PATH, params)
end

Instance Method Details

#agree_to_terms_and_conditions(params = {}) ⇒ ConnectedAccount

Agree to Airwallex's terms and conditions on behalf of this account

Parameters:

  • params (Hash) (defaults to: {})

    e.g. agreed_at:, service_agreement_type:, device_data: { ip_address:, user_agent: }

Returns:



108
109
110
111
112
113
114
# File 'lib/airwallex/resources/connected_account.rb', line 108

def agree_to_terms_and_conditions(params = {})
  response = Airwallex.client.post(
    "#{self.class.resource_path}/#{id}/terms_and_conditions/agree", params
  )
  refresh_from(response)
  self
end

The legal_entity_id needed by BillingCustomer.create's default_legal_entity_id and BillingSubscription.create's legal_entity_id — nested inside account_details on this account's own response, not a separate resource.

Returns:

  • (String, nil)


89
90
91
# File 'lib/airwallex/resources/connected_account.rb', line 89

def legal_entity_id
  attributes.dig(:account_details, :legal_entity_id)
end

#reactivate(params = {}) ⇒ ConnectedAccount

Reactivate a suspended account

Parameters:

  • params (Hash) (defaults to: {})

    e.g. message: "reason for reactivation"

Returns:



130
131
132
133
134
# File 'lib/airwallex/resources/connected_account.rb', line 130

def reactivate(params = {})
  response = Airwallex.client.post("#{self.class.resource_path}/#{id}/reactivate", params)
  refresh_from(response)
  self
end

#submit(params = {}) ⇒ ConnectedAccount

Submit the account for KYC/KYB verification

Parameters:

  • params (Hash) (defaults to: {})

    additional submission params

Returns:



97
98
99
100
101
# File 'lib/airwallex/resources/connected_account.rb', line 97

def submit(params = {})
  response = Airwallex.client.post("#{self.class.resource_path}/#{id}/submit", params)
  refresh_from(response)
  self
end

#suspend(params = {}) ⇒ ConnectedAccount

Suspend this account

Parameters:

  • params (Hash) (defaults to: {})

    e.g. message: "reason for suspension"

Returns:



120
121
122
123
124
# File 'lib/airwallex/resources/connected_account.rb', line 120

def suspend(params = {})
  response = Airwallex.client.post("#{self.class.resource_path}/#{id}/suspend", params)
  refresh_from(response)
  self
end