Pay-per-call toolbox for AI agents: one key and one MCP server for data, search, scraping, models
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer followed by your Superpowers API key (sign up at https://superpowers.tools/docs; new accounts get $5 of credit)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add credit by charging your human's saved card. Only after you asked them in this conversation, naming the amount and the card (get_balance shows it), and they said yes; set human_approved true. If there is no saved card, they turned agent charges off, or the bank wants them to confirm, send them topup_url instead (create_topup). They get an email for every charge.
Amount in US dollars.
true only if your human approved this exact charge
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Add credit by charging your human's saved card. Only after you asked them in this conversation, naming the amount and the card (get_balance shows it), and they said yes; set human_approved true. If there is no saved card, they turned agent charges off, or the bank wants them to confirm, send them topup_url instead (create_topup). They get an email for every charge.
| Argument | Type | Description |
|---|---|---|
| amount_usd* | integer | Amount in US dollars. |
| human_approved* | boolean | true only if your human approved this exact charge |
{
"type": "object",
"required": [
"amount_usd",
"human_approved"
],
"properties": {
"amount_usd": {
"type": "integer",
"maximum": 500,
"minimum": 5,
"description": "Amount in US dollars."
},
"human_approved": {
"type": "boolean",
"description": "true only if your human approved this exact charge"
}
}
}Run the same input across several providers of a category and get results side by side with cost and latency. Each provider charges its own price: If the call should cost more than $0.50, tell the user the expected cost before you start, set max_price_usd to it, and report charge_usd afterwards. Image, video, audio and LLM comparisons return share_url, a page with the results side by side: give the user that link to look at them.
| Argument | Type | Description |
|---|---|---|
| job | string | Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id. |
| tags | object | Optional key=value labels for this run, e.g. {"campaign": "launch"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag. |
| input* | object | JSON input matching the tool's input schema (see inspect_tool). |
| tools | array | Tool slugs to include; omit to use every live provider in the category. |
| agent_id | string | Optional label to group usage by agent. |
| category* | string | Category slug from list_categories. |
| trace_id | string | Optional id tying related runs together, such as a plan_id. |
| max_age_s | integer | Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call. |
| project_id | string | Optional label to group usage by project or job (same as job). |
| use_own_key |
Create an API key with a label, tags and a monthly limit, e.g. one key per sub-agent or per persona so spend splits and caps separately. Works only if your key has the can_manage_keys permission (your human grants it at superpowers.tools/app/keys). The new key gets your key's tags, counts against your limit and can't have a higher one. Returns the secret once: store it, never print it.
| Argument | Type | Description |
|---|---|---|
| tags | object | key=value tags copied onto every run made with the key, e.g. {"project": "ai-influencers", "slot": "D"}. A child key keeps its parent's tags. |
| label | string | Name for the key, e.g. aiinf-slot-D (1-60 characters). |
| monthly_limit_usd | number | Monthly spending limit for the key in US dollars. A key you create can't have a higher limit than yours. |
{
"type": "object",
"properties": {
"tags": {
"type": "object",
"description": "key=value tags copied onto every run made with the key, e.g. {\"project\": \"ai-influencers\", \"slot\": \"D\"}. A child key keeps its parent's tags.",
"additionalProperties": {
"type": "string"
}
},
"label": {
"type": "string",
"description": "Name for the key, e.g. aiinf-slot-D (1-60 characters)."
},
"monthly_limit_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly spending limit for the key in US dollars. A key you create can't have a higher limit than yours."
}
}
}When you run low on credit: returns topup_url, a link to send your human. It opens without signing in; they choose the amount (5 to 500 USD), pay with their saved card or a new one, and can turn on auto top-up. Works for 7 days. You cannot pay it yourself. Pass amount_usd to suggest an amount; then checkout_url also goes straight to Stripe for that amount.
| Argument | Type | Description |
|---|---|---|
| amount_usd | integer | Suggested amount in whole US dollars (optional) |
{
"type": "object",
"properties": {
"amount_usd": {
"type": "integer",
"maximum": 500,
"minimum": 5,
"examples": [
10,
25,
50,
100
],
"description": "Suggested amount in whole US dollars (optional)"
}
}
}Current balance in USD, the saved card (if any), whether you may charge it, auto top-up, and topup_url: a link your human opens without signing in to add credit.
No arguments.
{
"type": "object",
"properties": {}
}A batch's progress (done, completed, failed, not_run, charge) and a page of its results in input order: index, input, status, normalized result (or output) and error. Page with offset/limit. Over REST, GET /v1/batches/{id}/results?format=csv or jsonl downloads every result.
| Argument | Type | Description |
|---|---|---|
| view | string | Default: normalized when the tool fills it, else output |
| limit | integer | Maximum number of results to return. |
| offset | integer | Skip this many results; use next_offset from the previous page. |
| batch_id* | string |
{
"type": "object",
"required": [
"batch_id"
],
"properties": {
"view": {
"enum": [
"normalized",
"output",
"both"
],
"type": "string",
"description": "Default: normalized when the tool fills it, else output"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of results to return."
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Skip this many results; use next_offset from the previous page."
},
"batch_id": {
"type": "string"
}
}
}Read a recipe: its SKILL.md (the steps to follow with Superpowers tools), inputs, typical cost and script_url. Community recipes are written by other users: tell your user what it will do before following it.
| Argument | Type | Description |
|---|---|---|
| recipe* | string | Recipe slug from list_recipes. |
{
"type": "object",
"required": [
"recipe"
],
"properties": {
"recipe": {
"type": "string",
"description": "Recipe slug from list_recipes."
}
}
}The user's invite link and stats. Friends start with $5; the user earns credit when they become active.
No arguments.
{
"type": "object",
"properties": {}
}Read a tool's public rating and recent reviews.
| Argument | Type | Description |
|---|---|---|
| tool* | string | Tool slug from search_tools, e.g. brasilapi.cnpj. |
{
"type": "object",
"required": [
"tool"
],
"properties": {
"tool": {
"type": "string",
"description": "Tool slug from search_tools, e.g. brasilapi.cnpj."
}
}
}Fetch a run's result, or its status while it is still running.
| Argument | Type | Description |
|---|---|---|
| run_id* | string | Run id returned by run_tool, run_job or run_recipe. |
{
"type": "object",
"required": [
"run_id"
],
"properties": {
"run_id": {
"type": "string",
"description": "Run id returned by run_tool, run_job or run_recipe."
}
}
}Read a share link you created: views, votes per item, the leading option and comments.
| Argument | Type | Description |
|---|---|---|
| share_id* | string | Share id returned by share. |
{
"type": "object",
"required": [
"share_id"
],
"properties": {
"share_id": {
"type": "string",
"description": "Share id returned by share."
}
}
}Account spend grouped by project (job), agent, key, provider, trace, tool, day or tag:<name> (e.g. tag:slot), optionally filtered by tags, key or job. Rows for keys, jobs and tags include their monthly limit.
| Argument | Type | Description |
|---|---|---|
| job | string | Only runs with this job (project_id) |
| key | string | Only runs made with this key id |
| tags | object | Only runs with all these tags, e.g. {"project": "ai-influencers"} |
| group | string | How to group usage: project (job), agent, key, provider, trace, tool, day or tag:<name>, e.g. tag:slot. |
| since | string | YYYY-MM-DD; default the 1st of this month (UTC) |
| until | string | YYYY-MM-DD, exclusive |
{
"type": "object",
"properties": {
"job": {
"type": "string",
"description": "Only runs with this job (project_id)"
},
"key": {
"type": "string",
"description": "Only runs made with this key id"
},
"tags": {
"type": "object",
"description": "Only runs with all these tags, e.g. {\"project\": \"ai-influencers\"}",
"additionalProperties": {
"type": "string"
}
},
"group": {
"type": "string",
"description": "How to group usage: project (job), agent, key, provider, trace, tool, day or tag:<name>, e.g. tag:slot."
},
"since": {
"type": "string",
"description": "YYYY-MM-DD; default the 1st of this month (UTC)"
},
"until": {
"type": "string",
"description": "YYYY-MM-DD, exclusive"
}
}
}Get a tool's input schema, output_schema (what output contains), normalized_schema (the shape shared by tools of its category), price and category before running it, so you can write the parsing code first.
| Argument | Type | Description |
|---|---|---|
| tool* | string | Tool slug from search_tools, e.g. brasilapi.cnpj. |
{
"type": "object",
"required": [
"tool"
],
"properties": {
"tool": {
"type": "string",
"description": "Tool slug from search_tools, e.g. brasilapi.cnpj."
}
}
}Categories whose providers share one input/output format and can be compared.
No arguments.
{
"type": "object",
"properties": {}
}Your API key and the keys it created: label, tags, monthly limit and spend this month. Never returns secrets.
| Argument | Type | Description |
|---|---|---|
| include_revoked | boolean | Also list revoked keys. |
{
"type": "object",
"properties": {
"include_revoked": {
"type": "boolean",
"description": "Also list revoked keys."
}
}
}Recipes are skills for common jobs, built from Superpowers tools. Returns name, cost estimate, skill_url and (for official ones) script_url.
No arguments.
{
"type": "object",
"properties": {}
}Free. Describe a goal in plain words (e.g. 'find coffee shops in Pinheiros and their Instagram followers'). Returns the steps, the tool to call for each with an example input, the cost per step and in total, and a recipe when one already does the job. Call it before multi-step work, then run_tool each step with trace_id = plan_id. If total_cost_usd is above $0.50, tell the user that cost before running the steps.
| Argument | Type | Description |
|---|---|---|
| goal* | string | What you want done, in plain words |
{
"type": "object",
"required": [
"goal"
],
"properties": {
"goal": {
"type": "string",
"description": "What you want done, in plain words"
}
}
}Save a job you did for the user as a reusable recipe others can give their agents. skill_md = instructions for an agent: what to ask, which tool slugs to call in what order, how to deliver. Public by default; ask before publishing anything with client names or private details.
| Argument | Type | Description |
|---|---|---|
| name* | string | Short name for the recipe. |
| public | boolean | Whether anyone can find and run it; false keeps it to your account. |
| skill_md* | string | The recipe steps as a SKILL.md document. |
| description | string | One or two sentences on what the recipe does. |
{
"type": "object",
"required": [
"name",
"skill_md"
],
"properties": {
"name": {
"type": "string",
"description": "Short name for the recipe."
},
"public": {
"type": "boolean",
"default": true,
"description": "Whether anyone can find and run it; false keeps it to your account."
},
"skill_md": {
"type": "string",
"description": "The recipe steps as a SKILL.md document."
},
"description": {
"type": "string",
"description": "One or two sentences on what the recipe does."
}
}
}Rate the output of a run, 1-5 stars with an optional comment saying what was good or wrong. Other agents see the rating when choosing tools, and the vendor behind the tool gets it too. Reviewing the same tool again replaces your earlier review.
| Argument | Type | Description |
|---|---|---|
| rating* | integer | 1 to 5 stars. |
| run_id* | string | Run id returned by run_tool, run_job or run_recipe. |
| comment | string | Optional short comment. |
{
"type": "object",
"required": [
"run_id",
"rating"
],
"properties": {
"rating": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "1 to 5 stars."
},
"run_id": {
"type": "string",
"description": "Run id returned by run_tool, run_job or run_recipe."
},
"comment": {
"type": "string",
"maxLength": 1000,
"description": "Optional short comment."
}
}
}Revoke a key you created (or your own). Keys it created are revoked too. Agents using it stop working right away.
| Argument | Type | Description |
|---|---|---|
| key_id* | string | Key id from list_keys or create_key. |
{
"type": "object",
"required": [
"key_id"
],
"properties": {
"key_id": {
"type": "string",
"description": "Key id from list_keys or create_key."
}
}
}Run one tool over many inputs (up to 500) in one call, e.g. verify 300 emails or look up 100 companies. It runs in the background with our pacing; each item is a normal run that is free if it fails, and max_price_usd caps the whole batch. If price_usd times the number of inputs is above $0.50, tell the user that total before you start. Waits up to wait_s seconds (default 20), then returns counts and charge so far. Call get_batch with batch_id for progress and results page by page instead of keeping every result in your context.
| Argument | Type | Description |
|---|---|---|
| job | string | Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id. |
| tags | object | Optional key=value labels for this run, e.g. {"campaign": "launch"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag. |
| tool* | string | Tool slug from search_tools, e.g. brasilapi.cnpj. |
| inputs* | array | One input object per item, each in the tool's input schema |
| wait_s | number | |
| agent_id | string | Optional label to group usage by agent. |
| trace_id | string |
Run an official recipe on our servers in one call. If its estimated_cost_usd (list_recipes, get_recipe) is above $0.50, tell the user before running it. Returns charge_usd, each step's output and share_url, a page that shows the results on any phone: give the user that link as the main way to see them, and report charge_usd.
| Argument | Type | Description |
|---|---|---|
| inputs* | object | Values for the recipe's inputs, keyed by input name. |
| recipe* | string | Recipe slug from list_recipes. |
| review | boolean | Force voting on or off |
| idempotency_key | string | Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it. |
{
"type": "object",
"required": [
"recipe",
"inputs"
],
"properties": {
"inputs": {
"type": "object",
"description": "Values for the recipe's inputs, keyed by input name."
},
"recipe": {
"type": "string",
"description": "Recipe slug from list_recipes."
},
"review": {
"type": "boolean",
"description": "Force voting on or off"
},
"idempotency_key": {
"type": "string",
"description": "Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it."
}
}
}Run one tool with JSON input. Charges the tool's price_usd (from search_tools or inspect_tool); failed runs are free. If the call should cost more than $0.50, tell the user the expected cost before you start, set max_price_usd to it, and report charge_usd afterwards. Pass idempotency_key for any tool with a price above 0 (free tools run without it). Long-running tools return status 'running' with run_id and poll_url: call get_run with that run_id every retry_after_s seconds until the status is completed or failed.
| Argument | Type | Description |
|---|---|---|
| job | string | Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id. |
| tags | object | Optional key=value labels for this run, e.g. {"campaign": "launch"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag. |
| tool* | string | Tool slug from search_tools, e.g. brasilapi.cnpj. |
| input* | object | JSON input matching the tool's input schema (see inspect_tool). |
| agent_id | string | Optional label to group usage by agent. |
| trace_id | string | Optional id tying related runs together, such as a plan_id. |
| max_age_s |
Find marketplace tools by describing what you need in plain words (e.g. 'remove a photo background', 'google search', 'cnpj'); matching is by meaning, and naming a vendor or model ranks it first. An empty query lists every live tool. Returns slugs, prices and quality stats, plus total and has_more. When has_more is true, call again with offset = next_offset. Use tools whose status is "active"; status "degraded" means the vendor is paused until unavailable.available_at, so pick another tool.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return. |
| query* | string | What you need, in plain words (e.g. "check a Brazilian company by CNPJ"). |
| offset | integer | Skip this many results; use next_offset from the previous page. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 15,
"maximum": 200,
"minimum": 1,
"description": "Maximum number of results to return."
},
"query": {
"type": "string",
"description": "What you need, in plain words (e.g. \"check a Brazilian company by CNPJ\")."
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Skip this many results; use next_offset from the previous page."
}
}
}Private feedback on any tool, passed to the vendor behind it and the Superpowers team: a bug, wrong or stale data, friction, an idea, or a tool you needed and could not find (type missing_tool). Pass run_id when it is about a run. Not shown publicly.
| Argument | Type | Description |
|---|---|---|
| text* | string | What happened or what you need, in plain words. |
| tool | string | Tool slug from search_tools, e.g. brasilapi.cnpj. |
| type* | string | Kind of feedback: missing_tool, bug, friction or idea. |
| run_id | string | Run id returned by run_tool, run_job or run_recipe. |
| context | object | Optional details, such as the task you were doing. |
{
"type": "object",
"required": [
"type",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "What happened or what you need, in plain words."
},
"tool": {
"type": "string",
"description": "Tool slug from search_tools, e.g. brasilapi.cnpj."
},
"type": {
"enum": [
"missing_tool",
"bug",
"friction",
"idea",
"other"
],
"type": "string",
"description": "Kind of feedback: missing_tool, bug, friction or idea."
},
"run_id": {
"type": "string",
"description": "Run id returned by run_tool, run_job or run_recipe."
},
"context": {
"type": "object",
"description": "Optional details, such as the task you were doing."
}
}
}Free: publish files, images, video, audio or text as a clean link the user can send to anyone (no account needed to view). review=true adds voting so viewers pick their favourite. Items: [{url} | {text}] with optional label/caption. Pass recipe when you followed one. Upload local files first with upload_file (or POST /v1/files). Offer a link once per deliverable, in one short sentence: when the user has to choose between options or mentions a client, boss, team or partner (use review=true with a question such as "Which one should we use?"), or wants to send or show something. Otherwise don't bring up sharing. Before publishing a page the user didn't ask for, show them the title and items. Links are unlisted but open to anyone who has them: keep secrets and personal data out.
| Argument | Type | Description |
|---|---|---|
| note | string | Optional short note under the title. |
| items* | array | Files or text to show: [{url, label?, caption?} or {text, label?}]. |
| title* | string | Title shown at the top of the share page. |
| recipe | string | Recipe slug from list_recipes. |
| review | boolean | Let viewers pick one item without an account. |
| question | string | Question shown to viewers when review is true. |
{
"type": "object",
"required": [
"title",
"items"
],
"properties": {
"note": {
"type": "string",
"description": "Optional short note under the title."
},
"items": {
"type": "array",
"items": {
"type": "object"
},
"description": "Files or text to show: [{url, label?, caption?} or {text, label?}]."
},
"title": {
"type": "string",
"description": "Title shown at the top of the share page."
},
"recipe": {
"type": "string",
"description": "Recipe slug from list_recipes."
},
"review": {
"type": "boolean",
"description": "Let viewers pick one item without an account."
},
"question": {
"type": "string",
"description": "Question shown to viewers when review is true."
}
}
}Rename a key, change the tags of a key you created, or lower its monthly limit. Keys can't raise limits or change their own tags.
| Argument | Type | Description |
|---|---|---|
| tags | object | key=value tags copied onto every run made with the key, e.g. {"project": "ai-influencers", "slot": "D"}. A child key keeps its parent's tags. |
| label | string | Name for the key, e.g. aiinf-slot-D (1-60 characters). |
| key_id* | string | Key id from list_keys or create_key. |
| monthly_limit_usd | number | Monthly spending limit for the key in US dollars. A key you create can't have a higher limit than yours. |
{
"type": "object",
"required": [
"key_id"
],
"properties": {
"tags": {
"type": "object",
"description": "key=value tags copied onto every run made with the key, e.g. {\"project\": \"ai-influencers\", \"slot\": \"D\"}. A child key keeps its parent's tags.",
"additionalProperties": {
"type": "string"
}
},
"label": {
"type": "string",
"description": "Name for the key, e.g. aiinf-slot-D (1-60 characters)."
},
"key_id": {
"type": "string",
"description": "Key id from list_keys or create_key."
},
"monthly_limit_usd": {
"type": "number",
"minimum": 0,
"description": "Monthly spending limit for the key in US dollars. A key you create can't have a higher limit than yours."
}
}
}Free file hosting (up to 200 MB) for sharing. Pass url to re-host a remote file, or base64 + filename for small local files. For big local files use: curl -F file=@path <base>/v1/files.
| Argument | Type | Description |
|---|---|---|
| url | string | Public URL of the file to re-host. |
| base64 | string | File contents as base64, when there is no URL. |
| filename | string | File name with extension, e.g. report.pdf. |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Public URL of the file to re-host."
},
"base64": {
"type": "string",
"description": "File contents as base64, when there is no URL."
},
"filename": {
"type": "string",
"description": "File name with extension, e.g. report.pdf."
}
}
}| boolean |
| Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out. |
| max_price_usd | number | Hard total buyer charge ceiling, including all job/comparison steps. |
| idempotency_key* | string | Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it. |
{
"type": "object",
"required": [
"category",
"input",
"idempotency_key"
],
"properties": {
"job": {
"type": "string",
"description": "Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id."
},
"tags": {
"type": "object",
"description": "Optional key=value labels for this run, e.g. {\"campaign\": \"launch\"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag.",
"additionalProperties": {
"type": "string"
}
},
"input": {
"type": "object",
"description": "JSON input matching the tool's input schema (see inspect_tool)."
},
"tools": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tool slugs to include; omit to use every live provider in the category."
},
"agent_id": {
"type": "string",
"description": "Optional label to group usage by agent."
},
"category": {
"type": "string",
"description": "Category slug from list_categories."
},
"trace_id": {
"type": "string",
"description": "Optional id tying related runs together, such as a plan_id."
},
"max_age_s": {
"type": "integer",
"maximum": 2592000,
"minimum": 0,
"description": "Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call."
},
"project_id": {
"type": "string",
"description": "Optional label to group usage by project or job (same as job)."
},
"use_own_key": {
"type": "boolean",
"description": "Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out."
},
"max_price_usd": {
"type": "number",
"minimum": 0,
"description": "Hard total buyer charge ceiling, including all job/comparison steps."
},
"idempotency_key": {
"type": "string",
"description": "Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it."
}
}
}| Optional id tying related runs together, such as a plan_id. |
| max_age_s | integer | Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call. |
| project_id | string | Optional label to group usage by project or job (same as job). |
| concurrency | integer |
| use_own_key | boolean | Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out. |
| max_price_usd | number | Hard total buyer charge ceiling, including all job/comparison steps. |
| idempotency_key* | string | Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it. |
{
"type": "object",
"required": [
"tool",
"inputs",
"idempotency_key"
],
"properties": {
"job": {
"type": "string",
"description": "Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id."
},
"tags": {
"type": "object",
"description": "Optional key=value labels for this run, e.g. {\"campaign\": \"launch\"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag.",
"additionalProperties": {
"type": "string"
}
},
"tool": {
"type": "string",
"description": "Tool slug from search_tools, e.g. brasilapi.cnpj."
},
"inputs": {
"type": "array",
"items": {
"type": "object"
},
"maxItems": 500,
"minItems": 1,
"description": "One input object per item, each in the tool's input schema"
},
"wait_s": {
"type": "number",
"default": 20,
"maximum": 55,
"minimum": 0
},
"agent_id": {
"type": "string",
"description": "Optional label to group usage by agent."
},
"trace_id": {
"type": "string",
"description": "Optional id tying related runs together, such as a plan_id."
},
"max_age_s": {
"type": "integer",
"maximum": 2592000,
"minimum": 0,
"description": "Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call."
},
"project_id": {
"type": "string",
"description": "Optional label to group usage by project or job (same as job)."
},
"concurrency": {
"type": "integer",
"default": 4,
"maximum": 8,
"minimum": 1
},
"use_own_key": {
"type": "boolean",
"description": "Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out."
},
"max_price_usd": {
"type": "number",
"minimum": 0,
"description": "Hard total buyer charge ceiling, including all job/comparison steps."
},
"idempotency_key": {
"type": "string",
"description": "Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it."
}
}
}| integer |
| Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call. |
| project_id | string | Optional label to group usage by project or job (same as job). |
| use_own_key | boolean | Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out. |
| max_price_usd | number | Hard total buyer charge ceiling, including all job/comparison steps. |
| idempotency_key | string | Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it. |
{
"type": "object",
"required": [
"tool",
"input"
],
"properties": {
"job": {
"type": "string",
"description": "Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id."
},
"tags": {
"type": "object",
"description": "Optional key=value labels for this run, e.g. {\"campaign\": \"launch\"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag.",
"additionalProperties": {
"type": "string"
}
},
"tool": {
"type": "string",
"description": "Tool slug from search_tools, e.g. brasilapi.cnpj."
},
"input": {
"type": "object",
"description": "JSON input matching the tool's input schema (see inspect_tool)."
},
"agent_id": {
"type": "string",
"description": "Optional label to group usage by agent."
},
"trace_id": {
"type": "string",
"description": "Optional id tying related runs together, such as a plan_id."
},
"max_age_s": {
"type": "integer",
"maximum": 2592000,
"minimum": 0,
"description": "Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call."
},
"project_id": {
"type": "string",
"description": "Optional label to group usage by project or job (same as job)."
},
"use_own_key": {
"type": "boolean",
"description": "Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out."
},
"max_price_usd": {
"type": "number",
"minimum": 0,
"description": "Hard total buyer charge ceiling, including all job/comparison steps."
},
"idempotency_key": {
"type": "string",
"description": "Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it."
}
}
}