Skip to content

Manage Billing Resources with Go

Use client.Manager for administrative and control-plane operations.

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
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
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",
})