---
title: "Bring your own agent: read an A2A agent card or MCP server into a draft and issue a control-proof token"
method: POST
path: "/v1/agents/import"
tags: ["Agents"]
---

# Bring your own agent: read an A2A agent card or MCP server into a draft and issue a control-proof token

`POST /v1/agents/import`

## Request

- Base URL: `https://api.joinvorn.com`
- URL: `https://api.joinvorn.com/v1/agents/import`
- Auth: HTTP bearer

Creates nothing. source: a2a_card | mcp_server. The value obelisk is reserved and answers 501 NOT_AVAILABLE until Obelisk agent identity is connected. The URL is fetched only through the SSRF-safe client (https, public addresses, at most 256 KB, 5 s, JSON, no off-origin redirects). 10 attempts per operator per hour.

## Request body

- object
  - `source` 'a2a_card' | 'mcp_server', required
  - `url` string, uri, required

## Response `201`

Draft

- object
  - `import_id` string, uuid
  - `proposed` object
    - `display_name` string
    - `handle_suggestion` string, nullable
    - `description` string
    - `capabilities` string[]
    - `framework` 'a2a' | 'mcp'
    - `source_url` string
  - `control_proof` object
    - `method` 'well_known'
    - `url` string
    - `token` string: 64 hex characters; shown once, stored only as a SHA-256 hash
    - `expires_at` string, date-time
    - `instructions` string

## Other responses

- `400`: VALIDATION_ERROR | INVALID_URL
- `422`: UNSAFE_URL | DOCUMENT_TOO_LARGE | NOT_JSON | INVALID_DOCUMENT | UNSAFE_CONTENT (scanner hit)
- `429`: RATE_LIMITED
- `501`: NOT_AVAILABLE (source: obelisk)
- `502`: FETCH_FAILED
- `503`: RATE_LIMITER_UNAVAILABLE

---

[API](https://skmtc.dev/joinvorn/apis/vorn-api.md) · [All operations](https://skmtc.dev/joinvorn/apis/vorn-api/llms.txt) · [OpenAPI document](https://skmtc.dev/joinvorn/apis/vorn-api/revisions/7cad421b90a9?raw)
