# Accounts

## Create account

`Account Accounts.Create(AccountCreateParamsparameters, CancellationTokencancellationToken = default)`

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

Create account

### Parameters

- `AccountCreateParams parameters`

  - `required AccountType accountType`

    - `"checking"Checking`

    - `"saving"Saving`

  - `required string userID`

  - `string currency`

  - `string? environment`

  - `string? organizationID`

### Returns

- `class Account:`

  - `required string ID`

  - `required string AccountNumber`

  - `required AccountType AccountType`

    - `"checking"Checking`

    - `"saving"Saving`

  - `required string Balance`

  - `required string Currency`

  - `required string Environment`

  - `required Status Status`

    - `"active"Active`

    - `"suspended"Suspended`

    - `"closed"Closed`

  - `required string UserID`

  - `string? AdminUserID`

  - `DateTimeOffset? CreatedAt`

  - `string? OrganizationID`

  - `DateTimeOffset? UpdatedAt`

  - `string? UserRole`

### Example

```csharp
AccountCreateParams parameters = new()
{
    AccountType = AccountType.Checking,
    UserID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
};

var account = await client.Accounts.Create(parameters);

Console.WriteLine(account);
```

#### 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

`IReadOnlyList<Account> Accounts.List(AccountListParamsparameters, CancellationTokencancellationToken = default)`

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

List accounts

### Parameters

- `AccountListParams parameters`

  - `required string userID`

### Example

```csharp
AccountListParams parameters = new()
{
    UserID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
};

var accounts = await client.Accounts.List(parameters);

Console.WriteLine(accounts);
```

#### 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(AccountRetrieveParamsparameters, CancellationTokencancellationToken = default)`

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

Retrieve account

### Parameters

- `AccountRetrieveParams parameters`

  - `required string id`

### Returns

- `class Account:`

  - `required string ID`

  - `required string AccountNumber`

  - `required AccountType AccountType`

    - `"checking"Checking`

    - `"saving"Saving`

  - `required string Balance`

  - `required string Currency`

  - `required string Environment`

  - `required Status Status`

    - `"active"Active`

    - `"suspended"Suspended`

    - `"closed"Closed`

  - `required string UserID`

  - `string? AdminUserID`

  - `DateTimeOffset? CreatedAt`

  - `string? OrganizationID`

  - `DateTimeOffset? UpdatedAt`

  - `string? UserRole`

### Example

```csharp
AccountRetrieveParams parameters = new()
{
    ID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
};

var account = await client.Accounts.Retrieve(parameters);

Console.WriteLine(account);
```

#### 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(AccountUpdateStatusParamsparameters, CancellationTokencancellationToken = default)`

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

Update account status

### Parameters

- `AccountUpdateStatusParams parameters`

  - `required string id`

  - `Status status`

    - `"active"Active`

    - `"suspended"Suspended`

    - `"closed"Closed`

### Returns

- `class Account:`

  - `required string ID`

  - `required string AccountNumber`

  - `required AccountType AccountType`

    - `"checking"Checking`

    - `"saving"Saving`

  - `required string Balance`

  - `required string Currency`

  - `required string Environment`

  - `required Status Status`

    - `"active"Active`

    - `"suspended"Suspended`

    - `"closed"Closed`

  - `required string UserID`

  - `string? AdminUserID`

  - `DateTimeOffset? CreatedAt`

  - `string? OrganizationID`

  - `DateTimeOffset? UpdatedAt`

  - `string? UserRole`

### Example

```csharp
AccountUpdateStatusParams parameters = new()
{
    ID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
};

var account = await client.Accounts.UpdateStatus(parameters);

Console.WriteLine(account);
```

#### 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(AccountCloseParamsparameters, CancellationTokencancellationToken = default)`

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

Close account

### Parameters

- `AccountCloseParams parameters`

  - `required string id`

### Returns

- `class Account:`

  - `required string ID`

  - `required string AccountNumber`

  - `required AccountType AccountType`

    - `"checking"Checking`

    - `"saving"Saving`

  - `required string Balance`

  - `required string Currency`

  - `required string Environment`

  - `required Status Status`

    - `"active"Active`

    - `"suspended"Suspended`

    - `"closed"Closed`

  - `required string UserID`

  - `string? AdminUserID`

  - `DateTimeOffset? CreatedAt`

  - `string? OrganizationID`

  - `DateTimeOffset? UpdatedAt`

  - `string? UserRole`

### Example

```csharp
AccountCloseParams parameters = new()
{
    ID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
};

var account = await client.Accounts.Close(parameters);

Console.WriteLine(account);
```

#### 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(AccountDepositParamsparameters, CancellationTokencancellationToken = default)`

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

Deposit into account

### Parameters

- `AccountDepositParams parameters`

  - `required string id`

  - `required string amount`

  - `string? description`

### Returns

- `class AccountDepositResponse:`

  - `required Account Account`

    - `required string ID`

    - `required string AccountNumber`

    - `required AccountType AccountType`

      - `"checking"Checking`

      - `"saving"Saving`

    - `required string Balance`

    - `required string Currency`

    - `required string Environment`

    - `required Status Status`

      - `"active"Active`

      - `"suspended"Suspended`

      - `"closed"Closed`

    - `required string UserID`

    - `string? AdminUserID`

    - `DateTimeOffset? CreatedAt`

    - `string? OrganizationID`

    - `DateTimeOffset? UpdatedAt`

    - `string? UserRole`

  - `required Transaction Transaction`

    - `required string ID`

    - `required string AccountID`

    - `required string Amount`

    - `required string BalanceAfter`

    - `required DateTimeOffset CreatedAt`

    - `required string Currency`

    - `required Status Status`

      - `"pending"Pending`

      - `"completed"Completed`

      - `"failed"Failed`

      - `"cancelled"Cancelled`

    - `required TransactionType TransactionType`

      - `"deposit"Deposit`

      - `"withdrawal"Withdrawal`

      - `"transfer"Transfer`

      - `"recurring_payment"RecurringPayment`

      - `"savings_withdraw"SavingsWithdraw`

    - `required DateTimeOffset UpdatedAt`

    - `string? Description`

    - `string? ExternalRecipientID`

    - `string? RecipientAccountID`

    - `string? ReferenceID`

### Example

```csharp
AccountDepositParams parameters = new()
{
    ID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    Amount = "amount",
};

var response = await client.Accounts.Deposit(parameters);

Console.WriteLine(response);
```

#### 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(AccountWithdrawParamsparameters, CancellationTokencancellationToken = default)`

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

Withdraw from account

### Parameters

- `AccountWithdrawParams parameters`

  - `required string id`

  - `required string amount`

  - `string? description`

### Returns

- `class AccountWithdrawResponse:`

  - `required Account Account`

    - `required string ID`

    - `required string AccountNumber`

    - `required AccountType AccountType`

      - `"checking"Checking`

      - `"saving"Saving`

    - `required string Balance`

    - `required string Currency`

    - `required string Environment`

    - `required Status Status`

      - `"active"Active`

      - `"suspended"Suspended`

      - `"closed"Closed`

    - `required string UserID`

    - `string? AdminUserID`

    - `DateTimeOffset? CreatedAt`

    - `string? OrganizationID`

    - `DateTimeOffset? UpdatedAt`

    - `string? UserRole`

  - `required Transaction Transaction`

    - `required string ID`

    - `required string AccountID`

    - `required string Amount`

    - `required string BalanceAfter`

    - `required DateTimeOffset CreatedAt`

    - `required string Currency`

    - `required Status Status`

      - `"pending"Pending`

      - `"completed"Completed`

      - `"failed"Failed`

      - `"cancelled"Cancelled`

    - `required TransactionType TransactionType`

      - `"deposit"Deposit`

      - `"withdrawal"Withdrawal`

      - `"transfer"Transfer`

      - `"recurring_payment"RecurringPayment`

      - `"savings_withdraw"SavingsWithdraw`

    - `required DateTimeOffset UpdatedAt`

    - `string? Description`

    - `string? ExternalRecipientID`

    - `string? RecipientAccountID`

    - `string? ReferenceID`

### Example

```csharp
AccountWithdrawParams parameters = new()
{
    ID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    Amount = "amount",
};

var response = await client.Accounts.Withdraw(parameters);

Console.WriteLine(response);
```

#### 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(AccountTransferParamsparameters, CancellationTokencancellationToken = default)`

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

Transfer between accounts

### Parameters

- `AccountTransferParams parameters`

  - `required string id`

  - `required string amount`

  - `required string toAccountID`

  - `string? description`

### Returns

- `class AccountTransferResponse:`

  - `required Account FromAccount`

    - `required string ID`

    - `required string AccountNumber`

    - `required AccountType AccountType`

      - `"checking"Checking`

      - `"saving"Saving`

    - `required string Balance`

    - `required string Currency`

    - `required string Environment`

    - `required Status Status`

      - `"active"Active`

      - `"suspended"Suspended`

      - `"closed"Closed`

    - `required string UserID`

    - `string? AdminUserID`

    - `DateTimeOffset? CreatedAt`

    - `string? OrganizationID`

    - `DateTimeOffset? UpdatedAt`

    - `string? UserRole`

  - `required Account ToAccount`

  - `required Transaction Transaction`

    - `required string ID`

    - `required string AccountID`

    - `required string Amount`

    - `required string BalanceAfter`

    - `required DateTimeOffset CreatedAt`

    - `required string Currency`

    - `required Status Status`

      - `"pending"Pending`

      - `"completed"Completed`

      - `"failed"Failed`

      - `"cancelled"Cancelled`

    - `required TransactionType TransactionType`

      - `"deposit"Deposit`

      - `"withdrawal"Withdrawal`

      - `"transfer"Transfer`

      - `"recurring_payment"RecurringPayment`

      - `"savings_withdraw"SavingsWithdraw`

    - `required DateTimeOffset UpdatedAt`

    - `string? Description`

    - `string? ExternalRecipientID`

    - `string? RecipientAccountID`

    - `string? ReferenceID`

### Example

```csharp
AccountTransferParams parameters = new()
{
    ID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    Amount = "amount",
    ToAccountID = "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
};

var response = await client.Accounts.Transfer(parameters);

Console.WriteLine(response);
```

#### 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:`

  - `required string ID`

  - `required string AccountNumber`

  - `required AccountType AccountType`

    - `"checking"Checking`

    - `"saving"Saving`

  - `required string Balance`

  - `required string Currency`

  - `required string Environment`

  - `required Status Status`

    - `"active"Active`

    - `"suspended"Suspended`

    - `"closed"Closed`

  - `required string UserID`

  - `string? AdminUserID`

  - `DateTimeOffset? CreatedAt`

  - `string? OrganizationID`

  - `DateTimeOffset? UpdatedAt`

  - `string? UserRole`
