Skip to main content

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​

QueryFormat
(default)Anthropic Tool schema: name, description, input_schema, plus a scope field per tool
?format=openaiOpenAI 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}"})