# A2A Artifact Handoff

> A2A Artifact Handoff is a paid API for AI agents from a2a-artifact-handoff.onrender.com, paid per call via x402, $0.25/call, status unknown (last checked 2026-09-15).

Compiles agent outputs against a receiver contract and returns a verified, time-limited handoff package for agent-to-agent artifact transfer.

## Facts

- Endpoint: POST https://a2a-artifact-handoff.onrender.com/v1/handoffs/compile
- Price: $0.25/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/a2a-artifact-handoff-c024f68f
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_fv24Dnu6mG3pTi6VueYm-

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability a2a-artifact-handoff-c024f68f -d '<json body>'
```

Example prompt: Compile my agent's outputs — a JSON report (report.json) and a PDF summary (summary.pdf) — against the receiver contract that requires both files, with the objective 'Quarterly financial analysis complete', mark the status as completed, and set a 48-hour TTL on the handoff package.

## When to prefer this

Choose this endpoint when coordinating multi-agent pipelines where one agent's outputs must be formally handed off to another agent with contract compliance verification. It is the right choice when the receiving agent has declared a receiver contract specifying required file types, size constraints, or SHA256 integrity checks. Prefer this over ad-hoc file passing when auditability, TTL-bounded artifact lifecycle management, and structured handoff context (decisions, assumptions, unresolved issues) are required between pipeline stages.

## Known failure modes

- Receiver contract validation failure — outputs do not satisfy requiredOutputs spec, returns contract mismatch error
- File size constraint violation — artifact exceeds maxFileBytes limit specified in contract constraints
- Invalid media type — submitted content type does not match contract expectations
- Missing required outputs — sourceOutputs array lacks entries matching receiver contract's requiredOutputs
- TTL out of range — ttlHours below 1 or above 720 returns validation error
- Empty or malformed content — neither content nor contentBase64 provided for an output item
- Payment failure — x402 USDC payment not completed, returns 402 Payment Required

## How this service works

Compile agent outputs against a receiver contract and return a verified handoff package.

## Output

A verified handoff package containing the compiled agent outputs validated against the receiver contract, including contract compliance status, artifact metadata (IDs, filenames, media types), handoff context (objective, decisions, assumptions, unresolved issues), source and destination agent identifiers, and a TTL-bounded expiry timestamp for the package.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "ttlHours": {
   "type": "integer",
   "title": "Ttlhours",
   "default": 24,
   "maximum": 720,
   "minimum": 1
  },
  "sourceOutputs": {
   "type": "array",
   "items": {
    "type": "object",
    "title": "SourceOutput",
    "required": [
     "id",
     "filename",
     "mediaType"
    ],
    "properties": {
     "id": {
      "type": "string",
      "title": "Id",
      "maxLength": 80,
      "minLength": 1
     },
     "role": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 80
       },
       {
        "type": "null"
       }
      ],
      "title": "Role",
      "default": null
     },
     "content": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "title": "Content",
      "default": null
     },
     "filename": {
      "type": "string",
      "title": "Filename",
      "maxLength": 200,
      "minLength": 1
     },
     "mediaType": {
      "type": "string",
      "title": "Mediatype",
      "maxLength": 120,
      "minLength": 3
     },
     "contentBase64": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "title": "Contentbase64",
      "default": null
     }
    },
    "description": "One output produced by the source agent."
   },
   "title": "Sourceoutputs",
   "minItems": 1
  },
  "handoffContext": {
   "type": "object",
   "title": "HandoffContext",
   "required": [
    "objective"
   ],
   "properties": {
    "status": {
     "type": "string",
     "title": "Status",
     "default": "completed",
     "maxLength": 80
    },
    "decisions": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "title": "Decisions"
    },
    "objective": {
     "type": "string",
     "title": "Objective",
     "maxLength": 2000,
     "minLength": 1
    },
    "assumptions": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "title": "Assumptions"
    },
    "sourceAgent": {
     "anyOf": [
      {
       "type": "string",
       "maxLength": 200
      },
      {
       "type": "null"
      }
     ],
     "title": "Sourceagent",
     "default": null
    },
    "destinationAgent": {
     "anyOf": [
      {
       "type": "string",
       "maxLength": 200
      },
      {
       "type": "null"
      }
     ],
     "title": "Destinationagent",
     "default": null
    },
    "unresolvedIssues": {
     "type":
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/a2a-artifact-handoff-c024f68f/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from a2a-artifact-handoff.onrender.com](https://www.zero.xyz/host/a2a-artifact-handoff.onrender.com/llms.txt)
