# Accounts

## Create account

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

Create account

### Body Parameters

- `account_type: "checking" or "saving"`

  - `"checking"`

  - `"saving"`

- `user_id: string`

- `currency: optional string`

- `environment: optional string`

- `organization_id: optional string`

### Returns

- `Account object { id, account_number, account_type, 10 more }`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

### Example

```http
curl https://accounts-service-staging.up.railway.app/api/v1/accounts \
    -H 'Content-Type: application/json' \
    -H "X-API-Key: $RAILS_API_KEY" \
    -d '{
          "account_type": "checking",
          "user_id": "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"
}
```

## List accounts

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

List accounts

### Query Parameters

- `user_id: string`

### Returns

- `id: string`

- `account_number: string`

- `account_type: "checking" or "saving"`

  - `"checking"`

  - `"saving"`

- `balance: string`

- `currency: string`

- `environment: string`

- `status: "active" or "suspended" or "closed"`

  - `"active"`

  - `"suspended"`

  - `"closed"`

- `user_id: string`

- `admin_user_id: optional string`

- `created_at: optional string`

- `organization_id: optional string`

- `updated_at: optional string`

- `user_role: optional string`

### Example

```http
curl https://accounts-service-staging.up.railway.app/api/v1/accounts \
    -H "X-API-Key: $RAILS_API_KEY"
```

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

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

Retrieve account

### Path Parameters

- `id: string`

### Returns

- `Account object { id, account_number, account_type, 10 more }`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

### Example

```http
curl https://accounts-service-staging.up.railway.app/api/v1/accounts/$ID \
    -H "X-API-Key: $RAILS_API_KEY"
```

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

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

Update account status

### Path Parameters

- `id: string`

### Body Parameters

- `status: optional "active" or "suspended" or "closed"`

  - `"active"`

  - `"suspended"`

  - `"closed"`

### Returns

- `Account object { id, account_number, account_type, 10 more }`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

### Example

```http
curl https://accounts-service-staging.up.railway.app/api/v1/accounts/$ID \
    -X PATCH \
    -H 'Content-Type: application/json' \
    -H "X-API-Key: $RAILS_API_KEY" \
    -d '{}'
```

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

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

Close account

### Path Parameters

- `id: string`

### Returns

- `Account object { id, account_number, account_type, 10 more }`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

### Example

```http
curl https://accounts-service-staging.up.railway.app/api/v1/accounts/$ID \
    -X DELETE \
    -H "X-API-Key: $RAILS_API_KEY"
```

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

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

Deposit into account

### Path Parameters

- `id: string`

### Body Parameters

- `amount: string`

- `description: optional string`

### Returns

- `account: Account`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

- `transaction: Transaction`

  - `id: string`

  - `account_id: string`

  - `amount: string`

  - `balance_after: string`

  - `created_at: string`

  - `currency: string`

  - `status: "pending" or "completed" or "failed" or "cancelled"`

    - `"pending"`

    - `"completed"`

    - `"failed"`

    - `"cancelled"`

  - `transaction_type: "deposit" or "withdrawal" or "transfer" or 2 more`

    - `"deposit"`

    - `"withdrawal"`

    - `"transfer"`

    - `"recurring_payment"`

    - `"savings_withdraw"`

  - `updated_at: string`

  - `description: optional string`

  - `external_recipient_id: optional string`

  - `recipient_account_id: optional string`

  - `reference_id: optional string`

### Example

```http
curl https://accounts-service-staging.up.railway.app/api/v1/accounts/$ID/deposit \
    -H 'Content-Type: application/json' \
    -H "X-API-Key: $RAILS_API_KEY" \
    -d '{
          "amount": "amount"
        }'
```

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

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

Withdraw from account

### Path Parameters

- `id: string`

### Body Parameters

- `amount: string`

- `description: optional string`

### Returns

- `account: Account`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

- `transaction: Transaction`

  - `id: string`

  - `account_id: string`

  - `amount: string`

  - `balance_after: string`

  - `created_at: string`

  - `currency: string`

  - `status: "pending" or "completed" or "failed" or "cancelled"`

    - `"pending"`

    - `"completed"`

    - `"failed"`

    - `"cancelled"`

  - `transaction_type: "deposit" or "withdrawal" or "transfer" or 2 more`

    - `"deposit"`

    - `"withdrawal"`

    - `"transfer"`

    - `"recurring_payment"`

    - `"savings_withdraw"`

  - `updated_at: string`

  - `description: optional string`

  - `external_recipient_id: optional string`

  - `recipient_account_id: optional string`

  - `reference_id: optional string`

### Example

```http
curl https://accounts-service-staging.up.railway.app/api/v1/accounts/$ID/withdraw \
    -H 'Content-Type: application/json' \
    -H "X-API-Key: $RAILS_API_KEY" \
    -d '{
          "amount": "amount"
        }'
```

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

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

Transfer between accounts

### Path Parameters

- `id: string`

### Body Parameters

- `amount: string`

- `to_account_id: string`

- `description: optional string`

### Returns

- `from_account: Account`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

- `to_account: Account`

- `transaction: Transaction`

  - `id: string`

  - `account_id: string`

  - `amount: string`

  - `balance_after: string`

  - `created_at: string`

  - `currency: string`

  - `status: "pending" or "completed" or "failed" or "cancelled"`

    - `"pending"`

    - `"completed"`

    - `"failed"`

    - `"cancelled"`

  - `transaction_type: "deposit" or "withdrawal" or "transfer" or 2 more`

    - `"deposit"`

    - `"withdrawal"`

    - `"transfer"`

    - `"recurring_payment"`

    - `"savings_withdraw"`

  - `updated_at: string`

  - `description: optional string`

  - `external_recipient_id: optional string`

  - `recipient_account_id: optional string`

  - `reference_id: optional string`

### Example

```http
curl https://accounts-service-staging.up.railway.app/api/v1/accounts/$ID/transfer \
    -H 'Content-Type: application/json' \
    -H "X-API-Key: $RAILS_API_KEY" \
    -d '{
          "amount": "amount",
          "to_account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
        }'
```

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

- `Account object { id, account_number, account_type, 10 more }`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

### Account List Response

- `AccountListResponse = array of Account`

  - `id: string`

  - `account_number: string`

  - `account_type: "checking" or "saving"`

    - `"checking"`

    - `"saving"`

  - `balance: string`

  - `currency: string`

  - `environment: string`

  - `status: "active" or "suspended" or "closed"`

    - `"active"`

    - `"suspended"`

    - `"closed"`

  - `user_id: string`

  - `admin_user_id: optional string`

  - `created_at: optional string`

  - `organization_id: optional string`

  - `updated_at: optional string`

  - `user_role: optional string`

### Account Deposit Response

- `AccountDepositResponse object { account, transaction }`

  - `account: Account`

    - `id: string`

    - `account_number: string`

    - `account_type: "checking" or "saving"`

      - `"checking"`

      - `"saving"`

    - `balance: string`

    - `currency: string`

    - `environment: string`

    - `status: "active" or "suspended" or "closed"`

      - `"active"`

      - `"suspended"`

      - `"closed"`

    - `user_id: string`

    - `admin_user_id: optional string`

    - `created_at: optional string`

    - `organization_id: optional string`

    - `updated_at: optional string`

    - `user_role: optional string`

  - `transaction: Transaction`

    - `id: string`

    - `account_id: string`

    - `amount: string`

    - `balance_after: string`

    - `created_at: string`

    - `currency: string`

    - `status: "pending" or "completed" or "failed" or "cancelled"`

      - `"pending"`

      - `"completed"`

      - `"failed"`

      - `"cancelled"`

    - `transaction_type: "deposit" or "withdrawal" or "transfer" or 2 more`

      - `"deposit"`

      - `"withdrawal"`

      - `"transfer"`

      - `"recurring_payment"`

      - `"savings_withdraw"`

    - `updated_at: string`

    - `description: optional string`

    - `external_recipient_id: optional string`

    - `recipient_account_id: optional string`

    - `reference_id: optional string`

### Account Withdraw Response

- `AccountWithdrawResponse object { account, transaction }`

  - `account: Account`

    - `id: string`

    - `account_number: string`

    - `account_type: "checking" or "saving"`

      - `"checking"`

      - `"saving"`

    - `balance: string`

    - `currency: string`

    - `environment: string`

    - `status: "active" or "suspended" or "closed"`

      - `"active"`

      - `"suspended"`

      - `"closed"`

    - `user_id: string`

    - `admin_user_id: optional string`

    - `created_at: optional string`

    - `organization_id: optional string`

    - `updated_at: optional string`

    - `user_role: optional string`

  - `transaction: Transaction`

    - `id: string`

    - `account_id: string`

    - `amount: string`

    - `balance_after: string`

    - `created_at: string`

    - `currency: string`

    - `status: "pending" or "completed" or "failed" or "cancelled"`

      - `"pending"`

      - `"completed"`

      - `"failed"`

      - `"cancelled"`

    - `transaction_type: "deposit" or "withdrawal" or "transfer" or 2 more`

      - `"deposit"`

      - `"withdrawal"`

      - `"transfer"`

      - `"recurring_payment"`

      - `"savings_withdraw"`

    - `updated_at: string`

    - `description: optional string`

    - `external_recipient_id: optional string`

    - `recipient_account_id: optional string`

    - `reference_id: optional string`

### Account Transfer Response

- `AccountTransferResponse object { from_account, to_account, transaction }`

  - `from_account: Account`

    - `id: string`

    - `account_number: string`

    - `account_type: "checking" or "saving"`

      - `"checking"`

      - `"saving"`

    - `balance: string`

    - `currency: string`

    - `environment: string`

    - `status: "active" or "suspended" or "closed"`

      - `"active"`

      - `"suspended"`

      - `"closed"`

    - `user_id: string`

    - `admin_user_id: optional string`

    - `created_at: optional string`

    - `organization_id: optional string`

    - `updated_at: optional string`

    - `user_role: optional string`

  - `to_account: Account`

  - `transaction: Transaction`

    - `id: string`

    - `account_id: string`

    - `amount: string`

    - `balance_after: string`

    - `created_at: string`

    - `currency: string`

    - `status: "pending" or "completed" or "failed" or "cancelled"`

      - `"pending"`

      - `"completed"`

      - `"failed"`

      - `"cancelled"`

    - `transaction_type: "deposit" or "withdrawal" or "transfer" or 2 more`

      - `"deposit"`

      - `"withdrawal"`

      - `"transfer"`

      - `"recurring_payment"`

      - `"savings_withdraw"`

    - `updated_at: string`

    - `description: optional string`

    - `external_recipient_id: optional string`

    - `recipient_account_id: optional string`

    - `reference_id: optional string`
