Arize Phoenix · Schema
ChatRequest
Discriminated union of chat request payloads.
LLM ObservabilityAI EvaluationOpenTelemetryTracingLLMOpsAI MonitoringOpen SourcePrompt EngineeringDatasetsExperiments
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/phoenix/json-schema/phoenix-chat-request-schema.json",
"title": "ChatRequest",
"description": "Discriminated union of chat request payloads.",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/phoenix-chat-api-openapi.yml#/components/schemas/ChatRequest",
"oneOf": [
{
"$ref": "#/$defs/ChatSubmitMessage"
},
{
"$ref": "#/$defs/ChatRegenerateMessage"
}
],
"$defs": {
"AgentSpanContext": {
"properties": {
"type": {
"type": "string",
"const": "span",
"title": "Type"
},
"projectNodeId": {
"type": [
"string",
"null"
],
"title": "Projectnodeid"
},
"spanNodeId": {
"type": [
"string",
"null"
],
"title": "Spannodeid"
},
"otelSpanId": {
"type": [
"string",
"null"
],
"title": "Otelspanid"
}
},
"type": "object",
"required": [
"type"
],
"title": "AgentSpanContext",
"description": "Span the user has selected.\n\nExactly one of ``span_node_id`` (relay) or ``otel_span_id`` (OpenTelemetry\nhex) must be set. ``project_node_id`` is optional because a span can be\nselected from views outside a project route."
},
"AppContext": {
"properties": {
"type": {
"type": "string",
"const": "app",
"title": "Type"
},
"currentDateTime": {
"type": "string",
"title": "Currentdatetime"
},
"timeZone": {
"type": "string",
"title": "Timezone"
}
},
"type": "object",
"required": [
"type",
"currentDateTime",
"timeZone"
],
"title": "AppContext",
"description": "Per-turn browser clock context for resolving relative time requests."
},
"AssistantMessageMetadata": {
"properties": {
"sessionId": {
"type": "string",
"title": "Sessionid"
},
"trace": {
"$ref": "#/$defs/AssistantMessageMetadataTraceIds"
},
"usage": {
"$ref": "#/$defs/AssistantMessageMetadataUsage"
}
},
"type": "object",
"required": [
"sessionId"
],
"title": "AssistantMessageMetadata",
"description": "Wire schema for the chat stream's `message_metadata` payload."
},
"AssistantMessageMetadataTraceIds": {
"properties": {
"traceId": {
"type": "string",
"title": "Traceid"
},
"rootSpanId": {
"type": "string",
"title": "Rootspanid"
}
},
"type": "object",
"required": [
"traceId",
"rootSpanId"
],
"title": "AssistantMessageMetadataTraceIds"
},
"AssistantMessageMetadataUsage": {
"properties": {
"tokens": {
"$ref": "#/$defs/AssistantMessageMetadataUsageTokens"
},
"promptDetails": {
"$ref": "#/$defs/AssistantMessageMetadataUsageTokenDetails"
}
},
"type": "object",
"required": [
"tokens"
],
"title": "AssistantMessageMetadataUsage"
},
"AssistantMessageMetadataUsageTokenDetails": {
"properties": {
"cacheRead": {
"type": "integer",
"title": "Cacheread"
},
"cacheWrite": {
"type": "integer",
"title": "Cachewrite"
}
},
"type": "object",
"required": [
"cacheRead",
"cacheWrite"
],
"title": "AssistantMessageMetadataUsageTokenDetails"
},
"AssistantMessageMetadataUsageTokens": {
"properties": {
"prompt": {
"type": "integer",
"title": "Prompt"
},
"completion": {
"type": "integer",
"title": "Completion"
},
"total": {
"type": "integer",
"title": "Total"
}
},
"type": "object",
"required": [
"prompt",
"completion",
"total"
],
"title": "AssistantMessageMetadataUsageTokens"
},
"AssistantMetadataUIMessage": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"role": {
"type": "string",
"enum": [
"system",
"user",
"assistant"
],
"title": "Role"
},
"metadata": {
"$ref": "#/$defs/AssistantMessageMetadata"
},
"parts": {
"items": {
"anyOf": [
{
"$ref": "#/$defs/TextUIPart"
},
{
"$ref": "#/$defs/ReasoningUIPart"
},
{
"$ref": "#/$defs/ToolInputStreamingPart"
},
{
"$ref": "#/$defs/ToolInputAvailablePart"
},
{
"$ref": "#/$defs/ToolOutputAvailablePart"
},
{
"$ref": "#/$defs/ToolOutputErrorPart"
},
{
"$ref": "#/$defs/ToolApprovalRequestedPart"
},
{
"$ref": "#/$defs/ToolApprovalRespondedPart"
},
{
"$ref": "#/$defs/ToolOutputDeniedPart"
},
{
"$ref": "#/$defs/DynamicToolInputStreamingPart"
},
{
"$ref": "#/$defs/DynamicToolInputAvailablePart"
},
{
"$ref": "#/$defs/DynamicToolOutputAvailablePart"
},
{
"$ref": "#/$defs/DynamicToolOutputErrorPart"
},
{
"$ref": "#/$defs/DynamicToolApprovalRequestedPart"
},
{
"$ref": "#/$defs/DynamicToolApprovalRespondedPart"
},
{
"$ref": "#/$defs/DynamicToolOutputDeniedPart"
},
{
"$ref": "#/$defs/SourceUrlUIPart"
},
{
"$ref": "#/$defs/SourceDocumentUIPart"
},
{
"$ref": "#/$defs/FileUIPart"
},
{
"$ref": "#/$defs/DataUIPart"
},
{
"$ref": "#/$defs/StepStartUIPart"
}
]
},
"type": "array",
"title": "Parts"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"role",
"parts"
],
"title": "AssistantMetadataUIMessage",
"description": "`UIMessage` with `metadata` narrowed to `AssistantMessageMetadata`."
},
"BuiltInProviderModelSelection": {
"properties": {
"providerType": {
"type": "string",
"const": "builtin",
"title": "Providertype"
},
"provider": {
"$ref": "#/$defs/ModelProvider"
},
"modelName": {
"type": "string",
"title": "Modelname"
},
"openaiApiType": {
"type": "string",
"enum": [
"chat_completions",
"responses"
],
"title": "Openaiapitype",
"default": "responses"
}
},
"type": "object",
"required": [
"providerType",
"provider",
"modelName"
],
"title": "BuiltInProviderModelSelection",
"description": "Chat against a Phoenix built-in provider.\n\nCredentials and connection details (base URL, Azure endpoint, AWS\nregion) are resolved from the secret store first and the process\nenvironment second. ``openai_api_type`` is honoured by the OpenAI and\nAzure OpenAI branches; other providers ignore it."
},
"ChatContext": {
"oneOf": [
{
"$ref": "#/$defs/AppContext"
},
{
"$ref": "#/$defs/ProjectContext"
},
{
"$ref": "#/$defs/TraceContext"
},
{
"$ref": "#/$defs/AgentSpanContext"
},
{
"$ref": "#/$defs/PlaygroundContext"
},
{
"$ref": "#/$defs/CodeEvaluatorContext"
},
{
"$ref": "#/$defs/LlmEvaluatorContext"
},
{
"$ref": "#/$defs/DatasetContext"
},
{
"$ref": "#/$defs/GraphQLContext"
},
{
"$ref": "#/$defs/WebAccessContext"
},
{
"$ref": "#/$defs/SubagentsContext"
}
],
"title": "ChatContext",
"description": "Discriminated union of every UI-state context the agent understands."
},
"ChatRegenerateMessage": {
"properties": {
"trigger": {
"type": "string",
"const": "regenerate-message",
"title": "Trigger"
},
"id": {
"type": "string",
"title": "Id"
},
"messages": {
"items": {
"$ref": "#/$defs/AssistantMetadataUIMessage"
},
"type": "array",
"title": "Messages"
},
"messageId": {
"type": [
"string",
"null"
],
"title": "Messageid"
},
"ingestTraces": {
"type": "boolean",
"title": "Ingesttraces",
"default": false
},
"exportRemoteTraces": {
"type": "boolean",
"title": "Exportremotetraces",
"default": false
},
"contexts": {
"items": {
"$ref": "#/$defs/ChatContext"
},
"type": "array",
"title": "Contexts"
},
"editPermission": {
"type": "string",
"enum": [
"manual",
"bypass"
],
"title": "Editpermission",
"default": "manual"
},
"requestedSkills": {
"items": {
"type": "string"
},
"type": "array",
"title": "Requestedskills",
"description": "Skills the user explicitly requested via the prompt's slash-command affordance. The server force-loads each available skill by injecting a synthetic load_skill tool call/result at the tail of the message history. Unknown or context-unavailable names are ignored."
},
"model": {
"oneOf": [
{
"$ref": "#/$defs/CustomProviderModelSelection"
},
{
"$ref": "#/$defs/BuiltInProviderModelSelection"
}
],
"title": "Model"
}
},
"additionalProperties": true,
"type": "object",
"required": [
"trigger",
"id",
"messages",
"model"
],
"title": "ChatRegenerateMessage",
"description": "Regenerate message extended with Phoenix-specific fields."
},
"ChatSubmitMessage": {
"properties": {
"trigger": {
"type": "string",
"const": "submit-message",
"title": "Trigger",
"default": "submit-message"
},
"id": {
"type": "string",
"title": "Id"
},
"messages": {
"items": {
"$ref": "#/$defs/AssistantMetadataUIMessage"
},
"type": "array",
"title": "Messages"
},
"ingestTraces": {
"type": "boolean",
"title": "Ingesttraces",
"default": false
},
"exportRemoteTraces": {
"type": "boolean",
"title": "Exportremotetraces",
"default": false
},
"contexts": {
"items": {
"$ref": "#/$defs/ChatContext"
},
"type": "array",
"title": "Contexts"
},
"editPermission": {
"type": "string",
"enum": [
"manual",
"bypass"
],
"title": "Editpermission",
"default": "manual"
},
"requestedSkills": {
"items": {
"type": "string"
},
"type": "array",
"title": "Requestedskills",
"description": "Skills the user explicitly requested via the prompt's slash-command affordance. The server force-loads each available skill by injecting a synthetic load_skill tool call/result at the tail of the message history. Unknown or context-unavailable names are ignored."
},
"model": {
"oneOf": [
{
"$ref": "#/$defs/CustomProviderModelSelection"
},
{
"$ref": "#/$defs/BuiltInProviderModelSelection"
}
],
"title": "Model"
}
},
"additionalProperties": true,
"type": "object",
"required": [
"id",
"messages",
"model"
],
"title": "ChatSubmitMessage",
"description": "Submit message extended with Phoenix-specific fields."
},
"CodeEvaluatorContext": {
"properties": {
"type": {
"type": "string",
"const": "code_evaluator",
"title": "Type"
},
"evaluatorNodeId": {
"type": [
"string",
"null"
],
"title": "Evaluatornodeid"
}
},
"type": "object",
"required": [
"type"
],
"title": "CodeEvaluatorContext",
"description": "Code-evaluator create/edit form mounted in the current browser route."
},
"CustomProviderModelSelection": {
"properties": {
"providerType": {
"type": "string",
"const": "custom",
"title": "Providertype"
},
"providerId": {
"type": "string",
"title": "Providerid"
},
"modelName": {
"type": "string",
"title": "Modelname"
}
},
"type": "object",
"required": [
"providerType",
"providerId",
"modelName"
],
"title": "CustomProviderModelSelection",
"description": "Chat against a stored custom provider record."
},
"DataUIPart": {
"properties": {
"type": {
"type": "string",
"pattern": "^data-",
"title": "Type"
},
"id": {
"type": [
"string",
"null"
],
"title": "Id"
},
"data": {
"title": "Data"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"type",
"data"
],
"title": "DataUIPart",
"description": "Data part with dynamic type based on data name."
},
"DatasetContext": {
"properties": {
"type": {
"type": "string",
"const": "dataset",
"title": "Type"
},
"datasetNodeId": {
"type": "string",
"title": "Datasetnodeid"
},
"datasetVersionNodeId": {
"type": [
"string",
"null"
],
"title": "Datasetversionnodeid"
}
},
"type": "object",
"required": [
"type",
"datasetNodeId"
],
"title": "DatasetContext",
"description": "Dataset the user is currently viewing or has bound to a workflow.\n\nCarries the dataset's relay node id and, when known, the active version\nnode id. These IDs scope the create-form handoff link and the sampling of\nactive dataset examples used as prompt context; the dataset schema itself\nis open."
},
"DynamicToolApprovalRequestedPart": {
"properties": {
"type": {
"type": "string",
"const": "dynamic-tool",
"title": "Type",
"default": "dynamic-tool"
},
"toolName": {
"type": "string",
"title": "Toolname"
},
"toolCallId": {
"type": "string",
"title": "Toolcallid"
},
"title": {
"type": [
"string",
"null"
],
"title": "Title"
},
"state": {
"type": "string",
"const": "approval-requested",
"title": "State",
"default": "approval-requested"
},
"input": {
"title": "Input"
},
"providerExecuted": {
"type": [
"boolean",
"null"
],
"title": "Providerexecuted"
},
"callProviderMetadata": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": [
"object",
"null"
],
"title": "Callprovidermetadata"
},
"approval": {
"anyOf": [
{
"$ref": "#/$defs/ToolApprovalRequested"
},
{
"$ref": "#/$defs/ToolApprovalResponded"
},
{
"type": "null"
}
],
"title": "Approval"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"toolName",
"toolCallId",
"input"
],
"title": "DynamicToolApprovalRequestedPart",
"description": "Dynamic tool part in approval-requested state (awaiting user decision)."
},
"DynamicToolApprovalRespondedPart": {
"properties": {
"type": {
"type": "string",
"const": "dynamic-tool",
"title": "Type",
"default": "dynamic-tool"
},
"toolName": {
"type": "string",
"title": "Toolname"
},
"toolCallId": {
"type": "string",
"title": "Toolcallid"
},
"title": {
"type": [
"string",
"null"
],
"title": "Title"
},
"state": {
"type": "string",
"const": "approval-responded",
"title": "State",
"default": "approval-responded"
},
"input": {
"title": "Input"
},
"providerExecuted": {
"type": [
"boolean",
"null"
],
"title": "Providerexecuted"
},
"callProviderMetadata": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": [
"object",
"null"
],
"title": "Callprovidermetadata"
},
"approval": {
"anyOf": [
{
"$ref": "#/$defs/ToolApprovalRequested"
},
{
"$ref": "#/$defs/ToolApprovalResponded"
},
{
"type": "null"
}
],
"title": "Approval"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"toolName",
"toolCallId",
"input"
],
"title": "DynamicToolApprovalRespondedPart",
"description": "Dynamic tool part in approval-responded state (user approved/denied, execution pending)."
},
"DynamicToolInputAvailablePart": {
"properties": {
"type": {
"type": "string",
"const": "dynamic-tool",
"title": "Type",
"default": "dynamic-tool"
},
"toolName": {
"type": "string",
"title": "Toolname"
},
"toolCallId": {
"type": "string",
"title": "Toolcallid"
},
"title": {
"type": [
"string",
"null"
],
"title": "Title"
},
"state": {
"type": "string",
"const": "input-available",
"title": "State",
"default": "input-available"
},
"input": {
"title": "Input"
},
"providerExecuted": {
"type": [
"boolean",
"null"
],
"title": "Providerexecuted"
},
"callProviderMetadata": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": [
"object",
"null"
],
"title": "Callprovidermetadata"
},
"approval": {
"anyOf": [
{
"$ref": "#/$defs/ToolApprovalRequested"
},
{
"$ref": "#/$defs/ToolApprovalResponded"
},
{
"type": "null"
}
],
"title": "Approval"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"toolName",
"toolCallId",
"input"
],
"title": "DynamicToolInputAvailablePart",
"description": "Dynamic tool part in input-available state."
},
"DynamicToolInputStreamingPart": {
"properties": {
"type": {
"type": "string",
"const": "dynamic-tool",
"title": "Type",
"default": "dynamic-tool"
},
"toolName": {
"type": "string",
"title": "Toolname"
},
"toolCallId": {
"type": "string",
"title": "Toolcallid"
},
"title": {
"type": [
"string",
"null"
],
"title": "Title"
},
"state": {
"type": "string",
"const": "input-streaming",
"title": "State",
"default": "input-streaming"
},
"input": {
"title": "Input"
},
"providerExecuted": {
"type": [
"boolean",
"null"
],
"title": "Providerexecuted"
},
"callProviderMetadata": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": [
"object",
"null"
],
"title": "Callprovidermetadata"
},
"approval": {
"anyOf": [
{
"$ref": "#/$defs/ToolApprovalRequested"
},
{
"$ref": "#/$defs/ToolApprovalResponded"
},
{
"type": "null"
}
],
"title": "Approval"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"toolName",
"toolCallId"
],
"title": "DynamicToolInputStreamingPart",
"description": "Dynamic tool part in input-streaming state."
},
"DynamicToolOutputAvailablePart": {
"properties": {
"type": {
"type": "string",
"const": "dynamic-tool",
"title": "Type",
"default": "dynamic-tool"
},
"toolName": {
"type": "string",
"title": "Toolname"
},
"toolCallId": {
"type": "string",
"title": "Toolcallid"
},
"title": {
"type": [
"string",
"null"
],
"title": "Title"
},
"state": {
"type": "string",
"const": "output-available",
"title": "State",
"default": "output-available"
},
"input": {
"title": "Input"
},
"output": {
"title": "Output"
},
"providerExecuted": {
"type": [
"boolean",
"null"
],
"title": "Providerexecuted"
},
"callProviderMetadata": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": [
"object",
"null"
],
"title": "Callprovidermetadata"
},
"preliminary": {
"type": [
"boolean",
"null"
],
"title": "Preliminary"
},
"approval": {
"anyOf": [
{
"$ref": "#/$defs/ToolApprovalRequested"
},
{
"$ref": "#/$defs/ToolApprovalResponded"
},
{
"type": "null"
}
],
"title": "Approval"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"toolName",
"toolCallId",
"input",
"output"
],
"title": "DynamicToolOutputAvailablePart",
"description": "Dynamic tool part in output-available state."
},
"DynamicToolOutputDeniedPart": {
"properties": {
"type": {
"type": "string",
"const": "dynamic-tool",
"title": "Type",
"default": "dynamic-tool"
},
"toolName": {
"type": "string",
"title": "Toolname"
},
"toolCallId": {
"type": "string",
"title": "Toolcallid"
},
"title": {
"type": [
"string",
"null"
],
"title": "Title"
},
"state": {
"type": "string",
"const": "output-denied",
"title": "State",
"default": "output-denied"
},
"input": {
"title": "Input"
},
"providerExecuted": {
"type": [
"boolean",
"null"
],
"title": "Providerexecuted"
},
"callProviderMetadata": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": [
"object",
"null"
],
"title": "Callprovidermetadata"
},
"approval": {
"anyOf": [
{
"$ref": "#/$defs/ToolApprovalRequested"
},
{
"$ref": "#/$defs/ToolApprovalResponded"
},
{
"type": "null"
}
],
"title": "Approval"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"toolName",
"toolCallId",
"input"
],
"title": "DynamicToolOutputDeniedPart",
"description": "Dynamic tool part in output-denied state (tool was denied, terminal state)."
},
"DynamicToolOutputErrorPart": {
"properties": {
"type": {
"type": "string",
"const": "dynamic-tool",
"title": "Type",
"default": "dynamic-tool"
},
"toolName": {
"type": "string",
"title": "Toolname"
},
"toolCallId": {
"type": "string",
"title": "Toolcallid"
},
"title": {
"type": [
"string",
"null"
],
"title": "Title"
},
"state": {
"type": "string",
"const": "output-error",
"title": "State",
"default": "output-error"
},
"input": {
"title": "Input"
},
"errorText": {
"type": "string",
"title": "Errortext"
},
"providerExecuted": {
"type": [
"boolean",
"null"
],
"title": "Providerexecuted"
},
"callProviderMetadata": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": [
"object",
"null"
],
"title": "Callprovidermetadata"
},
"approval": {
"anyOf": [
{
"$ref": "#/$defs/ToolApprovalRequested"
},
{
"$ref": "#/$defs/ToolApprovalResponded"
},
{
"type": "null"
}
],
"title": "Approval"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"toolName",
"toolCallId",
"input",
"errorText"
],
"title": "DynamicToolOutputErrorPart",
"description": "Dynamic tool part in output-error state."
},
"FileUIPart": {
"properties": {
"type": {
"type": "string",
"const": "file",
"title": "Type",
"default": "file"
},
"mediaType": {
"type": "string",
"title": "Mediatype"
},
"filename": {
"type": [
"string",
"null"
],
"title": "Filename"
},
"url": {
"type": "string",
"title": "Url"
},
"providerMetadata": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": [
"object",
"null"
],
"title": "Providermetadata"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"mediaType",
"url"
],
"title": "FileUIPart",
"description": "A file part of a message."
},
"GraphQLContext": {
"properties": {
"type": {
"type": "string",
"const": "graphql",
"title": "Type"
},
"mutationsEnabled": {
"type": "boolean",
"title": "Mutationsenabled"
}
},
"type": "object",
"required": [
"type",
"mutationsEnabled"
],
"title": "GraphQLContext",
"description": "GraphQL runtime state."
},
"LlmEvaluatorContext": {
"properties": {
"type": {
"type": "string",
"const": "llm_evaluator",
"title": "Type"
},
"evaluatorNodeId": {
"type": [
"string",
"null"
],
"title": "Evaluatornodeid"
}
},
"type": "object",
"required": [
"type"
],
"title": "LlmEvaluatorContext",
"description": "LLM-evaluator create/edit form mounted in the current browser route."
},
"ModelProvider": {
"type": "string",
"enum": [
"OPENAI",
"AZURE_OPENAI",
"ANTHROPIC",
"GOOGLE",
"DEEPSEEK",
"XAI",
"OLLAMA",
"AWS",
"CEREBRAS",
"FIREWORKS",
"GROQ",
"MOONSHOT",
"PERPLEXITY",
"TOGETHER"
],
"title": "ModelProvider"
},
"PlaygroundBuiltinModelContext": {
"properties": {
"type": {
"type": "string",
"const": "builtin",
"title": "Type",
"default": "builtin"
},
"provider": {
"type": "string",
"title": "Provider"
},
"modelName": {
"type": "string",
"title": "Modelname"
}
},
"type": "object",
"required": [
"provider",
"modelName"
],
"title": "PlaygroundBuiltinModelContext",
"description": "Built-in playground model selection."
},
"PlaygroundContext": {
"properties": {
"type": {
"type": "string",
"const": "playground",
"title": "Type"
},
"recordExperiments": {
"type": "boolean",
"title": "Recordexperiments",
"default": true
},
"repetitions": {
"type": "integer",
"title": "Repetitions",
"default": 1
},
"nextExperimentScaffold": {
"$ref": "#/$defs/PlaygroundExperimentScaffoldContext"
},
"instances": {
"items": {
"$ref": "#/$defs/PlaygroundInstanceContext"
},
"type": "array",
"title": "Instances"
},
"evaluators": {
"items": {
# --- truncated at 32 KB (56 KB total) ---
# Full source: https://artifacts.apis.io/phoenix/json-schema/phoenix-chat-request-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/phoenix-chat-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.