from meetkai_mka1 import SDK
with SDK(
bearer_auth="<YOUR_BEARER_TOKEN_HERE>",
) as sdk:
res = sdk.sandbox.set_pricing(rates={
"standard": {
"per_hour": 0.1,
"per_gib_hour": 0.05,
},
"browser": {
"per_hour": 0.4,
"per_gib_hour": 0.05,
},
"eval-python": {
"per_hour": 0.2,
"per_gib_hour": 0.05,
},
}, allow_unpriced=False)
# Handle response
print(res)import { SDK } from "@meetkai/mka1";
const sdk = new SDK({
bearerAuth: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await sdk.sandbox.setPricing({
rates: {
"standard": {
perHour: 0.1,
perGibHour: 0.05,
},
"browser": {
perHour: 0.4,
perGibHour: 0.05,
},
"eval-python": {
perHour: 0.2,
perGibHour: 0.05,
},
},
});
console.log(result);
}
run();using MeetKai.MKA1;
using MeetKai.MKA1.Types.Components;
using System.Collections.Generic;
var sdk = new SDK(bearerAuth: "<YOUR_BEARER_TOKEN_HERE>");
SandboxPricingUpdate req = new SandboxPricingUpdate() {
Rates = new Dictionary<string, SandboxPriceRate>() {
{ "standard", new SandboxPriceRate() {
PerHour = 0.1D,
PerGibHour = 0.05D,
} },
{ "browser", new SandboxPriceRate() {
PerHour = 0.4D,
PerGibHour = 0.05D,
} },
{ "eval-python", new SandboxPriceRate() {
PerHour = 0.2D,
PerGibHour = 0.05D,
} },
},
};
var res = await sdk.Sandbox.SetPricingAsync(req);
// handle responsecurl --request PUT \
--url https://apigw.mka1.com/api/v1/sandbox/pricing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rates": {
"standard": {
"per_hour": 0.1,
"per_gib_hour": 0.05
},
"browser": {
"per_hour": 0.4,
"per_gib_hour": 0.05
},
"eval-python": {
"per_hour": 0.2,
"per_gib_hour": 0.05
}
}
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
rates: {
standard: {per_hour: 0.1, per_gib_hour: 0.05},
browser: {per_hour: 0.4, per_gib_hour: 0.05},
'eval-python': {per_hour: 0.2, per_gib_hour: 0.05}
}
})
};
fetch('https://apigw.mka1.com/api/v1/sandbox/pricing', 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://apigw.mka1.com/api/v1/sandbox/pricing",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'rates' => [
'standard' => [
'per_hour' => 0.1,
'per_gib_hour' => 0.05
],
'browser' => [
'per_hour' => 0.4,
'per_gib_hour' => 0.05
],
'eval-python' => [
'per_hour' => 0.2,
'per_gib_hour' => 0.05
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://apigw.mka1.com/api/v1/sandbox/pricing"
payload := strings.NewReader("{\n \"rates\": {\n \"standard\": {\n \"per_hour\": 0.1,\n \"per_gib_hour\": 0.05\n },\n \"browser\": {\n \"per_hour\": 0.4,\n \"per_gib_hour\": 0.05\n },\n \"eval-python\": {\n \"per_hour\": 0.2,\n \"per_gib_hour\": 0.05\n }\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://apigw.mka1.com/api/v1/sandbox/pricing")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rates\": {\n \"standard\": {\n \"per_hour\": 0.1,\n \"per_gib_hour\": 0.05\n },\n \"browser\": {\n \"per_hour\": 0.4,\n \"per_gib_hour\": 0.05\n },\n \"eval-python\": {\n \"per_hour\": 0.2,\n \"per_gib_hour\": 0.05\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://apigw.mka1.com/api/v1/sandbox/pricing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rates\": {\n \"standard\": {\n \"per_hour\": 0.1,\n \"per_gib_hour\": 0.05\n },\n \"browser\": {\n \"per_hour\": 0.4,\n \"per_gib_hour\": 0.05\n },\n \"eval-python\": {\n \"per_hour\": 0.2,\n \"per_gib_hour\": 0.05\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"object": "sandbox.pricing",
"rates": {
"standard": {
"per_hour": 0.1,
"per_gib_hour": 0.05
},
"browser": {
"per_hour": 0.4,
"per_gib_hour": 0.05
},
"eval-python": {
"per_hour": 0.2,
"per_gib_hour": 0.05
}
},
"updated_at": "2026-07-08T00:00:00Z",
"updated_by": "user_cluster_admin"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Set Sandbox Pricing
Replace the sandbox pricing rate card. Full-replace semantics. Omitting a SKU that currently has a price is refused with 422 unless allow_unpriced is true: an unpriced SKU accrues no spend and its usage cannot be billed. A currency that differs from the stored one is saved only after the budgeting service accepts it as the cluster’s billing currency (409 when it conflicts, 503 when it cannot be verified). Takes effect on the next meter window without a restart. Cluster admins only.
from meetkai_mka1 import SDK
with SDK(
bearer_auth="<YOUR_BEARER_TOKEN_HERE>",
) as sdk:
res = sdk.sandbox.set_pricing(rates={
"standard": {
"per_hour": 0.1,
"per_gib_hour": 0.05,
},
"browser": {
"per_hour": 0.4,
"per_gib_hour": 0.05,
},
"eval-python": {
"per_hour": 0.2,
"per_gib_hour": 0.05,
},
}, allow_unpriced=False)
# Handle response
print(res)import { SDK } from "@meetkai/mka1";
const sdk = new SDK({
bearerAuth: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await sdk.sandbox.setPricing({
rates: {
"standard": {
perHour: 0.1,
perGibHour: 0.05,
},
"browser": {
perHour: 0.4,
perGibHour: 0.05,
},
"eval-python": {
perHour: 0.2,
perGibHour: 0.05,
},
},
});
console.log(result);
}
run();using MeetKai.MKA1;
using MeetKai.MKA1.Types.Components;
using System.Collections.Generic;
var sdk = new SDK(bearerAuth: "<YOUR_BEARER_TOKEN_HERE>");
SandboxPricingUpdate req = new SandboxPricingUpdate() {
Rates = new Dictionary<string, SandboxPriceRate>() {
{ "standard", new SandboxPriceRate() {
PerHour = 0.1D,
PerGibHour = 0.05D,
} },
{ "browser", new SandboxPriceRate() {
PerHour = 0.4D,
PerGibHour = 0.05D,
} },
{ "eval-python", new SandboxPriceRate() {
PerHour = 0.2D,
PerGibHour = 0.05D,
} },
},
};
var res = await sdk.Sandbox.SetPricingAsync(req);
// handle responsecurl --request PUT \
--url https://apigw.mka1.com/api/v1/sandbox/pricing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rates": {
"standard": {
"per_hour": 0.1,
"per_gib_hour": 0.05
},
"browser": {
"per_hour": 0.4,
"per_gib_hour": 0.05
},
"eval-python": {
"per_hour": 0.2,
"per_gib_hour": 0.05
}
}
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
rates: {
standard: {per_hour: 0.1, per_gib_hour: 0.05},
browser: {per_hour: 0.4, per_gib_hour: 0.05},
'eval-python': {per_hour: 0.2, per_gib_hour: 0.05}
}
})
};
fetch('https://apigw.mka1.com/api/v1/sandbox/pricing', 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://apigw.mka1.com/api/v1/sandbox/pricing",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'rates' => [
'standard' => [
'per_hour' => 0.1,
'per_gib_hour' => 0.05
],
'browser' => [
'per_hour' => 0.4,
'per_gib_hour' => 0.05
],
'eval-python' => [
'per_hour' => 0.2,
'per_gib_hour' => 0.05
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://apigw.mka1.com/api/v1/sandbox/pricing"
payload := strings.NewReader("{\n \"rates\": {\n \"standard\": {\n \"per_hour\": 0.1,\n \"per_gib_hour\": 0.05\n },\n \"browser\": {\n \"per_hour\": 0.4,\n \"per_gib_hour\": 0.05\n },\n \"eval-python\": {\n \"per_hour\": 0.2,\n \"per_gib_hour\": 0.05\n }\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://apigw.mka1.com/api/v1/sandbox/pricing")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rates\": {\n \"standard\": {\n \"per_hour\": 0.1,\n \"per_gib_hour\": 0.05\n },\n \"browser\": {\n \"per_hour\": 0.4,\n \"per_gib_hour\": 0.05\n },\n \"eval-python\": {\n \"per_hour\": 0.2,\n \"per_gib_hour\": 0.05\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://apigw.mka1.com/api/v1/sandbox/pricing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rates\": {\n \"standard\": {\n \"per_hour\": 0.1,\n \"per_gib_hour\": 0.05\n },\n \"browser\": {\n \"per_hour\": 0.4,\n \"per_gib_hour\": 0.05\n },\n \"eval-python\": {\n \"per_hour\": 0.2,\n \"per_gib_hour\": 0.05\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"object": "sandbox.pricing",
"rates": {
"standard": {
"per_hour": 0.1,
"per_gib_hour": 0.05
},
"browser": {
"per_hour": 0.4,
"per_gib_hour": 0.05
},
"eval-python": {
"per_hour": 0.2,
"per_gib_hour": 0.05
}
},
"updated_at": "2026-07-08T00:00:00Z",
"updated_by": "user_cluster_admin"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Gateway auth: send Authorization: Bearer <mka1-api-key>. For multi-user server-side integrations, you can also send X-On-Behalf-Of: <external-user-id>.
Body
Full-replace rate card update.
A SKU that has a price and is omitted here would become unpriced, and its
usage would then be recorded with no cost, which can never be billed. That
is refused unless allow_unpriced says it is intended.
Was this page helpful?