List the providers' live price versions
curl --request GET \
--url https://api.boxrouter.ai/api/v1/price-versionsimport requests
url = "https://api.boxrouter.ai/api/v1/price-versions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.boxrouter.ai/api/v1/price-versions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.boxrouter.ai/api/v1/price-versions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.boxrouter.ai/api/v1/price-versions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.boxrouter.ai/api/v1/price-versions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.boxrouter.ai/api/v1/price-versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": [
{
"provider": "e2b",
"version": "e2b@2026-09-29",
"effective_from": "2026-09-29T00:00:00Z",
"effective_to": null,
"last_confirmed_at": "2026-10-03T06:14:09Z",
"document": {
"provider": "e2b",
"version": "e2b@2026-09-29",
"effective_from": "2026-09-29T00:00:00Z",
"retrieved_at": "2026-09-29T22:52:36Z",
"boundary": {
"start": "provider",
"end": "provider",
"checked": false,
"evidence": null
},
"sources": [
{
"url": "https://e2b.dev/pricing",
"quote": "We charge per second of a running sandbox."
},
{
"url": "https://e2b.dev/pricing",
"quote": "vCPUs Plan Costs 1 Hobby / Pro $0.000014/s 2 [Default] Hobby / Pro $0.000028/s 4 Hobby / Pro $0.000056/s 6 Hobby / Pro $0.000084/s 8 Hobby / Pro $0.000112/s"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Memory (GiB) Plan Costs 1 Hobby / Pro $0.0000045/s 2 Hobby / Pro $0.0000090/s 4 [Default] Hobby / Pro $0.0000180/s 8 Hobby / Pro $0.0000360/s"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Storage (GiB) Plan Costs 10 Hobby Free 20 Pro Free"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Hobby FREE /$100 of usage in credits + Usage Costs"
},
{
"url": "https://e2b.dev/pricing",
"quote": "pro $150 /month + Usage Costs"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Pro+ — 600 concurrent +$500/mo Pro++ — 1,100 concurrent +$1,000/mo"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Enterprise requires $3,000/mo minimum."
},
{
"url": "https://docs.e2b.dev/billing",
"quote": "You pay per second for compute resources while your sandbox is running."
},
{
"url": "https://docs.e2b.dev/billing",
"quote": "Do I pay for stopped sandboxes? No. You only pay while a sandbox is actively running. Once a sandbox is paused, killed or times out, billing stops immediately."
}
],
"classes": [
{
"name": "default",
"default": true,
"rates": {
"cpu": {
"usd": "0.000014",
"per": "vcpu-second"
},
"memory": {
"usd": "0.0000045",
"per": "gib-second"
}
},
"meter": {
"cpu": {
"basis": "allocated",
"billed_states": [
"running"
]
},
"memory": {
"basis": "allocated",
"billed_states": [
"running"
]
}
}
}
],
"exclusions": [
"Plan fees: Hobby $0 a month, Pro $150 a month, Enterprise custom with a $3,000 a month minimum.",
"Concurrency add-ons on Pro: Pro+ (600 concurrent sandboxes) $500 a month, Pro++ (1,100) $1,000 a month.",
"Credits: Hobby includes a one-time $100 usage credit, which list prices do not apply.",
"Storage: free, 10 GiB on Hobby and 20 GiB on Pro; no separate storage rate is published."
],
"open_questions": [
"The pages never say in words whether the meter is allocated or used CPU and RAM; both price tables are keyed by configured size, so allocation is assumed.",
"Charges for egress, template builds and template storage are not published anywhere read; absence is not confirmation that they are free."
]
}
}
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"outcome": "not_started",
"retry": "safe",
"retry_after_seconds": 1,
"details": {
"selection_version": 1,
"considered": 1,
"excluded": [
{
"provider": "<string>"
}
],
"closest": {},
"nearest": [
{}
],
"requirement": "<string>",
"purchase_id": "<string>",
"preview": {
"unused": 1,
"held_excluded": 1,
"fee": 1,
"principal": 1,
"tax": 1,
"total": 1,
"card": {
"brand": "<string>",
"last4": "<string>",
"type": "card",
"email": "jsmith@example.com"
}
},
"quote": {
"amount": 2,
"tax": 1,
"total": 2,
"address_required": true,
"fee_minor": 1,
"missing": [
"<string>"
]
},
"redemption": {
"code": "<string>",
"amount_nanodollars": "<string>",
"description": "<string>",
"redeemed_at": "2023-11-07T05:31:56Z"
},
"scope": "workspace",
"period": "total",
"limit_nanodollars": 2,
"requested_nanodollars": 2,
"sign_in_method": "<string>",
"masked_email": "<string>",
"failure_reason": "<string>",
"names": [
"<string>"
],
"fields": [
"preferences.order"
],
"volume_id": "<string>",
"writer_sandbox_id": "<string>",
"checkpoint": 2,
"limit_bytes": 1,
"observed_bytes": 1,
"mismatch": {
"field": "image",
"recorded": "<string>",
"requested": "<string>"
},
"volume_phase": "check",
"phase": "code",
"command": "<string>",
"exit_code": 123,
"stderr_tail": "<string>",
"stdout_tail": "<string>",
"agent": "<string>",
"port": 32768,
"revoked": true,
"preview_id": "<string>",
"url": "<string>"
},
"doc_url": "<string>",
"fix": "<string>",
"operation_id": "<string>",
"provider": "<string>",
"native_code": "<string>",
"native_status": 123,
"native_message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"outcome": "not_started",
"retry": "safe",
"retry_after_seconds": 1,
"details": {
"selection_version": 1,
"considered": 1,
"excluded": [
{
"provider": "<string>"
}
],
"closest": {},
"nearest": [
{}
],
"requirement": "<string>",
"purchase_id": "<string>",
"preview": {
"unused": 1,
"held_excluded": 1,
"fee": 1,
"principal": 1,
"tax": 1,
"total": 1,
"card": {
"brand": "<string>",
"last4": "<string>",
"type": "card",
"email": "jsmith@example.com"
}
},
"quote": {
"amount": 2,
"tax": 1,
"total": 2,
"address_required": true,
"fee_minor": 1,
"missing": [
"<string>"
]
},
"redemption": {
"code": "<string>",
"amount_nanodollars": "<string>",
"description": "<string>",
"redeemed_at": "2023-11-07T05:31:56Z"
},
"scope": "workspace",
"period": "total",
"limit_nanodollars": 2,
"requested_nanodollars": 2,
"sign_in_method": "<string>",
"masked_email": "<string>",
"failure_reason": "<string>",
"names": [
"<string>"
],
"fields": [
"preferences.order"
],
"volume_id": "<string>",
"writer_sandbox_id": "<string>",
"checkpoint": 2,
"limit_bytes": 1,
"observed_bytes": 1,
"mismatch": {
"field": "image",
"recorded": "<string>",
"requested": "<string>"
},
"volume_phase": "check",
"phase": "code",
"command": "<string>",
"exit_code": 123,
"stderr_tail": "<string>",
"stdout_tail": "<string>",
"agent": "<string>",
"port": 32768,
"revoked": true,
"preview_id": "<string>",
"url": "<string>"
},
"doc_url": "<string>",
"fix": "<string>",
"operation_id": "<string>",
"provider": "<string>",
"native_code": "<string>",
"native_status": 123,
"native_message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"outcome": "not_started",
"retry": "safe",
"retry_after_seconds": 1,
"details": {
"selection_version": 1,
"considered": 1,
"excluded": [
{
"provider": "<string>"
}
],
"closest": {},
"nearest": [
{}
],
"requirement": "<string>",
"purchase_id": "<string>",
"preview": {
"unused": 1,
"held_excluded": 1,
"fee": 1,
"principal": 1,
"tax": 1,
"total": 1,
"card": {
"brand": "<string>",
"last4": "<string>",
"type": "card",
"email": "jsmith@example.com"
}
},
"quote": {
"amount": 2,
"tax": 1,
"total": 2,
"address_required": true,
"fee_minor": 1,
"missing": [
"<string>"
]
},
"redemption": {
"code": "<string>",
"amount_nanodollars": "<string>",
"description": "<string>",
"redeemed_at": "2023-11-07T05:31:56Z"
},
"scope": "workspace",
"period": "total",
"limit_nanodollars": 2,
"requested_nanodollars": 2,
"sign_in_method": "<string>",
"masked_email": "<string>",
"failure_reason": "<string>",
"names": [
"<string>"
],
"fields": [
"preferences.order"
],
"volume_id": "<string>",
"writer_sandbox_id": "<string>",
"checkpoint": 2,
"limit_bytes": 1,
"observed_bytes": 1,
"mismatch": {
"field": "image",
"recorded": "<string>",
"requested": "<string>"
},
"volume_phase": "check",
"phase": "code",
"command": "<string>",
"exit_code": 123,
"stderr_tail": "<string>",
"stdout_tail": "<string>",
"agent": "<string>",
"port": 32768,
"revoked": true,
"preview_id": "<string>",
"url": "<string>"
},
"doc_url": "<string>",
"fix": "<string>",
"operation_id": "<string>",
"provider": "<string>",
"native_code": "<string>",
"native_status": 123,
"native_message": "<string>"
}
}Price Versions
List the Providers' Live Price Versions
Public: needs no key or session. Lists every live price version, which is what
BoxRouter used to calculate sandbox costs, so a published cost can be
rechecked without BoxRouter’s database. Live versions never change. With at, returns
only the version in effect at that time, one per provider; a provider with no version
in effect then is left out. Effective periods include effective_from and exclude
effective_to ([effective_from, effective_to)); the version taking over at a boundary
applies at that instant.
List the providers' live price versions
curl --request GET \
--url https://api.boxrouter.ai/api/v1/price-versionsimport requests
url = "https://api.boxrouter.ai/api/v1/price-versions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.boxrouter.ai/api/v1/price-versions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.boxrouter.ai/api/v1/price-versions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.boxrouter.ai/api/v1/price-versions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.boxrouter.ai/api/v1/price-versions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.boxrouter.ai/api/v1/price-versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": [
{
"provider": "e2b",
"version": "e2b@2026-09-29",
"effective_from": "2026-09-29T00:00:00Z",
"effective_to": null,
"last_confirmed_at": "2026-10-03T06:14:09Z",
"document": {
"provider": "e2b",
"version": "e2b@2026-09-29",
"effective_from": "2026-09-29T00:00:00Z",
"retrieved_at": "2026-09-29T22:52:36Z",
"boundary": {
"start": "provider",
"end": "provider",
"checked": false,
"evidence": null
},
"sources": [
{
"url": "https://e2b.dev/pricing",
"quote": "We charge per second of a running sandbox."
},
{
"url": "https://e2b.dev/pricing",
"quote": "vCPUs Plan Costs 1 Hobby / Pro $0.000014/s 2 [Default] Hobby / Pro $0.000028/s 4 Hobby / Pro $0.000056/s 6 Hobby / Pro $0.000084/s 8 Hobby / Pro $0.000112/s"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Memory (GiB) Plan Costs 1 Hobby / Pro $0.0000045/s 2 Hobby / Pro $0.0000090/s 4 [Default] Hobby / Pro $0.0000180/s 8 Hobby / Pro $0.0000360/s"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Storage (GiB) Plan Costs 10 Hobby Free 20 Pro Free"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Hobby FREE /$100 of usage in credits + Usage Costs"
},
{
"url": "https://e2b.dev/pricing",
"quote": "pro $150 /month + Usage Costs"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Pro+ — 600 concurrent +$500/mo Pro++ — 1,100 concurrent +$1,000/mo"
},
{
"url": "https://e2b.dev/pricing",
"quote": "Enterprise requires $3,000/mo minimum."
},
{
"url": "https://docs.e2b.dev/billing",
"quote": "You pay per second for compute resources while your sandbox is running."
},
{
"url": "https://docs.e2b.dev/billing",
"quote": "Do I pay for stopped sandboxes? No. You only pay while a sandbox is actively running. Once a sandbox is paused, killed or times out, billing stops immediately."
}
],
"classes": [
{
"name": "default",
"default": true,
"rates": {
"cpu": {
"usd": "0.000014",
"per": "vcpu-second"
},
"memory": {
"usd": "0.0000045",
"per": "gib-second"
}
},
"meter": {
"cpu": {
"basis": "allocated",
"billed_states": [
"running"
]
},
"memory": {
"basis": "allocated",
"billed_states": [
"running"
]
}
}
}
],
"exclusions": [
"Plan fees: Hobby $0 a month, Pro $150 a month, Enterprise custom with a $3,000 a month minimum.",
"Concurrency add-ons on Pro: Pro+ (600 concurrent sandboxes) $500 a month, Pro++ (1,100) $1,000 a month.",
"Credits: Hobby includes a one-time $100 usage credit, which list prices do not apply.",
"Storage: free, 10 GiB on Hobby and 20 GiB on Pro; no separate storage rate is published."
],
"open_questions": [
"The pages never say in words whether the meter is allocated or used CPU and RAM; both price tables are keyed by configured size, so allocation is assumed.",
"Charges for egress, template builds and template storage are not published anywhere read; absence is not confirmation that they are free."
]
}
}
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"outcome": "not_started",
"retry": "safe",
"retry_after_seconds": 1,
"details": {
"selection_version": 1,
"considered": 1,
"excluded": [
{
"provider": "<string>"
}
],
"closest": {},
"nearest": [
{}
],
"requirement": "<string>",
"purchase_id": "<string>",
"preview": {
"unused": 1,
"held_excluded": 1,
"fee": 1,
"principal": 1,
"tax": 1,
"total": 1,
"card": {
"brand": "<string>",
"last4": "<string>",
"type": "card",
"email": "jsmith@example.com"
}
},
"quote": {
"amount": 2,
"tax": 1,
"total": 2,
"address_required": true,
"fee_minor": 1,
"missing": [
"<string>"
]
},
"redemption": {
"code": "<string>",
"amount_nanodollars": "<string>",
"description": "<string>",
"redeemed_at": "2023-11-07T05:31:56Z"
},
"scope": "workspace",
"period": "total",
"limit_nanodollars": 2,
"requested_nanodollars": 2,
"sign_in_method": "<string>",
"masked_email": "<string>",
"failure_reason": "<string>",
"names": [
"<string>"
],
"fields": [
"preferences.order"
],
"volume_id": "<string>",
"writer_sandbox_id": "<string>",
"checkpoint": 2,
"limit_bytes": 1,
"observed_bytes": 1,
"mismatch": {
"field": "image",
"recorded": "<string>",
"requested": "<string>"
},
"volume_phase": "check",
"phase": "code",
"command": "<string>",
"exit_code": 123,
"stderr_tail": "<string>",
"stdout_tail": "<string>",
"agent": "<string>",
"port": 32768,
"revoked": true,
"preview_id": "<string>",
"url": "<string>"
},
"doc_url": "<string>",
"fix": "<string>",
"operation_id": "<string>",
"provider": "<string>",
"native_code": "<string>",
"native_status": 123,
"native_message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"outcome": "not_started",
"retry": "safe",
"retry_after_seconds": 1,
"details": {
"selection_version": 1,
"considered": 1,
"excluded": [
{
"provider": "<string>"
}
],
"closest": {},
"nearest": [
{}
],
"requirement": "<string>",
"purchase_id": "<string>",
"preview": {
"unused": 1,
"held_excluded": 1,
"fee": 1,
"principal": 1,
"tax": 1,
"total": 1,
"card": {
"brand": "<string>",
"last4": "<string>",
"type": "card",
"email": "jsmith@example.com"
}
},
"quote": {
"amount": 2,
"tax": 1,
"total": 2,
"address_required": true,
"fee_minor": 1,
"missing": [
"<string>"
]
},
"redemption": {
"code": "<string>",
"amount_nanodollars": "<string>",
"description": "<string>",
"redeemed_at": "2023-11-07T05:31:56Z"
},
"scope": "workspace",
"period": "total",
"limit_nanodollars": 2,
"requested_nanodollars": 2,
"sign_in_method": "<string>",
"masked_email": "<string>",
"failure_reason": "<string>",
"names": [
"<string>"
],
"fields": [
"preferences.order"
],
"volume_id": "<string>",
"writer_sandbox_id": "<string>",
"checkpoint": 2,
"limit_bytes": 1,
"observed_bytes": 1,
"mismatch": {
"field": "image",
"recorded": "<string>",
"requested": "<string>"
},
"volume_phase": "check",
"phase": "code",
"command": "<string>",
"exit_code": 123,
"stderr_tail": "<string>",
"stdout_tail": "<string>",
"agent": "<string>",
"port": 32768,
"revoked": true,
"preview_id": "<string>",
"url": "<string>"
},
"doc_url": "<string>",
"fix": "<string>",
"operation_id": "<string>",
"provider": "<string>",
"native_code": "<string>",
"native_status": 123,
"native_message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "<string>",
"outcome": "not_started",
"retry": "safe",
"retry_after_seconds": 1,
"details": {
"selection_version": 1,
"considered": 1,
"excluded": [
{
"provider": "<string>"
}
],
"closest": {},
"nearest": [
{}
],
"requirement": "<string>",
"purchase_id": "<string>",
"preview": {
"unused": 1,
"held_excluded": 1,
"fee": 1,
"principal": 1,
"tax": 1,
"total": 1,
"card": {
"brand": "<string>",
"last4": "<string>",
"type": "card",
"email": "jsmith@example.com"
}
},
"quote": {
"amount": 2,
"tax": 1,
"total": 2,
"address_required": true,
"fee_minor": 1,
"missing": [
"<string>"
]
},
"redemption": {
"code": "<string>",
"amount_nanodollars": "<string>",
"description": "<string>",
"redeemed_at": "2023-11-07T05:31:56Z"
},
"scope": "workspace",
"period": "total",
"limit_nanodollars": 2,
"requested_nanodollars": 2,
"sign_in_method": "<string>",
"masked_email": "<string>",
"failure_reason": "<string>",
"names": [
"<string>"
],
"fields": [
"preferences.order"
],
"volume_id": "<string>",
"writer_sandbox_id": "<string>",
"checkpoint": 2,
"limit_bytes": 1,
"observed_bytes": 1,
"mismatch": {
"field": "image",
"recorded": "<string>",
"requested": "<string>"
},
"volume_phase": "check",
"phase": "code",
"command": "<string>",
"exit_code": 123,
"stderr_tail": "<string>",
"stdout_tail": "<string>",
"agent": "<string>",
"port": 32768,
"revoked": true,
"preview_id": "<string>",
"url": "<string>"
},
"doc_url": "<string>",
"fix": "<string>",
"operation_id": "<string>",
"provider": "<string>",
"native_code": "<string>",
"native_status": 123,
"native_message": "<string>"
}
}