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",
"externalId": "my-session-123",
"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",
"externalId": "my-session-123",
"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',
externalId: 'my-session-123',
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',
'externalId' => 'my-session-123',
'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 \"externalId\": \"my-session-123\",\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 \"externalId\": \"my-session-123\",\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 \"externalId\": \"my-session-123\",\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",
"externalId": "my-session-123",
"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",
"externalId": "my-session-123",
"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",
"externalId": "my-session-123",
"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',
externalId: 'my-session-123',
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',
'externalId' => 'my-session-123',
'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 \"externalId\": \"my-session-123\",\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 \"externalId\": \"my-session-123\",\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 \"externalId\": \"my-session-123\",\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",
"externalId": "my-session-123",
"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?
