Billing & credits
IPX runs on prepaid credits, metered by the second from tunnel-connect to teardown. You can never be charged past your balance, and there is never a surprise invoice.
You top up a credit balance with a card, we draw it down second by second while a box is connected, and you watch it tick from the console or the API. Set a hard spend cap per box and we reclaim the machine the instant it is hit. Run the balance to zero and the box is reclaimed cleanly. That is the entire model.
All money in IPX is stored and reported in micro-USD: 1 USD = 1,000,000 micro-USD. A balance of 5000000 is $5.00. See The micro-USD convention below.
How billing works
max_cost_micro_usd per box. We reclaim it the second the cap is hit. Overruns are impossible.Topping up credits
Add credits before you rent, or any time your balance is running low. The console handles card entry and confirmation through Stripe.
-
Open the billing console
Go to Billing in the console. You will see your current balance and a top-up form.
-
Choose an amount and pay
Enter how much you want to add and confirm with your card. Payment is handled by Stripe. As soon as the charge succeeds, the credits land on your balance.
-
Rent and connect
With credits in hand, rent a box and connect. The meter only starts once your tunnel is up. See Renting and Connecting.
Topping up from the API
You can also create a Stripe payment intent programmatically. POST /api/v1/credits takes an amount_cents value (an integer number of US cents) and returns a client_secret you confirm with Stripe.js on your side. The credits are added when the payment confirms.
500 tops up $5.00, which becomes 5000000 micro-USD of credit.# create a $5.00 top-up intent
$ curl -X POST https://gpu.ipxtechholding.com/api/v1/credits \\
-H "Authorization: Bearer $IPX_TOKEN" \\
-H "Content-Type: application/json" \\
-d '{"amount_cents": 500}'
{
"payment_intent_id": "pi_3Q...",
"client_secret": "pi_3Q..._secret_..."
}
Most people just use the billing console. The API path exists for teams that want to wire top-ups into their own dashboard. You still need to confirm the payment intent with Stripe to actually move the money.
Per-second metering
Billing is tied to the rental lifecycle, not to the clock on the wall. A box moves through provisioning_requested to active_connected to terminated. The meter is bound to the connected window:
- Provisioning is free. Nothing is charged while a box is being acquired and booted.
- The meter starts at tunnel-connect. Once the box dials home, opens its reverse tunnel, and reaches
active_connected(aconnection_stringappears), the per-second meter begins. - The meter stops at teardown. When you terminate the rental, or the box is reclaimed, billing stops at that second. There is no rounding up to the hour.
- One-minute minimum. Each rental is billed for at least 60 seconds of connected time. After the first minute, billing is exactly per second.
Prices are quoted per hour for readability, but charged per second after the first minute. A price_micro_usd of 680000 ($0.68/hr) costs roughly 189 micro-USD per second. You only pay for the seconds your tunnel is connected.
Checking your balance
Your live balance is on the billing console and available from the API. GET /api/v1/credits returns your current balance in micro-USD.
$ curl https://gpu.ipxtechholding.com/api/v1/credits \\
-H "Authorization: Bearer $IPX_TOKEN"
{
"balance_micro_usd": 4811000
}
Here 4811000 micro-USD is a balance of $4.811. Poll this endpoint while a box is connected to watch it draw down, or check it before a long run to make sure you have headroom.
All API calls authenticate with a bearer token. Create or rotate one at Settings · API access and pass it as Authorization: Bearer <token>. The examples here read it from the $IPX_TOKEN shell variable.
Hard spend caps
Every rental can carry a hard spend cap, max_cost_micro_usd, set when you rent the box. It is the most that single box is ever allowed to spend. The moment metered cost reaches the cap, IPX tears the box down and stops the meter. There is no overshoot.
# never let this box spend more than $5.00
$ curl -X POST https://gpu.ipxtechholding.com/api/v1/rentals \\
-H "Authorization: Bearer $IPX_TOKEN" \\
-H "Content-Type: application/json" \\
-d '{"listing_id": 4021, "max_cost_micro_usd": 5000000}'
What happens when a cap is hit:
- The box transitions to
terminatedand its tunnel closes. Any further work on it stops. - Billing ends at the capped amount. You are charged for what was used up to the cap, never beyond it.
- The freed credits stay on your balance for the next rental.
A cap is a kill switch, not a warning. When it is reached the box goes away and in-progress work is lost. Set the cap above what your job actually needs, and checkpoint long runs to durable storage.
Hitting zero balance
The spend cap protects a single box. Your credit balance protects your whole account. You cannot start a box without credits, and a connected box draws the balance down second by second.
When the balance reaches zero, IPX reclaims the running box the same way a spend cap does: the tunnel closes, the rental moves to terminated, and the meter stops. Because billing can never exceed the credits you have already paid for, this is the floor.
You can never be charged past your balance, and IPX never sends an invoice after the fact. The worst case is a box being reclaimed, which is always visible in the rental's status. There is no surprise bill.
To avoid an unwanted reclaim mid-job, top up before long runs and poll GET /api/v1/credits so you can add credits before the balance gets close to zero.
The micro-USD convention
To keep money exact and integer-only, IPX represents every amount in micro-USD. One US dollar is one million micro-USD. This avoids floating-point rounding on fractions of a cent, which matters when you bill per second.
1000000500000068000010000To convert, divide micro-USD by 1,000,000 for dollars. Listing prices are exposed as both raw micro-USD (price_micro_usd) and a human-readable decimal (price_usd), so you can display whichever you need. Balances and caps are micro-USD; the top-up API takes plain amount_cents for Stripe convenience and converts for you (1 cent = 10000 micro-USD).
Rule of thumb: anything ending in _micro_usd is integer micro-USD. Multiply your dollar figure by 1,000,000 before sending it, and divide by 1,000,000 before showing it.