Tool Manifest
GET /api/v1/tools/manifest lists every tool available to the calling key, filtered by the key's scopes. The shape matches Anthropic's Tool schema so Claude can consume it directly.
{
"tools": [
{
"name": "autorev_list_calls",
"description": "List call history for a single receptionist...",
"scope": "read",
"input_schema": { "type": "object", "properties": {} }
}
],
"format": "anthropic",
"version": "2026-05-14"
}
Formats
| Query | Format |
|---|---|
| (default) | Anthropic Tool schema: name, description, input_schema, plus a scope field per tool |
?format=openai | OpenAI Chat Completions function-calling shape: { "type": "function", "function": { "name", "description", "parameters" } } |
The response's format field echoes which shape you received. The version string (currently 2026-05-14) changes when the manifest contract changes.
Scope filtering
Every API key carries a scopes array, and the manifest only returns tools the key is allowed to invoke. Each tool declares a required scope; keys that lack the scope get a 403 with a clear error if they call the tool anyway. Use the manifest endpoint to get the authoritative schema at runtime rather than hardcoding tool lists: new capabilities appear there automatically as they ship.
Wiring examples
Claude (Anthropic SDK)
You can use the MCP server directly with no tool wiring, or fetch the manifest and pass it to messages.create:
import Anthropic from '@anthropic-ai/sdk'
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY })
const manifest = await fetch('https://app.autorev.ai/api/v1/tools/manifest', {
headers: { Authorization: `Bearer ${process.env.AUTOREV_API_KEY}` },
}).then(r => r.json())
const response = await client.messages.create({
model: 'claude-sonnet-4-6',
max_tokens: 2048,
tools: manifest.tools, // already in Anthropic format
messages: [{ role: 'user', content: 'How many bookings this week?' }],
})
OpenAI (Chat Completions)
Fetch the manifest with ?format=openai and pass it as tools to any OpenAI-compatible SDK:
import OpenAI from 'openai'
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
const manifest = await fetch('https://app.autorev.ai/api/v1/tools/manifest?format=openai', {
headers: { Authorization: `Bearer ${process.env.AUTOREV_API_KEY}` },
}).then(r => r.json())
const response = await client.chat.completions.create({
model: 'gpt-4.1',
tools: manifest.tools, // already in OpenAI function-calling format
messages: [{ role: 'user', content: 'Send a follow-up SMS to the missed call from this morning.' }],
})
LangChain / LlamaIndex / generic HTTP
Any framework that consumes OpenAPI specs can auto-generate tools from https://app.autorev.ai/api/openapi.json:
# LangChain example
from langchain_community.agent_toolkits.openapi.toolkit import OpenAPIToolkit
from langchain_community.utilities.openapi import OpenAPISpec
spec = OpenAPISpec.from_url("https://app.autorev.ai/api/openapi.json")
toolkit = OpenAPIToolkit.from_llm(llm, spec,
headers={"Authorization": f"Bearer {AUTOREV_API_KEY}"})