Skip to main content

Balance and transactions

The Billing page in the console shows your current balance, recent transactions, and API usage. This page explains what each part means.

Current balance

The big number is your credit balance — the money available for new launches and API calls.

Below it are summary cards:

  • Total Cost This Month — cumulative spending (all categories) since the 1st of this month
  • API Calls — count of platform-model + user-inference API requests this month
  • Total Tokens — sum of input + output tokens across all LLM / embedding calls this month

Transactions tab

Every money movement shows up here. Columns:

ColumnMeaning
DateWhen the transaction was recorded
Typegpu_usage / refund / topup / bonus / storage_billing (see below)
AmountPositive = added to balance, negative = deducted
Balance AfterBalance after this row was applied
DescriptionHuman-readable detail

Transaction types

TypeSignWhen
topup+You added credit via the Add credit button (Stripe Checkout). Description names the Stripe session.
auto_recharge+The auto-recharge worker topped up your wallet because your balance dropped below the threshold you set.
gpu_usageAny deduction — instance hold, cycle settlement, API usage, etc.
storage_billingDaily storage charge for cloud drives + shared filesystems.
refund+Unused portion of a hold returned when an instance stops early. Also used for Stripe-side refunds (admin issued a refund from the Stripe dashboard); the description names the original charge.
bonus+Signup bonus or one-off promotional credit.
admin_correction±Manual adjustment by EcoLink ops, typically for billing-error fixes. The description explains the reason.

Other types you may occasionally see if your account is on a sales-led enterprise contract:

TypeSignWhen
contract_grant+Wallet credit from the cash portion of a signed enterprise contract. Description names the contract.
bonus_grant+Bonus credit on top of contract_grant — the contract's negotiated extra (e.g., "$10k contract → $12k total credit, with $2k as bonus_grant").

Reading a typical row

Example:

Apr 21, 2026, 11:43 AM   gpu_usage  -$X.XX   $YY.YY   GPU Instance #132: hold per-GPU × 1 GPU × 1h
  • The row name tells you what was deducted and why (in the description)
  • Balance After shows your balance immediately after this row was applied
  • Later, when the instance terminates, a matching refund or gpu_usage row appears to settle actual usage vs hold

Paging

The transactions table loads the most recent 50 rows. Click Load more at the bottom to fetch older transactions — cursor-based paging, no limit on how far back you can scroll.

Usage tab

Breaks down API calls per-model with:

  • Date — UTC day
  • Model — model ID that was called
  • Type — category (chat / embedding / image / audio / video)
  • Calls — request count
  • Tokens — total tokens billed
  • Cost — total USD cost for that model-day

Aggregated daily so you can see "how much of my spend goes to model X." Useful for optimization — if embeddings dominate, consider caching; if image generation dominates, rethink size/count.

Reading a full instance lifecycle in the ledger

For a GPU instance that ran cleanly to its estimated duration, you'll typically see:

T+0     gpu_usage  -$hold          (initial hold for the full estimated duration)
T+end refund +$unused (refund for any unused portion of the hold)

Or for inference instances, every 24 hours:

every 24h   gpu_usage  -$next_hold  (new 24h prepay hold)
refund +$diff (when applicable — refund of previous cycle's unused)
gpu_usage -$overage (when applicable — overage past previous hold)

See How billing works for the full hold/settlement model.

API access to transactions

curl https://api.ecohash.com/billing/transactions?limit=200 \
-H "Authorization: Bearer eco_YOUR_KEY"

Returns the last N transactions in JSON. Add ?before=<id> to page backwards. Useful for dashboards or CSV exports:

curl -H "Authorization: Bearer eco_KEY" \
"https://api.ecohash.com/billing/transactions?limit=1000" \
| jq -r '.[] | [.created_at, .type, .amount, .balance_after, .description] | @csv' \
> transactions.csv

Understanding unexpected balance changes

If you see a row you don't understand:

  1. Read the Description — it usually cites the resource ID and computation.
  2. Check the corresponding resource (GPU instance, inference instance, storage) — does the described timing match?
  3. If labelled source: admin_correction, it's a manual correction by our ops team — reach out in the #ecolink-support Slack channel for context.
  4. If labelled source: stripe_webhook, the row was triggered by a Stripe event (top-up payment, auto-recharge, refund, enterprise invoice paid). The description and ref_id link back to the Stripe object.
  5. Ping #ecolink-support with the transaction ID if something still doesn't add up.