# Accounts

## Create account

`client.Accounts.New(ctx, body) (*Account, error)`

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

Create account

### Parameters

- `body AccountNewParams`

  - `AccountType param.Field[AccountNewParamsAccountType]`

    - `const AccountNewParamsAccountTypeChecking AccountNewParamsAccountType = "checking"`

    - `const AccountNewParamsAccountTypeSaving AccountNewParamsAccountType = "saving"`

  - `UserID param.Field[string]`

  - `Currency param.Field[string]`

  - `Environment param.Field[string]`

  - `OrganizationID param.Field[string]`

### Returns

- `type Account struct{…}`

  - `ID string`

  - `AccountNumber string`

  - `AccountType AccountAccountType`

    - `const AccountAccountTypeChecking AccountAccountType = "checking"`

    - `const AccountAccountTypeSaving AccountAccountType = "saving"`

  - `Balance string`

  - `Currency string`

  - `Environment string`

  - `Status AccountStatus`

    - `const AccountStatusActive AccountStatus = "active"`

    - `const AccountStatusSuspended AccountStatus = "suspended"`

    - `const AccountStatusClosed AccountStatus = "closed"`

  - `UserID string`

  - `AdminUserID string`

  - `CreatedAt Time`

  - `OrganizationID string`

  - `UpdatedAt Time`

  - `UserRole string`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/railsinfra/rails-go"
  "github.com/railsinfra/rails-go/option"
)

func main() {
  client := rails.NewClient(
    option.WithAPIKey("My API Key"),
  )
  account, err := client.Accounts.New(context.TODO(), rails.AccountNewParams{
    AccountType: rails.AccountNewParamsAccountTypeChecking,
    UserID: "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", account.ID)
}
```

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

`client.Accounts.List(ctx, query) (*[]Account, error)`

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

List accounts

### Parameters

- `query AccountListParams`

  - `UserID param.Field[string]`

### Returns

- `type AccountListResponse []Account`

  - `ID string`

  - `AccountNumber string`

  - `AccountType AccountAccountType`

    - `const AccountAccountTypeChecking AccountAccountType = "checking"`

    - `const AccountAccountTypeSaving AccountAccountType = "saving"`

  - `Balance string`

  - `Currency string`

  - `Environment string`

  - `Status AccountStatus`

    - `const AccountStatusActive AccountStatus = "active"`

    - `const AccountStatusSuspended AccountStatus = "suspended"`

    - `const AccountStatusClosed AccountStatus = "closed"`

  - `UserID string`

  - `AdminUserID string`

  - `CreatedAt Time`

  - `OrganizationID string`

  - `UpdatedAt Time`

  - `UserRole string`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/railsinfra/rails-go"
  "github.com/railsinfra/rails-go/option"
)

func main() {
  client := rails.NewClient(
    option.WithAPIKey("My API Key"),
  )
  accounts, err := client.Accounts.List(context.TODO(), rails.AccountListParams{
    UserID: "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", 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

`client.Accounts.Get(ctx, id) (*Account, error)`

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

Retrieve account

### Parameters

- `id string`

### Returns

- `type Account struct{…}`

  - `ID string`

  - `AccountNumber string`

  - `AccountType AccountAccountType`

    - `const AccountAccountTypeChecking AccountAccountType = "checking"`

    - `const AccountAccountTypeSaving AccountAccountType = "saving"`

  - `Balance string`

  - `Currency string`

  - `Environment string`

  - `Status AccountStatus`

    - `const AccountStatusActive AccountStatus = "active"`

    - `const AccountStatusSuspended AccountStatus = "suspended"`

    - `const AccountStatusClosed AccountStatus = "closed"`

  - `UserID string`

  - `AdminUserID string`

  - `CreatedAt Time`

  - `OrganizationID string`

  - `UpdatedAt Time`

  - `UserRole string`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/railsinfra/rails-go"
  "github.com/railsinfra/rails-go/option"
)

func main() {
  client := rails.NewClient(
    option.WithAPIKey("My API Key"),
  )
  account, err := client.Accounts.Get(context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", account.ID)
}
```

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

`client.Accounts.UpdateStatus(ctx, id, body) (*Account, error)`

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

Update account status

### Parameters

- `id string`

- `body AccountUpdateStatusParams`

  - `Status param.Field[AccountUpdateStatusParamsStatus]`

    - `const AccountUpdateStatusParamsStatusActive AccountUpdateStatusParamsStatus = "active"`

    - `const AccountUpdateStatusParamsStatusSuspended AccountUpdateStatusParamsStatus = "suspended"`

    - `const AccountUpdateStatusParamsStatusClosed AccountUpdateStatusParamsStatus = "closed"`

### Returns

- `type Account struct{…}`

  - `ID string`

  - `AccountNumber string`

  - `AccountType AccountAccountType`

    - `const AccountAccountTypeChecking AccountAccountType = "checking"`

    - `const AccountAccountTypeSaving AccountAccountType = "saving"`

  - `Balance string`

  - `Currency string`

  - `Environment string`

  - `Status AccountStatus`

    - `const AccountStatusActive AccountStatus = "active"`

    - `const AccountStatusSuspended AccountStatus = "suspended"`

    - `const AccountStatusClosed AccountStatus = "closed"`

  - `UserID string`

  - `AdminUserID string`

  - `CreatedAt Time`

  - `OrganizationID string`

  - `UpdatedAt Time`

  - `UserRole string`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/railsinfra/rails-go"
  "github.com/railsinfra/rails-go/option"
)

func main() {
  client := rails.NewClient(
    option.WithAPIKey("My API Key"),
  )
  account, err := client.Accounts.UpdateStatus(
    context.TODO(),
    "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    rails.AccountUpdateStatusParams{

    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", account.ID)
}
```

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

`client.Accounts.Close(ctx, id) (*Account, error)`

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

Close account

### Parameters

- `id string`

### Returns

- `type Account struct{…}`

  - `ID string`

  - `AccountNumber string`

  - `AccountType AccountAccountType`

    - `const AccountAccountTypeChecking AccountAccountType = "checking"`

    - `const AccountAccountTypeSaving AccountAccountType = "saving"`

  - `Balance string`

  - `Currency string`

  - `Environment string`

  - `Status AccountStatus`

    - `const AccountStatusActive AccountStatus = "active"`

    - `const AccountStatusSuspended AccountStatus = "suspended"`

    - `const AccountStatusClosed AccountStatus = "closed"`

  - `UserID string`

  - `AdminUserID string`

  - `CreatedAt Time`

  - `OrganizationID string`

  - `UpdatedAt Time`

  - `UserRole string`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/railsinfra/rails-go"
  "github.com/railsinfra/rails-go/option"
)

func main() {
  client := rails.NewClient(
    option.WithAPIKey("My API Key"),
  )
  account, err := client.Accounts.Close(context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", account.ID)
}
```

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

`client.Accounts.Deposit(ctx, id, body) (*AccountDepositResponse, error)`

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

Deposit into account

### Parameters

- `id string`

- `body AccountDepositParams`

  - `Amount param.Field[string]`

  - `Description param.Field[string]`

### Returns

- `type AccountDepositResponse struct{…}`

  - `Account Account`

    - `ID string`

    - `AccountNumber string`

    - `AccountType AccountAccountType`

      - `const AccountAccountTypeChecking AccountAccountType = "checking"`

      - `const AccountAccountTypeSaving AccountAccountType = "saving"`

    - `Balance string`

    - `Currency string`

    - `Environment string`

    - `Status AccountStatus`

      - `const AccountStatusActive AccountStatus = "active"`

      - `const AccountStatusSuspended AccountStatus = "suspended"`

      - `const AccountStatusClosed AccountStatus = "closed"`

    - `UserID string`

    - `AdminUserID string`

    - `CreatedAt Time`

    - `OrganizationID string`

    - `UpdatedAt Time`

    - `UserRole string`

  - `Transaction Transaction`

    - `ID string`

    - `AccountID string`

    - `Amount string`

    - `BalanceAfter string`

    - `CreatedAt Time`

    - `Currency string`

    - `Status TransactionStatus`

      - `const TransactionStatusPending TransactionStatus = "pending"`

      - `const TransactionStatusCompleted TransactionStatus = "completed"`

      - `const TransactionStatusFailed TransactionStatus = "failed"`

      - `const TransactionStatusCancelled TransactionStatus = "cancelled"`

    - `TransactionType TransactionTransactionType`

      - `const TransactionTransactionTypeDeposit TransactionTransactionType = "deposit"`

      - `const TransactionTransactionTypeWithdrawal TransactionTransactionType = "withdrawal"`

      - `const TransactionTransactionTypeTransfer TransactionTransactionType = "transfer"`

      - `const TransactionTransactionTypeRecurringPayment TransactionTransactionType = "recurring_payment"`

      - `const TransactionTransactionTypeSavingsWithdraw TransactionTransactionType = "savings_withdraw"`

    - `UpdatedAt Time`

    - `Description string`

    - `ExternalRecipientID string`

    - `RecipientAccountID string`

    - `ReferenceID string`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/railsinfra/rails-go"
  "github.com/railsinfra/rails-go/option"
)

func main() {
  client := rails.NewClient(
    option.WithAPIKey("My API Key"),
  )
  response, err := client.Accounts.Deposit(
    context.TODO(),
    "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    rails.AccountDepositParams{
      Amount: "amount",
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", response.Account)
}
```

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

`client.Accounts.Withdraw(ctx, id, body) (*AccountWithdrawResponse, error)`

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

Withdraw from account

### Parameters

- `id string`

- `body AccountWithdrawParams`

  - `Amount param.Field[string]`

  - `Description param.Field[string]`

### Returns

- `type AccountWithdrawResponse struct{…}`

  - `Account Account`

    - `ID string`

    - `AccountNumber string`

    - `AccountType AccountAccountType`

      - `const AccountAccountTypeChecking AccountAccountType = "checking"`

      - `const AccountAccountTypeSaving AccountAccountType = "saving"`

    - `Balance string`

    - `Currency string`

    - `Environment string`

    - `Status AccountStatus`

      - `const AccountStatusActive AccountStatus = "active"`

      - `const AccountStatusSuspended AccountStatus = "suspended"`

      - `const AccountStatusClosed AccountStatus = "closed"`

    - `UserID string`

    - `AdminUserID string`

    - `CreatedAt Time`

    - `OrganizationID string`

    - `UpdatedAt Time`

    - `UserRole string`

  - `Transaction Transaction`

    - `ID string`

    - `AccountID string`

    - `Amount string`

    - `BalanceAfter string`

    - `CreatedAt Time`

    - `Currency string`

    - `Status TransactionStatus`

      - `const TransactionStatusPending TransactionStatus = "pending"`

      - `const TransactionStatusCompleted TransactionStatus = "completed"`

      - `const TransactionStatusFailed TransactionStatus = "failed"`

      - `const TransactionStatusCancelled TransactionStatus = "cancelled"`

    - `TransactionType TransactionTransactionType`

      - `const TransactionTransactionTypeDeposit TransactionTransactionType = "deposit"`

      - `const TransactionTransactionTypeWithdrawal TransactionTransactionType = "withdrawal"`

      - `const TransactionTransactionTypeTransfer TransactionTransactionType = "transfer"`

      - `const TransactionTransactionTypeRecurringPayment TransactionTransactionType = "recurring_payment"`

      - `const TransactionTransactionTypeSavingsWithdraw TransactionTransactionType = "savings_withdraw"`

    - `UpdatedAt Time`

    - `Description string`

    - `ExternalRecipientID string`

    - `RecipientAccountID string`

    - `ReferenceID string`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/railsinfra/rails-go"
  "github.com/railsinfra/rails-go/option"
)

func main() {
  client := rails.NewClient(
    option.WithAPIKey("My API Key"),
  )
  response, err := client.Accounts.Withdraw(
    context.TODO(),
    "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    rails.AccountWithdrawParams{
      Amount: "amount",
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", response.Account)
}
```

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

`client.Accounts.Transfer(ctx, id, body) (*AccountTransferResponse, error)`

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

Transfer between accounts

### Parameters

- `id string`

- `body AccountTransferParams`

  - `Amount param.Field[string]`

  - `ToAccountID param.Field[string]`

  - `Description param.Field[string]`

### Returns

- `type AccountTransferResponse struct{…}`

  - `FromAccount Account`

    - `ID string`

    - `AccountNumber string`

    - `AccountType AccountAccountType`

      - `const AccountAccountTypeChecking AccountAccountType = "checking"`

      - `const AccountAccountTypeSaving AccountAccountType = "saving"`

    - `Balance string`

    - `Currency string`

    - `Environment string`

    - `Status AccountStatus`

      - `const AccountStatusActive AccountStatus = "active"`

      - `const AccountStatusSuspended AccountStatus = "suspended"`

      - `const AccountStatusClosed AccountStatus = "closed"`

    - `UserID string`

    - `AdminUserID string`

    - `CreatedAt Time`

    - `OrganizationID string`

    - `UpdatedAt Time`

    - `UserRole string`

  - `ToAccount Account`

  - `Transaction Transaction`

    - `ID string`

    - `AccountID string`

    - `Amount string`

    - `BalanceAfter string`

    - `CreatedAt Time`

    - `Currency string`

    - `Status TransactionStatus`

      - `const TransactionStatusPending TransactionStatus = "pending"`

      - `const TransactionStatusCompleted TransactionStatus = "completed"`

      - `const TransactionStatusFailed TransactionStatus = "failed"`

      - `const TransactionStatusCancelled TransactionStatus = "cancelled"`

    - `TransactionType TransactionTransactionType`

      - `const TransactionTransactionTypeDeposit TransactionTransactionType = "deposit"`

      - `const TransactionTransactionTypeWithdrawal TransactionTransactionType = "withdrawal"`

      - `const TransactionTransactionTypeTransfer TransactionTransactionType = "transfer"`

      - `const TransactionTransactionTypeRecurringPayment TransactionTransactionType = "recurring_payment"`

      - `const TransactionTransactionTypeSavingsWithdraw TransactionTransactionType = "savings_withdraw"`

    - `UpdatedAt Time`

    - `Description string`

    - `ExternalRecipientID string`

    - `RecipientAccountID string`

    - `ReferenceID string`

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/railsinfra/rails-go"
  "github.com/railsinfra/rails-go/option"
)

func main() {
  client := rails.NewClient(
    option.WithAPIKey("My API Key"),
  )
  response, err := client.Accounts.Transfer(
    context.TODO(),
    "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    rails.AccountTransferParams{
      Amount: "amount",
      ToAccountID: "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", response.FromAccount)
}
```

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

- `type Account struct{…}`

  - `ID string`

  - `AccountNumber string`

  - `AccountType AccountAccountType`

    - `const AccountAccountTypeChecking AccountAccountType = "checking"`

    - `const AccountAccountTypeSaving AccountAccountType = "saving"`

  - `Balance string`

  - `Currency string`

  - `Environment string`

  - `Status AccountStatus`

    - `const AccountStatusActive AccountStatus = "active"`

    - `const AccountStatusSuspended AccountStatus = "suspended"`

    - `const AccountStatusClosed AccountStatus = "closed"`

  - `UserID string`

  - `AdminUserID string`

  - `CreatedAt Time`

  - `OrganizationID string`

  - `UpdatedAt Time`

  - `UserRole string`
