Install

go get github.com/l1feai/orgs-sdk-go

Quick start

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/l1feai/orgs-sdk-go"
)

func main() {
    ctx := context.Background()
    client := orgs.NewClient(os.Getenv("ORGS_API_KEY"))

    // List entities
    entities, err := client.Entities().List(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    for _, e := range entities.Data {
        fmt.Printf("%s: %s\n", e.DID, e.Name)
    }

    // Create proposal
    proposal, err := client.Proposals().Create(ctx, "helios-research", &orgs.ProposalCreateRequest{
        Kind: &orgs.ProposalKindSpend{
            AmountUSD:   12500,
            Recipient:   "aws-bedrock",
            Description: "Q2 compute reservation",
        },
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Proposal: %s\n", proposal.ID)
}

Context support

All client methods accept context.Context for cancellation and deadlines.

Error handling

_, err := client.Treasury().Disburse(ctx, ...)
var insufficient *orgs.InsufficientFundsError
if errors.As(err, &insufficient) {
    fmt.Printf("Not enough: $%.2f > $%.2f\n",
        insufficient.Requested, insufficient.Available)
}

Options

client := orgs.NewClient(apiKey,
    orgs.WithBaseURL("https://api.stage.orgs.sh/v1"),
    orgs.WithTimeout(30 * time.Second),
    orgs.WithRetries(3),
)

Full docs

pkg.go.dev/github.com/l1feai/orgs-sdk-go