> ## Documentation Index
> Fetch the complete documentation index at: https://finance.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Go SDK

> Official Go SDK for the Aries API

## Installation

Install the Aries Go SDK using go get:

```bash theme={null}
go get github.com/aries-exchange/go-sdk
```

## Quick Start

```go theme={null}
package main

import (
    "fmt"
    "log"
    aries "github.com/aries-exchange/go-sdk"
)

func main() {
    // Initialize the client
    client := aries.NewClient(
        aries.WithClientID("your_client_id"),
        aries.WithClientSecret("your_client_secret"),
    )

    // Get account information
    accounts, err := client.Accounts.GetUserAccounts()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(accounts)

    // Place an order
    order, err := client.Orders.PlaceOrder(&aries.OrderRequest{
        Symbol:    "AAPL",
        Quantity:  10,
        Side:      "buy",
        OrderType: "market",
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(order)
}
```

## Authentication

The Go SDK supports OAuth2 authentication:

```go theme={null}
import aries "github.com/aries-exchange/go-sdk"

client := aries.NewClient(
    aries.WithClientID("your_client_id"),
    aries.WithClientSecret("your_client_secret"),
)

// The SDK handles token management automatically
```

## Making API Calls

### Get Market Data

```go theme={null}
// Search for securities
results, err := client.MarketData.Search("AAPL")
if err != nil {
    log.Fatal(err)
}

// Get equity details
equity, err := client.MarketData.GetEquityDetails("AAPL")
if err != nil {
    log.Fatal(err)
}
```

### Manage Orders

```go theme={null}
// Place a limit order
order, err := client.Orders.PlaceOrder(&aries.OrderRequest{
    Symbol:     "AAPL",
    Quantity:   10,
    Side:       "buy",
    OrderType:  "limit",
    LimitPrice: 150.00,
})
if err != nil {
    log.Fatal(err)
}

// Cancel an order
err = client.Orders.CancelOrder("order_123")
if err != nil {
    log.Fatal(err)
}
```

## WebSocket Support

Stream real-time data using WebSockets:

```go theme={null}
import (
    "log"
    aries "github.com/aries-exchange/go-sdk"
)

ws := aries.NewWebSocket(
    aries.WithClientID("your_client_id"),
    aries.WithClientSecret("your_client_secret"),
)

// Subscribe to market data
ws.OnMarketData(func(data *aries.MarketData) {
    log.Printf("Received: %+v", data)
})

ws.SubscribeMarketData([]string{"AAPL", "GOOGL"})
ws.Connect()
```

## Error Handling

```go theme={null}
import (
    "errors"
    "log"
    aries "github.com/aries-exchange/go-sdk"
)

client := aries.NewClient(
    aries.WithClientID("..."),
    aries.WithClientSecret("..."),
)

order, err := client.Orders.PlaceOrder(&aries.OrderRequest{...})
if err != nil {
    var apiErr *aries.APIError
    if errors.As(err, &apiErr) {
        log.Printf("API Error: %s", apiErr.Message)
        log.Printf("Status Code: %d", apiErr.StatusCode)
    } else {
        log.Fatal(err)
    }
}
```

## Context Support

The SDK supports Go's context for cancellation and timeouts:

```go theme={null}
import (
    "context"
    "time"
)

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

accounts, err := client.Accounts.GetUserAccountsWithContext(ctx)
if err != nil {
    log.Fatal(err)
}
```

## Requirements

* Go 1.18 or higher

## Additional Resources

* [GitHub Repository](#)
* [Go Package Documentation](#)
* [API Reference](/api-reference)
