# Accounts

## Create account

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

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

Create account

### Parameters

- `AccountCreateParams params`

  - `AccountType accountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `String userId`

  - `Optional<String> currency`

  - `Optional<String> environment`

  - `Optional<String> organizationId`

### Returns

- `class Account:`

  - `String id`

  - `String accountNumber`

  - `AccountType accountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `String balance`

  - `String currency`

  - `String environment`

  - `Status status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `String userId`

  - `Optional<String> adminUserId`

  - `Optional<LocalDateTime> createdAt`

  - `Optional<String> organizationId`

  - `Optional<LocalDateTime> updatedAt`

  - `Optional<String> userRole`

### Example

```java
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;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        RailsClient client = RailsOkHttpClient.fromEnv();

        AccountCreateParams params = AccountCreateParams.builder()
            .accountType(AccountCreateParams.AccountType.CHECKING)
            .userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
            .build();
        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

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

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

List accounts

### Parameters

- `AccountListParams params`

  - `String userId`

### Example

```java
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;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        RailsClient client = RailsOkHttpClient.fromEnv();

        AccountListParams params = AccountListParams.builder()
            .userId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
            .build();
        List<Account> accounts = 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

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

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

Retrieve account

### Parameters

- `AccountRetrieveParams params`

  - `Optional<String> id`

### Returns

- `class Account:`

  - `String id`

  - `String accountNumber`

  - `AccountType accountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `String balance`

  - `String currency`

  - `String environment`

  - `Status status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `String userId`

  - `Optional<String> adminUserId`

  - `Optional<LocalDateTime> createdAt`

  - `Optional<String> organizationId`

  - `Optional<LocalDateTime> updatedAt`

  - `Optional<String> userRole`

### Example

```java
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;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        RailsClient client = RailsOkHttpClient.fromEnv();

        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

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

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

Update account status

### Parameters

- `AccountUpdateStatusParams params`

  - `Optional<String> id`

  - `Optional<Status> status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

### Returns

- `class Account:`

  - `String id`

  - `String accountNumber`

  - `AccountType accountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `String balance`

  - `String currency`

  - `String environment`

  - `Status status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `String userId`

  - `Optional<String> adminUserId`

  - `Optional<LocalDateTime> createdAt`

  - `Optional<String> organizationId`

  - `Optional<LocalDateTime> updatedAt`

  - `Optional<String> userRole`

### Example

```java
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;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        RailsClient client = RailsOkHttpClient.fromEnv();

        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

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

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

Close account

### Parameters

- `AccountCloseParams params`

  - `Optional<String> id`

### Returns

- `class Account:`

  - `String id`

  - `String accountNumber`

  - `AccountType accountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `String balance`

  - `String currency`

  - `String environment`

  - `Status status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `String userId`

  - `Optional<String> adminUserId`

  - `Optional<LocalDateTime> createdAt`

  - `Optional<String> organizationId`

  - `Optional<LocalDateTime> updatedAt`

  - `Optional<String> userRole`

### Example

```java
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;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        RailsClient client = RailsOkHttpClient.fromEnv();

        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

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

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

Deposit into account

### Parameters

- `AccountDepositParams params`

  - `Optional<String> id`

  - `String amount`

  - `Optional<String> description`

### Returns

- `class AccountDepositResponse:`

  - `Account account`

    - `String id`

    - `String accountNumber`

    - `AccountType accountType`

      - `CHECKING("checking")`

      - `SAVING("saving")`

    - `String balance`

    - `String currency`

    - `String environment`

    - `Status status`

      - `ACTIVE("active")`

      - `SUSPENDED("suspended")`

      - `CLOSED("closed")`

    - `String userId`

    - `Optional<String> adminUserId`

    - `Optional<LocalDateTime> createdAt`

    - `Optional<String> organizationId`

    - `Optional<LocalDateTime> updatedAt`

    - `Optional<String> userRole`

  - `Transaction transaction`

    - `String id`

    - `String accountId`

    - `String amount`

    - `String balanceAfter`

    - `LocalDateTime createdAt`

    - `String currency`

    - `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")`

    - `LocalDateTime updatedAt`

    - `Optional<String> description`

    - `Optional<String> externalRecipientId`

    - `Optional<String> recipientAccountId`

    - `Optional<String> referenceId`

### Example

```java
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;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        RailsClient client = RailsOkHttpClient.fromEnv();

        AccountDepositParams params = AccountDepositParams.builder()
            .id("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
            .amount("amount")
            .build();
        AccountDepositResponse response = 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

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

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

Withdraw from account

### Parameters

- `AccountWithdrawParams params`

  - `Optional<String> id`

  - `String amount`

  - `Optional<String> description`

### Returns

- `class AccountWithdrawResponse:`

  - `Account account`

    - `String id`

    - `String accountNumber`

    - `AccountType accountType`

      - `CHECKING("checking")`

      - `SAVING("saving")`

    - `String balance`

    - `String currency`

    - `String environment`

    - `Status status`

      - `ACTIVE("active")`

      - `SUSPENDED("suspended")`

      - `CLOSED("closed")`

    - `String userId`

    - `Optional<String> adminUserId`

    - `Optional<LocalDateTime> createdAt`

    - `Optional<String> organizationId`

    - `Optional<LocalDateTime> updatedAt`

    - `Optional<String> userRole`

  - `Transaction transaction`

    - `String id`

    - `String accountId`

    - `String amount`

    - `String balanceAfter`

    - `LocalDateTime createdAt`

    - `String currency`

    - `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")`

    - `LocalDateTime updatedAt`

    - `Optional<String> description`

    - `Optional<String> externalRecipientId`

    - `Optional<String> recipientAccountId`

    - `Optional<String> referenceId`

### Example

```java
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;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        RailsClient client = RailsOkHttpClient.fromEnv();

        AccountWithdrawParams params = AccountWithdrawParams.builder()
            .id("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
            .amount("amount")
            .build();
        AccountWithdrawResponse response = 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

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

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

Transfer between accounts

### Parameters

- `AccountTransferParams params`

  - `Optional<String> id`

  - `String amount`

  - `String toAccountId`

  - `Optional<String> description`

### Returns

- `class AccountTransferResponse:`

  - `Account fromAccount`

    - `String id`

    - `String accountNumber`

    - `AccountType accountType`

      - `CHECKING("checking")`

      - `SAVING("saving")`

    - `String balance`

    - `String currency`

    - `String environment`

    - `Status status`

      - `ACTIVE("active")`

      - `SUSPENDED("suspended")`

      - `CLOSED("closed")`

    - `String userId`

    - `Optional<String> adminUserId`

    - `Optional<LocalDateTime> createdAt`

    - `Optional<String> organizationId`

    - `Optional<LocalDateTime> updatedAt`

    - `Optional<String> userRole`

  - `Account toAccount`

  - `Transaction transaction`

    - `String id`

    - `String accountId`

    - `String amount`

    - `String balanceAfter`

    - `LocalDateTime createdAt`

    - `String currency`

    - `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")`

    - `LocalDateTime updatedAt`

    - `Optional<String> description`

    - `Optional<String> externalRecipientId`

    - `Optional<String> recipientAccountId`

    - `Optional<String> referenceId`

### Example

```java
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;

public final class Main {
    private Main() {}

    public static void main(String[] args) {
        RailsClient client = RailsOkHttpClient.fromEnv();

        AccountTransferParams params = AccountTransferParams.builder()
            .id("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
            .amount("amount")
            .toAccountId("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
            .build();
        AccountTransferResponse response = 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:`

  - `String id`

  - `String accountNumber`

  - `AccountType accountType`

    - `CHECKING("checking")`

    - `SAVING("saving")`

  - `String balance`

  - `String currency`

  - `String environment`

  - `Status status`

    - `ACTIVE("active")`

    - `SUSPENDED("suspended")`

    - `CLOSED("closed")`

  - `String userId`

  - `Optional<String> adminUserId`

  - `Optional<LocalDateTime> createdAt`

  - `Optional<String> organizationId`

  - `Optional<LocalDateTime> updatedAt`

  - `Optional<String> userRole`
