Skip to content

Credits & Billing

GEN charges credits for every compute-intensive operation — text generation, image generation, video generation, voice synthesis, lipsync, captions, research, content ideas, and renders. All reads and CRUD writes are free.

Credits live on the organization (workspace), not the agent. Every request to an agent-scoped endpoint checks the agent’s parent org for credits.

Terminal window
curl "https://api.gen.pro/v1/organizations/$ORG_ID" \
-H "X-API-Key: $GEN_API_KEY"

Response includes available_credit: { generic, aura }. The generic bucket covers all Auto Content Engine + agent.gen.pro operations; the aura bucket is for connected-social features and isn’t consumed by the API surface.

Credit purchases can be funded with Stripe or with x402. x402 purchases are arbitrary amount: pass either amount_usd or credits, and GEN returns a 402 Payment Required quote.

Terminal window
curl -X POST "https://api.gen.pro/v1/x402_credit_purchase" \
-H "X-API-Key: $GEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workspace_id": "'$ORG_ID'",
"amount_usd": "1.25"
}'

The response includes payment_methods and payment_required.accepts. If you do not send network, GEN lists every configured payment option instead of choosing silently.

{
"workspace_id": 123,
"amount_usd": "1.25",
"credits": "143.678161",
"payment_methods": [
{ "network": "sui", "x402Network": "sui", "asset": "USDC", "payTo": "0x..." },
{ "network": "solana", "x402Network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "USDC", "payTo": "3Y..." },
{ "network": "base", "x402Network": "eip155:8453", "asset": "USDC", "payTo": "0x..." }
],
"payment_required": {
"x402Version": 2,
"accepts": ["same options as payment_methods, with maxAmountRequired"]
}
}

For agents and MCP clients: show the user or calling agent the payment_methods list, then sign one matching payment_required.accepts[] entry. Workspace funding wallets exist behind the scenes for settlement and sweeping; the user-facing choice is the returned Sui, Solana, or Base payment method.

When a paid API call returns x402_credit_purchase, read the same fields there:

  • estimated_credits / minimum_credits — how many credits the attempted API call needs.
  • payment_methods — available Sui, Solana, and Base x402 options.
  • payment_required.accepts[] — exact x402 payloads to sign.
  • retry.headers — send PAYMENT-SIGNATURE, X402-Checkout-Session-Id, and the selected X402-Network.

Each compute operation costs a number of credits that depends on the capability and tier it uses. Pricing is set per operation — you don’t need to compute it yourself. For generation jobs, estimate the request before running it and show the estimate to the user when the workflow needs cost confirmation.

Capability tierRelative cost
Image generationlow
GPU workloads (e.g. lipsync)medium
Text / intelligencevaries by tier
Video generationhighest (scales with duration)
FreeCharged
GET any endpointyes
Create / update / delete engines, rows, columns, cells, layersyes
Clone a templateyes
Upload a content resourceyes
Set a content preferenceyes
POST /cells/:id/generate (any type)yes
POST /cells/:id/layers/:id/generateyes
POST /cells/:id/renderyes
POST /v1/researchyes
POST /v1/agent/run (content ideas / chat)yes

Every compute operation:

  1. Pre-charges the estimated credits before running (to avoid a mid-job overdraft)
  2. Runs the vendor operation
  3. Reconciles — refunds the delta if actual < estimated, charges extra if actual > estimated

If the job fails or is stopped, the full pre-charge is refunded. You never pay for a failed generation.

Exact credit cost depends on the selected operation, model, duration, resolution, asset inputs, and current account state. Use the estimate flow before large batches or user-confirmed paid actions, then run the generation only after the user accepts the estimate.

If credits run out mid-batch you’ll see:

{ "error": "Insufficient credits for this job", "error_code": "insufficient_credits_for_job" }

The in-flight generation’s pre-charge is refunded; subsequent POST /generate calls reject until the org tops up. No partial renders charged.

Pre-charge endpoints accept an Idempotency-Key header. If you retry a request with the same key within 24 hours, you get the same response without double-charging. Services that integrate GEN and need at-most-once guarantees should derive the key deterministically from their own request ID.

Terminal window
curl -X POST "https://api.gen.pro/v1/vidsheet/$EID/cells/$CID/generate?agent_id=$AGENT_ID" \
-H "X-API-Key: $GEN_API_KEY" \
-H "Idempotency-Key: myapp-request-abc123" \
-H "Content-Type: application/json" \
-d '{ "generation_type": "text", "data": { "prompt": "...", "model": "gemini_2_0_flash" } }'