Platform API reference
Manage everything on the Platform over HTTPS with JSON. Catalogue endpoints need no key; account endpoints need a key with read or manage.
| Base URL | https://platform.tenzro.xyz/api |
| Auth | Authorization: Bearer tzl_… |
| Format | JSON request and response bodies. Lists are returned as { "data": [...] }. |
| OpenAPI | https://platform.tenzro.xyz/api/openapi.json |
Errors
Every error has the same shape and an HTTP status that matches it.
{ "error": { "code": "invalid_request", "message": "Choose an amount between $5 and $5000." } }| Status | Code | When |
|---|---|---|
| 400 | invalid_request · invalid_json · invalid_code | The request is malformed or a value is out of range |
| 401 | unauthenticated · invalid_key | No key, or a bad key |
| 403 | forbidden | The key lacks the needed permission |
| 404 | not_found | No such endpoint or object |
| 405 | method_not_allowed | Wrong HTTP method for the path |
| 409 | already_paid · machine_offline | The object is not in a state that allows this |
| 503 | unavailable | A payment method or accounts are not available right now |
Endpoints
Catalogue
List models
no keyEvery model in the catalogue with its pricing in Tenzro Labs credits (1 credit = 0.001 TNZO) and the machines that serve it. Pricing is free on testnet.
curl "https://platform.tenzro.xyz/api/models"{
"data": [
{
"id": "qwen3.5-4b",
"name": "Qwen 3.5 4B",
"family": "Qwen",
"description": "Small, fast language model for chat, extraction and tool calls.",
"modality": "text",
"context_length": 131072,
"pricing": {
"input_credits_per_mtok": 0,
"output_credits_per_mtok": 0,
"credits_per_request": 0
},
"available": true,
"machines": [
"tenzro-partner-cluster"
]
}
]
}Get a model
no keyOne model, plus the current route order: the machines a request would go to, best first.
curl "https://platform.tenzro.xyz/api/models/{id}"{
"id": "qwen3.5-4b",
"name": "Qwen 3.5 4B",
"family": "Qwen",
"description": "Small, fast language model for chat, extraction and tool calls.",
"modality": "text",
"context_length": 131072,
"pricing": {
"input_credits_per_mtok": 0,
"output_credits_per_mtok": 0,
"credits_per_request": 0
},
"available": true,
"machines": [
"tenzro-partner-cluster"
],
"routes": [
{
"machine_id": "tenzro-partner-cluster",
"health": "online",
"region": "Europe",
"score": 120
}
]
}List machines
no keyThe machines Tenzro Labs runs, with hardware, live health, and what each offers. rent and subscribe are null where a machine offers neither.
| Query | Type | Description |
|---|---|---|
service | serverless | rent | subscribe | Only machines offering this. |
region | string | Exact region name, e.g. Europe. |
gpu | boolean | true for GPU machines, false for CPU-only. |
operator | string | Operator id. |
model | string | Only machines set up to serve this model id. |
curl "https://platform.tenzro.xyz/api/machines"{
"data": [
{
"id": "tenzro-partner-cluster",
"name": "Tenzro Partner Cluster",
"region": "Europe",
"operator": {
"id": "tenzro-partners",
"name": "Tenzro Partners"
},
"health": "online",
"hardware": {
"gpus": [
{
"model": "NVIDIA DGX Spark (GB10)",
"count": 1,
"vram_gb": 128
},
{
"model": "NVIDIA RTX 5070 Ti",
"count": 1,
"vram_gb": 16
}
],
"cpu_cores": 40,
"memory_gb": 160,
"storage_gb": 4000
},
"services": {
"serverless": {
"models": [
"qwen3.8-27b",
"qwen3.5-4b",
"timesfm-2.5-200m",
"qwen3-embedding-0.6b",
"flux2-klein-4b"
],
"serving_now": [
"qwen3.8-27b",
"qwen3.5-4b",
"timesfm-2.5-200m",
"qwen3-embedding-0.6b"
]
},
"rent": null,
"subscribe": null
},
"network": {
"status": "active",
"reachability": "reachable"
}
}
]
}Get a machine
no keycurl "https://platform.tenzro.xyz/api/machines/{id}"{
"id": "tenzro-partner-cluster",
"name": "Tenzro Partner Cluster",
"region": "Europe",
"operator": {
"id": "tenzro-partners",
"name": "Tenzro Partners"
},
"health": "online",
"hardware": {
"gpus": [
{
"model": "NVIDIA DGX Spark (GB10)",
"count": 1,
"vram_gb": 128
},
{
"model": "NVIDIA RTX 5070 Ti",
"count": 1,
"vram_gb": 16
}
],
"cpu_cores": 40,
"memory_gb": 160,
"storage_gb": 4000
},
"services": {
"serverless": {
"models": [
"qwen3.8-27b",
"qwen3.5-4b",
"timesfm-2.5-200m",
"qwen3-embedding-0.6b",
"flux2-klein-4b"
],
"serving_now": [
"qwen3.8-27b",
"qwen3.5-4b",
"timesfm-2.5-200m",
"qwen3-embedding-0.6b"
]
},
"rent": null,
"subscribe": null
},
"network": {
"status": "active",
"reachability": "reachable"
}
}List operators
no keyWho runs the machines, and which machines they run: operators on the Tenzro Network that partner with Tenzro Labs.
curl "https://platform.tenzro.xyz/api/operators"{
"data": [
{
"id": "tenzro-partners",
"name": "Tenzro Partners",
"description": "Operators on the Tenzro Network that partner with Tenzro Labs: they rent it capacity or serve its traffic on demand, and it serves its curated models from their machines.",
"website": "https://tenzro.xyz",
"featured": true,
"certifications": [],
"machines": [
{
"id": "tenzro-partner-cluster",
"name": "Tenzro Partner Cluster",
"health": "online"
}
]
}
]
}Get an operator
no keycurl "https://platform.tenzro.xyz/api/operators/{id}"{
"id": "tenzro-partners",
"name": "Tenzro Partners",
"website": "https://tenzro.xyz",
"featured": true,
"certifications": []
}Preview routing
no keyWhich machines an unscoped request for a model would be sent to right now, in order.
| Query | Type | Description |
|---|---|---|
model | string · required | Model id. |
region | string | Prefer machines in this region when otherwise equal. |
curl "https://platform.tenzro.xyz/api/route?model=..."{
"model": "qwen3.5-4b",
"routes": [
{
"machine_id": "tenzro-partner-cluster",
"health": "online",
"region": "Europe",
"score": 120
}
]
}List credit packages and offers
no keycurl "https://platform.tenzro.xyz/api/packages"{
"data": []
}List payment methods
no keyWhether card and stablecoin payments are set up, and which chains and tokens are accepted. available is false for a method that is not set up.
curl "https://platform.tenzro.xyz/api/payment-methods"{
"card": {
"available": false,
"processor": "stripe"
},
"stablecoin": {
"available": false,
"processor": "bridge",
"options": []
}
}Price an order
no keyWhat an order would cost, without creating it. Accepts the same body as Create an order. amount_usd is the fiat price; details.credits is what it grants. Credit orders are refused until Tenzro Labs sets the credit price, as shown.
curl -X POST "https://platform.tenzro.xyz/api/quotes" \
-H "Content-Type: application/json" \
-d '{"type":"credits","amount_usd":25}'Body schema
{
"oneOf": [
{
"title": "Credits",
"type": "object",
"required": [
"type",
"amount_usd"
],
"properties": {
"type": {
"const": "credits"
},
"amount_usd": {
"type": "integer",
"minimum": 5,
"maximum": 5000,
"description": "The fiat price to pay, in whole US dollars. The credits it buys are set by Tenzro Labs; until that price is set, credit orders are refused."
},
"machine_id": {
"type": "string",
"description": "Pin the credit to one machine. Omit for credit usable anywhere."
},
"gift": {
"type": "boolean",
"description": "Issue a redeemable ticket code instead of crediting this account."
}
}
},
{
"title": "Package",
"type": "object",
"required": [
"type",
"package_id"
],
"properties": {
"type": {
"const": "package"
},
"package_id": {
"type": "string"
},
"gift": {
"type": "boolean"
}
}
},
{
"title": "Rental",
"type": "object",
"required": [
"type",
"machine_id",
"cpu_cores",
"memory_gb",
"hours"
],
"properties": {
"type": {
"const": "rental"
},
"machine_id": {
"type": "string"
},
"gpu": {
"type": "integer",
"minimum": 0
},
"cpu_cores": {
"type": "integer",
"minimum": 1
},
"memory_gb": {
"type": "integer",
"minimum": 1
},
"storage_gb": {
"type": "integer",
"minimum": 0
},
"hours": {
"type": "integer",
"minimum": 1
}
}
},
{
"title": "Subscription",
"type": "object",
"required": [
"type",
"machine_id",
"plan_id"
],
"properties": {
"type": {
"const": "subscription"
},
"machine_id": {
"type": "string"
},
"plan_id": {
"type": "string"
},
"renew_subscription_id": {
"type": "string",
"description": "Renew an existing stablecoin plan for another 30 days."
}
}
}
]
}{
"error": {
"code": "invalid_request",
"message": "Credit top-ups open when pricing is set; usage is free on testnet."
}
}Account
Get the account and key
readThe account the key belongs to, and the key's own permissions and scope.
curl "https://platform.tenzro.xyz/api/me" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"email": "dev@example.com",
"created_at": "2026-09-01T00:00:00.000Z",
"key": {
"id": "key_Zb81Qm0sP4aT",
"name": "ci",
"prefix": "tzl_3kQ9aZ1x",
"permissions": [
"inference",
"read"
],
"scope": null,
"subscription_id": null,
"rental_id": null,
"created_at": "2026-09-26T08:00:00.000Z",
"last_used_at": null,
"revoked_at": null
}
}Credits
Get the credit balance
readTotal balance and its split between credit usable anywhere (machine_id null) and credit pinned to machines.
curl "https://platform.tenzro.xyz/api/credits" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"total_credits": 25000,
"by_scope": [
{
"machine_id": null,
"credits": 25000
}
]
}List credit activity
readCredit added, plan credit granted, and usage charged, newest first.
| Query | Type | Description |
|---|---|---|
limit | integer | 1–500, default 50. |
curl "https://platform.tenzro.xyz/api/credits/activity" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"data": [
{
"id": "812",
"type": "usage",
"credits": 0,
"machine_id": "tenzro-partner-cluster",
"at": "2026-09-26T08:01:12.000Z"
}
]
}Redeem a ticket
managecurl -X POST "https://platform.tenzro.xyz/api/credits/redeem" \
-H "Authorization: Bearer $TENZRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"code":"TZ-7K2M-9QXA-4BVN-P0RD"}'Body schema
{
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"example": "TZ-7K2M-9QXA-4BVN-P0RD"
}
}
}{
"redeemed": true,
"credits": 25000,
"machine_id": null
}List tickets you bought
readGift tickets and credit tickets this account bought, including codes not yet redeemed.
curl "https://platform.tenzro.xyz/api/tickets" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"data": [
{
"code": "TZ-7K2M-9QXA-4BVN-P0RD",
"credits": 25000,
"machine_id": null,
"redeemed": false,
"redeemed_by_you": false
}
]
}Orders
Create an order
manageCreates an unpaid order for credits, a package, a rental, or a plan. Pay it with Pay an order, or send a person to pay_url. Nothing is charged until payment completes.
curl -X POST "https://platform.tenzro.xyz/api/orders" \
-H "Authorization: Bearer $TENZRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"credits","amount_usd":25}'Body schema
{
"oneOf": [
{
"title": "Credits",
"type": "object",
"required": [
"type",
"amount_usd"
],
"properties": {
"type": {
"const": "credits"
},
"amount_usd": {
"type": "integer",
"minimum": 5,
"maximum": 5000,
"description": "The fiat price to pay, in whole US dollars. The credits it buys are set by Tenzro Labs; until that price is set, credit orders are refused."
},
"machine_id": {
"type": "string",
"description": "Pin the credit to one machine. Omit for credit usable anywhere."
},
"gift": {
"type": "boolean",
"description": "Issue a redeemable ticket code instead of crediting this account."
}
}
},
{
"title": "Package",
"type": "object",
"required": [
"type",
"package_id"
],
"properties": {
"type": {
"const": "package"
},
"package_id": {
"type": "string"
},
"gift": {
"type": "boolean"
}
}
},
{
"title": "Rental",
"type": "object",
"required": [
"type",
"machine_id",
"cpu_cores",
"memory_gb",
"hours"
],
"properties": {
"type": {
"const": "rental"
},
"machine_id": {
"type": "string"
},
"gpu": {
"type": "integer",
"minimum": 0
},
"cpu_cores": {
"type": "integer",
"minimum": 1
},
"memory_gb": {
"type": "integer",
"minimum": 1
},
"storage_gb": {
"type": "integer",
"minimum": 0
},
"hours": {
"type": "integer",
"minimum": 1
}
}
},
{
"title": "Subscription",
"type": "object",
"required": [
"type",
"machine_id",
"plan_id"
],
"properties": {
"type": {
"const": "subscription"
},
"machine_id": {
"type": "string"
},
"plan_id": {
"type": "string"
},
"renew_subscription_id": {
"type": "string",
"description": "Renew an existing stablecoin plan for another 30 days."
}
}
}
]
}{
"id": "ord_4hYt2K9qLmN0pXr8",
"type": "credits",
"title": "Credit top-up · any machine",
"amount_usd": 25,
"currency": "usd",
"status": "pending",
"machine_id": null,
"payment": {
"method": null
},
"pay_url": "https://platform.tenzro.xyz/checkout/ord_4hYt2K9qLmN0pXr8",
"created_at": "2026-09-26T08:00:00.000Z",
"paid_at": null
}Pay an order
managecard returns a Stripe Checkout URL for a person to open. stablecoin returns a deposit address, token, chain and exact amount; the order is fulfilled when the deposit is received.
curl -X POST "https://platform.tenzro.xyz/api/orders/{id}/pay" \
-H "Authorization: Bearer $TENZRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"method":"stablecoin","chain":"base","token":"usdc"}'Body schema
{
"type": "object",
"required": [
"method"
],
"properties": {
"method": {
"enum": [
"card",
"stablecoin"
]
},
"chain": {
"type": "string",
"description": "Stablecoin only. See List payment methods."
},
"token": {
"type": "string",
"description": "Stablecoin only, e.g. usdc."
}
}
}{
"id": "ord_4hYt2K9qLmN0pXr8",
"type": "credits",
"title": "Credit top-up · any machine",
"amount_usd": 25,
"currency": "usd",
"status": "pending",
"machine_id": null,
"payment": {
"method": "stablecoin",
"deposit": {
"chain": "base",
"token": "usdc",
"amount": "25.00",
"address": "0x9f…c21",
"memo": null
}
},
"pay_url": "https://platform.tenzro.xyz/checkout/ord_4hYt2K9qLmN0pXr8",
"created_at": "2026-09-26T08:00:00.000Z",
"paid_at": null
}Get an order
readCurrent status. For a paid credit order, includes the ticket: its code, the credits it grants, and whether you redeemed it. Poll this after paying.
curl "https://platform.tenzro.xyz/api/orders/{id}" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"id": "ord_4hYt2K9qLmN0pXr8",
"type": "credits",
"title": "Credit top-up · any machine",
"amount_usd": 25,
"currency": "usd",
"status": "paid",
"machine_id": null,
"payment": {
"method": null
},
"pay_url": "https://platform.tenzro.xyz/checkout/ord_4hYt2K9qLmN0pXr8",
"created_at": "2026-09-26T08:00:00.000Z",
"paid_at": "2026-09-26T08:03:00.000Z",
"ticket": null
}List orders
read| Query | Type | Description |
|---|---|---|
limit | integer | 1–200, default 50. |
curl "https://platform.tenzro.xyz/api/orders" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"data": [
{
"id": "ord_4hYt2K9qLmN0pXr8",
"type": "credits",
"title": "Credit top-up · any machine",
"amount_usd": 25,
"currency": "usd",
"status": "pending",
"machine_id": null,
"payment": {
"method": null
},
"pay_url": "https://platform.tenzro.xyz/checkout/ord_4hYt2K9qLmN0pXr8",
"created_at": "2026-09-26T08:00:00.000Z",
"paid_at": null
}
]
}API keys
List API keys
readcurl "https://platform.tenzro.xyz/api/keys" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"data": [
{
"id": "key_Zb81Qm0sP4aT",
"name": "ci",
"prefix": "tzl_3kQ9aZ1x",
"permissions": [
"inference",
"read"
],
"scope": null,
"subscription_id": null,
"rental_id": null,
"created_at": "2026-09-26T08:00:00.000Z",
"last_used_at": null,
"revoked_at": null
}
]
}Create an API key
manageThe secret is returned once. A key can only grant permissions it holds. Scope with machine_id, subscription_id or rental_id; otherwise the key reaches every machine.
curl -X POST "https://platform.tenzro.xyz/api/keys" \
-H "Authorization: Bearer $TENZRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"ci","permissions":["inference","read"]}'Body schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"permissions": {
"type": "array",
"items": {
"enum": [
"inference",
"read",
"manage"
]
},
"default": [
"inference"
]
},
"machine_id": {
"type": "string"
},
"subscription_id": {
"type": "string"
},
"rental_id": {
"type": "string"
}
}
}{
"id": "key_Zb81Qm0sP4aT",
"name": "ci",
"prefix": "tzl_3kQ9aZ1x",
"permissions": [
"inference",
"read"
],
"scope": null,
"subscription_id": null,
"rental_id": null,
"created_at": "2026-09-26T08:00:00.000Z",
"last_used_at": null,
"revoked_at": null,
"secret": "tzl_3kQ9aZ1x…"
}Revoke an API key
managecurl -X DELETE "https://platform.tenzro.xyz/api/keys/{id}" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"id": "key_Zb81Qm0sP4aT",
"revoked": true
}Plans & rentals
List plans
readNo machine offers plans on testnet, so this list is empty.
curl "https://platform.tenzro.xyz/api/subscriptions" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"data": []
}Cancel at period end
manageCard plans only. The plan stays active until current_period_end.
curl -X POST "https://platform.tenzro.xyz/api/subscriptions/{id}/cancel" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"id": "subs_Qp0r…",
"status": "active",
"auto_renews": false,
"cancel_at_period_end": true
}Resume auto-renewal
managecurl -X POST "https://platform.tenzro.xyz/api/subscriptions/{id}/resume" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"id": "subs_Qp0r…",
"status": "active",
"auto_renews": true,
"cancel_at_period_end": false
}List rentals
readNo machine offers rentals on testnet, so this list is empty.
curl "https://platform.tenzro.xyz/api/rentals" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"data": []
}Identity & agents
Get your Tenzro identity
readYour did:tenzro:human identity and wallet, rooted in your passkeys. manage_url is where passkeys and devices are managed.
curl "https://platform.tenzro.xyz/api/identity" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"state": "ready",
"did": "did:tenzro:human:e0b27720-3043-84d5-9b66-49eba92b1a8d",
"wallet_address": "0xd8aa2ca0a3b56be2b58d6c883c7b3ed31d749428",
"error": null,
"passkeys": 2,
"can_send": true,
"manage_url": "https://accounts.tenzro.xyz/wallet?return_to=…"
}List agents
readEach agent's status and the limits its owner approved. An outstanding approval is collected first, so a list read after the owner approves shows the result.
curl "https://platform.tenzro.xyz/api/agents" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"data": [
{
"id": "agt_Zp3kQ9x1RmW4sT",
"name": "research-bot",
"status": "active",
"approval": null,
"capabilities": [
"inference"
],
"limits": {
"max_transaction_tnzo": null,
"max_daily_tnzo": null,
"daily_limit_credits": 20000,
"total_limit_credits": 500000,
"expires_in_days": 90
},
"proposed": null,
"did": "did:tenzro:machine:e0b27720-3043-84d5-9b66-49eba92b1a8d:7c1d…",
"wallet_address": "0x4b1f…",
"serving": {
"nodes": 3,
"operators": 2
},
"network_key_held": true,
"error": null,
"created_at": "2026-09-26T09:05:00.000Z",
"approved_at": "2026-09-26T09:12:00.000Z",
"activated_at": "2026-09-26T09:12:00.000Z",
"expires_at": "2026-12-25T09:12:00.000Z",
"revoked_at": null
}
]
}Create an agent
manageProposes an agent under your identity and returns approve_url. The account owner opens it, may adjust the settings, and approves with their passkey on the account site; a passkey cannot be pressed from code, so relay the link to a person. The agent becomes active once the approval is collected: reading the agent collects it. The settings the owner approved are the ones that apply. Refused with no_serving_nodes while the network has none.
curl -X POST "https://platform.tenzro.xyz/api/agents" \
-H "Authorization: Bearer $TENZRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"research-bot","capabilities":["inference"],"daily_limit_credits":20000,"total_limit_credits":500000,"expires_in_days":90}'Body schema
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "1 to 64 lowercase letters, digits, dots, dashes or underscores."
},
"capabilities": {
"type": "array",
"items": {
"enum": [
"inference",
"payments"
]
},
"default": [
"inference"
]
},
"max_transaction_tnzo": {
"type": "string",
"description": "Network cap on any one payment the agent makes, in TNZO (e.g. \"1.5\")."
},
"max_daily_tnzo": {
"type": "string",
"description": "Network cap on what the agent pays per day, in TNZO."
},
"daily_limit_credits": {
"type": "number",
"description": "Tenzro Labs credits this agent may spend per UTC day."
},
"total_limit_credits": {
"type": "number",
"description": "Tenzro Labs credits this agent may spend in total."
},
"expires_in_days": {
"type": "integer",
"minimum": 1,
"maximum": 3650,
"description": "The delegation ends after this many days."
}
}
}{
"approve_url": "https://accounts.tenzro.xyz/agents/approve/apr_3xQk…",
"agent": {
"id": "agt_Zp3kQ9x1RmW4sT",
"name": "research-bot",
"status": "awaiting_approval",
"approval": {
"kind": "create",
"state": "pending",
"approve_url": "https://accounts.tenzro.xyz/agents/approve/apr_3xQk…"
},
"capabilities": [
"inference"
],
"limits": null,
"proposed": {
"agent_name": "research-bot",
"capabilities": [
"inference"
],
"max_transaction_tnzo": "",
"max_daily_tnzo": "",
"daily_limit_credits": 20000,
"total_limit_credits": 500000,
"expires_in_days": 90
},
"did": null,
"wallet_address": null,
"serving": {
"nodes": 3,
"operators": 2
},
"network_key_held": false,
"error": null,
"created_at": "2026-09-26T09:05:00.000Z",
"approved_at": null,
"activated_at": null,
"expires_at": null,
"revoked_at": null
}
}Get an agent
readIncludes what it has spent today and in total. Collects an outstanding approval first.
curl "https://platform.tenzro.xyz/api/agents/{id}" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"id": "agt_Zp3kQ9x1RmW4sT",
"name": "research-bot",
"status": "active",
"approval": null,
"capabilities": [
"inference"
],
"limits": {
"max_transaction_tnzo": null,
"max_daily_tnzo": null,
"daily_limit_credits": 20000,
"total_limit_credits": 500000,
"expires_in_days": 90
},
"proposed": null,
"did": "did:tenzro:machine:e0b27720-3043-84d5-9b66-49eba92b1a8d:7c1d…",
"wallet_address": "0x4b1f…",
"serving": {
"nodes": 3,
"operators": 2
},
"network_key_held": true,
"error": null,
"created_at": "2026-09-26T09:05:00.000Z",
"approved_at": "2026-09-26T09:12:00.000Z",
"activated_at": "2026-09-26T09:12:00.000Z",
"expires_at": "2026-12-25T09:12:00.000Z",
"revoked_at": null,
"spend": {
"today_credits": 0,
"total_credits": 0
}
}Change an agent's limits
manageProposes new settings for an active agent, starting from the ones its owner approved last; fields you leave out stay as they are. Nothing changes until the owner approves at approve_url with their passkey. The agent's name cannot be changed.
curl -X POST "https://platform.tenzro.xyz/api/agents/{id}/settings" \
-H "Authorization: Bearer $TENZRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"daily_limit_credits":50000}'Body schema
{
"type": "object",
"properties": {
"capabilities": {
"type": "array",
"items": {
"enum": [
"inference",
"payments"
]
},
"default": [
"inference"
]
},
"max_transaction_tnzo": {
"type": "string",
"description": "Network cap on any one payment the agent makes, in TNZO (e.g. \"1.5\")."
},
"max_daily_tnzo": {
"type": "string",
"description": "Network cap on what the agent pays per day, in TNZO."
},
"daily_limit_credits": {
"type": "number",
"description": "Tenzro Labs credits this agent may spend per UTC day."
},
"total_limit_credits": {
"type": "number",
"description": "Tenzro Labs credits this agent may spend in total."
},
"expires_in_days": {
"type": "integer",
"minimum": 1,
"maximum": 3650,
"description": "The delegation ends after this many days."
}
}
}{
"approve_url": "https://accounts.tenzro.xyz/agents/approve/apr_3xQk…",
"agent": {
"id": "agt_Zp3kQ9x1RmW4sT",
"name": "research-bot",
"status": "active",
"approval": {
"kind": "update",
"state": "pending",
"approve_url": "https://accounts.tenzro.xyz/agents/approve/apr_3xQk…"
},
"capabilities": [
"inference"
],
"limits": {
"max_transaction_tnzo": null,
"max_daily_tnzo": null,
"daily_limit_credits": 20000,
"total_limit_credits": 500000,
"expires_in_days": 90
},
"proposed": null,
"did": "did:tenzro:machine:e0b27720-3043-84d5-9b66-49eba92b1a8d:7c1d…",
"wallet_address": "0x4b1f…",
"serving": {
"nodes": 3,
"operators": 2
},
"network_key_held": true,
"error": null,
"created_at": "2026-09-26T09:05:00.000Z",
"approved_at": "2026-09-26T09:12:00.000Z",
"activated_at": "2026-09-26T09:12:00.000Z",
"expires_at": "2026-12-25T09:12:00.000Z",
"revoked_at": null
}
}Create an API key for an agent
manageAn inference key that identifies this agent. Its usage counts against the limits its owner approved. Active agents only. The secret is returned once.
curl -X POST "https://platform.tenzro.xyz/api/agents/{id}/keys" \
-H "Authorization: Bearer $TENZRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"research-bot prod"}'Body schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"machine_id": {
"type": "string",
"description": "Pin the key to one machine."
}
}
}{
"id": "key_Zb81Qm0sP4aT",
"name": "ci",
"prefix": "tzl_3kQ9aZ1x",
"permissions": [
"inference"
],
"scope": null,
"subscription_id": null,
"rental_id": null,
"created_at": "2026-09-26T08:00:00.000Z",
"last_used_at": null,
"revoked_at": null,
"agent_id": "agt_Zp3kQ9x1RmW4sT",
"secret": "tzl_…"
}Revoke an agent
manageProposes revoking the agent. Once the owner approves at approve_url with their passkey, its identity is revoked on the network and every Platform API key it holds stops working.
curl -X POST "https://platform.tenzro.xyz/api/agents/{id}/revoke" \
-H "Authorization: Bearer $TENZRO_API_KEY"{
"approve_url": "https://accounts.tenzro.xyz/agents/approve/apr_3xQk…",
"agent": {
"id": "agt_Zp3kQ9x1RmW4sT",
"name": "research-bot",
"status": "active",
"approval": {
"kind": "revoke",
"state": "pending",
"approve_url": "https://accounts.tenzro.xyz/agents/approve/apr_3xQk…"
},
"capabilities": [
"inference"
],
"limits": {
"max_transaction_tnzo": null,
"max_daily_tnzo": null,
"daily_limit_credits": 20000,
"total_limit_credits": 500000,
"expires_in_days": 90
},
"proposed": null,
"did": "did:tenzro:machine:e0b27720-3043-84d5-9b66-49eba92b1a8d:7c1d…",
"wallet_address": "0x4b1f…",
"serving": {
"nodes": 3,
"operators": 2
},
"network_key_held": true,
"error": null,
"created_at": "2026-09-26T09:05:00.000Z",
"approved_at": "2026-09-26T09:12:00.000Z",
"activated_at": "2026-09-26T09:12:00.000Z",
"expires_at": "2026-12-25T09:12:00.000Z",
"revoked_at": null
}
}npx @openapitools/openapi-generator-cli generate -i https://platform.tenzro.xyz/api/openapi.json -g typescript-fetch -o ./tenzro