Posts

An overview of posts on Circle

Post types

There are three types of posts in Circle spaces:

  • Basic:

    • A post in a post space.

    • Supports text, links, images, videos, embedded media and much more.

    • Ideal for general discussions, announcements, or longer-form content.

  • Event:

    • An event in an event space.

    • Includes a sophisticated but simple body and meta information

    • Optimal for visual storytelling, portfolios, or product showcases.

  • Image:

    • A image in an image space.

    • Supports single or multiple images.

    • Optimal for visual storytelling, portfolios, or product showcases.

Basic posts

Here's an example of the structure of a basic post in a posts space:

{
  post_type: 'basic',
  space_type: 'basic',
  id: number,
  name: string,
  display_title: string,
  slug: string,
  body: {
    attachments: {},
    html: string,
  },
  body_plain_text: string,
  url: string,
  created_at: string,
  updated_at: string,
  space: {
    id: number,
    slug: string,
    name: string,
    emoji: string,
  },
  author: {
    id: number,
    name: string,
    avatar_url: string,
    roles: string[],
  },
  tiptap_body: TipTapRichTextBody
  // ... other attributes
}

Image posts

Image posts are similar to basic posts, but include a gallery attribute:

  • gallery: An array of images, each containing (along side other attributes):

    • Original image URL

    • Optimized image URL (for improved performance)

    • Dimensions (width and height)

gallery: {
  id: number
  downloadable_images: boolean
  images: {
    id: number
    signed_id: string
    original_url: string
    url: string
    filename: string
    width: number
    height: number
  }[]
}

Galleries supports multiple images per post, and images are optimized automatically upon upload. An image may include additional metadata such dimensions, file size, EXIF data.

Event posts

Event posts are designed for managing and displaying events in an event space.

In addition to the output from a basic post, you'll find event-specific attributes such as:

{
  tiptap_body: TipTapRichTextBody
  event_attendees?: {
    count: number;
    records: User[];
  };
  event_settings_attributes: {
    starts_at: string;
    ends_at: string;
    in_person_location: string | null;
    hide_location_from_non_attendees: boolean;
    duration_in_seconds: number;
    rsvp_disabled: boolean;
    hide_attendees: boolean;
    send_email_reminder: boolean;
    send_in_app_notification_reminder: boolean;
    send_email_confirmation: boolean;
    send_in_app_notification_confirmation: boolean;
    enable_custom_thank_you_message: boolean;
    confirmation_message_title: string | null;
    confirmation_message_description: string | null;
    confirmation_message_button_title: string | null;
    confirmation_message_button_link: string | null;
    location_type: LocationType;
    virtual_location_url: string | null;
    live_stream_recording_url?: string | null;
    rsvp_limit?: number | null;
    rsvp_count: number;
  };
  event_recurring_settings_attributes: {
    frequency: 'daily' | 'weekly' | 'bi_weekly' | 'monthly' | 'monthly_weekday_based' | 'annually';
    ends_at: string;
    occurrences: string | null;
    range_type: string;
  };
  paywall_attributes?: {
    amount: number
    checkout_url: string
    currency_code: string
    currency_symbol: string
  }
  // ... other post attributes
}

Last updated