# Transactions

## List transactions by organization

`client.Transactions.List(ctx, query) (*TransactionListResponse, error)`

**get** `/api/v1/transactions`

List transactions by organization

### Parameters

- `query TransactionListParams`

  - `OrganizationID param.Field[string]`

  - `Page param.Field[int64]`

  - `PerPage param.Field[int64]`

### Returns

- `type TransactionListResponse struct{…}`

  - `Data []TransactionListResponseData`

    - `ID string`

    - `Amount int64`

      Amount in minor units

    - `CreatedAt Time`

    - `Currency string`

    - `FromAccountID string`

    - `OrganizationID string`

    - `Status string`

      - `const TransactionListResponseDataStatusPending TransactionListResponseDataStatus = "pending"`

      - `const TransactionListResponseDataStatusPosted TransactionListResponseDataStatus = "posted"`

      - `const TransactionListResponseDataStatusFailed TransactionListResponseDataStatus = "failed"`

    - `ToAccountID string`

    - `TransactionKind string`

      - `const TransactionListResponseDataTransactionKindDeposit TransactionListResponseDataTransactionKind = "deposit"`

      - `const TransactionListResponseDataTransactionKindWithdraw TransactionListResponseDataTransactionKind = "withdraw"`

      - `const TransactionListResponseDataTransactionKindTransfer TransactionListResponseDataTransactionKind = "transfer"`

    - `UpdatedAt Time`

    - `Environment string`

    - `FailureReason string`

    - `IdempotencyKey string`

  - `Pagination TransactionListResponsePagination`

    - `Page int64`

    - `PerPage int64`

    - `TotalCount int64`

    - `TotalPages int64`

### 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"),
  )
  transactions, err := client.Transactions.List(context.TODO(), rails.TransactionListParams{
    OrganizationID: "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", transactions.Data)
}
```

#### Response

```json
{
  "data": [
    {
      "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "amount": 0,
      "created_at": "2019-12-27T18:11:19.117Z",
      "currency": "currency",
      "from_account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "organization_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "status": "pending",
      "to_account_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "transaction_kind": "deposit",
      "updated_at": "2019-12-27T18:11:19.117Z",
      "environment": "environment",
      "failure_reason": "failure_reason",
      "idempotency_key": "idempotency_key"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 1,
    "total_count": 0,
    "total_pages": 0
  }
}
```

## List account transactions

`client.Transactions.ListByAccount(ctx, accountID, query) (*[]Transaction, error)`

**get** `/api/v1/accounts/{account_id}/transactions`

List account transactions

### Parameters

- `accountID string`

- `query TransactionListByAccountParams`

  - `Limit param.Field[int64]`

### Returns

- `type TransactionListByAccountResponse []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"),
  )
  transactions, err := client.Transactions.ListByAccount(
    context.TODO(),
    "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    rails.TransactionListByAccountParams{

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

#### Response

```json
[
  {
    "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"
  }
]
```

## Retrieve transaction

`client.Transactions.Get(ctx, id) (*Transaction, error)`

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

Retrieve transaction

### Parameters

- `id string`

### Returns

- `type Transaction struct{…}`

  - `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"),
  )
  transaction, err := client.Transactions.Get(context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", transaction.ID)
}
```

#### Response

```json
{
  "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"
}
```
