Skip to content
FloralityDocs
ChangelogGet an API key

Getting started

  • Quickstart
  • Authentication
  • Scopes
  • Privacy buckets
  • Rate limits
  • Errors
  • Versioning
  • Terminology
  • Webhooks PRO

Resources

  • Members
  • Groups
  • Entries
  • Front
  • Appearance
  • Custom fields
  • Trash
  • Search
  • Member statuses
  • Systems
  • Messaging
  • Privacy buckets
  • Terminology
  • Friends
  • Subscriptions
  • Billing
  • Import
  • Social
  • Guestbook & poll
  • Group layout
  • Activity
Docs/Rate limits
← PreviousPrivacy bucketsNext →Errors
Florality

Organise your system. One front at a time.

Get started

Product

  • Features
  • Pricing
  • Docs
  • Changelog
  • Security

Company

  • About
  • Our team
  • Blog
  • Contact

Resources

  • FAQ
  • Trust and Safety
  • Public REST API

Legal

  • Privacy Policy
  • Terms of Service
  • Refunds and cancellation

© 2026 Florality. All rights reserved.

Florality
DocsGetting startedRate limits

Rate limits

Budget active keys and requests, then handle throttling.

QuickstartAuthenticationScopesPrivacy bucketsRate limitsErrorsVersioningTerminologyWebhooks

Check the plan limits

PlanActive keysRequests per minute per key
Free11,000
Pro51,000
Pro+51,000

The key limit counts non-revoked keys. The request limit is the same on every plan and is shared across v1 resource routes for a given key. The implementation uses fixed minute buckets, keyed by the API key ID. Authentication and scope checks run before the rate check.

Do not rely on retry headers

The v1 limiter does not attach Retry-After, remaining-quota or reset-time headers. Its JSON error helper sets the status and body only. A successful request does not advertise the remaining quota either.

Handle HTTP 429

JSON
{
  "code": "RATE_LIMITED",
  "message": "API rate limit exceeded (1000 requests per minute). Retry shortly."
}

Pause requests made with that key and retry with a bounded delay. The example below retries a read with increasing delays and jitter. These delays are client guidance, not a server-provided schedule.

JavaScript
// Server-side GET only. These delays are client guidance, not an API guarantee.
async function readMembers() {
  for (let attempt = 0; attempt < 5; attempt++) {
    const response = await fetch(
      'https://floralitys.com/api/v1/members/page?limit=10',
      { headers: { Authorization: `Bearer ${process.env.FLORALITY_KEY}` } }
    );
    if (response.status !== 429) {
      if (!response.ok) throw new Error(await response.text());
      return response.json();
    }
    await response.body?.cancel();
    if (attempt === 4) throw new Error('Rate limited; try again later.');
    const delay = Math.min(60000, 10000 * 2 ** attempt);
    await new Promise(resolve => setTimeout(resolve, delay + Math.random() * 1000));
  }
}
Avoid blind write retries
This example is for GET requests. Check an operation’s behaviour before retrying a write after an ambiguous network failure.
← Previous guidePrivacy bucketsNext guide →Errors

On this page

  • Check the plan limits
  • Do not rely on retry headers
  • Handle HTTP 429