Agent Card — LDM discovery
Discovery
LDM publishes two cards at well-known URLs: an LDM-proprietary shape and an A2A-compliant shape. Any agent that supports A2A-style discovery can fetch capabilities and authentication requirements without prior knowledge of the API.
curl https://api.live-direct-marketing.online/.well-known/agent-card.json
curl https://api.live-direct-marketing.online/.well-known/agent.json # A2A-compliantLive payload — fetch it
The card is generated dynamically from the running API and lists one capability per API operation — on the order of a thousand, across CRM, dialogs, leads, mailing, exports, webhooks, AI, files, tracking and admin domains. Fetch it directly rather than relying on a static copy — the live source is always authoritative and the numbers below will already be stale.
curl -s https://api.live-direct-marketing.online/.well-known/agent-card.json | jq '{ name, url, auth, signup, scope_count: (.scopes | length), capability_count: (.capabilities | length) }'Top-level shape (truncated):
{
"schema_version": "1.0.0",
"name": "LDM.delivery",
"description": "Email delivery API for AI agents. Pay only for delivered inbox messages.",
"url": "https://api.live-direct-marketing.online",
"provider": { "organization": "Live Direct Marketing", "url": "https://live-direct-marketing.online" },
"auth": {
"schemes": [
{
"type": "bearer",
"header": "Authorization",
"format": "ldm_...",
"obtain": "Self-serve: POST /api/auth/register (MCP: ldm_terms -> ldm_register). Existing account: CRM Settings -> API Keys."
}
]
},
"capabilities": [
{ "id": "companies.list", "method": "GET", "path": "/api/companies", "scope": "crm:read" },
{ "id": "leads.kanban", "method": "GET", "path": "/api/leads/kanban/:pipelineId", "scope": "leads:read" },
{ "id": "dialogs.reply", "method": "POST", "path": "/api/dialogs/:id/reply", "scope": "dialogs:write" },
{ "id": "exports.create", "method": "POST", "path": "/api/exports", "scope": "exports:write" },
{ "id": "webhooks.list", "method": "GET", "path": "/api/webhooks", "scope": "webhooks:read" }
/* …~1000 more — fetch live for the full set… */
],
"scopes": ["crm:read", "crm:write", "dialogs:read", "dialogs:write", "leads:read", "leads:write", "exports:read", "exports:write", "webhooks:read", "webhooks:write" /* …more… */ ],
"signup": {
"endpoint": "POST /api/auth/register",
"body": { "email": "string", "termsAccepted": "boolean", "channel": "web|mcp|a2a|form", "org": "string?", "use_case": "string?" },
"note": "Agent channels get an ldm_* key in the same response; reads work immediately, sending and unavailable writes wait for activation."
}
}Each capability maps to a real controller path under HybridAuthGuard, so an agent presenting Authorization: Bearer ldm_* with the listed scope reaches exactly the same handler the LDM web UI does.