Skip to main content
Two different things, and the order matters. The plan is the right to use the organization at all — without an active one every command outside billing is refused. Credits are the prepaid USD balance those commands then spend: every session debits the ledger as it runs, and a top-up credits it.
Organizations, members, API keys, and the audit trail moved to their own pages: vetta org, vetta keys, and vetta audit. There is no vetta billing group — the plan is vetta plan, the balance is vetta credits, and the card, the invoices and cancellation all live behind vetta plan portal.

Commands

The plan

An organization starts with no plan, and a plan is what makes it usable: GET /v1/agents, POST /v1/sessions and everything else outside billing answer 402 subscription_required until one is active. Creating an organization does not start one, and neither does a credit balance — a full balance with no plan is still refused. There are two plans. Standard is 20permonth∗∗,andeachpaidperiodalsogrants20USDofcredit;itistheonlyplanwitha∗∗7−dayfreetrial∗∗.∗∗Pro∗∗is∗∗20 per month**, and each paid period also grants 20 USD of credit; it is the only plan with a **7-day free trial**. **Pro** is **200 per month, and each paid period grants 200 USD of credit. So the plan buys the right to run; the credit it grants is what the running costs. Included credit rolls over — it stays in the prepaid balance and never expires.

plan show

plan is standard or pro (null before the first subscription). A free trial reads status: "active" with trial_end set — there is no separate trial status — and pending_plan names a downgrade scheduled for current_period_end. trial_eligible says whether plan subscribe would start the free trial. cancel_at_period_end is true once a cancellation has been asked for: the organization stays usable until current_period_end and is refused after it. This command answers whether or not a plan exists, so it is always safe to run — it is the one thing a lapsed organization can still ask.

plan subscribe

The free trial. On Standard, when trial_eligible is true, the checkout starts a 7-day free trial: a card is required, 10ofcreditisgrantedwhenitstarts,anditconvertsto10 of credit is granted when it starts, and it converts to 20 per month with the full $20 of credit unless you cancel first (vetta plan portal). One trial per organization and one per person; otherwise the same checkout bills on the day. action_url is a hosted checkout page. Open it in a browser and pay it there — a card cannot be typed into a terminal, so this is the one step the CLI hands back to you. Copy the URL whole; it is printed on one line and unwrapped for exactly that reason.
subscribe opens a checkout and changes nothing by itself. The plan becomes active only when the payment provider’s signed callback lands — normally a second or two after you finish the page. The command does not wait for that: it cannot see whether you opened the URL, and blocking on a payment it does not control would be a lie about what it is doing. Run vetta plan show when you have paid.
Running subscribe while a plan is already active is refused with state_conflict — a second checkout would be a second plan billed; use vetta plan change to switch tiers. To cancel, use vetta plan portal below — vetta plan has no cancel command, and a cancellation takes effect at the end of the period already paid for either way.

plan change

Upgrading to Pro takes effect at once on the card already on file: the difference for the rest of the month is charged now and the billing date stays the same. Upgrading during the free trial ends the trial and charges $200 now. Moving back to Standard takes effect at current_period_end — nothing is refunded, the Pro credit already granted is kept, and until then plan show reads plan: "pro" with pending_plan: "standard". Running --plan pro again before then takes the downgrade back. An organization with no active plan is refused with state_conflict; start one with plan subscribe. So is a plan already set to cancel at the end of its period.

plan portal

The one place the card on file, the past invoices and cancellation all live. Like subscribe, it hands back a URL for a browser: none of those three is a thing a terminal can do.
The link is single-use and expires — run the command again rather than keeping one around. And like subscribe it changes nothing by itself: whatever you do on that page arrives back as a confirmed event a moment later, so run vetta plan show to see the result. An organization that has never held a plan has no account to manage, and the command says so rather than opening an empty page:

When a command is refused

Any command on an organization with no plan fails like this, and names the command that fixes it:
The first line is unchanged and still leads with the code, so case statements that branch on it keep working; the remedy is a second line on stderr. Exit code is 1 — see exit codes.

The balance

What the plan does not cover: every token an agent spends is debited from the prepaid balance below. insufficient_credits (402) means top up; subscription_required (402) means the plan above.

show

mode is test for an sk_test_… credential and live for sk_live_…. A test-mode balance is not real money.

topup

topup opens a hosted checkout and credits nothing by itself. Only the verified payment callback moves money, so the balance does not change the moment this command returns. Poll vetta credits show if you need to wait for it to land.

ledger

Each entry carries full attribution and a line_items breakdown by pricing tier, so a charge can always be traced to the run that caused it.
Money is exact. --usd takes a decimal-dollar string and is converted client-side to integer micro-USD. JSON output amounts are integer *_micro_usd (1 USD = 1_000_000 micro-USD) so a script’s arithmetic never rounds; --human renders dollars for reading.
A misspelled filter cannot silently widen a money query. vetta credits ledger --sesion ses_… exits 2 and lists the flags the command does take, rather than answering with the whole org’s ledger.