Skip to main content
Credits represent your account’s compute capacity. They are stored as precise USD amounts to three decimal places (e.g. $0.044). 1 credit = $1 USD.

Quick reference

TaskHow
Check balanceDashboard Credits page or GET /v1/user/billing
Preview costGET /v1/estimate/{model_identifier}
Buy creditsBilling page → Credit packs section
View transactionsDashboard Credits page → transactions table
Insufficient creditsError BSE1004, HTTP 402

Permissions

Actionprimary-ownerownermember
View balance and transactions
Purchase credit packs

How you get credits

SourceWhenAmount
Welcome creditsAutomatically on account creation (once per user)$1.000
Subscription planAdded at billing cycleMatches plan allocation
Credit packsPurchased via Billing$10, $25, $50, $100, $500, $1,000

Plan allocations

PlanMonthlyYearly
Starter$9.000$90.000
Pro$29.000$290.000
Scale$99.000$990.000
Enterprise$199.000$1,990.000

Credit pack requirements

Credit packs require an active Starter, Pro, Scale, or Enterprise subscription and primary-owner role. Without both, the purchase controls are disabled.

How credits are consumed

Every generation follows an atomic reserve-charge-refund sequence:
PhaseActionBalance impact
ReserveBalance verified, estimated cost deducted atomicallyDecreases
ProcessGeneration runs at upstream providerNo change
ChargeGeneration succeeds, reservation confirmedNo change
RefundGeneration fails, reserved credits returnedIncreases
Reservations are strictly atomic — concurrent requests cannot exceed your available balance. If your balance is less than the generation cost, BabySea returns BSE1004 and the generation never starts:
{
  "status": "error",
  "request_id": "req_a1b2c3d4",
  "error": {
    "code": "BSE1004",
    "type": "insufficient_credits",
    "message": "Insufficient credits. Please upgrade your plan or wait for renewal.",
    "retryable": false
  }
}

Balance

Navigate to Credits in the console to see your current balance:
Credits : $12.480
The same balance appears in BillingCredit balance panel.

Check balance via API

Requires account:read scope. See Scopes.
Terminal
curl https://api.<your_region>.babysea.ai/v1/user/billing \
  -H "Authorization: Bearer bye_your_api_key"
{
  "status": "success",
  "request_id": "req_a1b2c3d4",
  "data": {
    "account_id": "acc_123",
    "billing_plan": "Starter Monthly",
    "billing_credit_balance": 12.480,
    "billing_subscription_status": "active",
    "billing_currency": "USD",
    "billing_period_starts_at": "2026-03-01T00:00:00.000Z",
    "billing_period_ends_at": "2026-04-01T00:00:00.000Z"
  }
}

Cost estimate API

Preview what a generation will cost before dispatching it. The estimate endpoint is free — it consumes no GPU compute and deducts nothing from your balance. Requires library:read scope.
Terminal
curl "https://api.<your_region>.babysea.ai/v1/estimate/bfl/flux-1.1-pro" \
  -H "Authorization: Bearer bye_your_api_key"
Pass count (1–100, default 1) to estimate multiple outputs in one call. Values outside that range are clamped.

Response fields

{
  "status": "success",
  "data": {
    "model_identifier": "bfl/flux-1.1-pro",
    "model_type": "image",
    "assets_count": 1,
    "cost_per_generation": 0.044,
    "cost_total_consumed": 0.044,
    "credit_balance": 12.480,
    "credit_balance_can_afford": true,
    "credit_balance_max_affordable": 283
  }
}
FieldDescription
cost_per_generationCost for one output
cost_total_consumedTotal cost for the full request
credit_balanceYour current balance
credit_balance_can_affordtrue if balance covers the generation
credit_balance_max_affordableHow many generations you can afford at this cost
Video responses also include duration_seconds, cost_per_second, and resolution. Image models use a per-generation price. Video models use a per-second price that can vary by resolution or audio mode. See the model pricing page for the full list.

Transactions

Navigate to Credits in the console. The ledger table records every credit operation. Use the fullscreen icon for more space — the table paginates at 300 rows per page.

Transaction types

TypeBadgeColorWhen it appears
reserveReservedBlueCredits deducted before a generation starts
chargeChargedGreenGeneration succeeded, reservation confirmed
refundRefundedRedGeneration failed, credits returned
addAddedTealCredits added via subscription, credit pack, or welcome bonus

Amount display

TypePrefixExample
reserve(none)0.044
charge--0.044
refund++0.044
add++29.000
All amounts use three decimal places. Filter by type, model, generation ID, description, or amount. Search applies across all visible columns simultaneously.

Reading the ledger

Successful generation — reserve and charge share the same generation ID. Balance doesn’t change between them because credits were already deducted at reservation:
TypeAmountBalanceModelGeneration ID
Reserved0.04412.436bfl/flux-1.1-pro550e8400-…
Charged-0.04412.436bfl/flux-1.1-pro550e8400-…
Failed generation — refund restores the balance to its pre-reservation value:
TypeAmountBalanceModelGeneration ID
Reserved0.04412.436bfl/flux-1.1-pro550e8400-…
Refunded+0.04412.480bfl/flux-1.1-pro550e8400-…
Credit addition:
TypeAmountBalanceDescription
Added+29.00041.480Subscription renewal
Credit source labels: Welcome credits, Subscription renewal, Credit pack purchase.

Idempotency

Every transaction is idempotent. Duplicate charge or refund events for the same generation_id are silently ignored. Duplicate additions are keyed by account plus description.

Best practices

Always estimate before generating

TypeScript
const estimate = await client.estimate('kling/v1.5-pro', {
  duration: 10,
  resolution: '720p',
  audio: false,
});

if (!estimate.data.credit_balance_can_afford) {
  console.log('Insufficient credits for this generation');
  return;
}

const result = await client.generate('kling/v1.5-pro', {
  generation_prompt: 'A baby seal plays in Arctic',
  generation_duration: 10,
});

Monitor balance in your pipeline

TypeScript
async function generateWithBalanceCheck(client: BabySea, model: string, prompt: string) {
  const billing = await client.billing();
  const balance = billing.data.billing_credit_balance;

  if (balance < 1) {
    await notifyLowBalance(balance);
    return;
  }

  return client.generate(model, { generation_prompt: prompt });
}

Plan for high-volume runs

Calculate total cost before starting a batch. Purchase credit packs first — they are provisioned instantly after payment.
TypeScript
const count = 500;
const estimate = await client.estimate('bfl/flux-1.1-pro');
const totalCost = estimate.data.cost_per_generation * count;

console.log(`Total cost: $${totalCost.toFixed(3)}`);
console.log(`Current balance: $${estimate.data.credit_balance.toFixed(3)}`);
console.log(`Can afford: ${estimate.data.credit_balance >= totalCost}`);

Watch for anomalies in your ledger

PatternWhat it may indicate
Repeated refundsUpstream model or provider instability
High charge amountsLonger video duration or higher resolution than expected
Unrecognized generation IDsCompromised API key — revoke immediately and audit Logs
Reserved but never chargedGeneration stuck in processing

Know your audit trail window

Credit transaction history is retained per plan. Export programmatically if your compliance policies require longer retention — native export is not available in the credits UI.
PlanCredit audit trail
Free30 days
Starter90 days
Pro180 days
Scale1 year
Enterprise1 year

Quick tips

DoDon’t
Use the estimate API before generatingAssume all models cost the same
Monitor balance programmaticallyWait for a BSE1004 error to check balance
Purchase credit packs before high-volume runsRely solely on subscription credits for spikes
Review the model pricing page regularlyHard-code cost values in your application
Review transactions for unexpected chargesIgnore the credits table