---
title: "Call a tool skill"
method: POST
path: "/v1/tools/call"
---

# Call a tool skill

`POST /v1/tools/call`

## Request

- Base URL: `https://api.toolrouter.com`
- URL: `https://api.toolrouter.com/v1/tools/call`
- Auth: HTTP bearer

Execute a tool skill. Long-running tools return a job_id — poll /v1/jobs/{jobId} until complete.

## Request body

- object
  - `tool` string, required: Tool name, e.g. web-search
  - `skill` string, required: Skill name, e.g. search
  - `input` object, required: Skill input parameters
  - `billing` string: Account to bill: personal, team, or team slug

## Response `200`

Synchronous skill result

- ToolCallResult
  - `id` string, nullable
  - `status` 'success' | 'error' | 'pending', required
  - `output` object
  - `usage` object
  - `meta` object
  - `job_id` string
  - `poll_url` string, uri

## Other responses

- `202`: Asynchronous job accepted
- `400`: Machine-readable ToolRouter error
- `401`: Machine-readable ToolRouter error
- `402`: Machine-readable ToolRouter error
- `403`: Machine-readable ToolRouter error
- `404`: Machine-readable ToolRouter error
- `429`: Request quota exceeded
- `default`: Machine-readable ToolRouter error

---

[API](https://skmtc.dev/toolrouter/apis/toolrouter-api.md) · [All operations](https://skmtc.dev/toolrouter/apis/toolrouter-api/llms.txt) · [OpenAPI document](https://skmtc.dev/toolrouter/apis/toolrouter-api/revisions/b21ed1d64e24?raw)
