Schemas
AnalyticsBreakdownRow
Values of the selected metrics. Rates are fractions; null when not available.
Numerators and denominators of the selected rate metrics.
Metric values for the comparison period.
first_seenFor a row grouped by smtp_response_group: when a deferral or bounce of the team first returned this reply within the last 90 days, in any project and regardless of the query window and filters.
last_seenFor a row grouped by smtp_response_group: when a deferral or bounce of the team last returned this reply, in any project and regardless of the query window and filters.
AnalyticsComparisonValues
Values of the selected metrics. Rates are fractions; null when not available.
Numerators and denominators of the selected rate metrics.
AnalyticsDimension
Decision Table
| Variant | Matching Criteria |
|---|---|
| type = string | |
| type = string |
AnalyticsFilter
A catalogue dimension or tag:
operatoreq requires one value; in and not_in require one or more values; is_null and is_not_null require no values.
valuesString values to match. Supply one for eq, one or more for in/not_in, and none for null checks. project_id and route_id take UUIDs; smtp_code takes a three-digit reply code.
AnalyticsGroupDimension
Decision Table
| Variant | Matching Criteria |
|---|---|
| type = string | |
| type = string |
AnalyticsMeta
time_basistimezoneintervalA time-series bucket size.
fromStart of the window read, aligned down to the alignment grain.
toExclusive end of the window, aligned up to the alignment grain.
effective_toExclusive end of the counted data: to, or generated_at while the window is ongoing.
alignmentGrain the requested boundaries were widened to: whole UTC hours, or whole UTC days for personal-data dimensions. Counts cover exactly from to effective_to.
generated_atavailable_sincepartialongoingcollection_completenesslast_ingested_atLatest ingestion among matching rollup rows. This is not a completeness watermark.
metric_definition_versionranked_group_limitAnalyticsMetric
A metric from the analytics catalogue.
AnalyticsMetricChange
absoluterelativepercentage_pointsAnalyticsMetricValues
acceptedprocessedsuppressedpolicy_rejectedapplication_failedmta_acceptedcanceledmessagesdeliveredbouncedsoft_bouncedadministratively_bounceddeferred_recipientsdeferred_eventsdelivery_attemptsattempted_recipientstransport_outcome_recipientseffective_deliveredopen_tracked_deliveredclick_tracked_deliveredout_of_band_bounced_recipientsout_of_band_bounce_eventscomplainedunsubscribedhuman_openshuman_opens_eventshuman_clickshuman_clicks_eventsmachine_opensmachine_opens_eventsmachine_clicksmachine_clicks_eventsprivacy_opensprivacy_opens_eventsprivacy_clicksprivacy_clicks_eventsbot_opensbot_opens_eventsbot_clicksbot_clicks_eventsscanner_opensscanner_opens_eventsscanner_clicksscanner_clicks_eventsobserved_opensobserved_opens_eventsobserved_clicksobserved_clicks_eventsdelivery_rateeffective_delivery_ratebounce_ratedeferral_ratecomplaint_ratehuman_open_ratehuman_click_rateprocessing_latency_p50_msprocessing_latency_p95_msprocessing_latency_p99_msprocessing_latency_samplesdelivery_latency_p50_msdelivery_latency_p95_msdelivery_latency_p99_msdelivery_latency_samplestotal_latency_p50_mstotal_latency_p95_mstotal_latency_p99_mstotal_latency_samplesAnalyticsPagination
total_groupsreturned_groupsnext_cursortruncatedAnalyticsQuery
metricsEvery count is attributed to the time its event occurred, so a message accepted in one bucket can be delivered in the next. Delivery outcomes happen once per recipient, so their event counts equal recipient counts. messages counts accepted messages; mta_accepted and attempted_recipients count recipients the MTA received. Under provider, infrastructure and diagnosis dimensions, sent/attempted count delivery attempts: mta_accepted and attempted_recipients equal delivery_attempts when a query groups or filters by provider_family, provider_subtype, dedicated_ip, dedicated_pool_id, infrastructure_state or an SMTP diagnosis dimension, because the MTA assigns those values at the delivery attempt; the other lifecycle metrics return null there, and a breakdown by those dimensions omits the unknown group; provider_subtype is null for providers without subtypes. deferred_recipients counts recipients delayed on the first attempt; deferred_events counts every deferral. delivery_attempts counts delivered, deferred and in-band bounced attempts. transport_outcome_recipients = delivered + bounced + soft_bounced. effective_delivered = delivered minus out-of-band bounces in the same period and can be negative for a single bucket or group. Engagement counts per class are unique per recipient, counted when the first qualifying open or click occurred; _events variants count every observation. Rates are fractions; zero denominators return null, and event-time rates can exceed 1. Latency percentiles are milliseconds read from log-scale histograms (error below 15 percent); _samples returns the sample count. Personal message dimensions support daily buckets over the message retention period. delivery_rate = delivered / transport_outcome_recipients. effective_delivery_rate = effective_delivered / transport_outcome_recipients. bounce_rate = bounced / transport_outcome_recipients. deferral_rate = deferred_events / delivery_attempts. complaint_rate = complained / delivered. human_open_rate = human_opens / open_tracked_delivered. human_click_rate = human_clicks / click_tracked_delivered.
fromInclusive calendar date or RFC 3339 instant. Default: 30 calendar days including today. Instants are aligned outward to whole UTC hours, or whole UTC days when from_address or subject is grouped or filtered; meta.from, meta.to, meta.effective_to and meta.alignment report the exact window used.
toInclusive calendar date or exclusive RFC 3339 instant. Maximum window: 90 days. Instants are aligned outward to whole UTC hours, or whole UTC days when from_address or subject is grouped or filtered; meta.from, meta.to, meta.effective_to and meta.alignment report the exact window used.
timezoneIANA time zone. Default: UTC.
includeResult sections. Default: summary only. breakdown requires group_by, and group_by requires breakdown.
Up to three grouping dimensions for breakdown rows. Requires breakdown in include. Default: no grouping.
Dimension filters combined with AND. Default: no filters. Each metric must support every filter dimension.
intervalTime-series bucket size: an hour, a calendar day, or a week from Monday, in the query time zone. Default: day.
compareCompares with the preceding period of the same duration. Omit for no comparison.
include_trendIncludes trends for breakdown rows. Requires breakdown and group_by. Default: false.
Optional breakdown sort. Omit to use the default row order.
limitMaximum breakdown rows per page. Default: 50; maximum: 200.
cursorRepeat the same query with this cursor. It expires within 60 seconds.
AnalyticsRateBase
numeratordenominatorAnalyticsRateBases
Numerator and denominator of a rate metric.
Numerator and denominator of a rate metric.
Numerator and denominator of a rate metric.
Numerator and denominator of a rate metric.
Numerator and denominator of a rate metric.
Numerator and denominator of a rate metric.
Numerator and denominator of a rate metric.
AnalyticsResponse
The selected result sections.
The time window and data availability of the results.
Breakdown pagination.
AnalyticsSort
metricMetric used to sort breakdown rows. Must also be selected in metrics.
directionAscending or descending order for the selected sort metric.
AnalyticsSummary
Values of the selected metrics. Rates are fractions; null when not available.
Numerators and denominators of the selected rate metrics.
Metric values for the comparison period.
AnalyticsTimeSeriesPoint
Values of the selected metrics. Rates are fractions; null when not available.
Numerators and denominators of the selected rate metrics.
fromtoavailablepartialMetric values for the comparison period.
BlockedFileTypes
extensionsBlocked file extensions, without the leading dot
mime_typesBlocked MIME types
CreateTeamInviteData
emailrole_idCreateTeamRoleData
namepermissionsdescriptionDnsRecordStatus
active The record is active and verified. |
failed The record could not be verified. |
pending The record is pending verification. |
DnsRecordVerificationFailureResponse
messageHuman-readable verification error
DnsVerificationError
record_idThe DNS record ID
errorDnsVerificationFailedRecord
idThe DNS record ID
typenameThe record hostname
DnsVerificationFailureResponse
messageHuman-readable verification result
Required records that did not pass verification
Verification errors of every failed record, including recommended records
failed_countThe number of required records that failed
total_countThe number of required records
DnsVerificationResultData
dmarc_spf_alignment_issueverifiederrorexpected_recordfound_recorddmarc_policy_domainDnsVerificationSuccessResponse
messageHuman-readable verification result
Recommended records that did not pass verification. They do not block verification
DomainData
iddomaindkim_moderotation_readystatus_changed_atcreated_atDomainDnsRecordData
idtypehostnamefqdncontentstatusactive The record is active and verified. |
failed The record could not be verified. |
pending The record is pending verification. |
purposeverification_scoperequired_for_verificationverified_atlast_checked_atDomainListData
iddomainstatusverified The domain is active and verified. |
partially_verified Some DNS records of the domain could not be verified. |
pending_verification The domain is new and verification is pending. |
failed_verification The domain verification failed. |
dkim_modestatus_changed_atcreated_atDomainMutationResponse
messageHuman-readable confirmation
DomainStatus
verified The domain is active and verified. |
partially_verified Some DNS records of the domain could not be verified. |
pending_verification The domain is new and verification is pending. |
failed_verification The domain verification failed. |
DuplicateTeamRoleData
namedescriptionInboundDomainVerification
verifiedmessageHuman-readable verification result
expected_mx_recordsThe MX records the inbound domain must publish
found_mx_recordsThe MX records found for the inbound domain
InboundDomainVerificationResponse
Whether the inbound domain MX records point to Lettermint. The MX record lists are only returned when verification fails.
MessageAttachmentData
sizefilenamecontent_idcontent_typeMessageData
idtypestatusdelivery_modestatus_changed_atscheduled_attagfrom_emailfrom_namereply_tosubjectroute_idcreated_atretained_untilUntil when the message is available. Null while a scheduled message waits to be sent, because its retention period starts when it is sent
resent_from_message_idThe ID of the message this message resent. Null when it is not a resend
spam_scoreOverall spam assessment score. Scores below 5 are clean, 5 through 10 indicate potential spam, scores above 10 and below 15 are likely spam, and 15 or higher is definite spam. Null means no assessment is available. Available on plans with Spam Insights
Detailed rules that contributed to the spam assessment. Available on plans with Spam Insights in individual-message responses
MessageEventData
message_ideventtagEvent-specific metadata. For opened and clicked events, reason_codes and engagement.reason_codes list broad categories behind the bot classification: privacy_proxy, image_proxy, link_protection, known_bot, security_network, timing, link_pattern, request_shape, unconfirmed, confirmed, sandbox or other. New categories can be added. Use classification and counts_for_metrics for decisions
timestampMessageEventType
MessageListData
idtypestatusdelivery_modescheduled_atfrom_emailfrom_namesubjectreply_totagstatus_changed_atcreated_atretained_untilUntil when the message is available. Null while a scheduled message waits to be sent, because its retention period starts when it is sent
spam_scoreOverall spam assessment score. Scores below 5 are clean, 5 through 10 indicate potential spam, scores above 10 and below 15 are likely spam, and 15 or higher is definite spam. Null means no assessment is available. Available on plans with Spam Insights
MessageResponse
messageHuman-readable confirmation
MessageStatsData
messages_transactionalmessages_broadcastmessages_inbounddeliverabilityMessageStatus
PendingSendMailResponse
message_idstatussandboxPresent when the project uses Sandbox delivery
sandbox_resultThe simulated delivery result. Present when the project uses Sandbox delivery
ProcessInboundMessageResponse
A quarantined inbound message that was queued for webhook delivery.
ProcessInboundMessageResult
message_idstatuswebhook_target_countThe number of webhooks the message is delivered to
ProjectApiToken
idproject_idnameshort_tokenWhether the token uses the shorter format for devices that limit password length
allowed_ipsIP addresses and ranges allowed to use the token. Empty means any address
last_used_atcreated_atProjectApiTokenCreatedResponse
A new Project API token with its value, which is only returned once.
messageHuman-readable confirmation
ProjectApiTokenSecret
idproject_idnameshort_tokenWhether the token uses the shorter format for devices that limit password length
allowed_ipsIP addresses and ranges allowed to use the token. Empty means any address
last_used_atcreated_attokenThe Project API token. It is only returned once. Use it as the API token and as the SMTP password
ProjectCreatedData
messageapi_tokenProjectData
idnamedelivery_modesmtp_enabledredact_email_contentdefault_route_idtoken_generated_attoken_last_used_attoken_last_used_ipcreated_atupdated_atProjectListData
idnamedelivery_modesmtp_enabledroutes_countdomains_countcreated_atupdated_atProjectMutationResponse
messageHuman-readable confirmation
RbacConflictCode
RbacPermission
ReportForwardingRequest
destination^[\x21-\x7e]+$ · requiredReportForwardingResource
destinationverifiedverified_atResendMessageRequest
recipientsRecipients of the original message to resend to. Omit to resend to every original recipient.
RetryWebhookDeliveryResponse
messageHuman-readable confirmation
delivery_idThe ID of the delivery that is retried
RotateProjectTokenResponse
new_tokenThe new Project API token. It is only returned once
messageHuman-readable confirmation
RouteData
idproject_idslugnameroute_typeis_defaultcreated_atupdated_atinbound_addressPermanent compatibility address for this inbound route (<route-uuid-without-hyphens>@inbound.lettermint.co). It keeps working alongside the catch-all route domain
inbound_route_domainCatch-all receiving domain for this inbound route. Mail to any address at this domain reaches the route. Null for non-inbound routes
inbound_mx_hostnameinbound_domaininbound_domain_verified_atinbound_spam_thresholdattachment_deliverysettingsRoute settings available for this route type and team feature access
webhooks_countsuppressed_recipients_countRouteListData
idslugnameroute_typeis_defaultwebhooks_countsuppressed_recipients_countcreated_atupdated_atRouteMutationResponse
messageHuman-readable confirmation
RouteStatisticData
datesent_countdelivered_countopened_countclicked_counthard_bounce_countspam_complaint_countinbound_received_counteffective_opened_countmachine_opened_countmachine_clicked_countobserved_opened_counthuman_opened_countprivacy_opened_countSandboxResult
ScheduledMessage
message_idscheduled_atThe scheduled delivery time in ISO 8601 format
SmtpCredentials
hostportsPort 465 uses implicit TLS, port 587 uses STARTTLS
usernameSpamSymbol
namescoreoptionsdescriptionStatsDailyData
datesentdeliveredhard_bouncedspam_complaintsopenedNull when tracking is not enabled for this context
clickedNull when tracking is not enabled for this context
effective_openedmachine_openedmachine_clickedobserved_openedHuman opens plus unresolved privacy-proxy opens
human_openedprivacy_openedStatsData
fromtoStatsTotalsData
sentdeliveredhard_bouncedspam_complaintsopenedNull when tracking is not enabled for this context
clickedNull when tracking is not enabled for this context
effective_openedmachine_openedmachine_clickedobserved_openedHuman opens plus unresolved privacy-proxy opens
human_openedprivacy_openedStatsTypeData
senthard_bouncedspam_complaintsStoreDomainData
domain^(?!:\/\/)(?=.{1,255… · requiredStoreProjectApiTokenData
nameA name that identifies where the token is used
short_tokenCreates a shorter token for devices that limit password length
StoreProjectData
namesmtp_enableddelivery_modeinitial_routesshort_tokenredact_email_contentStoreRouteData
nameroute_typesluginbound_domaininbound_spam_thresholdStoreSuppressionData
reasonReason that the recipient is suppressed. The disposable_email reason is reserved for route policies.
scopeWhere the suppression applies. The global and subscription_group scopes cannot be created through the API.
emailemailsroute_idproject_iddomainDomain to suppress. Blocks every address at this exact domain, so subdomains need their own entry. Domains accept the manual and hard_bounce reasons
domainsDomains to suppress. Each blocks every address at that exact domain, so subdomains need their own entry. Domains accept the manual and hard_bounce reasons
StoreTeamApiTokenData
nameA name that identifies where the token is used
abilitiesAbilities for the new token. Each one must also be held by the token that makes the request
expires_atWhen the token expires, as an ISO 8601 date-time. Defaults to, and can't be later than, the expiry of the token that makes the request
StoreWebhookData
nameurleventsenabledinclude_machine_eventsproject_idsroute_idsroute_idSuppressedRecipientData
idtypevaluereasonReason that the recipient is suppressed.
scopeWhere the suppression applies.
applies_toMail category blocked by the suppression. all blocks transactional and broadcast mail. broadcast blocks broadcast mail only.
project_idroute_idcreated_atSuppressionAppliesTo
Mail category blocked by the suppression. all blocks transactional and broadcast mail. broadcast blocks broadcast mail only.
SuppressionCreateReason
Reason that the recipient is suppressed. The disposable_email reason is reserved for route policies.
SuppressionCreateScope
Where the suppression applies. The global and subscription_group scopes cannot be created through the API.
SuppressionDeletedResponse
successstatusmessageHuman-readable confirmation
confidenceConfidence of the automated removal assessment, when one ran
SuppressionReason
Reason that the recipient is suppressed.
SuppressionReviewResponse
successstatusmessageHuman-readable confirmation
ticket_identifierThe identifier of the support ticket that reviews the removal
confidenceConfidence of the automated removal assessment, when one ran
SuppressionScope
Where the suppression applies.
SuppressionSourceMessageData
idavailablesubjectcreated_atSuppressionStoreResponse
messageHuman-readable summary
The addresses and domains that were added and those that were already suppressed.
SuppressionStoreResult
createdskippedTeamApiToken
idnameabilitiesThe token's abilities. * grants every ability
allowed_ipsIP addresses and ranges allowed to use the token. Empty means any address
expires_atlast_used_atcreated_atTeamApiTokenCreatedResponse
A new Team API token with its value, which is only returned once.
messageHuman-readable confirmation
TeamApiTokenSecret
idnameabilitiesThe token's abilities. * grants every ability
allowed_ipsIP addresses and ranges allowed to use the token, copied from the token that created it. Empty means any address
expires_atlast_used_atcreated_attokenThe Team API token. It is only returned once
TeamData
idnametypeplanincluded_volumeNumber of emails included in the team's monthly plan
verified_atcreated_atfeaturesdomains_countprojects_countmembers_counttierDeprecated alias for included_volume
TeamInviteData
idemailcreated_atTeamMemberData
idnameemailjoined_atTeamMemberProjectAccessData
scopeTeamMutationResponse
messageHuman-readable confirmation
TeamRoleData
idnamedescriptionpermissionsassignableTeamRoleListResponse
TeamUsageDetailData
TeamUsagePeriodData
usagelast_incremented_atperiod_startperiod_endTestWebhookResponse
messageHuman-readable confirmation
delivery_idThe ID of the queued test delivery
UpdateProjectData
namesmtp_enabledredact_email_contentdefault_route_idUpdateRouteData
nameinbound_domaininbound_spam_thresholdUpdateRouteInboundSettingsData
inbound_domainCustom receiving domain for inbound routes, such as support.example.com or *.m.example.com. Address patterns such as @.m.example.com are normalized
inbound_spam_thresholdInbound spam threshold for inbound routes. Higher values are more permissive
UpdateRouteSettingsData
track_opensEnable open tracking for transactional and broadcast routes. Requires email tracking access
track_clicksEnable click tracking for transactional and broadcast routes. Requires email tracking access
generate_plaintext_fallbackOpt in to generated plaintext fallbacks for HTML-only outbound messages on transactional and broadcast routes. Customer-provided plaintext is always preserved
suppress_auto_respondersAdd outbound headers that suppress auto-responders for transactional and broadcast routes. Customer-provided header values are preserved
suppress_disposable_recipientsSkip disposable email recipients for transactional and broadcast routes. This check applies to each message and does not add recipients to suppression lists
disable_hosted_unsubscribeDisable Lettermint-hosted unsubscribe link injection for broadcast routes. Available only when enabled for the team
redact_email_contentRedact email content in the dashboard for this route. Requires email redaction access
UpdateTeamApiTokenData
nameA name that identifies where the token is used
abilitiesThe token's complete list of abilities. Replaces its current abilities. Each one must also be held by the token that makes the request
UpdateTeamInviteData
emailrole_idUpdateTeamRoleData
namepermissionsdescriptionUpdateWebhookData
nameurleventsenabledinclude_machine_eventsdelivery_mode_filterscopeproject_idsroute_idsroute_idValidationError
messageErrors overview.
A detailed description of each field that failed validation.
WebhookData
idscopeproject_idsroute_idsnameurlhas_basic_autheventsenabledinclude_machine_eventsdelivery_mode_filterlast_called_atcreated_atupdated_atroute_idUse route_ids.
WebhookDeliveryData
idwebhook_idevent_typesource_scopesource_project_idsource_route_idstatussandboxpayload_retainedFalse when only the event type, message ID and Sandbox flag of the payload are stored, because the message is kept 7 days or less. Such a delivery cannot be retried
attempt_numberhttp_status_codeduration_msdelivered_attimestampnext_retry_atWhen the next automatic retry is due. Null when none is scheduled
payloadOmitted when the user cannot view the delivery's content
response_bodyOmitted when the user cannot view the delivery's content
response_headersOmitted when the user cannot view the delivery's content
error_messageOmitted when the user cannot view the delivery's content
WebhookDeliveryListData
idwebhook_idevent_typesource_scopesource_project_idsource_route_idstatussandboxpayload_retainedFalse when only the event type, message ID and Sandbox flag of the payload are stored, because the message is kept 7 days or less. Such a delivery cannot be retried
attempt_numberhttp_status_codeduration_msdelivered_atcreated_atnext_retry_atWhen the next automatic retry is due. Null when none is scheduled
WebhookDeliveryStatus
WebhookEvent
WebhookListData
idscopeproject_idsroute_idsnameurlhas_basic_autheventsenableddelivery_mode_filterlast_called_atcreated_atupdated_atroute_idUse route_ids.
WebhookMutationResponse
messageHuman-readable confirmation
WebhookSecretData
idscopeproject_idsroute_idsnameurlhas_basic_autheventsenabledinclude_machine_eventsdelivery_mode_filtersecretlast_called_atcreated_atupdated_atroute_idUse route_ids.
WebhookSecretResponse
messageHuman-readable confirmation