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-compliant

Live 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.