A2A agent
Hand a video edit to Vidmoat from another agent over the Agent2Agent protocol: send a brief and a project, poll the task, read what was applied.
Vidmoat answers the Agent2Agent protocol with one skill: edit a project from a brief. A task is the same server-side run of the editing agent that the Vidmoat editor starts, with the same gates, the same per-step credit charge and the same result on the timeline. Use MCP when your agent wants the individual tools; use A2A when it wants to delegate the whole edit.
| Agent Card | https://vidmoat.com/.well-known/agent-card.json (also on www, api and developer) |
| Endpoint | https://api.vidmoat.com/api/a2a |
| Binding | JSON-RPC 2.0 over POST, protocol 1.0 and 0.3 on the same URL |
| Methods | SendMessage, GetTask, CancelTask (0.3: message/send, tasks/get, tasks/cancel) |
| Auth | OAuth (the same authorization server as MCP) or a live API key, as a bearer token; a scoped credential needs ai.agent |
| Limits | 60 calls a minute per account, plus the agent's own limit (shared with every surface) and one live run per project |
What it does not do#
- No streaming and no push notifications. Both are
falseon the card.SendMessagereturns the task at once, submitted; pollGetTaskuntil it is completed, failed or canceled. - No file parts. Upload media to the project first (MCP
upload_mediaorPOST /v1/media) and describe the edit in a text part. A file part is refused with-32005, not ignored. - No project creation. Create one with MCP
create_projectorPOST /v1/projectsand pass its id. - No follow-up on a finished task. Every task ends in a terminal state. Send a new message with
referenceTaskIdsnaming the earlier task (up to three); the agent gets what was asked and what it said. - No batches and no
ListTasks. Keep the task ids you are given. - Test keys cannot start runs, because runs spend real credits.
- Server-side runs need a plan that includes them (Creator and above) with server-side runs turned on for the account; otherwise
SendMessageanswers-32000withdata.codenot_entitledornot_opted_in.
Send a brief#
The project id goes in message.metadata.projectId, in a data part {"projectId": "..."}, or as the contextId. A context is one project: the task's contextId is always the project id.
Poll it#
A completed task carries the agent's closing message in status.message, its messages in history, and one artifact, Edited project, whose data part names the project, the editor link, the commands applied and attempted, and the credits left when the run last reported them. A failed task carries the reason in status.message.
CancelTask asks the run to stop at its next step boundary, so a half-applied batch never reaches the document. The task stays working (with metadata.cancelRequested) until it does, then reads canceled.
Errors#
| Code | When |
|---|---|
-32602 | No brief, no project, the brief is over 8000 characters (refused, never cut), or the project is not yours |
-32000 | Refused for a reason you can act on: rate limit, plan, opt-in, a run already live on the project (data.taskId names it), an account restriction, a missing ai.agent scope. data.httpStatus and data.code say which |
-32001 | No such task, or not yours |
-32002 | The task has already finished |
-32003, -32004 | Push notifications, streaming, ListTasks, or a message to a finished task |
-32005 | A file part |
-32009 | An A2A-Version other than 1.0 or 0.3 |
Google models are not used for runs started here, as for MCP, the REST API and the chat bots.
Skills for your own agent#
The editing craft the agent runs on is published as Agent Skills: the index is at https://vidmoat.com/.well-known/agent-skills/index.json (v0.2.0), each SKILL.md is served beside it with its sha256 digest in the index, and the source is the public repository vidmoat/skills.