List server tools
curl --request GET \
--url https://openrouter.ai/api/v1/tools \
--header 'Authorization: Bearer <token>'import requests
url = "https://openrouter.ai/api/v1/tools"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://openrouter.ai/api/v1/tools', 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://openrouter.ai/api/v1/tools",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://openrouter.ai/api/v1/tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://openrouter.ai/api/v1/tools")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openrouter.ai/api/v1/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"aliases": [
{
"api_formats": [
"responses"
],
"output_names": [
{
"api_format": "responses",
"type": "web_search_call",
"name": "web_search"
}
],
"type": "web_search_20250305"
}
],
"default_engine": "native",
"docs_url": "<string>",
"engines": [
{
"byok": "none",
"data_regions": [
"global",
"us"
],
"default_mode": "auto",
"executed_by": "openrouter",
"id": "exa",
"name": "Exa",
"pricing": [
{
"max_units_per_call": 123,
"mode": "auto",
"price": "0.007",
"unit": "request"
}
],
"pricing_doc_url": null,
"pricing_source": "openrouter"
}
],
"fallback_engine": "exa",
"id": "openrouter:web_search",
"input_schema": {
"properties": {},
"type": "object"
},
"name": "Web search",
"native_support": {
"endpoint_count": 18,
"model_count": 12
},
"output_schema": {
"properties": {},
"type": "object"
},
"parameters_schema": {
"properties": {},
"type": "object"
},
"status": "active",
"summary": "<string>",
"supported_api_formats": [
"responses"
],
"tool_description": "<string>"
}
],
"links": {
"next": null
},
"total_count": 12
}{
"error": {
"code": 401,
"message": "Missing Authentication header"
}
}{
"error": {
"code": 403,
"message": "Only management keys can perform this operation"
}
}{
"error": {
"code": 404,
"message": "Resource not found"
}
}{
"error": {
"code": 500,
"message": "Internal Server Error"
}
}Tools
List server tools
Lists every server tool OpenRouter can run on behalf of a model: accepted tools[].type spellings per API format, the engines behind it with their pricing, and how many endpoints run it natively.
GET
/
tools
List server tools
curl --request GET \
--url https://openrouter.ai/api/v1/tools \
--header 'Authorization: Bearer <token>'import requests
url = "https://openrouter.ai/api/v1/tools"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://openrouter.ai/api/v1/tools', 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://openrouter.ai/api/v1/tools",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://openrouter.ai/api/v1/tools"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://openrouter.ai/api/v1/tools")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openrouter.ai/api/v1/tools")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"aliases": [
{
"api_formats": [
"responses"
],
"output_names": [
{
"api_format": "responses",
"type": "web_search_call",
"name": "web_search"
}
],
"type": "web_search_20250305"
}
],
"default_engine": "native",
"docs_url": "<string>",
"engines": [
{
"byok": "none",
"data_regions": [
"global",
"us"
],
"default_mode": "auto",
"executed_by": "openrouter",
"id": "exa",
"name": "Exa",
"pricing": [
{
"max_units_per_call": 123,
"mode": "auto",
"price": "0.007",
"unit": "request"
}
],
"pricing_doc_url": null,
"pricing_source": "openrouter"
}
],
"fallback_engine": "exa",
"id": "openrouter:web_search",
"input_schema": {
"properties": {},
"type": "object"
},
"name": "Web search",
"native_support": {
"endpoint_count": 18,
"model_count": 12
},
"output_schema": {
"properties": {},
"type": "object"
},
"parameters_schema": {
"properties": {},
"type": "object"
},
"status": "active",
"summary": "<string>",
"supported_api_formats": [
"responses"
],
"tool_description": "<string>"
}
],
"links": {
"next": null
},
"total_count": 12
}{
"error": {
"code": 401,
"message": "Missing Authentication header"
}
}{
"error": {
"code": 403,
"message": "Only management keys can perform this operation"
}
}{
"error": {
"code": 404,
"message": "Resource not found"
}
}{
"error": {
"code": 500,
"message": "Internal Server Error"
}
}Authorizations
API key as bearer token in Authorization header
Query Parameters
Number of records to skip for pagination. When both offset and limit are omitted, the full list is returned
Required range:
x >= 0Example:
0
Maximum number of records to return (max 100). When both offset and limit are omitted, the full list is returned
Required range:
1 <= x <= 100Example:
50
Only tools usable on this API format
Available options:
responses, chat-completions, anthropic-messages Example:
"responses"