Skip to content

thde/ynab

Repository files navigation

ynab

Go Reference test Go Report Card

Go client for the YNAB API, generated from the official OpenAPI spec using oapi-codegen.

Installation

go get thde.io/ynab

Usage

client, err := ynab.New(
    ynab.WithBearerToken("your-personal-access-token"),
)
if err != nil {
    log.Fatal(err)
}

resp, err := client.GetBudgetsWithResponse(ctx, nil)

Get a personal access token from your YNAB developer settings.

Use WithUserAgent to identify your application in requests:

client, err := ynab.New(
    ynab.WithBearerToken("your-personal-access-token"),
    ynab.WithUserAgent("my-app/1.0"),
)

Rate limiting

The YNAB API allows 200 requests per hour. Use WithRateLimiter to avoid hitting the limit:

// Use the built-in default (200 req/hour, burst 1):
client, err := ynab.New(
    ynab.WithBearerToken("your-personal-access-token"),
    ynab.WithRateLimiter(nil),
)

// Or bring your own limiter:
limiter := rate.NewLimiter(rate.Every(time.Hour/200), 5)
client, err := ynab.New(
    ynab.WithBearerToken("your-personal-access-token"),
    ynab.WithRateLimiter(limiter),
)

Delta requests

Most endpoints accept a LastKnowledgeOfServer parameter. When set, the server returns only entities that changed since that point, making repeated polling much cheaper. Each response includes a ServerKnowledge value to use on the next call.

var knowledge int64

// First call, fetch everything.
resp, err := client.GetAccountsWithResponse(ctx, budgetID, &ynab.GetAccountsParams{})

// Persist resp.JSON200.Data.ServerKnowledge, then on subsequent calls:
resp, err = client.GetAccountsWithResponse(ctx, budgetID, &ynab.GetAccountsParams{
    LastKnowledgeOfServer: knowledge,
})
knowledge = resp.JSON200.Data.ServerKnowledge

See the YNAB API docs for details.

Development

make generate  # regenerate client from the YNAB OpenAPI spec
make test      # run tests
make lint      # run linters
make lint-fix  # run linters and auto-fix issues
make update    # update dependencies and regenerate

License

MIT

About

Go client for the YNAB API generated from the official OpenAPI spec using oapi-codegen.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors