REST endpoints for servflo email in ServFlo: 7 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.servflo.ai/api. Every call needs Authorization: Bearer sfk_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
GET /organizations/{organizationId}/messaging/servflo-email
ServFlo email, the managed email provider (the default for new businesses): whether it is the business's email provider and its status, the From and Reply-To emails carry now, the business's own sending domain with the DNS records to add, any pause for bounces or complaints, today's sends against the daily cap and this month's. Read-only.
SERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
active
boolean
The business's email provider is ServFlo email.
status
enum
Ready: emails go out (from the shared address, or the verified own domain). DOMAIN_PENDING / DOMAIN_FAILED: emails go from the shared address meanwhile. PAUSED: emails are skipped until resumed. One of UNAVAILABLE, NOT_ACTIVE, READY, DOMAIN_PENDING, DOMAIN_FAILED, PAUSED.
sharedDomain
string
sharedAddress
string
The business's address on ServFlo's sending domain.
sender
object
sender.from
string
The From header emails carry now.
sender.fromAddress
string
sender.fromName
string or null
sender.replyTo
string or null
sender.replyToSource
enum
Reply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.via
enum
One of shared, domain.
senderName
string or null
replyToSetting
string or null
fromLocalPart
string or null
The address at the own domain (before the @).
domain
object or null
domain.domain
string
domain.status
enum
Pending: waiting for the DKIM records; VERIFIED: emails go from fromAddress; FAILED: SES gave up after 72 hours or the records were removed (remove and add again). One of PENDING, VERIFIED, FAILED.
domain.dkimStatus
string or null
domain.mailFromDomain
string
domain.mailFromStatus
string or null
domain.records
array of object
domain.records[].purpose
enum
DKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].type
enum
One of CNAME, MX, TXT.
domain.records[].name
string
The full host name to add at the domain's DNS host.
domain.records[].value
string
domain.records[].priority
integer
MX priority.
domain.records[].required
boolean
domain.verifiedAt
string (date-time) or null
domain.lastCheckedAt
string (date-time) or null
domain.nextCheckAt
string (date-time) or null
When ServFlo checks again by itself.
domain.lastError
string or null
domain.websiteHostname
string or null
A hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflo
boolean
Always false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddress
string
Where emails come from once the domain is verified.
paused
object or null
paused.at
string (date-time)
paused.reason
string or null
paused.canResume
boolean
False after two automatic pauses in 30 days: ServFlo support resumes it.
rates
object
rates.since
string (date-time)
rates.sent
integer
rates.bounces
integer
rates.complaints
integer
rates.bounceRate
number
rates.complaintRate
number
rates.warn
boolean
Half way to a pause: clean up the address list.
today
object
today.sent
integer
today.cap
integer
Past it, emails wait for the next day.
thisMonth
object
ServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
POST /organizations/{organizationId}/messaging/servflo-email
Customer-visible: makes ServFlo email the business's email provider: emails really go out (through the queue, with consent, quiet hours and unsubscribe) from the shared address (see GET first for the From and Reply-To), or the business's own domain once verified. Replaces another email provider (its stored credentials are removed). Emails count against the plan's monthly email allowance. Idempotent. 409 when ServFlo email is not available on this server.
Permission
channels.manage (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
servfloEmail_enable (toolset settings)
Approval
Over MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in ServFlo). See Approvals.
SERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
active
boolean
The business's email provider is ServFlo email.
status
enum
Ready: emails go out (from the shared address, or the verified own domain). DOMAIN_PENDING / DOMAIN_FAILED: emails go from the shared address meanwhile. PAUSED: emails are skipped until resumed. One of UNAVAILABLE, NOT_ACTIVE, READY, DOMAIN_PENDING, DOMAIN_FAILED, PAUSED.
sharedDomain
string
sharedAddress
string
The business's address on ServFlo's sending domain.
sender
object
sender.from
string
The From header emails carry now.
sender.fromAddress
string
sender.fromName
string or null
sender.replyTo
string or null
sender.replyToSource
enum
Reply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.via
enum
One of shared, domain.
senderName
string or null
replyToSetting
string or null
fromLocalPart
string or null
The address at the own domain (before the @).
domain
object or null
domain.domain
string
domain.status
enum
Pending: waiting for the DKIM records; VERIFIED: emails go from fromAddress; FAILED: SES gave up after 72 hours or the records were removed (remove and add again). One of PENDING, VERIFIED, FAILED.
domain.dkimStatus
string or null
domain.mailFromDomain
string
domain.mailFromStatus
string or null
domain.records
array of object
domain.records[].purpose
enum
DKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].type
enum
One of CNAME, MX, TXT.
domain.records[].name
string
The full host name to add at the domain's DNS host.
domain.records[].value
string
domain.records[].priority
integer
MX priority.
domain.records[].required
boolean
domain.verifiedAt
string (date-time) or null
domain.lastCheckedAt
string (date-time) or null
domain.nextCheckAt
string (date-time) or null
When ServFlo checks again by itself.
domain.lastError
string or null
domain.websiteHostname
string or null
A hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflo
boolean
Always false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddress
string
Where emails come from once the domain is verified.
paused
object or null
paused.at
string (date-time)
paused.reason
string or null
paused.canResume
boolean
False after two automatic pauses in 30 days: ServFlo support resumes it.
rates
object
rates.since
string (date-time)
rates.sent
integer
rates.bounces
integer
rates.complaints
integer
rates.bounceRate
number
rates.complaintRate
number
rates.warn
boolean
Half way to a pause: clean up the address list.
today
object
today.sent
integer
today.cap
integer
Past it, emails wait for the next day.
thisMonth
object
ServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
Changes how emails are signed: the From name (fromName, the messaging settings' sender name; empty = the business name), Reply-To (replyTo, the messaging settings' reply-to; empty = the owner's email) and the address at the business's own domain (fromLocalPart, e.g. office → office@yourdomain.com, used once the domain is verified). Only the fields sent change; applies to the next email.
Permission
channels.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
SERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
active
boolean
The business's email provider is ServFlo email.
status
enum
Ready: emails go out (from the shared address, or the verified own domain). DOMAIN_PENDING / DOMAIN_FAILED: emails go from the shared address meanwhile. PAUSED: emails are skipped until resumed. One of UNAVAILABLE, NOT_ACTIVE, READY, DOMAIN_PENDING, DOMAIN_FAILED, PAUSED.
sharedDomain
string
sharedAddress
string
The business's address on ServFlo's sending domain.
sender
object
sender.from
string
The From header emails carry now.
sender.fromAddress
string
sender.fromName
string or null
sender.replyTo
string or null
sender.replyToSource
enum
Reply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.via
enum
One of shared, domain.
senderName
string or null
replyToSetting
string or null
fromLocalPart
string or null
The address at the own domain (before the @).
domain
object or null
domain.domain
string
domain.status
enum
Pending: waiting for the DKIM records; VERIFIED: emails go from fromAddress; FAILED: SES gave up after 72 hours or the records were removed (remove and add again). One of PENDING, VERIFIED, FAILED.
domain.dkimStatus
string or null
domain.mailFromDomain
string
domain.mailFromStatus
string or null
domain.records
array of object
domain.records[].purpose
enum
DKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].type
enum
One of CNAME, MX, TXT.
domain.records[].name
string
The full host name to add at the domain's DNS host.
domain.records[].value
string
domain.records[].priority
integer
MX priority.
domain.records[].required
boolean
domain.verifiedAt
string (date-time) or null
domain.lastCheckedAt
string (date-time) or null
domain.nextCheckAt
string (date-time) or null
When ServFlo checks again by itself.
domain.lastError
string or null
domain.websiteHostname
string or null
A hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflo
boolean
Always false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddress
string
Where emails come from once the domain is verified.
paused
object or null
paused.at
string (date-time)
paused.reason
string or null
paused.canResume
boolean
False after two automatic pauses in 30 days: ServFlo support resumes it.
rates
object
rates.since
string (date-time)
rates.sent
integer
rates.bounces
integer
rates.complaints
integer
rates.bounceRate
number
rates.complaintRate
number
rates.warn
boolean
Half way to a pause: clean up the address list.
today
object
today.sent
integer
today.cap
integer
Past it, emails wait for the next day.
thisMonth
object
ServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
POST /organizations/{organizationId}/messaging/servflo-email/domain
Starts sending from the business's own domain: ServFlo sets it up in Amazon SES (Easy DKIM, MAIL FROM bounce.{domain}) and answers the DNS records to add at the domain's DNS host (three DKIM CNAMEs required; MAIL FROM MX/TXT and DMARC recommended). Until it is verified, emails keep going from the shared address. ServFlo checks by itself; POST …/domain/check checks now. Idempotent for the same domain; 409 while another domain is set (remove it first) or when another ServFlo business uses the domain.
Permission
channels.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
Pending: waiting for the DKIM records; VERIFIED: emails go from fromAddress; FAILED: SES gave up after 72 hours or the records were removed (remove and add again). One of PENDING, VERIFIED, FAILED.
dkimStatus
string or null
mailFromDomain
string
mailFromStatus
string or null
records
array of object
records[].purpose
enum
DKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
records[].type
enum
One of CNAME, MX, TXT.
records[].name
string
The full host name to add at the domain's DNS host.
records[].value
string
records[].priority
integer
MX priority.
records[].required
boolean
verifiedAt
string (date-time) or null
lastCheckedAt
string (date-time) or null
nextCheckAt
string (date-time) or null
When ServFlo checks again by itself.
lastError
string or null
websiteHostname
string or null
A hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
dnsManagedByServflo
boolean
Always false: ServFlo does not host customers' DNS; the owner adds the records.
fromAddress
string
Where emails come from once the domain is verified.
Destructive, customer-visible: removes the business's own sending domain from ServFlo email (and Amazon SES); emails go from the shared address again. The DNS records can then be deleted. Idempotent.
Permission
channels.manage (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
servfloEmail_removeDomain (toolset settings)
Approval
Over MCP, this tool always waits for your approval in ServFlo. See Approvals.
SERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
active
boolean
The business's email provider is ServFlo email.
status
enum
Ready: emails go out (from the shared address, or the verified own domain). DOMAIN_PENDING / DOMAIN_FAILED: emails go from the shared address meanwhile. PAUSED: emails are skipped until resumed. One of UNAVAILABLE, NOT_ACTIVE, READY, DOMAIN_PENDING, DOMAIN_FAILED, PAUSED.
sharedDomain
string
sharedAddress
string
The business's address on ServFlo's sending domain.
sender
object
sender.from
string
The From header emails carry now.
sender.fromAddress
string
sender.fromName
string or null
sender.replyTo
string or null
sender.replyToSource
enum
Reply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.via
enum
One of shared, domain.
senderName
string or null
replyToSetting
string or null
fromLocalPart
string or null
The address at the own domain (before the @).
domain
object or null
domain.domain
string
domain.status
enum
Pending: waiting for the DKIM records; VERIFIED: emails go from fromAddress; FAILED: SES gave up after 72 hours or the records were removed (remove and add again). One of PENDING, VERIFIED, FAILED.
domain.dkimStatus
string or null
domain.mailFromDomain
string
domain.mailFromStatus
string or null
domain.records
array of object
domain.records[].purpose
enum
DKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].type
enum
One of CNAME, MX, TXT.
domain.records[].name
string
The full host name to add at the domain's DNS host.
domain.records[].value
string
domain.records[].priority
integer
MX priority.
domain.records[].required
boolean
domain.verifiedAt
string (date-time) or null
domain.lastCheckedAt
string (date-time) or null
domain.nextCheckAt
string (date-time) or null
When ServFlo checks again by itself.
domain.lastError
string or null
domain.websiteHostname
string or null
A hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflo
boolean
Always false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddress
string
Where emails come from once the domain is verified.
paused
object or null
paused.at
string (date-time)
paused.reason
string or null
paused.canResume
boolean
False after two automatic pauses in 30 days: ServFlo support resumes it.
rates
object
rates.since
string (date-time)
rates.sent
integer
rates.bounces
integer
rates.complaints
integer
rates.bounceRate
number
rates.complaintRate
number
rates.warn
boolean
Half way to a pause: clean up the address list.
today
object
today.sent
integer
today.cap
integer
Past it, emails wait for the next day.
thisMonth
object
ServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
POST /organizations/{organizationId}/messaging/servflo-email/domain/check
Asks Amazon SES now whether the DNS records of the business's own sending domain are in place, and updates its status (PENDING → VERIFIED, or FAILED). Changes nothing else. 404 without a domain.
Permission
channels.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
Pending: waiting for the DKIM records; VERIFIED: emails go from fromAddress; FAILED: SES gave up after 72 hours or the records were removed (remove and add again). One of PENDING, VERIFIED, FAILED.
dkimStatus
string or null
mailFromDomain
string
mailFromStatus
string or null
records
array of object
records[].purpose
enum
DKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
records[].type
enum
One of CNAME, MX, TXT.
records[].name
string
The full host name to add at the domain's DNS host.
records[].value
string
records[].priority
integer
MX priority.
records[].required
boolean
verifiedAt
string (date-time) or null
lastCheckedAt
string (date-time) or null
nextCheckAt
string (date-time) or null
When ServFlo checks again by itself.
lastError
string or null
websiteHostname
string or null
A hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
dnsManagedByServflo
boolean
Always false: ServFlo does not host customers' DNS; the owner adds the records.
fromAddress
string
Where emails come from once the domain is verified.
POST /organizations/{organizationId}/messaging/servflo-email/resume
Customer-visible: after ServFlo email paused the business for high bounce or complaint rates, sends again (rates are measured afresh from now). Clean up bad addresses first: a second pause within 30 days can only be lifted by ServFlo support (409). Emails skipped while paused are not resent.
Permission
channels.manage (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
servfloEmail_resume (toolset settings)
Approval
Over MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in ServFlo). See Approvals.
SERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
active
boolean
The business's email provider is ServFlo email.
status
enum
Ready: emails go out (from the shared address, or the verified own domain). DOMAIN_PENDING / DOMAIN_FAILED: emails go from the shared address meanwhile. PAUSED: emails are skipped until resumed. One of UNAVAILABLE, NOT_ACTIVE, READY, DOMAIN_PENDING, DOMAIN_FAILED, PAUSED.
sharedDomain
string
sharedAddress
string
The business's address on ServFlo's sending domain.
sender
object
sender.from
string
The From header emails carry now.
sender.fromAddress
string
sender.fromName
string or null
sender.replyTo
string or null
sender.replyToSource
enum
Reply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.via
enum
One of shared, domain.
senderName
string or null
replyToSetting
string or null
fromLocalPart
string or null
The address at the own domain (before the @).
domain
object or null
domain.domain
string
domain.status
enum
Pending: waiting for the DKIM records; VERIFIED: emails go from fromAddress; FAILED: SES gave up after 72 hours or the records were removed (remove and add again). One of PENDING, VERIFIED, FAILED.
domain.dkimStatus
string or null
domain.mailFromDomain
string
domain.mailFromStatus
string or null
domain.records
array of object
domain.records[].purpose
enum
DKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].type
enum
One of CNAME, MX, TXT.
domain.records[].name
string
The full host name to add at the domain's DNS host.
domain.records[].value
string
domain.records[].priority
integer
MX priority.
domain.records[].required
boolean
domain.verifiedAt
string (date-time) or null
domain.lastCheckedAt
string (date-time) or null
domain.nextCheckAt
string (date-time) or null
When ServFlo checks again by itself.
domain.lastError
string or null
domain.websiteHostname
string or null
A hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflo
boolean
Always false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddress
string
Where emails come from once the domain is verified.
paused
object or null
paused.at
string (date-time)
paused.reason
string or null
paused.canResume
boolean
False after two automatic pauses in 30 days: ServFlo support resumes it.
rates
object
rates.since
string (date-time)
rates.sent
integer
rates.bounces
integer
rates.complaints
integer
rates.bounceRate
number
rates.complaintRate
number
rates.warn
boolean
Half way to a pause: clean up the address list.
today
object
today.sent
integer
today.cap
integer
Past it, emails wait for the next day.
thisMonth
object
ServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.