# Accounts

## Create account

`accounts().create(AccountCreateParamsparams, RequestOptionsrequestOptions = RequestOptions.none()) : Account`

**post** `/api/v1/accounts`

Create account

### Parameters

- `params: AccountCreateParams`

  - `accountType: AccountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `userId: String`

  - `currency: Optional<String>`

  - `environment: Optional<String>`

  - `organizationId: Optional<String>`

### Returns

- `class Account:`

  - `id: String`

  - `accountNumber: String`

  - `accountType: AccountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `balance: String`

  - `currency: String`

  - `environment: String`

  - `status: Status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `userId: String`

  - `adminUserId: Optional<String>`

  - `createdAt: Optional<LocalDateTime>`

  - `organizationId: Optional<String>`

  - `updatedAt: Optional<LocalDateTime>`

  - `userRole: Optional<String>`

### Example

```kotlin
package com.rails.api.example

import com.rails.api.client.RailsClient
import com.rails.api.client.okhttp.RailsOkHttpClient
import com.rails.api.models.accounts.Account
import com.rails.api.models.accounts.AccountCreateParams

fun main() {
    val client: RailsClient = RailsOkHttpClient.fromEnv()

    val params: AccountCreateParams = AccountCreateParams.builder()
        .accountType(AccountCreateParams.AccountType.CHECKING)
        .userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
        .build()
    val account: Account = client.accounts().create(params)
}
```

#### Response

```json
{
  "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "account_number": "account_number",
  "account_type": "checking",
  "balance": "balance",
  "currency": "currency",
  "environment": "environment",
  "status": "active",
  "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "created_at": "2019-12-27T18:11:19.117Z",
  "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "updated_at": "2019-12-27T18:11:19.117Z",
  "user_role": "user_role"
}
```

## List accounts

`accounts().list(AccountListParamsparams, RequestOptionsrequestOptions = RequestOptions.none()) : List<Account>`

**get** `/api/v1/accounts`

List accounts

### Parameters

- `params: AccountListParams`

  - `userId: String`

### Example

```kotlin
package com.rails.api.example

import com.rails.api.client.RailsClient
import com.rails.api.client.okhttp.RailsOkHttpClient
import com.rails.api.models.accounts.Account
import com.rails.api.models.accounts.AccountListParams

fun main() {
    val client: RailsClient = RailsOkHttpClient.fromEnv()

    val params: AccountListParams = AccountListParams.builder()
        .userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
        .build()
    val accounts: List<Account> = client.accounts().list(params)
}
```

#### Response

```json
[
  {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "account_number": "account_number",
    "account_type": "checking",
    "balance": "balance",
    "currency": "currency",
    "environment": "environment",
    "status": "active",
    "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "created_at": "2019-12-27T18:11:19.117Z",
    "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "updated_at": "2019-12-27T18:11:19.117Z",
    "user_role": "user_role"
  }
]
```

## Retrieve account

`accounts().retrieve(AccountRetrieveParamsparams = AccountRetrieveParams.none(), RequestOptionsrequestOptions = RequestOptions.none()) : Account`

**get** `/api/v1/accounts/{id}`

Retrieve account

### Parameters

- `params: AccountRetrieveParams`

  - `id: Optional<String>`

### Returns

- `class Account:`

  - `id: String`

  - `accountNumber: String`

  - `accountType: AccountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `balance: String`

  - `currency: String`

  - `environment: String`

  - `status: Status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `userId: String`

  - `adminUserId: Optional<String>`

  - `createdAt: Optional<LocalDateTime>`

  - `organizationId: Optional<String>`

  - `updatedAt: Optional<LocalDateTime>`

  - `userRole: Optional<String>`

### Example

```kotlin
package com.rails.api.example

import com.rails.api.client.RailsClient
import com.rails.api.client.okhttp.RailsOkHttpClient
import com.rails.api.models.accounts.Account
import com.rails.api.models.accounts.AccountRetrieveParams

fun main() {
    val client: RailsClient = RailsOkHttpClient.fromEnv()

    val account: Account = client.accounts().retrieve("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
}
```

#### Response

```json
{
  "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "account_number": "account_number",
  "account_type": "checking",
  "balance": "balance",
  "currency": "currency",
  "environment": "environment",
  "status": "active",
  "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "created_at": "2019-12-27T18:11:19.117Z",
  "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "updated_at": "2019-12-27T18:11:19.117Z",
  "user_role": "user_role"
}
```

## Update account status

`accounts().updateStatus(AccountUpdateStatusParamsparams = AccountUpdateStatusParams.none(), RequestOptionsrequestOptions = RequestOptions.none()) : Account`

**patch** `/api/v1/accounts/{id}`

Update account status

### Parameters

- `params: AccountUpdateStatusParams`

  - `id: Optional<String>`

  - `status: Optional<Status>`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

### Returns

- `class Account:`

  - `id: String`

  - `accountNumber: String`

  - `accountType: AccountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `balance: String`

  - `currency: String`

  - `environment: String`

  - `status: Status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `userId: String`

  - `adminUserId: Optional<String>`

  - `createdAt: Optional<LocalDateTime>`

  - `organizationId: Optional<String>`

  - `updatedAt: Optional<LocalDateTime>`

  - `userRole: Optional<String>`

### Example

```kotlin
package com.rails.api.example

import com.rails.api.client.RailsClient
import com.rails.api.client.okhttp.RailsOkHttpClient
import com.rails.api.models.accounts.Account
import com.rails.api.models.accounts.AccountUpdateStatusParams

fun main() {
    val client: RailsClient = RailsOkHttpClient.fromEnv()

    val account: Account = client.accounts().updateStatus("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
}
```

#### Response

```json
{
  "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "account_number": "account_number",
  "account_type": "checking",
  "balance": "balance",
  "currency": "currency",
  "environment": "environment",
  "status": "active",
  "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "created_at": "2019-12-27T18:11:19.117Z",
  "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "updated_at": "2019-12-27T18:11:19.117Z",
  "user_role": "user_role"
}
```

## Close account

`accounts().close(AccountCloseParamsparams = AccountCloseParams.none(), RequestOptionsrequestOptions = RequestOptions.none()) : Account`

**delete** `/api/v1/accounts/{id}`

Close account

### Parameters

- `params: AccountCloseParams`

  - `id: Optional<String>`

### Returns

- `class Account:`

  - `id: String`

  - `accountNumber: String`

  - `accountType: AccountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `balance: String`

  - `currency: String`

  - `environment: String`

  - `status: Status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `userId: String`

  - `adminUserId: Optional<String>`

  - `createdAt: Optional<LocalDateTime>`

  - `organizationId: Optional<String>`

  - `updatedAt: Optional<LocalDateTime>`

  - `userRole: Optional<String>`

### Example

```kotlin
package com.rails.api.example

import com.rails.api.client.RailsClient
import com.rails.api.client.okhttp.RailsOkHttpClient
import com.rails.api.models.accounts.Account
import com.rails.api.models.accounts.AccountCloseParams

fun main() {
    val client: RailsClient = RailsOkHttpClient.fromEnv()

    val account: Account = client.accounts().close("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
}
```

#### Response

```json
{
  "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "account_number": "account_number",
  "account_type": "checking",
  "balance": "balance",
  "currency": "currency",
  "environment": "environment",
  "status": "active",
  "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "created_at": "2019-12-27T18:11:19.117Z",
  "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  "updated_at": "2019-12-27T18:11:19.117Z",
  "user_role": "user_role"
}
```

## Deposit into account

`accounts().deposit(AccountDepositParamsparams, RequestOptionsrequestOptions = RequestOptions.none()) : AccountDepositResponse`

**post** `/api/v1/accounts/{id}/deposit`

Deposit into account

### Parameters

- `params: AccountDepositParams`

  - `id: Optional<String>`

  - `amount: String`

  - `description: Optional<String>`

### Returns

- `class AccountDepositResponse:`

  - `account: Account`

    - `id: String`

    - `accountNumber: String`

    - `accountType: AccountType`

      - `CHECKING("checking")`

      - `SAVING("saving")`

    - `balance: String`

    - `currency: String`

    - `environment: String`

    - `status: Status`

      - `ACTIVE("active")`

      - `SUSPENDED("suspended")`

      - `CLOSED("closed")`

    - `userId: String`

    - `adminUserId: Optional<String>`

    - `createdAt: Optional<LocalDateTime>`

    - `organizationId: Optional<String>`

    - `updatedAt: Optional<LocalDateTime>`

    - `userRole: Optional<String>`

  - `transaction: Transaction`

    - `id: String`

    - `accountId: String`

    - `amount: String`

    - `balanceAfter: String`

    - `createdAt: LocalDateTime`

    - `currency: String`

    - `status: Status`

      - `PENDING("pending")`

      - `COMPLETED("completed")`

      - `FAILED("failed")`

      - `CANCELLED("cancelled")`

    - `transactionType: TransactionType`

      - `DEPOSIT("deposit")`

      - `WITHDRAWAL("withdrawal")`

      - `TRANSFER("transfer")`

      - `RECURRING_PAYMENT("recurring_payment")`

      - `SAVINGS_WITHDRAW("savings_withdraw")`

    - `updatedAt: LocalDateTime`

    - `description: Optional<String>`

    - `externalRecipientId: Optional<String>`

    - `recipientAccountId: Optional<String>`

    - `referenceId: Optional<String>`

### Example

```kotlin
package com.rails.api.example

import com.rails.api.client.RailsClient
import com.rails.api.client.okhttp.RailsOkHttpClient
import com.rails.api.models.accounts.AccountDepositParams
import com.rails.api.models.accounts.AccountDepositResponse

fun main() {
    val client: RailsClient = RailsOkHttpClient.fromEnv()

    val params: AccountDepositParams = AccountDepositParams.builder()
        .id("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
        .amount("amount")
        .build()
    val response: AccountDepositResponse = client.accounts().deposit(params)
}
```

#### Response

```json
{
  "account": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "account_number": "account_number",
    "account_type": "checking",
    "balance": "balance",
    "currency": "currency",
    "environment": "environment",
    "status": "active",
    "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "created_at": "2019-12-27T18:11:19.117Z",
    "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "updated_at": "2019-12-27T18:11:19.117Z",
    "user_role": "user_role"
  },
  "transaction": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "amount": "amount",
    "balance_after": "balance_after",
    "created_at": "2019-12-27T18:11:19.117Z",
    "currency": "currency",
    "status": "pending",
    "transaction_type": "deposit",
    "updated_at": "2019-12-27T18:11:19.117Z",
    "description": "description",
    "external_recipient_id": "external_recipient_id",
    "recipient_account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "reference_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
  }
}
```

## Withdraw from account

`accounts().withdraw(AccountWithdrawParamsparams, RequestOptionsrequestOptions = RequestOptions.none()) : AccountWithdrawResponse`

**post** `/api/v1/accounts/{id}/withdraw`

Withdraw from account

### Parameters

- `params: AccountWithdrawParams`

  - `id: Optional<String>`

  - `amount: String`

  - `description: Optional<String>`

### Returns

- `class AccountWithdrawResponse:`

  - `account: Account`

    - `id: String`

    - `accountNumber: String`

    - `accountType: AccountType`

      - `CHECKING("checking")`

      - `SAVING("saving")`

    - `balance: String`

    - `currency: String`

    - `environment: String`

    - `status: Status`

      - `ACTIVE("active")`

      - `SUSPENDED("suspended")`

      - `CLOSED("closed")`

    - `userId: String`

    - `adminUserId: Optional<String>`

    - `createdAt: Optional<LocalDateTime>`

    - `organizationId: Optional<String>`

    - `updatedAt: Optional<LocalDateTime>`

    - `userRole: Optional<String>`

  - `transaction: Transaction`

    - `id: String`

    - `accountId: String`

    - `amount: String`

    - `balanceAfter: String`

    - `createdAt: LocalDateTime`

    - `currency: String`

    - `status: Status`

      - `PENDING("pending")`

      - `COMPLETED("completed")`

      - `FAILED("failed")`

      - `CANCELLED("cancelled")`

    - `transactionType: TransactionType`

      - `DEPOSIT("deposit")`

      - `WITHDRAWAL("withdrawal")`

      - `TRANSFER("transfer")`

      - `RECURRING_PAYMENT("recurring_payment")`

      - `SAVINGS_WITHDRAW("savings_withdraw")`

    - `updatedAt: LocalDateTime`

    - `description: Optional<String>`

    - `externalRecipientId: Optional<String>`

    - `recipientAccountId: Optional<String>`

    - `referenceId: Optional<String>`

### Example

```kotlin
package com.rails.api.example

import com.rails.api.client.RailsClient
import com.rails.api.client.okhttp.RailsOkHttpClient
import com.rails.api.models.accounts.AccountWithdrawParams
import com.rails.api.models.accounts.AccountWithdrawResponse

fun main() {
    val client: RailsClient = RailsOkHttpClient.fromEnv()

    val params: AccountWithdrawParams = AccountWithdrawParams.builder()
        .id("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
        .amount("amount")
        .build()
    val response: AccountWithdrawResponse = client.accounts().withdraw(params)
}
```

#### Response

```json
{
  "account": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "account_number": "account_number",
    "account_type": "checking",
    "balance": "balance",
    "currency": "currency",
    "environment": "environment",
    "status": "active",
    "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "created_at": "2019-12-27T18:11:19.117Z",
    "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "updated_at": "2019-12-27T18:11:19.117Z",
    "user_role": "user_role"
  },
  "transaction": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "amount": "amount",
    "balance_after": "balance_after",
    "created_at": "2019-12-27T18:11:19.117Z",
    "currency": "currency",
    "status": "pending",
    "transaction_type": "deposit",
    "updated_at": "2019-12-27T18:11:19.117Z",
    "description": "description",
    "external_recipient_id": "external_recipient_id",
    "recipient_account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "reference_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
  }
}
```

## Transfer between accounts

`accounts().transfer(AccountTransferParamsparams, RequestOptionsrequestOptions = RequestOptions.none()) : AccountTransferResponse`

**post** `/api/v1/accounts/{id}/transfer`

Transfer between accounts

### Parameters

- `params: AccountTransferParams`

  - `id: Optional<String>`

  - `amount: String`

  - `toAccountId: String`

  - `description: Optional<String>`

### Returns

- `class AccountTransferResponse:`

  - `fromAccount: Account`

    - `id: String`

    - `accountNumber: String`

    - `accountType: AccountType`

      - `CHECKING("checking")`

      - `SAVING("saving")`

    - `balance: String`

    - `currency: String`

    - `environment: String`

    - `status: Status`

      - `ACTIVE("active")`

      - `SUSPENDED("suspended")`

      - `CLOSED("closed")`

    - `userId: String`

    - `adminUserId: Optional<String>`

    - `createdAt: Optional<LocalDateTime>`

    - `organizationId: Optional<String>`

    - `updatedAt: Optional<LocalDateTime>`

    - `userRole: Optional<String>`

  - `toAccount: Account`

  - `transaction: Transaction`

    - `id: String`

    - `accountId: String`

    - `amount: String`

    - `balanceAfter: String`

    - `createdAt: LocalDateTime`

    - `currency: String`

    - `status: Status`

      - `PENDING("pending")`

      - `COMPLETED("completed")`

      - `FAILED("failed")`

      - `CANCELLED("cancelled")`

    - `transactionType: TransactionType`

      - `DEPOSIT("deposit")`

      - `WITHDRAWAL("withdrawal")`

      - `TRANSFER("transfer")`

      - `RECURRING_PAYMENT("recurring_payment")`

      - `SAVINGS_WITHDRAW("savings_withdraw")`

    - `updatedAt: LocalDateTime`

    - `description: Optional<String>`

    - `externalRecipientId: Optional<String>`

    - `recipientAccountId: Optional<String>`

    - `referenceId: Optional<String>`

### Example

```kotlin
package com.rails.api.example

import com.rails.api.client.RailsClient
import com.rails.api.client.okhttp.RailsOkHttpClient
import com.rails.api.models.accounts.AccountTransferParams
import com.rails.api.models.accounts.AccountTransferResponse

fun main() {
    val client: RailsClient = RailsOkHttpClient.fromEnv()

    val params: AccountTransferParams = AccountTransferParams.builder()
        .id("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
        .amount("amount")
        .toAccountId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
        .build()
    val response: AccountTransferResponse = client.accounts().transfer(params)
}
```

#### Response

```json
{
  "from_account": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "account_number": "account_number",
    "account_type": "checking",
    "balance": "balance",
    "currency": "currency",
    "environment": "environment",
    "status": "active",
    "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "created_at": "2019-12-27T18:11:19.117Z",
    "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "updated_at": "2019-12-27T18:11:19.117Z",
    "user_role": "user_role"
  },
  "to_account": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "account_number": "account_number",
    "account_type": "checking",
    "balance": "balance",
    "currency": "currency",
    "environment": "environment",
    "status": "active",
    "user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "admin_user_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "created_at": "2019-12-27T18:11:19.117Z",
    "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "updated_at": "2019-12-27T18:11:19.117Z",
    "user_role": "user_role"
  },
  "transaction": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "amount": "amount",
    "balance_after": "balance_after",
    "created_at": "2019-12-27T18:11:19.117Z",
    "currency": "currency",
    "status": "pending",
    "transaction_type": "deposit",
    "updated_at": "2019-12-27T18:11:19.117Z",
    "description": "description",
    "external_recipient_id": "external_recipient_id",
    "recipient_account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "reference_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
  }
}
```

## Domain Types

### Account

- `class Account:`

  - `id: String`

  - `accountNumber: String`

  - `accountType: AccountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `balance: String`

  - `currency: String`

  - `environment: String`

  - `status: Status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `userId: String`

  - `adminUserId: Optional<String>`

  - `createdAt: Optional<LocalDateTime>`

  - `organizationId: Optional<String>`

  - `updatedAt: Optional<LocalDateTime>`

  - `userRole: Optional<String>`
