curl --request POST \
--url https://api.blaxel.ai/v0/policies \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"metadata": {
"name": "my-resource",
"displayName": "My Resource",
"labels": {}
},
"spec": {
"flavors": [
{
"name": "t4",
"type": "cpu"
}
],
"locations": [
{
"name": "EU",
"type": "continent"
}
],
"maxTokens": {
"granularity": "minute",
"input": 10000,
"output": 5000,
"ratioInputOverOutput": 2,
"step": 1,
"total": 15000
},
"resourceTypes": [],
"sandbox": false,
"type": "location"
},
"usage": {
"agents": 123,
"functions": 123,
"jobs": 123,
"models": 123,
"sandboxes": 123
}
}
'import requests
url = "https://api.blaxel.ai/v0/policies"
payload = {
"metadata": {
"name": "my-resource",
"displayName": "My Resource",
"labels": {}
},
"spec": {
"flavors": [
{
"name": "t4",
"type": "cpu"
}
],
"locations": [
{
"name": "EU",
"type": "continent"
}
],
"maxTokens": {
"granularity": "minute",
"input": 10000,
"output": 5000,
"ratioInputOverOutput": 2,
"step": 1,
"total": 15000
},
"resourceTypes": [],
"sandbox": False,
"type": "location"
},
"usage": {
"agents": 123,
"functions": 123,
"jobs": 123,
"models": 123,
"sandboxes": 123
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
metadata: {name: 'my-resource', displayName: 'My Resource', labels: {}},
spec: {
flavors: [{name: 't4', type: 'cpu'}],
locations: [{name: 'EU', type: 'continent'}],
maxTokens: {
granularity: 'minute',
input: 10000,
output: 5000,
ratioInputOverOutput: 2,
step: 1,
total: 15000
},
resourceTypes: [],
sandbox: false,
type: 'location'
},
usage: {agents: 123, functions: 123, jobs: 123, models: 123, sandboxes: 123}
})
};
fetch('https://api.blaxel.ai/v0/policies', 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.blaxel.ai/v0/policies",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'metadata' => [
'name' => 'my-resource',
'displayName' => 'My Resource',
'labels' => [
]
],
'spec' => [
'flavors' => [
[
'name' => 't4',
'type' => 'cpu'
]
],
'locations' => [
[
'name' => 'EU',
'type' => 'continent'
]
],
'maxTokens' => [
'granularity' => 'minute',
'input' => 10000,
'output' => 5000,
'ratioInputOverOutput' => 2,
'step' => 1,
'total' => 15000
],
'resourceTypes' => [
],
'sandbox' => false,
'type' => 'location'
],
'usage' => [
'agents' => 123,
'functions' => 123,
'jobs' => 123,
'models' => 123,
'sandboxes' => 123
]
]),
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://api.blaxel.ai/v0/policies"
payload := strings.NewReader("{\n \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"labels\": {}\n },\n \"spec\": {\n \"flavors\": [\n {\n \"name\": \"t4\",\n \"type\": \"cpu\"\n }\n ],\n \"locations\": [\n {\n \"name\": \"EU\",\n \"type\": \"continent\"\n }\n ],\n \"maxTokens\": {\n \"granularity\": \"minute\",\n \"input\": 10000,\n \"output\": 5000,\n \"ratioInputOverOutput\": 2,\n \"step\": 1,\n \"total\": 15000\n },\n \"resourceTypes\": [],\n \"sandbox\": false,\n \"type\": \"location\"\n },\n \"usage\": {\n \"agents\": 123,\n \"functions\": 123,\n \"jobs\": 123,\n \"models\": 123,\n \"sandboxes\": 123\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.blaxel.ai/v0/policies")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"labels\": {}\n },\n \"spec\": {\n \"flavors\": [\n {\n \"name\": \"t4\",\n \"type\": \"cpu\"\n }\n ],\n \"locations\": [\n {\n \"name\": \"EU\",\n \"type\": \"continent\"\n }\n ],\n \"maxTokens\": {\n \"granularity\": \"minute\",\n \"input\": 10000,\n \"output\": 5000,\n \"ratioInputOverOutput\": 2,\n \"step\": 1,\n \"total\": 15000\n },\n \"resourceTypes\": [],\n \"sandbox\": false,\n \"type\": \"location\"\n },\n \"usage\": {\n \"agents\": 123,\n \"functions\": 123,\n \"jobs\": 123,\n \"models\": 123,\n \"sandboxes\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blaxel.ai/v0/policies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"labels\": {}\n },\n \"spec\": {\n \"flavors\": [\n {\n \"name\": \"t4\",\n \"type\": \"cpu\"\n }\n ],\n \"locations\": [\n {\n \"name\": \"EU\",\n \"type\": \"continent\"\n }\n ],\n \"maxTokens\": {\n \"granularity\": \"minute\",\n \"input\": 10000,\n \"output\": 5000,\n \"ratioInputOverOutput\": 2,\n \"step\": 1,\n \"total\": 15000\n },\n \"resourceTypes\": [],\n \"sandbox\": false,\n \"type\": \"location\"\n },\n \"usage\": {\n \"agents\": 123,\n \"functions\": 123,\n \"jobs\": 123,\n \"models\": 123,\n \"sandboxes\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"metadata": {
"name": "my-resource",
"createdAt": "<string>",
"updatedAt": "<string>",
"createdBy": "<string>",
"updatedBy": "<string>",
"displayName": "My Resource",
"labels": {},
"plan": "<string>",
"url": "<string>",
"workspace": "<string>"
},
"spec": {
"flavors": [
{
"name": "t4",
"type": "cpu"
}
],
"locations": [
{
"name": "EU",
"type": "continent"
}
],
"maxTokens": {
"granularity": "minute",
"input": 10000,
"output": 5000,
"ratioInputOverOutput": 2,
"step": 1,
"total": 15000
},
"resourceTypes": [],
"sandbox": false,
"type": "location"
},
"usage": {
"agents": 123,
"functions": 123,
"jobs": 123,
"models": 123,
"sandboxes": 123
}
}Create governance policy
Creates a new governance policy to control where and how resources are deployed. Policies can restrict deployment to specific regions, countries, or continents for compliance.
curl --request POST \
--url https://api.blaxel.ai/v0/policies \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"metadata": {
"name": "my-resource",
"displayName": "My Resource",
"labels": {}
},
"spec": {
"flavors": [
{
"name": "t4",
"type": "cpu"
}
],
"locations": [
{
"name": "EU",
"type": "continent"
}
],
"maxTokens": {
"granularity": "minute",
"input": 10000,
"output": 5000,
"ratioInputOverOutput": 2,
"step": 1,
"total": 15000
},
"resourceTypes": [],
"sandbox": false,
"type": "location"
},
"usage": {
"agents": 123,
"functions": 123,
"jobs": 123,
"models": 123,
"sandboxes": 123
}
}
'import requests
url = "https://api.blaxel.ai/v0/policies"
payload = {
"metadata": {
"name": "my-resource",
"displayName": "My Resource",
"labels": {}
},
"spec": {
"flavors": [
{
"name": "t4",
"type": "cpu"
}
],
"locations": [
{
"name": "EU",
"type": "continent"
}
],
"maxTokens": {
"granularity": "minute",
"input": 10000,
"output": 5000,
"ratioInputOverOutput": 2,
"step": 1,
"total": 15000
},
"resourceTypes": [],
"sandbox": False,
"type": "location"
},
"usage": {
"agents": 123,
"functions": 123,
"jobs": 123,
"models": 123,
"sandboxes": 123
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
metadata: {name: 'my-resource', displayName: 'My Resource', labels: {}},
spec: {
flavors: [{name: 't4', type: 'cpu'}],
locations: [{name: 'EU', type: 'continent'}],
maxTokens: {
granularity: 'minute',
input: 10000,
output: 5000,
ratioInputOverOutput: 2,
step: 1,
total: 15000
},
resourceTypes: [],
sandbox: false,
type: 'location'
},
usage: {agents: 123, functions: 123, jobs: 123, models: 123, sandboxes: 123}
})
};
fetch('https://api.blaxel.ai/v0/policies', 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.blaxel.ai/v0/policies",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'metadata' => [
'name' => 'my-resource',
'displayName' => 'My Resource',
'labels' => [
]
],
'spec' => [
'flavors' => [
[
'name' => 't4',
'type' => 'cpu'
]
],
'locations' => [
[
'name' => 'EU',
'type' => 'continent'
]
],
'maxTokens' => [
'granularity' => 'minute',
'input' => 10000,
'output' => 5000,
'ratioInputOverOutput' => 2,
'step' => 1,
'total' => 15000
],
'resourceTypes' => [
],
'sandbox' => false,
'type' => 'location'
],
'usage' => [
'agents' => 123,
'functions' => 123,
'jobs' => 123,
'models' => 123,
'sandboxes' => 123
]
]),
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://api.blaxel.ai/v0/policies"
payload := strings.NewReader("{\n \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"labels\": {}\n },\n \"spec\": {\n \"flavors\": [\n {\n \"name\": \"t4\",\n \"type\": \"cpu\"\n }\n ],\n \"locations\": [\n {\n \"name\": \"EU\",\n \"type\": \"continent\"\n }\n ],\n \"maxTokens\": {\n \"granularity\": \"minute\",\n \"input\": 10000,\n \"output\": 5000,\n \"ratioInputOverOutput\": 2,\n \"step\": 1,\n \"total\": 15000\n },\n \"resourceTypes\": [],\n \"sandbox\": false,\n \"type\": \"location\"\n },\n \"usage\": {\n \"agents\": 123,\n \"functions\": 123,\n \"jobs\": 123,\n \"models\": 123,\n \"sandboxes\": 123\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.blaxel.ai/v0/policies")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"labels\": {}\n },\n \"spec\": {\n \"flavors\": [\n {\n \"name\": \"t4\",\n \"type\": \"cpu\"\n }\n ],\n \"locations\": [\n {\n \"name\": \"EU\",\n \"type\": \"continent\"\n }\n ],\n \"maxTokens\": {\n \"granularity\": \"minute\",\n \"input\": 10000,\n \"output\": 5000,\n \"ratioInputOverOutput\": 2,\n \"step\": 1,\n \"total\": 15000\n },\n \"resourceTypes\": [],\n \"sandbox\": false,\n \"type\": \"location\"\n },\n \"usage\": {\n \"agents\": 123,\n \"functions\": 123,\n \"jobs\": 123,\n \"models\": 123,\n \"sandboxes\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blaxel.ai/v0/policies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {\n \"name\": \"my-resource\",\n \"displayName\": \"My Resource\",\n \"labels\": {}\n },\n \"spec\": {\n \"flavors\": [\n {\n \"name\": \"t4\",\n \"type\": \"cpu\"\n }\n ],\n \"locations\": [\n {\n \"name\": \"EU\",\n \"type\": \"continent\"\n }\n ],\n \"maxTokens\": {\n \"granularity\": \"minute\",\n \"input\": 10000,\n \"output\": 5000,\n \"ratioInputOverOutput\": 2,\n \"step\": 1,\n \"total\": 15000\n },\n \"resourceTypes\": [],\n \"sandbox\": false,\n \"type\": \"location\"\n },\n \"usage\": {\n \"agents\": 123,\n \"functions\": 123,\n \"jobs\": 123,\n \"models\": 123,\n \"sandboxes\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"metadata": {
"name": "my-resource",
"createdAt": "<string>",
"updatedAt": "<string>",
"createdBy": "<string>",
"updatedBy": "<string>",
"displayName": "My Resource",
"labels": {},
"plan": "<string>",
"url": "<string>",
"workspace": "<string>"
},
"spec": {
"flavors": [
{
"name": "t4",
"type": "cpu"
}
],
"locations": [
{
"name": "EU",
"type": "continent"
}
],
"maxTokens": {
"granularity": "minute",
"input": 10000,
"output": 5000,
"ratioInputOverOutput": 2,
"step": 1,
"total": 15000
},
"resourceTypes": [],
"sandbox": false,
"type": "location"
},
"usage": {
"agents": 123,
"functions": 123,
"jobs": 123,
"models": 123,
"sandboxes": 123
}
}Authorizations
OAuth2 authentication with JWT tokens
Body
Rule that controls how a deployment is made and served (e.g. location restrictions)
Common metadata fields shared by all Blaxel resources including name, labels, timestamps, and ownership information
Show child attributes
Show child attributes
Policy specification
Show child attributes
Show child attributes
Per-resource counts of how many resources reference a policy. Computed by the policies listing endpoint to avoid client-side fan-out across the agents/models/functions/sandboxes/jobs listings.
Show child attributes
Show child attributes
Response
successful operation
Rule that controls how a deployment is made and served (e.g. location restrictions)
Common metadata fields shared by all Blaxel resources including name, labels, timestamps, and ownership information
Show child attributes
Show child attributes
Policy specification
Show child attributes
Show child attributes
Per-resource counts of how many resources reference a policy. Computed by the policies listing endpoint to avoid client-side fan-out across the agents/models/functions/sandboxes/jobs listings.
Show child attributes
Show child attributes
Was this page helpful?
