Adding credits
支付宝 (Alipay) top-ups open soon, and 微信支付 (WeChat Pay) follows once the domain moves to HTTPS. Until then you cannot top up online; write to finance@superheat.cloud with any questions.
Superheat CN is prepaid and bills in yuan (CNY). Credits buy GPU time and storage, and they belong to an organization rather than to a person. You pay by scanning a QR code with 支付宝 (Alipay) or 微信支付 (WeChat Pay).
Add credits
- Open Billing (账单) in the console at console.superheat.cloud.
- Select Add credits (充值额度).
- Under Pay with (支付方式), choose Alipay (支付宝) or WeChat Pay (微信支付). Only the methods that are open right now are listed.
- Pick a pack, or enter a custom amount.
- If you need a 发票, switch on Request an invoice (fapiao) (开具发票) and fill in the details; see 发票.
- Select Show QR code (去支付). The dialog shows the code, the amount and a countdown.
- Scan the code with Alipay or WeChat and pay. The balance moves as soon as the provider confirms.
| Option | Amount |
|---|---|
| Packs | ¥50, ¥100, ¥500 |
| Custom | any amount from ¥20 to ¥10,000 |
You can type the custom amount with a Chinese input method; full-width digits are understood. A code is valid for 15 minutes. On a phone, an Alipay order shows a Pay in Alipay (打开支付宝付款) button that opens the Alipay app directly; for WeChat Pay, take a screenshot and pick it from your photos in WeChat's scanner.
Until top-ups open, the Add credits dialog only says "Payments aren’t available on this console yet." (此控制台暂未开通支付。).
Credits do not expire. There is no subscription and no post-payment: the balance you have is the balance you can spend.
What the dialog shows while you pay
| What you see | What it means |
|---|---|
| The QR code, with "Waiting for payment…" and an "Expires in …" countdown under it | The code is live; scan it and pay |
| Checking with … (正在向…确认支付结果…) | The countdown ran out and the console is asking Alipay or WeChat Pay whether you paid in the last seconds |
| Credits added (额度已到账) | The balance is topped up and ready to spend |
| QR code expired (二维码已失效) | No payment was received for this code, and it has been closed at 支付宝 or 微信支付 too, so scanning it can no longer pay. If you paid before it expired, the balance updates by itself — for 24 hours after expiry the platform asks the provider again — so do not pay twice. To pay again, select New QR code |
| Order closed (订单已关闭) | The order was closed before payment; no charge was made |
If you already paid, wait for the balance to update rather than scanning a second code. You can close the window once you have paid: Superheat CN keeps checking with the provider when nobody is watching, and a payment you made still lands.
How a payment is credited
A payment is credited only from the provider's confirmation: a signed notification from the provider, or the console's own query of the provider — never from anything the browser sends. Each code is credited once, however many confirmations arrive.
The amount credited is the one the provider reports, and it has to equal the order's amount. If it does not, nothing is credited; the money stays at the provider and the Superheat CN finance team refunds it by hand.
If a payment is refunded at 支付宝 or 微信支付 before Superheat CN has credited it, what is credited is the part the provider kept: after a partial refund, the order's amount less what was refunded; after a full refund, nothing, and the order is closed. When the provider does not say how much it refunded (a 微信支付 query reports only 转入退款, "moved to refund"), the order is closed too, and flagged for the finance team to settle by hand.
Each user can hold up to five unpaid codes at a time; asking for another is refused with TOO_MANY_OPEN_ORDERS — pay one of them or let them expire. If you close the dialog and ask again in the same organization for the same method and amount, you get the code you already have, as long as it has more than two minutes left. Orders with a 发票 are never reused; each one is a new order.
发票
Switch on Request an invoice (fapiao) before paying, and a 发票 is issued for that top-up once it is paid.
| Field | Notes |
|---|---|
| Type (类型) | Company (企业) or Personal (个人) |
| Invoice title (发票抬头) | required |
| Tax ID (纳税人识别号) | required for a company: 15, 18 or 20 upper-case letters or digits. Not shown for a personal invoice |
| Delivery email (接收邮箱) | required; the 发票 is sent here |
| Address, phone and bank (optional) | registered address, phone, bank, bank account |
The details are saved per organization and pre-filled next time; only admins can see and change them. Each top-up keeps a copy of the details as they were when you paid, so editing them later does not affect orders already created.
Invoices are issued by the Superheat CN finance team. For any question about a 发票, write to finance@superheat.cloud.
Who can add credits
Adding credits is an admin action within an organization.
| Action | Admin | Member |
|---|---|---|
| See the credit balance | yes | yes |
| See transactions and the spend chart | yes | yes |
| Deploy instances and spend credits | yes | yes |
| Add credits and manage 发票 details | yes | no |
A member opening the Billing page sees the balance, the spend chart and the full transaction history, but the Add credits button is replaced by a note: "Only org admins can add credits or manage payment details." Members who need a top-up have to ask an admin.
On your personal organization you are always the admin, so this only comes into play once you join someone else's organization. See Roles and permissions.
Balances are per organization
Each organization has its own balance and its own ledger. Switching organizations in the console switches which balance you are looking at and which one your next deploy will draw from. Credits cannot be moved between organizations.
Running out
Deploying an instance and starting a stopped one both need a balance that covers at least one hour of everything the organization would then run: that instance's GPU and disk, plus the GPU and disk of every other instance running, starting or being created, and the disk of every stopped one. Short of that, both fail with an INSUFFICIENT_BALANCE error until you top up. Instances that are already running are handled by the two automatic thresholds, ¥0 and −¥35, described in Auto-stop and auto-destroy.
From the API
GET /v1/billing/config returns this site's currency, the payment methods open right now, and the packs and bounds, in 分:
curl "$SUPERHEAT_API/v1/billing/config" \
-H "Authorization: Bearer $SUPERHEAT_TOKEN" \
-H "X-Org-Id: $ORG_ID"
{
"currency": "CNY",
"providers": ["alipay"],
"packs_minor": [5000, 10000, 50000],
"min_minor": 2000,
"max_minor": 1000000
}
Until top-ups open, providers is an empty list.
A top-up is an order you pay by QR code:
curl -X POST "$SUPERHEAT_API/v1/billing/orders" \
-H "Authorization: Bearer $SUPERHEAT_TOKEN" \
-H "X-Org-Id: $ORG_ID" \
-H "Content-Type: application/json" \
-d '{"provider": "alipay", "amount_minor": 5000, "want_invoice": false}'
| Field | Value |
|---|---|
provider | alipay or wechat; it has to appear in providers from GET /v1/billing/config |
amount_minor | an integer number of 分: a pack amount, or anything from min_minor to max_minor. 5000 = ¥50 |
want_invoice | true to have a 发票 issued for this top-up; needs a saved profile. Defaults to false |
The response is the order:
| Field | Meaning |
|---|---|
id | The order id, starting sh_ |
status | pending, paid, expired or closed |
qr_payload | What to render as the QR code |
pay_url | Alipay orders only, while pending: a payment link a phone can open |
expires_at | When the code stops working |
amount_minor, currency | The amount in 分 and the currency, CNY |
Then poll the order until status is paid, expired or closed:
curl "$SUPERHEAT_API/v1/billing/orders/$ORDER_ID" \
-H "Authorization: Bearer $SUPERHEAT_TOKEN" \
-H "X-Org-Id: $ORG_ID"
paid means the balance has already moved. Once expires_at has passed, the server asks the provider one last time before it decides between paid and expired, so a freshly expired order can read pending for a little longer. An order that does not belong to the current organization returns 404 ORDER_NOT_FOUND.
want_invoice: true needs the organization to have saved its 发票 details, or it returns 422 INVOICE_PROFILE_REQUIRED. Save them with PUT /v1/billing/invoice-profile and read them with GET (which returns null when nothing is saved):
curl -X PUT "$SUPERHEAT_API/v1/billing/invoice-profile" \
-H "Authorization: Bearer $SUPERHEAT_TOKEN" \
-H "X-Org-Id: $ORG_ID" \
-H "Content-Type: application/json" \
-d '{"kind": "company", "title": "示例科技有限公司", "tax_id": "91310000XXXXXXXXXX", "email": "invoice@example.com"}'
kind is company or personal; address, phone, bank_name and bank_account are optional. For other errors see Error codes.
Creating an order and reading or writing the 发票 details are admin actions and need a signed-in admin session. An shk_ organization API key acts as a member, so it is refused with 403 ADMIN_REQUIRED. Reading GET /v1/billing/config and polling an order do not need admin. See API keys.