Manage Billing Resources with Go
Use client.Manager for administrative and control-plane operations.
Manage Rules
Section titled “Manage Rules”The Manager client covers extractor rule sets and fallback pricing rule sets.
extractor, err := client.Manager.CreateExtractorRuleSet(ctx, "proj_gateway", types.CreateExtractorRuleSetRequest{ ID: "ers_openai", Name: "OpenAI usage", Version: 1, Subject: types.SubjectExtractor{ DefaultType: "user", TypePath: "$.meta.subject_type", IDPath: "$.meta.user_id", }, Dimensions: []types.DimensionExtractor{ {Name: "provider", Path: "$.provider", Type: "string"}, {Name: "model", Path: "$.usage.model", Type: "string"}, }, ChargeItems: []types.ChargeItemExtractor{ { Name: "prompt-tokens", Metric: "input_tokens", Path: "$.usage.prompt_tokens", Type: "number", Unit: "token", SkipIfMissing: true, AmountExpr: "dec_mul(dec(item['quantity']), dec(item['unit_price']))", UnitPrice: "dec('0.00000015')", Currency: "USD", }, },})if err != nil { return err}
_, err = client.Manager.PublishExtractorRuleSet(ctx, "proj_gateway", extractor.ID)Supported rule operations:
| Area | Methods |
|---|---|
| Extractor rule sets | CreateExtractorRuleSet, ListExtractorRuleSets, GetExtractorRuleSet, PublishExtractorRuleSet, DeleteExtractorRuleSet |
| Pricing rule sets | CreatePricingRuleSet, ListPricingRuleSets, PublishPricingRuleSet, DeletePricingRuleSet |
Manage Accounts and Wallets
Section titled “Manage Accounts and Wallets”account, err := client.Manager.CreateAccount(ctx, types.CreateAccountRequest{ ProjectID: "proj_gateway", Name: "Acme", PrimarySubjectType: "org", PrimarySubjectID: "org_001",})if err != nil { return err}
wallet, err := client.Manager.CreateWallet(ctx, types.CreateWalletRequest{ ProjectID: "proj_gateway", AccountID: account.ID, Currency: "USD",})if err != nil { return err}
_, err = client.Manager.CreditWallet(ctx, types.CreditWalletRequest{ ProjectID: "proj_gateway", AccountID: account.ID, Currency: wallet.Currency, Amount: decimal.RequireFromString("100"), SourceType: "manual_top_up", IdempotencyKey: "topup_001",})Supported account and wallet operations:
| Area | Methods |
|---|---|
| Accounts | CreateAccount, CreateAccountForProject, ListAccounts, ListAccountsForProject |
| Subject routes | BindSubject, BindSubjectForProject, ListAccountSubjects, ListAccountSubjectsForProject |
| Wallets | CreateWallet, CreateWalletForProject, ListWallets, ReadVirtualWalletAmountForProject, ReadRealtimeUsageControlLimitsForProject, DebitWallet, DebitWalletForProject, CreditWallet, CreditWalletForProject, TopUpWallet, TopUpWalletForProject, SetWalletCreditLimit, SetWalletCreditLimitForProject |
| Ledger | ListWalletLedgerEntries |
| Vouchers | CreateVoucherGrant, CreateVoucherGrantForProject, GrantVoucher, ListVoucherGrants, RevokeVoucherGrant, RevokeVoucherGrantForProject |
| Usage control | CreateUsageControlRule, CreateUsageControlRuleForProject, SetSubjectRouteAndUsageLimits, SetSubjectRouteAndUsageLimitsForProject, ListUsageControlRules, ListUsageControlRulesForProject, ListUsageControlRulesWithRequest, DeleteRuleAccountLimit, DeleteRuleAccountLimitForProject |
Read a Realtime Wallet Amount
Section titled “Read a Realtime Wallet Amount”snapshot, err := client.Manager.ReadVirtualWalletAmountForProject(ctx, "proj_gateway", types.ReadVirtualWalletRequest{ AccountID: account.ID, Currency: "USD",})if err != nil { return err}
fmt.Println(snapshot.AvailableBalance)You can also read by subject when a subject route exists:
snapshot, err := client.Manager.ReadVirtualWalletAmountForProject(ctx, "proj_gateway", types.ReadVirtualWalletRequest{ SubjectType: "org", SubjectID: "org_001", Currency: "USD",})