Limits & billing
Access is metered against your workspace's plan — the same whether a human is chatting or your runner is firing calls headless. Budget your agent's call volume against three independent limits.
The three limits
- Rate limit. A per-tier token bucket. Exceed it and you get
HTTP 429with aRetry-Afterheader. Higher tiers get a larger bucket. This protects the service from bursts; back off and retry. - Monthly allowance. Metered tools count against a monthly allowance for your tier. Over the cap, the tool returns a
paywall_denied-style response with a suggested tier and an upgrade link — and the tool body does not run (so you aren't charged for a no-op). Read this as "upgrade or wait for the cycle to reset." - Seats. Each workspace has a seat cap. Every API key is a seat; invite more with
seat_invite, revoke withseat_revoke. Give each automated caller its own seat key so you can meter and revoke it independently.
What's metered
Roughly: the intelligence calls (the corpus lookups — rate, reliability, spend, partnership graph, benchmarks) are the metered ones, since they hit the shared corpus. Your own pipeline reads and writes within your workspace are not the cost driver. Bulk/corpus-pull and content analysis are gated to higher tiers. Check your current usage and tier with the billing tools (usage_meter_get, auth_status, tier_pricing_table) or in your account.
Plan tiers
Free to start (one creator, a monthly allotment of intelligence lookups, the full automation stack). Paid tiers add more creators, higher intel limits, roster search, bulk corpus access, more seats, and content analysis. See live pricing at mcp.prscnt.com. Enterprise/data tiers are sales-led.
Designing for the limits
- Cache on your side. Intelligence changes slowly. If you recompute a brand's reliability for every row nightly, you'll burn allowance fast. Cache results and refresh on a sane cadence.
- Don't poll. Drive work from events (a row changed, a deal advanced), not from a loop that re-runs intel constantly.
- One seat per caller. Separate keys for your runner, your cron, and each human keeps metering legible and lets you revoke one without touching the others.
- Handle 429 and
paywall_denied. Treat 429 as "retry after the header says"; treatpaywall_deniedas "surface an upgrade prompt, don't hammer."
Error shapes
Tool responses are JSON. Common failure shapes you should handle:
HTTP 429— rate limited. RespectRetry-After.paywall_denied— over the monthly allowance. Includes a suggested tier + upgrade URL. The tool didn't run.WORKSPACE_MISMATCH— you passed a workspace id that isn't yours. Don't pass one at all.401— bad or revoked bearer token (e.g. a revoked seat).- A tool-level
{ "ok": false, "error": ... }— an expected, handled failure (not found, missing input). Read theerrorand surface it.
Idempotency & retries
deals_bulk_createupserts by creator+brand, andcrm_importdedupes by email — re-running them is safe.stack_link_dealis keyed on (deal, system, external_id); re-linking updates the URL/label rather than duplicating.- For your runner, set a request timeout (the template uses
RUNNER_TIMEOUT_MS) so a stuck task doesn't get retried by your UI into duplicate work.
Next
- Security & guardrails — the last thing to get right before production.