Billing — delivery, preparation and your own content
Delivery billing is not a folder observation
The hourly billing sweep selects campaign recipients with stage=SENT, sent_at at least 24 hours old and no recorded BOUNCED final status. It charges once per recipient. A later bounce refunds the delivery amount actually charged. The billing event does not inspect a final recipient’s mailbox or require an Inbox result from that mailbox. See Deliverability testing for what seed tests measure.
Current rates and content source
The public registry is GET /api/public/pricing. At the 2026-09-06 snapshot, rates in USD are: inbox_placement 0.015; inbox_placement_byoc 0.005; creative_approval 5; platform_render 0; audit 0; audit_failed 0.0005; send 0. These are a dated example, not a fixed quote. Always use the registry or your effective workspace prices for a new calculation.
The lower delivery operation is selected by recipient contentSource=byoc: BYOC = bring your own finished content. Connecting your own sending account does not by itself select this price. API, MCP and web UI share the same operation registry; there is no separate web UI rate in this registry.
Render modes
Set renderMode at campaign create (PLATFORM | BYOC). The mode locks as soon as any recipient passes SCREENED. BYOC is incompatible with canvas multi-step flows (v1). In BYOC the platform never spends its AI on your emails: the render cron skips the campaign, prepare only audits content you already submitted, and recipients/rerender just resets rows to SCREENED awaiting your resubmission.
BYOC intake
Submission itself is free. Limits: ≤100 items per call, subject ≤998 chars, bodyHtml ≤256 KB, bodyText ≤64 KB. Content must be FINISHED text — unresolved {{placeholders}} are rejected per-item at intake. Rows must be in stage SCREENED.
curl -s -X POST "https://api.live-direct-marketing.online/api/campaigns/$CAMPAIGN/recipients/content" \
-H "Authorization: Bearer $LDM_KEY" -H "Content-Type: application/json" \
-d '{
"items": [
{ "recipientId": "cmx...", "subject": "Hi Anna", "bodyHtml": "<p>Finished personalised email</p>" }
]
}'
# → { "accepted": 1, "rejected": [], "awaitingAudit": 1 }Content audits and approval are separate operations
- A content audit checks the prepared message. It is not an observation of a mailbox folder. A chargeable pass uses
audit; a chargeable rejection usesaudit_failed. Free validation/preflight failures are not automatically paid audit attempts. audit_failedis independently priced. Do not calculate it as 50% ofaudit: the current public successful-audit price is zero while the failed-audit price is nonzero. A new chargeable attempt may incur another charge, even if the message is never sent.platform_renderapplies to platform preparation and any repeat preparation at the configured rate. BYOC intake is free; any external model or data-provider costs you incur are outside this LDM calculation.sendis charged separately when the campaign queues a message for sending. It is currently zero in the public registry. The later delivery charge is a different event.creative_approvalapplies to a non-system approval of a mailing task, including approval by an authorised agent. Automaticsystem:*approval is exempt. Check the task approval step before including this charge; it is not automatically incurred for every prepared message.
Worked example: 10 drafts, 2 revisions, 9 billable deliveries
Illustration at the dated public rates above, using platform content and no workspace overrides. Prepare 10 messages. Two fail the chargeable audit; prepare those two again, and both pass. Send all 10. One bounces before delivery billing; nine remain billable after 24 hours.
- 12 preparations × $0 = $0.
- 2 failed audits × $0.0005 + 10 successful audits × $0 = $0.001.
- 10 send operations × $0 = $0.
- 9 billable deliveries × $0.015 = $0.135. The early bounce has no delivery charge.
- Total campaign operations: $0.136. If you additionally perform one paid task / creative approval, add $5: $5.136.
- If one of the nine later bounces, refund the $0.015 actually charged for it. Earlier preparation, audit or approval costs remain. Test copies and external provider costs are not estimated by this example.
Balance, journal and top-ups
Use GET /api/billing/balance (scope billing:read) for effective prices and topUpUrl. Use GET /api/billing/ledger for itemised charges, credits and refunds, including background operations. Zero-priced operations do not debit the balance and do not create charge entries. Paid responses expose _billing metadata; consult the journal for the complete history.
curl https://api.live-direct-marketing.online/api/billing/balance \
-H "Authorization: Bearer $LDM_KEY"
curl https://api.live-direct-marketing.online/api/billing/ledger \
-H "Authorization: Bearer $LDM_KEY"The payment mode is currently demo/manual: no connected payment gateway. Request a top-up through support in the web workspace; customers cannot top up through API or MCP. On insufficient funds, a paid operation can return 402 insufficient_balance; the background campaign can pause. Follow the returned topUpUrl and inspect campaign status before resuming.