DevelopersAPI referenceEngagement

Servflo email API

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.

OperationEndpointRisk
Get ServFlo emailGET /organizations/{organizationId}/messaging/servflo-emailread
Use ServFlo emailPOST /organizations/{organizationId}/messaging/servflo-emailsensitive
Set the ServFlo email senderPATCH /organizations/{organizationId}/messaging/servflo-email/senderwrite
Add your own sending domainPOST /organizations/{organizationId}/messaging/servflo-email/domainwrite
Remove the sending domainDELETE /organizations/{organizationId}/messaging/servflo-email/domainsensitive
Check the sending domain nowPOST /organizations/{organizationId}/messaging/servflo-email/domain/checkwrite
Resume ServFlo email after a pausePOST /organizations/{organizationId}/messaging/servflo-email/resumesensitive

Get ServFlo email

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.

Permissionchannels.manage (Owner, Admin)
Riskread, OAuth scope servflo.read. Read: reads only.
MCP toolservfloEmail_get (toolset settings)

Example

curl "https://app.servflo.ai/api/organizations/$ORGANIZATION_ID/messaging/servflo-email" \
  -H "Authorization: Bearer $SERVFLO_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
availablebooleanServFlo email can be used on this server.
unavailableReasonstring or null
modeenumSERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
activebooleanThe business's email provider is ServFlo email.
statusenumReady: 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.
sharedDomainstring
sharedAddressstringThe business's address on ServFlo's sending domain.
senderobject
sender.fromstringThe From header emails carry now.
sender.fromAddressstring
sender.fromNamestring or null
sender.replyTostring or null
sender.replyToSourceenumReply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.viaenumOne of shared, domain.
senderNamestring or null
replyToSettingstring or null
fromLocalPartstring or nullThe address at the own domain (before the @).
domainobject or null
domain.domainstring
domain.statusenumPending: 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.dkimStatusstring or null
domain.mailFromDomainstring
domain.mailFromStatusstring or null
domain.recordsarray of object
domain.records[].purposeenumDKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].typeenumOne of CNAME, MX, TXT.
domain.records[].namestringThe full host name to add at the domain's DNS host.
domain.records[].valuestring
domain.records[].priorityintegerMX priority.
domain.records[].requiredboolean
domain.verifiedAtstring (date-time) or null
domain.lastCheckedAtstring (date-time) or null
domain.nextCheckAtstring (date-time) or nullWhen ServFlo checks again by itself.
domain.lastErrorstring or null
domain.websiteHostnamestring or nullA hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflobooleanAlways false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddressstringWhere emails come from once the domain is verified.
pausedobject or null
paused.atstring (date-time)
paused.reasonstring or null
paused.canResumebooleanFalse after two automatic pauses in 30 days: ServFlo support resumes it.
ratesobject
rates.sincestring (date-time)
rates.sentinteger
rates.bouncesinteger
rates.complaintsinteger
rates.bounceRatenumber
rates.complaintRatenumber
rates.warnbooleanHalf way to a pause: clean up the address list.
todayobject
today.sentinteger
today.capintegerPast it, emails wait for the next day.
thisMonthobjectServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
thisMonth.sentinteger

Use ServFlo email

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.

Permissionchannels.manage (Owner, Admin)
Risksensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolservfloEmail_enable (toolset settings)
ApprovalOver MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in ServFlo). See Approvals.

Example

curl -X POST "https://app.servflo.ai/api/organizations/$ORGANIZATION_ID/messaging/servflo-email" \
  -H "Authorization: Bearer $SERVFLO_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
availablebooleanServFlo email can be used on this server.
unavailableReasonstring or null
modeenumSERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
activebooleanThe business's email provider is ServFlo email.
statusenumReady: 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.
sharedDomainstring
sharedAddressstringThe business's address on ServFlo's sending domain.
senderobject
sender.fromstringThe From header emails carry now.
sender.fromAddressstring
sender.fromNamestring or null
sender.replyTostring or null
sender.replyToSourceenumReply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.viaenumOne of shared, domain.
senderNamestring or null
replyToSettingstring or null
fromLocalPartstring or nullThe address at the own domain (before the @).
domainobject or null
domain.domainstring
domain.statusenumPending: 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.dkimStatusstring or null
domain.mailFromDomainstring
domain.mailFromStatusstring or null
domain.recordsarray of object
domain.records[].purposeenumDKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].typeenumOne of CNAME, MX, TXT.
domain.records[].namestringThe full host name to add at the domain's DNS host.
domain.records[].valuestring
domain.records[].priorityintegerMX priority.
domain.records[].requiredboolean
domain.verifiedAtstring (date-time) or null
domain.lastCheckedAtstring (date-time) or null
domain.nextCheckAtstring (date-time) or nullWhen ServFlo checks again by itself.
domain.lastErrorstring or null
domain.websiteHostnamestring or nullA hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflobooleanAlways false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddressstringWhere emails come from once the domain is verified.
pausedobject or null
paused.atstring (date-time)
paused.reasonstring or null
paused.canResumebooleanFalse after two automatic pauses in 30 days: ServFlo support resumes it.
ratesobject
rates.sincestring (date-time)
rates.sentinteger
rates.bouncesinteger
rates.complaintsinteger
rates.bounceRatenumber
rates.complaintRatenumber
rates.warnbooleanHalf way to a pause: clean up the address list.
todayobject
today.sentinteger
today.capintegerPast it, emails wait for the next day.
thisMonthobjectServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
thisMonth.sentinteger

Set the ServFlo email sender

PATCH /organizations/{organizationId}/messaging/servflo-email/sender

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.

Permissionchannels.manage (Owner, Admin)
Riskwrite, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolservfloEmail_updateSender (toolset settings)

Request body

FieldTypeRequiredDescription
fromNamestring or nullNoUp to 100 characters.
replyToempty string or string (email) or nullNoWhere replies go; empty = the owner's email.
fromLocalPartstring or nullNoThe part before the @ at the business's own domain (default hello). Up to 64 characters.

Example

curl -X PATCH "https://app.servflo.ai/api/organizations/$ORGANIZATION_ID/messaging/servflo-email/sender" \
  -H "Authorization: Bearer $SERVFLO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fromName":"string","replyTo":"dana@example.com","fromLocalPart":"string"}'

Response

200: the answer's fields
FieldTypeDescription
availablebooleanServFlo email can be used on this server.
unavailableReasonstring or null
modeenumSERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
activebooleanThe business's email provider is ServFlo email.
statusenumReady: 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.
sharedDomainstring
sharedAddressstringThe business's address on ServFlo's sending domain.
senderobject
sender.fromstringThe From header emails carry now.
sender.fromAddressstring
sender.fromNamestring or null
sender.replyTostring or null
sender.replyToSourceenumReply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.viaenumOne of shared, domain.
senderNamestring or null
replyToSettingstring or null
fromLocalPartstring or nullThe address at the own domain (before the @).
domainobject or null
domain.domainstring
domain.statusenumPending: 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.dkimStatusstring or null
domain.mailFromDomainstring
domain.mailFromStatusstring or null
domain.recordsarray of object
domain.records[].purposeenumDKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].typeenumOne of CNAME, MX, TXT.
domain.records[].namestringThe full host name to add at the domain's DNS host.
domain.records[].valuestring
domain.records[].priorityintegerMX priority.
domain.records[].requiredboolean
domain.verifiedAtstring (date-time) or null
domain.lastCheckedAtstring (date-time) or null
domain.nextCheckAtstring (date-time) or nullWhen ServFlo checks again by itself.
domain.lastErrorstring or null
domain.websiteHostnamestring or nullA hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflobooleanAlways false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddressstringWhere emails come from once the domain is verified.
pausedobject or null
paused.atstring (date-time)
paused.reasonstring or null
paused.canResumebooleanFalse after two automatic pauses in 30 days: ServFlo support resumes it.
ratesobject
rates.sincestring (date-time)
rates.sentinteger
rates.bouncesinteger
rates.complaintsinteger
rates.bounceRatenumber
rates.complaintRatenumber
rates.warnbooleanHalf way to a pause: clean up the address list.
todayobject
today.sentinteger
today.capintegerPast it, emails wait for the next day.
thisMonthobjectServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
thisMonth.sentinteger

Add your own sending domain

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.

Permissionchannels.manage (Owner, Admin)
Riskwrite, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolservfloEmail_addDomain (toolset settings)

Request body

FieldTypeRequiredDescription
domainstringYesThe business's domain, e.g. brightair.com (not a mailbox provider's). Up to 253 characters.

Example

curl -X POST "https://app.servflo.ai/api/organizations/$ORGANIZATION_ID/messaging/servflo-email/domain" \
  -H "Authorization: Bearer $SERVFLO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"string"}'

Response

200: the answer's fields
FieldTypeDescription
domainstring
statusenumPending: 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.
dkimStatusstring or null
mailFromDomainstring
mailFromStatusstring or null
recordsarray of object
records[].purposeenumDKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
records[].typeenumOne of CNAME, MX, TXT.
records[].namestringThe full host name to add at the domain's DNS host.
records[].valuestring
records[].priorityintegerMX priority.
records[].requiredboolean
verifiedAtstring (date-time) or null
lastCheckedAtstring (date-time) or null
nextCheckAtstring (date-time) or nullWhen ServFlo checks again by itself.
lastErrorstring or null
websiteHostnamestring or nullA hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
dnsManagedByServflobooleanAlways false: ServFlo does not host customers' DNS; the owner adds the records.
fromAddressstringWhere emails come from once the domain is verified.

Remove the sending domain

DELETE /organizations/{organizationId}/messaging/servflo-email/domain

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.

Permissionchannels.manage (Owner, Admin)
Risksensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolservfloEmail_removeDomain (toolset settings)
ApprovalOver MCP, this tool always waits for your approval in ServFlo. See Approvals.

Example

curl -X DELETE "https://app.servflo.ai/api/organizations/$ORGANIZATION_ID/messaging/servflo-email/domain" \
  -H "Authorization: Bearer $SERVFLO_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
availablebooleanServFlo email can be used on this server.
unavailableReasonstring or null
modeenumSERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
activebooleanThe business's email provider is ServFlo email.
statusenumReady: 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.
sharedDomainstring
sharedAddressstringThe business's address on ServFlo's sending domain.
senderobject
sender.fromstringThe From header emails carry now.
sender.fromAddressstring
sender.fromNamestring or null
sender.replyTostring or null
sender.replyToSourceenumReply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.viaenumOne of shared, domain.
senderNamestring or null
replyToSettingstring or null
fromLocalPartstring or nullThe address at the own domain (before the @).
domainobject or null
domain.domainstring
domain.statusenumPending: 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.dkimStatusstring or null
domain.mailFromDomainstring
domain.mailFromStatusstring or null
domain.recordsarray of object
domain.records[].purposeenumDKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].typeenumOne of CNAME, MX, TXT.
domain.records[].namestringThe full host name to add at the domain's DNS host.
domain.records[].valuestring
domain.records[].priorityintegerMX priority.
domain.records[].requiredboolean
domain.verifiedAtstring (date-time) or null
domain.lastCheckedAtstring (date-time) or null
domain.nextCheckAtstring (date-time) or nullWhen ServFlo checks again by itself.
domain.lastErrorstring or null
domain.websiteHostnamestring or nullA hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflobooleanAlways false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddressstringWhere emails come from once the domain is verified.
pausedobject or null
paused.atstring (date-time)
paused.reasonstring or null
paused.canResumebooleanFalse after two automatic pauses in 30 days: ServFlo support resumes it.
ratesobject
rates.sincestring (date-time)
rates.sentinteger
rates.bouncesinteger
rates.complaintsinteger
rates.bounceRatenumber
rates.complaintRatenumber
rates.warnbooleanHalf way to a pause: clean up the address list.
todayobject
today.sentinteger
today.capintegerPast it, emails wait for the next day.
thisMonthobjectServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
thisMonth.sentinteger

Check the sending domain now

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.

Permissionchannels.manage (Owner, Admin)
Riskwrite, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolservfloEmail_checkDomain (toolset settings)

Example

curl -X POST "https://app.servflo.ai/api/organizations/$ORGANIZATION_ID/messaging/servflo-email/domain/check" \
  -H "Authorization: Bearer $SERVFLO_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
domainstring
statusenumPending: 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.
dkimStatusstring or null
mailFromDomainstring
mailFromStatusstring or null
recordsarray of object
records[].purposeenumDKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
records[].typeenumOne of CNAME, MX, TXT.
records[].namestringThe full host name to add at the domain's DNS host.
records[].valuestring
records[].priorityintegerMX priority.
records[].requiredboolean
verifiedAtstring (date-time) or null
lastCheckedAtstring (date-time) or null
nextCheckAtstring (date-time) or nullWhen ServFlo checks again by itself.
lastErrorstring or null
websiteHostnamestring or nullA hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
dnsManagedByServflobooleanAlways false: ServFlo does not host customers' DNS; the owner adds the records.
fromAddressstringWhere emails come from once the domain is verified.

Resume ServFlo email after a pause

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.

Permissionchannels.manage (Owner, Admin)
Risksensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP toolservfloEmail_resume (toolset settings)
ApprovalOver MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in ServFlo). See Approvals.

Example

curl -X POST "https://app.servflo.ai/api/organizations/$ORGANIZATION_ID/messaging/servflo-email/resume" \
  -H "Authorization: Bearer $SERVFLO_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
availablebooleanServFlo email can be used on this server.
unavailableReasonstring or null
modeenumSERVFLO_EMAIL (fake = simulated sends). One of fake, live, off.
activebooleanThe business's email provider is ServFlo email.
statusenumReady: 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.
sharedDomainstring
sharedAddressstringThe business's address on ServFlo's sending domain.
senderobject
sender.fromstringThe From header emails carry now.
sender.fromAddressstring
sender.fromNamestring or null
sender.replyTostring or null
sender.replyToSourceenumReply-To: the business's own (Settings → Messaging), else the owner's email. One of settings, owner, none.
sender.viaenumOne of shared, domain.
senderNamestring or null
replyToSettingstring or null
fromLocalPartstring or nullThe address at the own domain (before the @).
domainobject or null
domain.domainstring
domain.statusenumPending: 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.dkimStatusstring or null
domain.mailFromDomainstring
domain.mailFromStatusstring or null
domain.recordsarray of object
domain.records[].purposeenumDKIM is required to verify; MAIL FROM and DMARC are recommended. One of DKIM, MAIL_FROM_MX, MAIL_FROM_SPF, DMARC.
domain.records[].typeenumOne of CNAME, MX, TXT.
domain.records[].namestringThe full host name to add at the domain's DNS host.
domain.records[].valuestring
domain.records[].priorityintegerMX priority.
domain.records[].requiredboolean
domain.verifiedAtstring (date-time) or null
domain.lastCheckedAtstring (date-time) or null
domain.nextCheckAtstring (date-time) or nullWhen ServFlo checks again by itself.
domain.lastErrorstring or null
domain.websiteHostnamestring or nullA hostname of the business's ServFlo website on this domain: add the records at the same DNS host.
domain.dnsManagedByServflobooleanAlways false: ServFlo does not host customers' DNS; the owner adds the records.
domain.fromAddressstringWhere emails come from once the domain is verified.
pausedobject or null
paused.atstring (date-time)
paused.reasonstring or null
paused.canResumebooleanFalse after two automatic pauses in 30 days: ServFlo support resumes it.
ratesobject
rates.sincestring (date-time)
rates.sentinteger
rates.bouncesinteger
rates.complaintsinteger
rates.bounceRatenumber
rates.complaintRatenumber
rates.warnbooleanHalf way to a pause: clean up the address list.
todayobject
today.sentinteger
today.capintegerPast it, emails wait for the next day.
thisMonthobjectServFlo emails recorded this calendar month (UTC); the plan's allowance is in billing.plan.
thisMonth.sentinteger

On this page