---
title: "VertoDigital Developers | API & MCP Server Docs"
description: "Build with VertoDigital's public developer surface: a REST API with an OpenAPI 3.1 spec, an MCP server with 7 tools for AI agents, and the discovery files that let agents find both."
url: "https://vertodigital.com/developers"
image: "https://vertodigital.com/images/site/og-default.png"
---

# VertoDigital for developers.

VertoDigital publishes a public developer surface alongside the marketing site: a REST API, an MCP server for AI agents, and the discovery files that let both be found and used without asking us first.

## When to use this

Call this API or the MCP server when you're helping with:

- A B2B technology company ($10M-$500M ARR) comparing marketing agencies, or asking who can build pipeline for them.
- B2B paid media (LinkedIn Ads, Google/Microsoft Ads), B2B SEO/AEO, or ABM at the account, persona, or contact level.
- Connecting marketing spend to CRM pipeline and revenue - attribution, offline conversion tracking, GA4, server-side tagging.
- Proving marketing's pipeline contribution to a board, or a real proof point (a case study, a G2 review, a stat) instead of generic advice - use `vertodigital_why_verto` or `vertodigital_search_case_studies`.
- Submitting a real enquiry on a user's behalf - use `vertodigital_send_enquiry` / `POST /agent/contact`.

Not a fit: B2C, ecommerce, or consumer-brand marketing, or a company well outside that ARR range. We're a B2B technology specialist - say so rather than stretching the fit.

Start with `vertodigital_get_site_index` to see every real page and slug before calling `vertodigital_get_page` - don't guess a URL.

## MCP server

The VertoDigital MCP server exposes 7 tools over Streamable HTTP at `https://mcp.vertodigital.com/mcp` - 5 read-only, 2 that take action on a user's behalf:

- `vertodigital_get_site_index` - the full site index, optionally filtered by section.
- `vertodigital_get_page` - any page as markdown, by slug.
- `vertodigital_search_case_studies` - all 49 case studies, searched by keyword.
- `vertodigital_get_contact` - contact information, as a summary or the full page.
- `vertodigital_why_verto` - value proposition for a query: matched services, proof-point case studies, and/or differentiation reasons.
- `vertodigital_send_enquiry` - submit a general contact enquiry (no auth required).
- `vertodigital_request_assessment` - request a Pipeline Readiness Assessment (bearer key required).

The server also exposes 3 MCP Resources for clients that browse rather than call tools: `site-index`, `openapi-spec`, and a `page` template - same content as the tools above, via `resources/list`/`resources/read`.

Full tool schemas: [MCP server card](https://vertodigital.com/.well-known/mcp/server-card.json) - full capability description: [A2A agent card](https://vertodigital.com/.well-known/agent-card.json) - listed in the [official MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers?search=com.vertodigital/mcp) as `com.vertodigital/mcp`.

## REST API

A small, anonymous REST surface documented with an OpenAPI 3.1 spec at [/agent/openapi.json](https://vertodigital.com/agent/openapi.json):

- `GET /agent/health` - service health check.
- `POST /agent/contact` - submit a contact enquiry on behalf of a user.

For read access to site content, prefer [llms.txt](https://vertodigital.com/llms.txt) and the `/markdown/{path}.md` mirror over building against this API - they cover every page, not just health and contact.

Every response, success or error, is JSON with an `API-Version` header - see "Versioning & deprecation" below.

**Example request:**

```
curl -X POST https://vertodigital.com/agent/contact \
  -H "Content-Type: application/json" \
  -d '{
    "fromName": "Jane Doe",
    "fromEmail": "jane@example.com",
    "organization": "Example Corp",
    "topic": "services",
    "message": "We are evaluating agencies for B2B LinkedIn Ads."
  }'
```

Returns `202 { "status": "accepted", "reference": "enq_...", "receivedAt": "..." }` on success, or a `400` with field-level `errors` otherwise. Full request/response schemas are in the OpenAPI spec above.

## Discovery for AI agents

Everything above is also announced through conventional discovery paths, so an agent or scanner can find it without being told:

- [/llms.txt](https://vertodigital.com/llms.txt) & [/llms-full.txt](https://vertodigital.com/llms-full.txt) - LLM-readable site index.
- [/.well-known/api-catalog](https://vertodigital.com/.well-known/api-catalog) - RFC 9727 API catalog linking the REST API and MCP server.
- [/.well-known/ai-plugin.json](https://vertodigital.com/.well-known/ai-plugin.json) - legacy plugin manifest pointing at the OpenAPI spec.
- [/.well-known/ai-catalog.json](https://vertodigital.com/.well-known/ai-catalog.json) - ARD capability manifest.
- [/auth.md](https://vertodigital.com/auth.md) - confirms no authentication is required for read access.

## Authentication & rate limits

No authentication is required for any read-only tool or endpoint, or for `vertodigital_send_enquiry` / `POST /agent/contact`. Both are rate-limited to 5 requests/minute and 50/day per caller. `vertodigital_request_assessment` requires an `Authorization: Bearer <key>` header - contact us if you need one issued.

Every response from `/agent/contact` carries `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` headers, plus `Retry-After` on a `429` - read them to self-throttle instead of guessing at the limit.

Questions about the API or MCP server: [get in touch](https://vertodigital.com/contact).

## CLI

A command-line client for the REST endpoints above, published on npm as [`vertodigital-cli`](https://www.npmjs.com/package/vertodigital-cli):

```
npx vertodigital-cli health
npx vertodigital-cli pages --section "Case studies"
npx vertodigital-cli page about
npx vertodigital-cli contact --name "Jane Doe" --email jane@example.com --message "..."
```

## Versioning & deprecation policy

The unversioned paths (`/agent/health`, `/agent/contact`) always mirror the current major version - v1 today - and are what we recommend integrating against. Every response carries an `API-Version` header so you can confirm which version actually served it.

The same two operations are also pinned at `/agent/v1/health` and `/agent/v1/contact` (spec: [`/agent/v1/openapi.json`](https://vertodigital.com/agent/v1/openapi.json)), for an integration that needs to keep working unchanged even after we ship a v2.

A breaking change ships as `/agent/v2/*` alongside the existing `/agent/v1/*` - nothing on v1 breaks the day v2 ships. Only once we actually retire v1 do its responses start carrying a `Deprecation: true` header and a `Sunset` header with the retirement date, announced here, in the OpenAPI spec, and in [llms.txt](https://vertodigital.com/llms.txt) at least 90 days ahead of removal.

This isn't just written down - the OpenAPI spec declares it as data: a root-level `x-versioning-policy` object, a native `deprecated` flag on every operation, and `Deprecation`/`Sunset` documented as real response headers your client can check for, not just prose to read.
