Duration and extending
A GPU instance launches in one of two modes, chosen on the launch form:
- Fixed duration (1–72 hours). The duration is a commitment, not a hint — when it elapses, the instance auto-terminates and the unused portion of the credit hold is refunded. To keep running past the scheduled end, hit Extend before expiry.
- No end time. The instance runs until you terminate it, billed hour by hour. It never stops on its own unless your credit runs out. See No end time below.
No end time
Tick No end time next to the duration slider. What happens:
- At launch one hour is held:
hourly_rate × gpu_count × 1h. The launch button shows it as the first-hour hold. - Every hour while it runs, the hour just used is settled against that hold and the next hour is held. On your Transactions page this shows as one next 1h prepay hold — $x line per hour of runtime. (A full hour costs exactly what was held, so there is nothing to refund or add; a used … / refund unused … line appears only when a period ends early — when you terminate, or when a partial hold ran out.)
- When your balance cannot cover a full hour, whatever credit is left is held instead and you get a notification saying how many minutes it covers. Auto-recharge, if enabled, tops up in the meantime.
- At $0 the instance is terminated with the reason credit depleted, and you are notified.
- When you terminate it, the unused part of the current hour's hold is refunded, to the second.
There is no Extend for an instance with no end time — there is nothing to extend. The instance list marks these hourly · no end time, and the detail page's Billing row shows the mode.
Use it for interactive work whose length you don't know up front; use a fixed duration for a job you want to stop on its own.
Fixed duration
Everything below applies to instances launched with a duration of 1–72 hours.
How auto-stop works
At launch, EcoLink places a credit hold for the full estimated_duration_hours × hourly_rate × gpu_count. Example: 1 GPU × $1.60/h × 2 hours = $3.20 held.
When now >= started_at + estimated_duration_hours:
- The billing cycle worker CAS-flips the instance to
terminating_requestedand enqueues a terminate job. - The executor kills the pod, runs
finalizeInstanceto settle the hold:- If you ran less than you paid for: refund the difference to your balance.
- If you ran slightly over (watchdog lag of up to ~1 min can happen): tiny overage charged.
- Instance status flips to
terminated,termination_reason='duration_expired'. - You get a notification: "Instance terminated — duration reached."
Warnings before auto-stop
EcoLink sends in-app notifications as the duration approaches:
- 30 min before — warning severity
- 20 min before — warning
- 10 min before — critical
- 5 min before — critical
- 1 min before — critical
Notifications show as a red dot on the bell icon in the console top bar. Click to see the instance and the Extend button.
Extending
From the console
- Open the instance detail page.
- Click Extend.
- Choose how many additional hours (1 hour minimum).
- Confirm.
The platform places an additional hold for hours × hourly_rate × gpu_count. If your balance can't cover it, the extend fails with 402 and the instance still terminates at the original deadline.
From the API
curl https://api.ecohash.com/gpu-instances/142/extend \
-X POST \
-H "Authorization: Bearer eco_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "hours": 3 }'
Response:
{
"additional_cost": 4.80,
"new_balance": 83.15
}
The new estimated deadline is started_at + (original_duration + extend_hours).
Can I extend after the instance already terminated?
No. Once status = terminated, the instance is gone — you can't revive it. Launch a new one (same container image, attach the same drive if you want your files back).
How do I know when it will expire?
- The instance list shows elapsed time and remaining duration for each running instance.
- The detail page shows a countdown.
- Notifications fire automatically at the thresholds above.
What if I want it to run indefinitely?
Launch it with No end time (see above). It runs until you terminate it, billed hour by hour, and stops on its own only if your credit runs out — so keep an eye on the balance, or enable auto-recharge, for a long training job.
For a job that should survive even that, the usual pattern still applies:
- Attach a cloud drive with your code + checkpoints
- Run
tmux new -s trainthenpython train.py --checkpoint-every 1h - If the instance stops, the next one you launch re-reads the checkpoint and continues
Pricing note
Holds are prepaid — at launch and on extend. The hold comes out of your available balance immediately, but it's not spent until time elapses. When the instance terminates, the unused portion refunds back, so economically you only pay for actual uptime.
See How billing works for the full mechanism.