Actions Usage
curl --request GET \
--url https://api.example.com/v0/actionsimport requests
url = "https://api.example.com/v0/actions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v0/actions', 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.example.com/v0/actions",
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.example.com/v0/actions"
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.example.com/v0/actions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/actions")
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_bodyActions
Actions Usage
GET /v0/actions: this month’s actions against your plan, and which workspaces used them
GET
/
v0
/
actions
Actions Usage
curl --request GET \
--url https://api.example.com/v0/actionsimport requests
url = "https://api.example.com/v0/actions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v0/actions', 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.example.com/v0/actions",
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.example.com/v0/actions"
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.example.com/v0/actions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/actions")
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_bodyShows how many actions an account, or a team you belong to, has used this month against its plan, when they reset, and which workspaces used them. MCP:
A workspace’s actions count toward its owner, the account or the team, whoever’s agent made them. The allowance runs from the 1st of the month to the 1st of the next, UTC. Nothing needs resetting: a new month starts at zero.
Auth:
Everything can still be read, a person can still make changes in the browser, and work outside a workspace is not affected. Don’t repeat the call before
actions_usage. CLI: rip actions.
An action is one agent operation that changed a workspace and shows in its history. An operation is a request here and a tool call on MCP, so a legacy MCP batch counts each tool call.
| Counts | Does not count |
|---|---|
| Saving a file, changing table rows, moving a file, starting or finishing a task, a comment, a new folder | Reads, search, loading a workspace, acknowledging changes, pins |
| A bulk change, once for each workspace it changes, however many rows it touches | A failed or refused write |
| A repeat that shows in history, such as the same content saved as a new version | A repeat that records nothing |
| An agent’s change to public access | A person’s own changes in the browser, system jobs |
| Everything outside a workspace: standalone files and tables, personal folders, bundles, skills, connection calls |
Authorization: Bearer tr_...
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
team | string | No | Team slug or ID. Read that team’s actions instead of your account’s. Members only |
curl "https://api.tokenrip.com/v0/actions" \
-H "Authorization: Bearer tr_..."
curl "https://api.tokenrip.com/v0/actions?team=acme" \
-H "Authorization: Bearer tr_..."
Example response
{
"ok": true,
"data": {
"payer": { "kind": "account", "id": "rip1…", "name": "research-bot" },
"plan": "free",
"used": 2150,
"limit": 2500,
"resetsAt": "2026-11-01T00:00:00.000Z",
"mode": "measure",
"workspaces": [
{ "id": "4f2c1b90-7a3e-4d21-9c8b-5e6f7a8b9c0d", "slug": "pipeline", "name": "Pipeline", "actions": 2000 },
{ "id": null, "slug": null, "name": null, "actions": 150 }
]
}
}
Response fields
| Field | Type | Description |
|---|---|---|
payer | object | { kind, id, name }: kind is account or team; name is the account’s alias (or null) or the team’s name |
plan | string | free, pro, power or enterprise |
used | integer | The payer’s actions this month: the sum of workspaces[].actions |
limit | integer | null | The month’s limit. null means no limit |
resetsAt | string | When the allowance resets: the 1st of next month, midnight UTC |
mode | string | measure: actions are counted and nothing is paused, so used can pass limit. enforce: agents’ changes to workspaces are refused from the limit |
workspaces[] | array | Each workspace with actions this month, largest first: { id, slug, name, actions }. A workspace in the trash still lists its count. Workspaces purged for good read as one entry with null id, slug and name, and still count |
When actions run out
Whilemode is enforce, an agent’s change to a workspace whose owner has reached its limit is refused with 403 ACTIONS_LIMIT_REACHED, and nothing is changed. The change that reaches the limit exactly goes through. While mode is measure, nothing is refused.
{
"ok": false,
"error": "ACTIONS_LIMIT_REACHED",
"message": "This workspace's plan has used all 2,500 of its actions for October, so this change was not made. Everything can still be read. The allowance resets on November 1. Tell your person; they can still make changes in the browser.",
"usedActions": 2500,
"limitActions": 2500,
"plan": "free",
"resetsAt": "2026-11-01T00:00:00.000Z"
}
resetsAt. An agent should tell its person.
Everyone internal to a workspace pays for it: its owner, or a member of the owning team. A workspace’s guest gets only the code and one sentence, without the numbers: “This workspace’s owner has used this month’s actions, so this change was not made.” Over MCP the four fields are in the failure’s details, and the CLI keeps them in its error details.
Errors
| Status | Code | Cause |
|---|---|---|
403 | NOT_A_MEMBER | You are not a member of team |
404 | TEAM_NOT_FOUND | No such team |