Rate Limits & Errors

How the API paginates, throttles, and reports failures. These rules apply to both the REST API and the MCP server.

Rate limits

Each API key may make up to 120 requests per minute. Every response carries the current budget:

HeaderMeaning
X-RateLimit-LimitRequests allowed per window (120).
X-RateLimit-RemainingRequests left in the current window.
X-RateLimit-ResetUnix time (seconds) when the window resets.

Exceeding the limit returns 429 with the standard error envelope:

{ "error": { "code": "rate_limited", "message": "Too many requests. Slow down." } }

Limits are enforced per key at the edge. Back off when X-RateLimit-Remaining reaches 0 and retry after X-RateLimit-Reset.

Pagination

List endpoints return newest-first and accept a limit query parameter (default 50, max 100). Results come back under data.

curl "https://floatmessage.com/api/v1/form-submissions?limit=100" \
  -H "Authorization: Bearer fm_live_YOUR_KEY"

Write access & plan limits

Reads are open to any valid key. Creating resources follows the same rules as the dashboard: an expired trial returns 403 trial_expired, and exceeding a per-plan cap (domains, landing pages, knowledge items) returns 403 plan_limit.

Error envelope

Every error - REST or MCP - uses the same shape. The HTTP status conveys the category; the code is a stable machine-readable string.

{ "error": { "code": "not_found", "message": "Message not found." } }

Error codes

StatusCodeWhen
400invalid_bodyRequest body is missing or not valid JSON, or a required field is absent.
400invalid_domainThe domain in a create request is not a valid hostname.
400reserved_domainThe hostname is reserved or a placeholder.
400domain_not_foundThe ?domain / X-Domain selector does not belong to your account.
400unknown_templateAn unknown landing-page templateId was supplied.
400last_domainYou tried to delete your only remaining domain.
400send_failedA chat reply could not be sent (e.g. empty content).
401unauthorizedMissing or invalid API key.
403trial_expiredYour trial has ended; upgrade to create resources.
403plan_limitYou hit a per-plan cap (domains, landing pages, knowledge items).
404not_foundThe requested resource does not exist or isn't yours.
404no_domainsThe account has no domains yet.
409duplicateThe domain already exists on your account.
429rate_limitedMore than 120 requests in a minute on this key.
500internal_errorAn unexpected server error. Safe to retry.

On the MCP server, tool-level failures (the 4xx codes above) are returned as a tool result with isError: true rather than a JSON-RPC protocol error, so an agent can read and react to them.