Developers

Developer docs

FollowTo offers two ways to work with event data. Use the public website events feed to list upcoming events on your own marketing site (no API key). Use organizer APIs on Pro and Enterprise to read registrations, ticket sales, and more with an API key from Settings.

Events on your website

Publish upcoming events on your own website (for example https://www.example.com/events) by fetching a public JSON or XML feed from FollowTo. No API key is required. The feed is available for every active community and includes event names, dates, descriptions, and links to each event detail page on FollowTo.

Responses are cached for about five minutes on FollowTo (Cache-Control: public, s-maxage=300). CORS is enabled, so browser fetches from another origin are allowed. On your site, cache the feed for a similar interval (for example 300 seconds) to reduce load and keep pages fast.

Public feed endpoints

  • GET /{communityUsername}/events

    Public feed of upcoming events for a community. Returns JSON by default. Use ?format=xml for XML. Optional ?limit= (max 100).

    No API key. Available for all active communities.

Website feed quickstart

JSON (default)

curl -s "https://followto.io/my-community/events"

XML

curl -s "https://followto.io/my-community/events?format=xml"

Website feed response

JSON response shape:

{
  "feedUrl": "https://followto.io/my-community/events",
  "generatedAt": "2026-06-06T12:00:00.000Z",
  "community": {
    "username": "my-community",
    "name": "My Community",
    "url": "https://followto.io/my-community"
  },
  "total": 2,
  "events": [
    {
      "eventName": "Community Meetup",
      "title": "Community Meetup",
      "communityName": "My Community",
      "eventDate": "2026-09-26",
      "eventTime": "10:00",
      "eventTimeEnd": "18:00",
      "description": "<p>HTML description</p>",
      "descriptionPlain": "Plain text description",
      "url": "https://followto.io/online/my-community/community-meetup"
    },
    {
      "eventName": "The Domainer Retreat: Chikmagalur Edition",
      "title": "The Domainer Retreat: Chikmagalur Edition",
      "communityName": "Domainer Den",
      "eventDate": "2026-07-07",
      "eventTime": "12:00",
      "eventTimeEnd": "18:00",
      "eventDateEnd": "2026-07-09",
      "schedules": [
        { "eventDate": "2026-07-07", "eventTime": "12:00", "eventTimeEnd": "18:00" },
        { "eventDate": "2026-07-08", "eventTime": "10:00", "eventTimeEnd": "18:00" },
        { "eventDate": "2026-07-09", "eventTime": "09:00", "eventTimeEnd": "12:00" }
      ],
      "description": "<p>HTML description</p>",
      "descriptionPlain": "Plain text description",
      "url": "https://followto.io/india/chikkamagaluru/domainerden/the-domainer-retreat-chikmagalur-edition"
    }
  ]
}

Use title or eventName for headings, descriptionPlain for card excerpts, and url for the register or view link. Single-day events include eventDate, eventTime, and eventTimeEnd only. Multi-day events also include eventDateEnd (last day) and a schedules array with one entry per day (eventDate, eventTime, eventTimeEnd). Events stay listed until their end time passes in the organizer timezone (today's events remain until they finish).

Website integration guide

Recommended pattern (server-side fetch on your site):

1. Create a page such as /events on https://www.example.com
2. Fetch https://followto.io/{yourCommunityUsername}/events during render or in a server action
3. Map feed.events into cards: title, formatted date/time, short descriptionPlain, link to event.url
4. Handle an empty events array with a friendly message
5. Do not rebuild RSVP on your site; send visitors to event.url on FollowTo

Next.js example:

const res = await fetch("https://followto.io/my-community/events", {
  next: { revalidate: 300 },
});
const data = await res.json();
const items = data.events ?? [];

Optional query parameters:
- format=xml for XML instead of JSON
- limit=20 to cap results (default 100, max 100)

Organizer API authentication

Send your API key in the Authorization header:

Authorization: Bearer ft_live_...

Keys are shown only once when created. Store them securely. Revoke keys you no longer need from Settings.

Organizer API quickstart

curl -s \
  -H "Authorization: Bearer YOUR_API_KEY" \
  "https://followto.io/api/v1/communities"

Organizer API read endpoints

  • GET /api/v1/communities

    List communities you own (id, username, communityUrl, plan).

    API key required. Pro or Enterprise for scoped communities.

  • GET /api/v1/communities/{username}/events

    Upcoming and active events for a community. Public fields only; join URLs are not included. For embedding on your own website without an API key, use GET /{communityUsername}/events instead.

    API key required. Pro or Enterprise required for the community.

  • GET /api/v1/communities/{username}/registrations?eventId (required)

    Registration rows for an event you own.

    Pro or Enterprise required for the community.

  • GET /api/v1/events/{eventId}/ticket-sales

    Ticket sales summary and order rows for a ticketed event.

    Pro or Enterprise required for the community.

Rate limit: 120 requests per minute per API key or IP. Errors return { ok: false, code, message }.

Trusted partner APIs

Trusted partner write APIs (not available with self-service API keys)

Partners receive FOLLOWTO_TRUSTED_API_SECRET for server-to-server calls when they have already verified the attendee email on their platform.

Authorization: Bearer {FOLLOWTO_TRUSTED_API_SECRET}
Source allowlist: set FOLLOWTO_TRUSTED_API_SOURCES (comma-separated partner source ids). Requests with an unknown source return 403 INVALID_SOURCE.
Rate limit: 60 requests per minute per IP

POST /api/membership/trusted
Actions: follow, nofollow (communityUrl + email + source + consentAt on follow)

POST /api/rsvp/trusted
Actions: rsvp, cancel (eventUrl or communityUrl + eventSlug + email + source + consentAt on rsvp)

Free events and free public ticket tiers only. Paid checkout must happen on FollowTo.

Membership

POST /api/membership/trusted

Actions:
- follow: create or confirm a community membership with consent metadata
- nofollow: remove a membership for an email on a community

RSVP

POST /api/rsvp/trusted

Body location (one of):
- eventUrl: full public event URL (legacy or canonical path)
- communityUrl + eventSlug

Actions:
- rsvp: register and confirm without a FollowTo OTP (email pre-verified by partner)
- cancel: cancel an active registration for the email

Optional: ticketTypeId for free public ticket tiers on ticketed events.

Enterprise integrations (on request)

Enterprise integrations (provisioned on inquiry)

Contact support or sales when you need any of the following. We configure them per account:

- Outbound webhooks (registration confirmed, event published, ticket paid)
- Trusted partner API for membership and RSVP sync without double OTP
- Deletion audit log and retention status via API
- Custom rate limits and integration SLAs

Self-service API keys on Pro and Enterprise cover read access to your own community data today.