Saasco logoSaasco logo
Saasco logoSaasco logo

Introduction

OverviewGetting startedWhat is Saasco?

SDK

Quick startTrackingIdentifyConfigurationWidgetsProperties

MCP

Quick startHow it worksAuthorizationTool reference

REST API

Quick start

Tool reference

Every tool the Saasco MCP server exposes, what it does, and whether it reads or writes.

The connector's tools are generated from the same API the REST endpoints are built on, so every tool here has a matching page in the API reference with its full request and response schema.

A default connection does not put each of these on tools/list. It lists saasco_search_tools, saasco_execute_tool, and read_saasco_documentation. saasco_search_tools returns the matching rows from this catalog, including the input schema, and saasco_execute_tool runs one. Add codemode=off to the server URL when a client should load every tool below as its own tool; the documentation tool stays listed there too. How it works covers both.

Reading the docs

read_saasco_documentation is not in the table below. It does not take a projectId, and it does not touch project data. Pass query (identify before signup, list contacts filter) or path (/docs/sdk/identify). The answer is the matching sections, including code and request fields, cut to tokens (default 2500). Raise tokens, or pass a path, when the answer says it was cut off.

Three things hold for all of them:

  • The account URL takes projectId. Pass the id of a project you belong to. projects_listProjects lists them. A URL with ?projectId= drops that argument and runs every tool against that one project.
  • Reads need mcp:read, writes need mcp:write. A read-only connection does not see write tools: saasco_search_tools leaves them out, and ?codemode=off leaves them off tools/list. A call is refused server-side even if a client tries anyway.
  • Names follow the API. A tool is named <area>_<operation> (crm_listContacts, analytics_queryEvents), matching the procedure it calls.

What is not exposed

Deleting a project is withheld, whatever a client's annotations say it will confirm. The blast radius is the whole project, and an autonomous agent can confirm on its own.

Ads stay off. They need the caller's Meta session, which a connector does not hold. File storage stays off. Workflow runs stay off, including taking the next step, so a connector can build a workflow and cannot start one.

Sending a campaign is on the connector and marked destructive. A setup skill does not call it. emailMarketing_sendTestEmail sends a one-off preview of one campaign message. It does not start the campaign. Date fields on that input are ISO 8601 timestamps. Pass the campaign, the message, the project, and the contacts in the body so unsaved edits can be previewed.

Domains are on the connector, including create, activate, and verify. Workflow steps and edges are on the connector. Support exposes the widget on/off toggles, trusted domains, the mailbox hostname and local part, and the public copy (workspace name, greeting, team description, suggested questions). It does not expose the messenger secret, identity verification, notification members, support-tool credentials, or the whole widget settings bag.

Contact create and update are on the connector. A date property is an ISO 8601 string, for example birthday: "1990-05-17" or trialEndsAt: "2026-11-01T12:00:00.000Z". The reply includes the properties that were saved, including those dates. An empty properties object is not a successful write.

A procedure whose input still cannot be rendered as JSON Schema is skipped, with a warning, so one bad schema cannot empty tools/list.

Tools

Articles

ToolAccessWhat it does
knowledge_createArticleWriteCreates a knowledge-base article.
knowledge_deleteArticleWritePermanently deletes an article and the screenshots it uploaded.
knowledge_getArticleReadFetches one article by ID for editing, including drafts and internal articles.
knowledge_listArticlesReadLists a project's articles for management views, covering drafts and internal articles that never appear in public search.
knowledge_updateArticleWriteUpdates an article.
knowledge_uploadArticleImageWriteUploads a screenshot for a Help Center article, using the same project image upload as pasting an image into the article editor.

Attributes

ToolAccessWhat it does
crm_deleteAttributeWriteRemoves an attribute from every contact in the project, deleting that property's stored values.
crm_deleteAttributesWriteThe bulk form of Delete Attribute, removing several attributes from every contact in one call.
crm_listAttributesReadLists the contact attributes defined in this project: the property names available to filter and segment on, with their inferred types.

Benchmarks

ToolAccessWhat it does
benchmarks_getBenchmarkPreferencesReadReads the cohort and funnel-step mapping used to compare this project's metrics with benchmarks.
benchmarks_setBenchmarkPreferencesWriteStores the cohort and funnel-step mapping used to compare this project's metrics with benchmarks.

Campaigns

ToolAccessWhat it does
emailMarketing_countEmailsForEmailCampaignReadHow many emails the campaign covers.
emailMarketing_createEmailCampaignWriteCreates a campaign together with its first message (subject, body, sender) in one transaction.
emailMarketing_deleteEmailCampaignWritePermanently deletes a campaign and its messages.
emailMarketing_duplicateEmailCampaignWriteCopies a campaign (its messages, audience, and settings) into a new DRAFT.
emailMarketing_emailStatsReadAggregate delivery and engagement figures for one campaign: sent, delivered, opened, clicked, bounced, complained, and delivery-delayed.
emailMarketing_getEmailCampaignReadFetches a single campaign with its messages, audience definition, status, and send progress.
emailMarketing_listEmailCampaignsReadLists the project's campaigns with status and send progress.
emailMarketing_resumeSendingCampaignWriteResumes a paused campaign.
emailMarketing_sendCampaignWriteStarts sending a campaign to its audience.
emailMarketing_sendTestEmailWriteSends a one-off preview of a campaign message to specific contacts, rendered with their data so personalisation can be checked before the real send.
emailMarketing_stopSendingCampaignWritePauses a campaign that is currently sending.
emailMarketing_updateEmailCampaignWriteUpdates a campaign's settings.

Changelog

ToolAccessWhat it does
changelog_archiveChangelogEntryWriteArchives a changelog entry so it drops out of the public list and the default workspace list.
changelog_createChangelogWriteCreates the project's changelog.
changelog_createChangelogEntryWriteCreates a changelog entry.
changelog_createChangelogEntryTagWriteAttaches a tag to a changelog entry.
changelog_deleteChangelogWriteDeletes the project's changelog record.
changelog_getChangelogReadFetches the project's changelog settings, including the linked GitHub repository.
changelog_getChangelogEntryReadFetches one changelog entry, including its body, tags, and linked feedback posts.
changelog_listChangelogEntriesReadLists changelog entries for the workspace, including drafts.
changelog_removeChangelogEntryTagWriteRemoves a tag from a changelog entry.
changelog_updateChangelogWriteUpdates the GitHub repository linked to the project's changelog.
changelog_updateChangelogEntryWriteUpdates a changelog entry.

Clean

ToolAccessWhat it does
crm_getCleanSettingsReadReturns the project's list-hygiene settings, which control whether new contacts have their email addresses validated automatically as they arrive.
crm_updateCleanSettingsWriteReplaces the project's list-hygiene settings.

Collections

ToolAccessWhat it does
knowledge_createCollectionWriteCreates a collection: the folder that groups articles in a help center's navigation.
knowledge_deleteCollectionWriteDeletes a collection.
knowledge_getCollectionReadFetches a single collection by ID.
knowledge_listCollectionsReadLists a help center's collections, each with its articles and nested child collections, for building the navigation tree.
knowledge_updateCollectionWriteUpdates a collection's name, description, icon, or position.

Contacts

ToolAccessWhat it does
crm_countSubscribedContactsReadCounts how many contacts match an audience *and* are still subscribed: the number that would actually receive a campaign, which is lower than a plain contact count once unsubscribes are excluded.
crm_deleteContactWriteDeletes a contact.
crm_getContactReadFetches a single contact by distinct ID, including its merged property bag.
crm_getContactByEmailReadLooks a contact up by email address rather than distinct ID, the usual entry point when all you have is an email from a form or webhook.
crm_getContactPropertiesReadReturns just a contact's property bag, without the surrounding contact record.
crm_listContactsReadQueries contacts with attribute and event filters, returning a page of contacts plus the total `count` matching the filter.
crm_listRelatedContactsReadLists other contacts for the same person: contacts sharing this email, contacts on the same Stripe customer, and contacts Stripe relates by a shared card number (the Dashboard Related customers list).
crm_migrateDistinctIdWriteRe-keys a contact from one distinct ID to another, carrying their properties and history across.
crm_updateContactWriteUpdates a contact's properties.
crm_upsertContactWriteCreates a contact, or updates it if one already exists with the same distinct ID.

Conversations

ToolAccessWhat it does
support_getContactConversationsReadLists every Support conversation for one CRM contact, including closed and spam threads.
support_getConversationsReadLists Support inbox conversations (chat and email) with a preview line and unread count, not the transcript.
support_setConversationStateWriteSets a conversation to open, closed, or spam.

Custom Links

ToolAccessWhat it does
crm_createCustomContactLinkWriteCreates a custom contact link: a templated URL shown on every contact page, with contact properties substituted in.
crm_deleteCustomContactLinkWriteDeletes a custom contact link, removing it from every contact page in the project.
crm_getCustomContactLinkReadFetches a single custom contact link template.
crm_listCustomContactLinksReadLists the project's custom contact links: the templates, not the resolved URLs for any particular contact.
crm_updateCustomContactLinkWriteUpdates a custom contact link's label or URL template.

Disputes

ToolAccessWhat it does
disputes_deleteWebhookWriteRemoves the Stripe webhook endpoint that delivers dispute events for this project.
disputes_getReadFetches one Stripe dispute stored for the project, including the evidence drafted for it.
disputes_getSettingsReadReads dispute settings and whether a webhook signing secret is stored.
disputes_listReadLists Stripe disputes stored for the project.
disputes_previewEvidenceForWriteDrafts the evidence that would be submitted for a dispute, without sending it to Stripe or uploading files.
disputes_provisionWebhookWriteCreates or repairs the Stripe webhook endpoint that delivers dispute events.
disputes_regenerateEvidenceWriteQueues a fresh evidence draft for a dispute.
disputes_statsReadCounts and amounts for the project's disputes: open, won, lost, and the last 30 days and 12 months.
disputes_submitNowWriteDrafts evidence and submits it to Stripe immediately, even when auto-submit is off.
disputes_triggerBackfillWriteQueues a sync of Stripe disputes into this project.
disputes_updateSettingsWriteUpdates dispute settings.

Domains

ToolAccessWhat it does
domains_activateEmailReceivingWriteTurns inbound email on for the domain.
domains_activateEmailSendingWriteRegisters the domain with Resend and turns on open/click tracking through trackingSubdomain, defaulting to links.
domains_createDomainWriteRegisters a hostname on the project.
domains_deleteDomainWritePermanently removes the domain from the project.
domains_disableEmailReceivingWriteTurns inbound email off.
domains_disableEmailSendingWriteTurns sending off and clears tracking state.
domains_disableShortlinkWriteRemoves the hostname from Vercel and turns custom-domain shortlinks off.
domains_enableShortlinkWriteAdds the hostname to Vercel so custom-domain shortlinks resolve.
domains_getDomainReadFetches a domain plus its email DNS config and whether verification jobs are still running.
domains_getReceivingConfigReadReturns inbound capability state, the MX records to add, and receiving status.
domains_getSenderReputationReadReturns the cached sender reputation score (0–100), refreshing it if the cache is stale.
domains_getSenderReputationByDomainNameReadSame sender reputation score as Get Sender Reputation, looked up by hostname within the project.
domains_getWarmupStatusReadCurrent warmup ramp for a sending domain: day, daily cap, remaining sends, and whether the send window is open.
domains_listDomainsReadLists the project's domains.
domains_setTrackingSubdomainWriteSets the tracking host to trackingSubdomain (default links) and issues the tracking CNAME.
domains_updateDomainWriteUpdates client-writable domain fields.
domains_verifyEmailDNSWriteAsks Resend to re-check sending and tracking records and starts the verification job.
domains_verifyEmailReceivingWriteRe-checks inbound MX records and starts the inbound verification job, which is what emails 'verified'.
domains_verifyShortlinkWriteRe-checks Vercel DNS for custom-domain shortlinks and updates verification status.

Edges

ToolAccessWhat it does
workflows_createWorkflowEdgeWriteCreate a new workflow edge Pass projectId for a project this account belongs to.
workflows_deleteWorkflowEdgeWriteDelete a workflow edge by ID Pass projectId for a project this account belongs to.
workflows_getWorkflowEdgeReadGet a workflow edge by ID Pass projectId for a project this account belongs to.
workflows_listWorkflowEdgesReadList all workflow edges Pass projectId for a project this account belongs to.
workflows_updateWorkflowEdgeWriteUpdate a workflow edge by ID Pass projectId for a project this account belongs to.

Emails

ToolAccessWhat it does
emailMarketing_getEmailReadFetches one sent email (its recipient, status, and delivery timestamps) together with the rendered subject and body as that recipient actually received it, personalisation included.
emailMarketing_getEmailEventsReadThe delivery timeline for a single email: an ordered list of `{ type, timestamp }` entries covering pending, sent, delivered, opened, clicked, bounced, complained, suppressed, and delivery-delayed.
emailMarketing_listContactEmailsReadEvery email this project has sent to one contact, across all campaigns: the per-person send history you would show on a contact detail page.
emailMarketing_listEmailsReadThe per-recipient send log for one campaign: who it went to, current status, and delivery timestamps.

Events

ToolAccessWhat it does
analytics_latestEventsReadReturns the project's most recent events, newest first: the live activity feed.
analytics_queryEventsReadThe general-purpose event reporting query.
analytics_userEventsReadReturns one user's event history, newest first: the activity timeline for a single person.

Feedback

ToolAccessWhat it does
feedback_archiveCommentWriteArchives a comment so it no longer appears on the post.
feedback_createPostWriteCreates a feedback post.
feedback_createStatusWriteCreates a feedback status.
feedback_createTopicWriteCreates a topic that can be assigned to posts on the feedback board and the roadmap.
feedback_deletePostWritePermanently deletes a feedback post and its comments.
feedback_deleteStatusWriteDeletes a status.
feedback_deleteTopicWriteDeletes a topic and removes it from every post.
feedback_getFeedbackReadFetches the project's feedback board settings: name, visibility, and whether posts, votes, and comments are open.
feedback_getPostReadFetches one feedback post, including its status, topics, and linked changelog entries.
feedback_listCommentsReadLists comments on a feedback post, including team replies and merge notes.
feedback_listPostsReadLists feedback posts for the workspace.
feedback_listStatusesReadLists feedback statuses.
feedback_listTopicsReadLists feedback topics.
feedback_setPostPendingApprovalWriteHides or publishes a visitor submission.
feedback_unmergePostWriteRestores a post that was merged into another, using the id of the surviving post.
feedback_updateCommentWriteReplaces the body of a team or visitor comment.
feedback_updateFeedbackWriteUpdates feedback board settings.
feedback_updatePostWriteUpdates a post's title, body, or author.
feedback_updatePostStatusWriteMoves a post to a status, or clears it.
feedback_updatePostTopicsWriteReplaces the topics on a post.
feedback_updateStatusWriteUpdates a status name, color, or whether it is a roadmap column.
feedback_updateTopicWriteUpdates a topic name, color, or icon.

Funnels

ToolAccessWhat it does
analytics_getFunnelStepsReadRuns a sequential funnel over the named events and returns the number of users reaching each step.
analytics_getFunnelStepsByDayReadThe same sequential funnel as Get Funnel Steps, but broken out per day so you can chart step conversion over time.

Help Center

ToolAccessWhat it does
knowledge_createHelpCenterWriteCreates a help center: the public site that hosts a project's collections and articles.
knowledge_deleteHelpCenterWriteDeletes a help center and every collection inside it.
knowledge_getHelpCenterReadFetches the project's help center with its full configuration: theme, custom domain and verification state, analytics ID.
knowledge_removeHelpCenterDomainWriteDetaches the custom domain from the help center and clears its verification state.
knowledge_setHelpCenterDomainWritePoints a hostname you own at the project's help center.
knowledge_updateHelpCenterWriteUpdates a help center's presentation and settings: display name, theme, and Google Analytics ID.
knowledge_verifyHelpCenterDomainWriteRe-checks the DNS for the configured custom domain and stores the result on the help center as `customDomainVerified`.

Knowledge Gaps

ToolAccessWhat it does
knowledge_dismissKnowledgeGapWriteMarks a knowledge gap as dismissed so it no longer appears in Gap Finder or coverage.
knowledge_listKnowledgeGapsReadLists unanswered and answered knowledge gaps the support agent filed when it could not answer a customer.
knowledge_saveKnowledgeGapArticleWriteCreates a draft Help Center article titled with the gap's detected topic and nothing else.

List Members

ToolAccessWhat it does
crm_createContactListMemberWriteAdds a contact to a static list.
crm_deleteContactListMemberWriteRemoves a contact from a static list, identified by the contact's distinct ID.
crm_getContactListMemberReadFetches a single list-membership record by its own ID.
crm_listContactListMembersReadLists the contacts in a list, with a total `count`.
crm_listContactListMembersQueryReadThe same result as List Members, but as a POST so it can carry a filter group in the body, for narrowing a list to a sub-segment, or naming exactly which contact properties to return.
crm_listMemberContactListsReadLists every contact list one contact belongs to: the list-membership view for a contact detail page.

Lists

ToolAccessWhat it does
crm_createContactListWriteCreates a contact list.
crm_deleteContactListWriteDeletes a contact list.
crm_getContactListReadFetches a single contact list with its configuration, including the filter definition for a dynamic list.
crm_listContactListsReadLists a project's contact lists with a total `count`.
crm_updateContactListWriteUpdates a contact list's name, description, type, or filter.

Messages

ToolAccessWhat it does
support_getConversationMessagesReadReturns the transcript of one conversation.
support_getInboundEmailAttachmentUrlWriteMints a short-lived download URL for one file on an inbound email.
support_markMessagesSeenWriteMarks customer comments on a conversation as seen by the team.
support_searchConversationMessagesReadReturns conversation ids whose message bodies match every search term.

Notifications

ToolAccessWhat it does
crm_createNotificationTypeWriteCreates a notification type: a subscription category contacts can opt in and out of separately from the project-wide subscribe flag.
crm_deleteNotificationTypeWriteDeletes a notification type along with every contact preference recorded against it.
crm_listContactNotificationPreferencesReadLists one contact's per-type subscription preferences, for rendering a preference centre.
crm_listNotificationTypesReadLists the notification types a project has defined: the named categories, such as product updates or billing alerts, that contacts can subscribe to independently.
crm_subscribeStatusReadReports whether a contact is subscribed at the project level: the master switch that overrides every per-type preference.
crm_updateNotificationTypeWriteUpdates a notification type's name or description.

Projects

ToolAccessWhat it does
projects_getProjectReadFetches a single project along with its app configs: one entry per Saasco app the project has enabled, carrying that app's activation and setup-completion state.
projects_listProjectsReadLists the projects the caller can reach, each with its app configs.
projects_updateProjectWriteUpdates a project's settings.

Roadmap

ToolAccessWhat it does
feedback_getRoadmapReadFetches the project's roadmap settings: visibility, and whether votes and comments are open.
feedback_updateRoadmapWriteUpdates roadmap settings.

Sender

ToolAccessWhat it does
emailMarketing_getSenderStatusReadReports whether the project is currently allowed to send email.

Sessions

ToolAccessWhat it does
analytics_querySessionsReadThe session-level counterpart to Query Events, grouping visits rather than individual events.

Short Links

ToolAccessWhat it does
shortlinks_createShortlinkWriteCreates a short link on a domain that already belongs to the project.
shortlinks_deleteShortlinkWriteDeletes a short link.
shortlinks_getShortlinkReadFetches one short link by id.
shortlinks_listShortlinksReadLists a project's short links, newest first, with an all-time click count on each row.
shortlinks_shortlinkClicksReadDaily click counts for one short link, or for every short link in the project when shortlinkId is omitted.
shortlinks_shortlinkClicksCountReadAll-time click count for one short link.
shortlinks_topShortlinksReadRanks every short link in the project by clicks in the window, including links with zero clicks.
shortlinks_updateShortlinkWriteUpdates a short link's destination, domain, or path.

Social Proof

ToolAccessWhat it does
socialProof_deleteTemplateWriteDeletes a notification template.
socialProof_getConfigReadReads the social proof widget: enabled flag, feed window, theme, display rules, and templates.
socialProof_getSocialProofEnabledReadReturns whether the visitor-facing Social Proof widget is enabled.
socialProof_getStatsReadImpression and click totals for the notification widget.
socialProof_getStatsTimeseriesReadDaily impression and click counts for the notification widget.
socialProof_updateConfigWriteReplaces the widget's enabled flag, feed window, theme, and display rules.
socialProof_updateSocialProofEnabledWriteTurns the visitor-facing Social Proof widget on or off.
socialProof_upsertTemplateWriteCreates a notification template, or updates one when template.id is set.

Steps

ToolAccessWhat it does
workflows_createWorkflowStepWriteCreate a new workflow action Pass projectId for a project this account belongs to.
workflows_deleteWorkflowStepWriteDelete a workflow action by ID Pass projectId for a project this account belongs to.
workflows_getWorkflowStepReadGet a workflow action by ID Pass projectId for a project this account belongs to.
workflows_listWorkflowStepsReadList all workflow actions Pass projectId for a project this account belongs to.
workflows_updateWorkflowStepWriteUpdate a workflow action by ID Pass projectId for a project this account belongs to.

Usage

ToolAccessWhat it does
analytics_getUsageReadReturns metered spend for the project over a date window, broken down by day, app, and upstream service.

Users

ToolAccessWhat it does
analytics_currentUsersReadCounts visitors seen in the last `minutes` minutes: the live-visitors number.
analytics_deleteUserWriteErases a user's stored identify properties for GDPR-style deletion requests.
analytics_getUserReadFetches the most recent identify record for one user, returning the full property bag last known for them: reserved fields like `email` and `name`, Saasco's `$`-prefixed system properties (geo, device, referrer, subscription state), and any custom properties you have sent.
analytics_latestIdentifiesReadReturns the property bags of the 5 most recently seen identified users.
analytics_listUsersReadLists identified users for the project, most recently seen first, each with their full property bag.

Widget

ToolAccessWhat it does
support_getSupportEmailAgentEnabledReadReturns whether the AI agent replies to inbound support email.
support_getSupportMailboxReadReturns the support From address: the hostname and the local part.
support_getSupportTrustedDomainsReadReturns the hostnames the Support widget is allowed to render on.
support_getSupportWidgetAgentEnabledReadReturns whether the AI agent replies in the support widget.
support_getSupportWidgetCopyReadReturns the visitor-facing widget copy: workspace name, greeting, team description, and suggested questions.
support_getSupportWidgetEnabledReadReturns whether the visitor-facing Support widget is enabled.
support_updateSupportEmailAgentEnabledWriteTurns the inbound-email AI agent on or off.
support_updateSupportMailboxWriteSets the support From address.
support_updateSupportWidgetAgentEnabledWriteTurns the support-widget AI agent on or off.
support_updateSupportWidgetCopyWriteSets the visitor-facing widget copy.
support_updateSupportWidgetEnabledWriteTurns the visitor-facing Support widget on or off.
support_updateSupportWidgetSettingsWriteReplaces the hostnames the Support widget is allowed to render on.

Workflows

ToolAccessWhat it does
workflows_createWorkflowWriteCreates a workflow definition: the trigger event, audience filters, frequency, and delay between runs.
workflows_deleteWorkflowWritePermanently deletes a workflow and everything cascading from it: steps, edges, runs, and run logs.
workflows_getWorkflowReadFetches a single workflow by ID.
workflows_listWorkflowsReadLists the project's workflows with name and status.
workflows_updateWorkflowWriteUpdates a workflow.
workflows_verifyWorkflowConfigReadChecks that each sendCampaign step has a campaign and that the campaign itself verifies.

Prompts and resources

Tools are the whole surface. The server publishes no MCP prompts and no resources, so the "add from server" menu some clients offer will be empty for Saasco. Describe the job in your own words and let the agent choose the tools.

Annotations

Each tool ships the standard MCP hints, which is what lets a client decide whether to ask you first:

AnnotationSet when
readOnlyHintThe tool is a query and changes nothing.
idempotentHintCalling it twice with the same arguments is the same as calling it once.
destructiveHintThe tool deletes something.

Hints are advice to your client, not a server-side guarantee. The scope check is. Keep human confirmation on for write tools regardless of what a client infers from them.

Untrusted content

Tools that return contacts, conversations or messages carry a warning in their own description: the text inside them was written by your customers, and it is data to report rather than instructions to follow.

That warning helps a well-behaved model but it is not a control. Don't put write tools on an auto-approve list in a session that is also reading customer-written text.

Rate limit

A burst guard caps one connection at 240 tool calls a minute. Past that, calls come back as an error telling the agent how long to wait; the connection itself stays up. It bounds a runaway loop rather than acting as a quota. What an agent costs is bounded by billing, the same as any other API call.

Authorization

What the consent screen asks, scoping a URL to one project, and what to do when a client won't authorize.

Quick start

Authenticate with a project API key and make your first REST request.

On this page

Reading the docsWhat is not exposedToolsPrompts and resourcesAnnotationsUntrusted contentRate limit