Mursil Documentation

Reference

Routes below are on Mursil.Server. The versioned group is /api/v1/mursil. Preference and tracking routes are on the site root.

Roles and scopes

Claim roleNotes
SystemAdminPlatform owner. SuperAdmin is an alias.
TenantOwnerCan create providers and applications.
TenantAdminTenant administration. Included in transactional send.
TemplateEditorTemplate catalog and versions.
OperatorDelivery actions, audit, provider pause.
ViewerDashboards.

Scopes: mursil.messages.send, mursil.templates.manage. Audience: mursil-api.

Recipient routes

Method and pathAuth
GET /p/{token}Anonymous. Signed preference center.
POST /p/{token}Anonymous. Signed preference update.
GET /t/o/{token}Anonymous. Open pixel.
GET /t/c/{token}Anonymous. Signed click redirect.
POST /api/v1/mursil/preferences/one-clickAnonymous.

Send and delivery

Method and pathPurpose
POST /messages/emailTemplate send.
POST /messages/email/batchBatch send.
POST /messages/email/testTest-send.
GET /messages/statusRedacted status.
POST /messages/{messageRequestId}/cancelCancel scheduled.
POST /messages/{messageRequestId}/engagementRecord engagement.
POST /messages/repliesInbound reply. No mailbox.
GET /messages/deliveries/triageFailure list.
GET /messages/deliveries/{deliveryId}One delivery.
POST /messages/deliveries/{deliveryId}/retryRetry.
POST /messages/deliveries/{deliveryId}/suppressSuppress.
POST /messages/deliveries/{deliveryId}/resolveResolve.

Prefix every row in this table and the tables below with /api/v1/mursil unless the path already starts with /p/ or /t/.

Templates

Method and pathPurpose
GET /templatesList.
POST /templatesCreate.
GET /templates/{templateId}One template.
POST /templates/{templateId}/versionsNew draft version.
POST /templates/{templateId}/versions/{versionId}/submit-reviewSubmit for review.
POST /templates/{templateId}/versions/{versionId}/approveApprove.
POST /templates/{templateId}/versions/{versionId}/publishPublish.
POST /templates/{templateId}/versions/{versionId}/pausePause.
POST /templates/{templateId}/versions/{versionId}/resumeResume.
PUT /templates/{templateId}/versions/{versionId}/brandingBrand binding.
GET /templates/{templateId}/diffVersion diff.
GET /templates/{templateId}/locale-coverageLocale coverage.
POST /templates/{templateId}/locale-previewSide-by-side locale preview.
POST /templates/previewPreview.
POST /templates/lintLint.
POST /templates/catalog/importImport starter catalog.
GET /templates/{templateId}/bundleExport bundle.
POST /templates/bundlesImport bundle.
POST /templates/pushPush a draft template from the integration package.

Brand, provider, domain, application

Method and pathPurpose
GET /brand-profilesList.
POST /brand-profilesCreate.
PUT /brand-profiles/{brandProfileId}Update.
POST /brand-profiles/{brandProfileId}/activateActivate.
GET /providersList connections.
GET /providers/kindsList kinds.
POST /providersCreate connection.
POST /providers/{providerConnectionId}/pausePause.
POST /providers/{providerConnectionId}/resumeResume.
POST /providers/{providerConnectionId}/routingRouting policy.
POST /providers/{providerConnectionId}/eventsSigned provider callback.
GET /sender-domainsList.
POST /sender-domainsCreate.
GET /sender-domains/{senderDomainId}One domain.
GET /sender-domains/{senderDomainId}/lookupDNS lookup.
POST /sender-domains/{senderDomainId}/verifyVerify.
POST /applicationsRegister an application.
GET /applications/controlsSandbox, rate, default provider.
POST /applications/sandboxSet sandbox.
POST /applications/rate-limitSet sends per minute.
POST /applications/default-providerSet default connection.

Operations

Method and pathPurpose
GET /dashboardSummary.
GET /dashboard/watchlistWatch list.
GET /dashboard/operator-action-queueOperator queue.
GET /dashboard/delivery-healthDelivery health.
GET /dashboard/recipient-domain-failuresFailures by domain.
GET /auditAudit records.
GET /suppressions/exportExport.
POST /suppressions/importImport hashed rows.
POST /tenants/engagement-trackingTracking switch.
POST /retention/rendered-content/purgePurge rendered content past retention.

Health for the process is GET /health on the server port, not under /api/v1/mursil.

Glossary

TermMeaning
Template keyStable id callers send. Not the display name.
Published versionThe immutable content production send resolves.
Brand profileVisual identity applied at render time.
Provider connectionA configured transport plus a secret reference.
Sender domainFrom-domain verified with SPF, DKIM, and DMARC.
Idempotency keyCaller key that makes a repeated send the same message request.
Dead letterA delivery that exhausted retries.
SuppressionA hashed recipient the platform will not mail for a scope.
OutboxTransactional store of integration events. Delivery to subscribers is outside Mursil.
Dev issuerLocal-only token mint. Not part of a published image.
Multi-tenancy switchMursil:MultiTenancy. False until one deployment serves many organizations.