General Balance
Your primary account funds, spent on:
- Server rentals (bare metal hosting)
- Platform infrastructure (network, proxy, services)
Add funds with a credit card or another payment method.
Your Hoody wallet holds two balances: a General Balance for infrastructure and an AI Balance for Hoody AI usage. Funds move from General to AI and never back, so you set each budget explicitly.
This page explains the wallet and its two balances. The endpoint reference and the payment methods are documented elsewhere:
General Balance
Your primary account funds, spent on:
Add funds with a credit card or another payment method.
AI Balance
A separate credit pool for AI features:
Funded only by transfer from the General Balance. Transfers run one way (General → AI) and cannot be reversed, so the AI Balance is a ceiling you set on AI spending.
The General Balance funds infrastructure. The AI Balance is isolated, so AI usage cannot drain the budget you keep for server rentals.
The two models differ in how they price each additional environment.
Traditional VPS billing
Cost structure:
Example: 10 containers
10 containers × $10/month = $100/monthProblem: Every container increases costs linearly.
Hoody bare metal billing
Cost structure:
Example: 100 containers
1 server rental (see marketplace for pricing)Supports 50-200+ containers depending on specsSolution: Same cost whether you run 5 or 500 containers.
Browse servers: Rent Servers → to view specifications and pricing
What it funds:
How to add funds: See Billing & Payments → for payment methods (credit card, cryptocurrency, bank transfer).
Check balance:
GET /api/v1/wallet/balances/generalWhat it funds:
How to fund: Transfer from General Balance only
# Read the current transfer fee firstGET /api/v1/wallet/payment-availability# -> data.ai_credit_fee_bps
# Transfer $10 to AI credits, echoing back the fee you were just shown# Replace CURRENT_AI_CREDIT_FEE_BPS with data.ai_credit_fee_bps from GET /api/v1/wallet/payment-availabilityPOST /api/v1/wallet/transfers{ "amount": "10.00", "expected_fee_bps": <CURRENT_AI_CREDIT_FEE_BPS>}The separation keeps AI services from drawing on your infrastructure budget: you allocate how much AI can spend, and it cannot spend more.
Check balance:
GET /api/v1/wallet/balances/aiReturns: Limit, current usage, remaining credits
Add funds to the General Balance
Use one of three payment methods:
See: Billing & Payments → for complete payment method details
Rent servers
Use the General Balance to rent bare metal servers.
Servers are charged by rental duration. Containers have no per-unit cost: once a server exists, you can create as many as its capacity allows.
See: Rent Servers → for marketplace and pricing
Fund the AI Balance (optional)
If you use AI features, transfer funds from the General Balance to the AI Balance.
# Replace CURRENT_AI_CREDIT_FEE_BPS with data.ai_credit_fee_bps from GET /api/v1/wallet/payment-availabilityPOST /api/v1/wallet/transfers{ "amount": "10.00", "expected_fee_bps": <CURRENT_AI_CREDIT_FEE_BPS>}Transfers are one way. You cannot move funds back from AI to General.
expected_fee_bps must echo the current ai_credit_fee_bps from GET /api/v1/wallet/payment-availability; when a fee is configured, omitting it returns 409.
Monitor balances
Check balances anytime through the API or the dashboard.
GET /api/v1/wallet/balancesFor production use, run these checks on a schedule.
With a single balance, AI usage can consume the whole infrastructure budget:
Hoody splits the wallet so that the two budgets cannot reach each other.
General Balance funds infrastructure
Server rentals and platform costs draw on this balance only. AI usage cannot reach it, so your infrastructure stays funded.
AI Balance caps AI spending
You transfer the exact amount you want AI to use. When it runs out, AI services stop rather than spending more.
You set both budgets. Transfer to the AI Balance only when you want to use AI features, and only as much as you are willing to spend.
Three endpoints read the wallet: both balances at once, the General Balance alone, or the AI Balance alone.
GET /api/v1/wallet/balancesResponse:
{ "statusCode": 200, "message": "Balances retrieved successfully", "data": { "general_balance": "95.50", // Infrastructure funds "ai_limit": "50.00", // Total AI credits allocated "ai_usage": "10.25", // AI credits spent "ai_remaining": "39.75" // AI credits available }}GET /api/v1/wallet/balances/generalReturns: Current infrastructure funds
Use for: Checking whether you need to add funds before a server renewal
GET /api/v1/wallet/balances/aiReturns: AI credit limit, usage, and remaining balance
Use for: Checking whether AI has budget before an expensive LLM task
Every balance endpoint is plain HTTP, so a script can read the wallet and act on what it finds.
The JavaScript snippets below read
tokenfromprocess.env.HOODY_TOKEN. Create a Hoody token withhoody auth loginor the automation-token flow and export it:
export HOODY_TOKEN="hdy_…"
const token = process.env.HOODY_TOKEN;// Check if funds are running lowasync function checkInfrastructureBalance() { const response = await fetch('https://api.hoody.com/api/v1/wallet/balances/general', { headers: { 'Authorization': `Bearer ${token}` } });
const data = await response.json(); const balance = parseFloat(data.data.general_balance);
// Warn if below 2x monthly server costs const monthlyServerCosts = 150; // Your server rentals if (balance < monthlyServerCosts * 2) { await sendAlert(`Low balance: $${balance}. Server renewals at risk.`); }}// Check AI budget before expensive tasksasync function canAffordAITask(estimatedCost) { const response = await fetch('https://api.hoody.com/api/v1/wallet/balances/ai', { headers: { 'Authorization': `Bearer ${token}` } });
const data = await response.json(); const remaining = parseFloat(data.data.ai_remaining);
return remaining >= estimatedCost;}// Transfer to AI only when needed, with limitsasync function fundAIForTask(estimatedCost) { const aiBalance = await fetch('https://api.hoody.com/api/v1/wallet/balances/ai', { headers: { 'Authorization': `Bearer ${token}` } }).then(r => r.json());
const remaining = parseFloat(aiBalance.data.ai_remaining);
if (remaining < estimatedCost) { const needed = estimatedCost - remaining;
// Read the live fee. When one is configured it must be echoed back, // otherwise the transfer is rejected 409 TRANSFER_FEE_CONFIRMATION_REQUIRED const availability = await fetch('https://api.hoody.com/api/v1/wallet/payment-availability', { headers: { 'Authorization': `Bearer ${token}` } }).then(r => r.json());
// Transfer only what's needed; transfers are one way const res = await fetch('https://api.hoody.com/api/v1/wallet/transfers', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ amount: needed.toFixed(2), expected_fee_bps: availability.data.ai_credit_fee_bps }) }); if (!res.ok) throw new Error(`AI top-up failed: ${res.status}`); }}One server hosts many containers, which changes the arithmetic against per-VM pricing:
Instead of:3 VPS × $10/month = $30/month for 3 environments
Use:1 Hoody server rental = $X/month for unlimited containersCreate 3 containers + 50 more for experiments = same $X/monthConsolidate workloads onto fewer servers when possible.
Do not over-provision:
Separating dev, staging, and production usually takes 2-3 servers at most.
Set the AI budget in code and check it before you spend it:
// Set strict AI limits. Any configured platform fee is deducted from the// transfer, so the AI credit that lands is the amount minus that fee.const availability = await fetch('https://api.hoody.com/api/v1/wallet/payment-availability', { headers: { 'Authorization': `Bearer ${token}` }}).then(r => r.json());
await fetch('https://api.hoody.com/api/v1/wallet/transfers', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, // expected_fee_bps must echo the live fee, or the transfer is rejected 409 body: JSON.stringify({ amount: "10.00", // $10 AI budget this month expected_fee_bps: availability.data.ai_credit_fee_bps })});
// Monitor AI usageconst aiBalance = await fetch('https://api.hoody.com/api/v1/wallet/balances/ai', { headers: { 'Authorization': `Bearer ${token}` }}).then(r => r.json());// Stop AI tasks if aiBalance.data.ai_remaining drops below thresholdA deleted container consumes no server resources, so more active containers fit on the same machine.
Your account is charged for two things and nothing else.
Charged: When you rent a bare metal server Includes: CPU, RAM, storage, bandwidth, networking, unlimited containers, and all Hoody Kit HTTP services
See: Rent Servers → for marketplace pricing by server specs and location
Charged: Only when you use Hoody AI features Rate: Pay-per-token, varies by LLM model Budget: Limited by AI Balance (can’t exceed what you’ve transferred)
AI is optional and server rentals do not include it, so you pay for it only if you use it.
Solo developer
Digital agency
Enterprise team
AI-heavy workflow
General Balance:
AI Balance:
Transfer strategy:
Automation:
Check your balance programmatically via GET /api/v1/wallet/balances. Set up automated monitoring that alerts you when balance drops below a threshold (e.g., twice your monthly server costs). The Hoody dashboard also shows balance warnings.
Your servers enter a grace period and you are prompted to add funds. If the balance is not restored within that period, services may be paused so debt does not accumulate. Keeping 2-3x monthly server costs as a buffer avoids the interruption.
Server rentals are generally non-refundable once provisioned, as with other hosting services. If a technical problem prevents you from using the server, contact support; those cases are handled individually.
Credit card payments via Stripe typically process within seconds, and your General Balance updates as soon as payment succeeds. Some payment methods take longer and show a pending status while they process.
No. Transfers run one way, General → AI. That is intentional, so transfer only what you plan to use.
See Billing & Payments → for payment methods: credit cards (instant), cryptocurrency (+5% fee, 5-60 min), or bank transfer (1-3 business days, $500+ minimum).
The limit is hard. Once ai_remaining reaches $0, AI services stop until you transfer more from the General Balance, so runaway AI costs never reach the infrastructure budget.
Not built in yet. Implement your own with the balance API: check the General Balance before server operations and the AI Balance before LLM tasks, and alert when either approaches your threshold.
The API answers immediately: GET /api/v1/wallet/balances. Scripts can poll every few seconds if needed, and the dashboard shows the same figures.
Technically yes, through the API with the right auth. Because transfers are one way, the safer pattern is to have the agent alert you when the AI Balance runs low and approve the transfer yourself.
See transaction history: GET /api/v1/wallet/transactions. Filter by server rentals vs. other charges. Download monthly reports. See Billing & Payments → for complete transaction management.
Problem: POST /api/v1/wallet/transfers fails with insufficient funds error
Solution:
# Check General Balance firstGET /api/v1/wallet/balances/general
# If insufficient, add funds via one of these:# - Credit card (instant)# - Cryptocurrency (+5% fee, 5-60 min)# - Bank transfer (1-3 days)See: Billing & Payments → for payment methods
Problem: Transferred $500 to AI, only needed $50
Reality: The funds are stuck. Transfers run one way and cannot move AI → General.
Prevention:
Problem: Balance doesn’t match expectations
Check:
Recent transactions:
GET /api/v1/wallet/transactions?limit=10&sort_order=descReview last 10 transactions for unexpected charges
Pending payments:
GET /api/v1/wallet/payments/crypto/intents/{id} for cryptocurrency, or GET /api/v1/wallet/payments/stripe/intents/{id} for card paymentsServer renewals:
If the discrepancy is still unexplained, contact support with the transaction IDs.
Related pages:
Use your balance:
Automate monitoring: