Pipecat
Canonical tools, triggers, auth, schemas, and mock behavior for Pipecat.
Run a valid pipecat.get_voice_pipeline call through the same SDK surface used by every toolkit.
Minimal tool call
import { Eyeball } from "@eyeball/sdk";
const eyeball = new Eyeball({
apiKey: process.env.EYEBALL_API_KEY!,
baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});
const output = await eyeball.tools.run(
"pipecat.get_voice_pipeline",
{
"pipelineId": "example_pipelineId"
},
{ userId: "demo_user" },
);
console.log(output);The model receives canonical output. Your application retains the execution envelope through tools.execute or the execution APIs when it needs IDs, status, versions, and latency.
Supported canonical tools
| Tool | Purpose | Execution | Effect | Version |
|---|---|---|---|---|
pipecat.get_voice_pipeline | Retrieve the current state, pinned scope, and latest event sequence for a voice pipeline. | sync or async | read | 1.0.0 |
pipecat.start_voice_pipeline | Start a composed transport, speech, model, and tool pipeline. This is asynchronous by nature. | async | mutation | 1.0.0 |
Only the rows above are implemented. A capability tool omitted by this manifest returns not_supported; eyeball never synthesizes provider parity.
Supported canonical triggers
This manifest does not implement a canonical trigger.
Input and output schemas
pipecat.get_voice_pipeline
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:voice_telephony:get_voice_pipeline:1.0.0:pipecat",
"type": "object",
"description": "Identifier of the pipeline to retrieve.",
"additionalProperties": false,
"required": [
"pipelineId"
],
"properties": {
"pipelineId": {
"type": "string",
"description": "Stable pipeline/session identifier.",
"minLength": 1
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:voice_telephony:get_voice_pipeline:output:1.0.0:pipecat",
"type": "object",
"description": "Current voice-pipeline state.",
"additionalProperties": false,
"required": [
"pipeline"
],
"properties": {
"pipeline": {
"type": "object",
"description": "State and pinned scope for one composed voice pipeline.",
"additionalProperties": false,
"required": [
"pipelineId",
"projectId",
"userId",
"agentId",
"agentRevision",
"transport",
"state",
"createdAt",
"lastEventSequence"
],
"properties": {
"pipelineId": {
"type": "string",
"description": "Stable pipeline/session identifier.",
"minLength": 1
},
"projectId": {
"type": "string",
"description": "Project scope pinned to the pipeline.",
"minLength": 1
},
"userId": {
"type": "string",
"description": "External user scope pinned to the pipeline.",
"minLength": 1
},
"agentId": {
"type": "string",
"description": "Voice-agent identifier pinned to the pipeline.",
"minLength": 1
},
"agentRevision": {
"type": "integer",
"description": "Immutable voice-agent revision pinned to the pipeline.",
"minimum": 1
},
"transport": {
"type": "string",
"description": "Transport selected for the pipeline.",
"enum": [
"pstn:twilio",
"webrtc:livekit",
"chat"
]
},
"state": {
"type": "string",
"description": "Normalized voice-pipeline lifecycle state.",
"enum": [
"created",
"connecting",
"in-progress",
"wrap-up",
"completed",
"failed",
"abandoned"
]
},
"createdAt": {
"type": "string",
"description": "Time the pipeline was allocated.",
"format": "date-time"
},
"startedAt": {
"type": "string",
"description": "Time the pipeline became active.",
"format": "date-time"
},
"completedAt": {
"type": "string",
"description": "Time the pipeline became terminal.",
"format": "date-time"
},
"lastEventSequence": {
"type": "integer",
"description": "Latest durable event sequence.",
"minimum": 0
}
}
}
}
}pipecat.start_voice_pipeline
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:voice_telephony:start_voice_pipeline:1.0.0:pipecat",
"type": "object",
"description": "Opaque runtime agent configuration and optional mock script.",
"additionalProperties": false,
"required": [
"agentConfig"
],
"properties": {
"agentConfig": {
"type": "object",
"description": "Runtime agent configuration consumed by the voice worker.",
"additionalProperties": true
},
"script": {
"type": "array",
"description": "Deterministic scripted-caller steps accepted by the mock voice runtime.",
"items": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"required": [
"caller"
],
"properties": {
"caller": {
"type": "string",
"minLength": 1
},
"delayMs": {
"type": "integer",
"minimum": 0
},
"durationMs": {
"type": "integer",
"minimum": 0
},
"dtmf": {
"type": "string",
"pattern": "^[0-9A-D*#wW]+$"
},
"hangup": {
"type": "boolean"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"expect_tool_call"
],
"properties": {
"expect_tool_call": {
"type": "string",
"minLength": 3
},
"input": {
"type": "object",
"additionalProperties": true
},
"result": true,
"error": {
"type": "object",
"additionalProperties": true
}
},
"not": {
"required": [
"result",
"error"
],
"properties": {
"result": true,
"error": true
}
}
}
]
}
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:voice_telephony:start_voice_pipeline:output:1.0.0:pipecat",
"type": "object",
"description": "Newly allocated voice pipeline.",
"additionalProperties": false,
"required": [
"pipeline"
],
"properties": {
"pipeline": {
"type": "object",
"description": "State and pinned scope for one composed voice pipeline.",
"additionalProperties": false,
"required": [
"pipelineId",
"projectId",
"userId",
"agentId",
"agentRevision",
"transport",
"state",
"createdAt",
"lastEventSequence"
],
"properties": {
"pipelineId": {
"type": "string",
"description": "Stable pipeline/session identifier.",
"minLength": 1
},
"projectId": {
"type": "string",
"description": "Project scope pinned to the pipeline.",
"minLength": 1
},
"userId": {
"type": "string",
"description": "External user scope pinned to the pipeline.",
"minLength": 1
},
"agentId": {
"type": "string",
"description": "Voice-agent identifier pinned to the pipeline.",
"minLength": 1
},
"agentRevision": {
"type": "integer",
"description": "Immutable voice-agent revision pinned to the pipeline.",
"minimum": 1
},
"transport": {
"type": "string",
"description": "Transport selected for the pipeline.",
"enum": [
"pstn:twilio",
"webrtc:livekit",
"chat"
]
},
"state": {
"type": "string",
"description": "Normalized voice-pipeline lifecycle state.",
"enum": [
"created",
"connecting",
"in-progress",
"wrap-up",
"completed",
"failed",
"abandoned"
]
},
"createdAt": {
"type": "string",
"description": "Time the pipeline was allocated.",
"format": "date-time"
},
"startedAt": {
"type": "string",
"description": "Time the pipeline became active.",
"format": "date-time"
},
"completedAt": {
"type": "string",
"description": "Time the pipeline became terminal.",
"format": "date-time"
},
"lastEventSequence": {
"type": "integer",
"description": "Latest durable event sequence.",
"minimum": 0
}
}
}
}
}Authentication
| Property | Value |
|---|---|
| Auth class | none |
| Required scopes | None |
| Optional scopes | None |
| Credential fields | None |
Credentials are resolved inside the executor by CredentialProvider. They never belong in tool input, x_provider, model context, logs, or execution output.
Provider-specific extensions
This manifest declares no provider-specific schema extensions. Use only canonical fields.
Provider differences may appear only under x_provider.pipecat and only when the schema above declares them.
Sync and async behavior
These tools require async mode: pipecat.start_voice_pipeline. Other tools accept sync or async mode.
Mutations require a stable Idempotency-Key. The TypeScript SDK accepts it as idempotencyKey; it is never part of the JSON request body.
REST example
curl "$EYEBALL_EXECUTOR_URL/v1/execute" \
-H "Authorization: Bearer $EYEBALL_API_KEY" \
-H 'Content-Type: application/json' \
--data '{"tool":"pipecat.get_voice_pipeline","userId":"demo_user","input":{"pipelineId":"example_pipelineId"},"mode":"sync"}'Mock support
Point EYEBALL_EXECUTOR_URL at a mock-configured executor to run through the real catalog, validation, credential seam, adapter, normalized errors, and execution records with no Pipecat account. Mock selection changes the executor endpoint and trusted provider base-URL configuration, never the execute request.
Limitations
- This page describes the manifest's explicit P0 subset, not every operation offered by the provider.
- Provider account policy, consent UI, quota details, and current wire compatibility still require a real-provider certification pass.
- Fields outside the canonical schemas and declared
x_providerextensions are rejected.
Versions
| Contract | Version |
|---|---|
| Runtime catalog | 1.1 |
| Manifest catalog | 1.0 |
| Manifest schema | 1.0 |
| Source | native |
| Tier | P0 |
| Capabilities | voice_telephony |
Next
Use Testing with mocks to exercise this toolkit before connecting a live provider account.