Live Direct Marketing Deliverability API

The Deliverability API from Live Direct Marketing — 11 operation(s) for deliverability.

Operations 13

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

POST /api/deliverability/probe/relay-reach Probe whether a relay can reach mail providers · C1: probe whether the given relay can deliver to the given providers (Layer 1… #
Ask an LLM
“Can my sending relay deliver to Gmail and other mailbox providers at all?”
“How do I run a baseline relay reachability test?”
Tell an agent
Start a relay-reach probe to test baseline delivery to mailbox providers.
Run the C1 relay reachability check.
POST /api/deliverability/probe/creative-through-relay Probe whether a creative reaches the inbox · C2: probe whether a specific creative reaches inbox through (relay × provider) #
Ask an LLM
“Does a specific email creative land in the inbox through my relay?”
“How do I test inbox placement of one creative per mailbox provider?”
Tell an agent
Start a creative-through-relay inbox placement probe.
Run the C2 probe for a creative through a relay.
GET /api/deliverability/matrix Get the deliverability matrix · Get the deliverability matrix for the tenant (baseline / creative / block-rule… #
Ask an LLM
“Which relays can reach which mailbox providers right now?”
“Can I see the deliverability matrix for just one creative?”
Tell an agent
Show the deliverability matrix for relay {relayAccountId}.
Get the relay-by-provider matrix for creative {creativeId} since {freshSince}.
POST /api/deliverability/probe/creative-tune Auto-tune a creative until it reaches the inbox · C3: iteratively tune a creative (remove markers) until it reaches inbox via… #
Ask an LLM
“Can the system rewrite my creative to get past spam filters?”
“How do I iteratively tune an email creative for one relay and provider?”
Tell an agent
Start a creative tuning probe to strip spam markers.
Run the C3 creative tune until it hits the inbox.
POST /api/deliverability/probe/full-pipeline Run the full deliverability probe pipeline · Full pipeline: run C1 across all (relay × provider) and auto-chain C2/C3 via… #
Ask an LLM
“Can I test every relay against every provider and auto-tune creatives in one go?”
“What does the full deliverability pipeline run?”
Tell an agent
Kick off the full deliverability pipeline across all relays and providers.
Run all deliverability probes end to end with auto-chained tuning.
POST /api/deliverability/tuned-variants/{id}/promote Promote a tuned variant to a new creative · Promote a tuned variant to a new Creative row in the tenant #
Ask an LLM
“How do I save a tuned email variant as a real creative I can use?”
“Can a variant produced by tuning become its own creative?”
Tell an agent
Promote tuned variant {id} to a new creative.
Turn tuned variant {id} into a creative.
GET /api/deliverability/probe/{jobId} Check the status of a probe batch · Get aggregate status for a probe batch (jobId) #
Ask an LLM
“Has my deliverability probe batch finished?”
“What's the aggregate result of a probe job so far?”
Tell an agent
Get status of probe batch {jobId}.
Check how deliverability job {jobId} is going.
DELETE /api/deliverability/probe/{jobId} Cancel pending probes in a batch · Cancel pending probes in a batch (in-flight workers no-op safely) #
Ask an LLM
“Can I stop a deliverability probe batch that's still running?”
“What happens to probes already in flight if I cancel a batch?”
Tell an agent destructive · confirm first
Cancel probe batch {jobId}.
Stop the pending probes in deliverability job {jobId}.
GET /api/deliverability/probes List deliverability probe history · List probe history with filters (raw audit-style log) #
Ask an LLM
“Which deliverability probes failed or timed out recently?”
“Can I filter probe history by relay, provider or layer?”
Tell an agent
List probes with status {status} since {since}.
Show probe history for relay {relayAccountId} to provider {provider}.
POST /api/deliverability/block-rules Block a relay from sending to a provider · Create a manual block rule (defaults to category=should_not_send, reason=manual) #
Ask an LLM
“How do I stop a relay from sending to a particular mailbox provider?”
“Can a manual block expire automatically after a set time?”
Tell an agent
Block relay {relayAccountId} from sending to {provider}.
Block relay {relayAccountId} to {provider} until {expiresAtIso} for campaign {campaignId}.
GET /api/deliverability/block-rules List block rules · List block rules for the tenant — active only by default; includeExpired=true… #
Ask an LLM
“Which relay and provider combinations are currently blocked from sending?”
“Can I also see block rules that have already expired?”
Tell an agent
List active block rules for relay {relayAccountId}.
Show block rules for provider {provider} including expired ({includeExpired}).
DELETE /api/deliverability/block-rules/{id} Remove a block rule · Delete a block rule (manual unblock) — narrower scope required #
Ask an LLM
“How do I manually unblock a relay that was blocked for a provider?”
“Can I lift a block only for one campaign?”
Tell an agent destructive · confirm first
Delete block rule {id}.
Unblock rule {id} for campaign {campaignId}.
GET /api/deliverability/tuned-variants List tuned creative variants · List Layer-3 tuned creative variants (optionally filtered by parent creativeId) #
Ask an LLM
“Which tuned versions of my creatives has deliverability tuning produced?”
“Can I see the tuned variants of one parent creative?”
Tell an agent
List all tuned creative variants.
Show tuned variants of creative {creativeId}.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/live-direct-marketing-online:live-direct-marketing-online-deliverability-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

live-direct-marketing-online-deliverability-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: LDM v3 Deliverability API
  description: 'Multi-tenant B2B outreach automation platform. Auth: JWT Bearer (15-min) or tenant API key (ldm_*) managed in CRM Settings → API Keys. All tenant-scoped endpoints require the X-Tenant-Id header.'
  version: 1.0.0
  contact: {}
servers:
- url: https://api.live-direct-marketing.online
  description: Production
- url: https://api.dev.live-direct-marketing.online
  description: Development
- url: http://127.0.0.1:3000
  description: Local
tags:
- name: Deliverability
paths:
  /api/deliverability/probe/relay-reach:
    post:
      operationId: DeliverabilityController_startRelayReach
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '202':
          description: ''
      security:
      - jwt: []
      summary: 'C1: probe whether the given relay can deliver to the given providers (Layer 1…'
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:write
  /api/deliverability/probe/creative-through-relay:
    post:
      operationId: DeliverabilityController_startCreativeThroughRelay
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '202':
          description: ''
      security:
      - jwt: []
      summary: 'C2: probe whether a specific creative reaches inbox through (relay × provider)'
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:write
  /api/deliverability/matrix:
    get:
      operationId: DeliverabilityController_getMatrix
      parameters:
      - name: relayAccountId
        required: false
        in: query
        description: 'optional; default — the tenant''s whole send pool (smtpHost set, status not DISABLED); #512 — NOT isRelay=true, that flag is about probe sources'
        schema:
          type: string
      - name: creativeId
        required: false
        in: query
        description: optional; if set — adds the creative axis to the matrix
        schema:
          type: string
      - name: freshSince
        required: false
        in: query
        description: ISO date; consider probes fresher than this date (default = now - 7d)
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get the deliverability matrix for the tenant (baseline / creative / block-rule…
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:read
  /api/deliverability/probe/creative-tune:
    post:
      operationId: DeliverabilityController_startCreativeTune
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '202':
          description: ''
      security:
      - jwt: []
      summary: 'C3: iteratively tune a creative (remove markers) until it reaches inbox via…'
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:write
  /api/deliverability/probe/full-pipeline:
    post:
      operationId: DeliverabilityController_startFullPipeline
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '202':
          description: ''
      security:
      - jwt: []
      summary: 'Full pipeline: run C1 across all (relay × provider) and auto-chain C2/C3 via…'
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:write
  /api/deliverability/tuned-variants/{id}/promote:
    post:
      operationId: DeliverabilityController_promoteTunedVariant
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Promote a tuned variant to a new Creative row in the tenant
      tags:
      - Deliverability
  /api/deliverability/probe/{jobId}:
    get:
      operationId: DeliverabilityController_getJobStatus
      parameters:
      - name: jobId
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get aggregate status for a probe batch (jobId)
      tags:
      - Deliverability
    delete:
      operationId: DeliverabilityController_cancelProbeJob
      parameters:
      - name: jobId
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Cancel pending probes in a batch (in-flight workers no-op safely)
      tags:
      - Deliverability
  /api/deliverability/probes:
    get:
      operationId: DeliverabilityController_listProbes
      parameters:
      - name: relayAccountId
        required: false
        in: query
        schema:
          type: string
      - name: provider
        required: false
        in: query
        schema:
          type: string
      - name: creativeId
        required: false
        in: query
        schema:
          type: string
      - name: layer
        required: false
        in: query
        description: 1 | 2 | 3
        schema:
          example: 1
          type: number
      - name: status
        required: false
        in: query
        description: pending|sent|placed|failed|timed_out|cancelled
        schema:
          type: string
      - name: since
        required: false
        in: query
        description: ISO startedAt lower bound
        schema:
          type: string
      - name: until
        required: false
        in: query
        description: ISO startedAt upper bound
        schema:
          type: string
      - name: limit
        required: false
        in: query
        description: capped at 200
        schema:
          example: 50
          type: number
      - name: offset
        required: false
        in: query
        schema:
          example: 0
          type: number
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List probe history with filters (raw audit-style log)
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:read
  /api/deliverability/block-rules:
    post:
      operationId: DeliverabilityController_createManualBlockRule
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateManualBlockRuleDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Create a manual block rule (defaults to category=should_not_send, reason=manual)
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:write
    get:
      operationId: DeliverabilityController_listBlockRules
      parameters:
      - name: relayAccountId
        required: false
        in: query
        schema:
          type: string
      - name: provider
        required: false
        in: query
        schema:
          type: string
      - name: category
        required: false
        in: query
        schema:
          enum:
          - cannot_deliver
          - should_not_send
          - marginal
          type: string
      - name: includeExpired
        required: false
        in: query
        description: '#701: include rules whose TTL has already run out (each row carries `active`)'
        schema:
          type: boolean
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List block rules for the tenant — active only by default; includeExpired=true…
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:read
  /api/deliverability/block-rules/{id}:
    delete:
      operationId: DeliverabilityController_deleteBlockRule
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: campaignId
        required: false
        in: query
        description: '#509: attribute the unblock in this campaign''s feed'
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Delete a block rule (manual unblock) — narrower scope required
      tags:
      - Deliverability
  /api/deliverability/tuned-variants:
    get:
      operationId: DeliverabilityController_listTunedVariants
      parameters:
      - name: creativeId
        required: false
        in: query
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List Layer-3 tuned creative variants (optionally filtered by parent creativeId)
      tags:
      - Deliverability
      x-required-scope:
      - deliverability:read
components:
  schemas:
    CreateManualBlockRuleDto:
      type: object
      properties:
        relayAccountId:
          type: string
          description: Relay EmailAccount id (isRelay=true) within the tenant
        provider:
          type: string
          description: Canonical name of the recipient provider. A domain ("gmail.com") or an address ("lead@gmail.com") is accepted and canonicalized; an unknown value → 400.
          example: gmail
        category:
          type: string
          enum:
          - cannot_deliver
          - should_not_send
          - marginal
          default: should_not_send
        reason:
          type: string
          description: Sub-code; defaults to "manual"
          default: manual
        expiresAtIso:
          type:
          - object
          - 'null'
          description: ISO time of auto-release; null/absent = indefinite
        campaignId:
          type: string
          description: '#509: attribute the block to this campaign in the feed'
      required:
      - relayAccountId
      - provider
  securitySchemes:
    jwt:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: JWT access token from /auth/login (Bearer <token>)
    tenant-api-key:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Tenant API key (Bearer ldm_*) for MCP/A2A clients. Issued via CRM Settings → API Keys.
    rpa-service:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Dedicated RPA service key. No tenant API-key or query-key authentication.