Skip to Content
APIExport Meetings

Export Meetings

Retrieve a flat list of your organization’s meetings, where you choose exactly which meeting columns to return and which date range to cover. Each record is one meeting (its scheduling details, capacity, pricing, facilitator, and configuration flags) — not its attendees.

This is the API behind the “List Meetings from API” export tool in the organization dashboard. It returns the raw, stored values for each meeting so they can be dropped straight into a spreadsheet, data warehouse, or another system.

When To Use This Endpoint

Use Export Meetings when you want a customizable, spreadsheet-style dump of the meetings themselves over an arbitrary date range. Typical uses:

  • Exporting a catalogue or schedule of your meetings into Excel/Google Sheets, a BI tool, or a data warehouse.
  • Pulling meeting metadata (titles, types, hosts, prices, capacity, group leader) for a reporting period to build internal reports or reconcile records.
  • Syncing meeting definitions into an external system, choosing only the columns you need.

Reach for a different endpoint when:

  • You need to know who attended, registered, joined, or was waitlisted — use Meeting Attendance, which returns one row per attendee.
  • You need a live, paginated “what’s coming up” feed for display (with attendee counts and group-leader avatars) — use Upcoming Meetings, which returns an enriched, display-ready shape.

In short: Export Meetings = the meetings catalogue, your columns, any date range. Meeting Attendance = the roster. Upcoming Meetings = the display feed.

Endpoint

  • GET: /api/v2/organizations/:id/export_meetings
  • POST: /api/v2/organizations/:id/export_meetings

GET is the recommended method — this endpoint only reads data. POST behaves identically and is retained for backwards compatibility with existing integrations.

Authentication

  • Authorization: Bearer <token> header
  • Token must resolve to the target organization via AuthorizeApiRequest. The :id in the URL must be your organization’s id.

Request Parameters

Send the parameters as query-string parameters with GET, or as a JSON body with POST. The parameter names are the same either way; with GET, pass the column list as a repeated column[] parameter (e.g. ?column[]=name&column[]=topic).

NameTypeDefaultDescription
columnArray<String>The meeting columns to include in each row. If omitted or empty, the response is { "success": true, "meetings": [] }. See the supported keys below.
reporting_daysStringallDate-range preset for which meetings to include (see below).
start_timeStringStart of a custom range. Format: MM/DD/YYYY HH:MM AM/PM (e.g. 11/01/2025 08:00 AM).
end_timeStringEnd of a custom range. Same format as start_time.
report_typeStringall_meetingsall_meetings for all of your organization’s meetings, or eap_meetings to limit the export to your Employee Assistance Program (enrolled-member) meetings.
pageIntegerPage number (1-indexed). Supplying this (or per_page) turns on pagination — see Pagination.
per_pageInteger100Items per page when pagination is enabled. Clamped to 1..100.

reporting_days values

ValueMeetings returned
all (default) / omittedCompleted (past) meetings only.
all_pastCompleted (past) meetings.
all_upcomingUpcoming meetings (not yet ended, not cancelled/completed).
todayMeetings starting today.
current_monthMeetings starting in the current month.
last_weekMeetings starting in the previous week.
last_monthMeetings starting in the previous month.
customMeetings starting within start_timeend_time (both required).

Heads up: with no reporting_days (or all), the export defaults to completed, past meetings only. To export future meetings, pass reporting_days=all_upcoming. If both start_time and end_time are supplied, that explicit range is always applied on top of the preset.

Supported column keys

KeyLabelTypeNotes
nameNameString
meeting_typeMeeting TypeStringe.g. Group, OneToOne.
start_timeStart TimeStringISO 8601 datetime (UTC).
durationDurationIntegerStored duration value.
statusStatusStringe.g. scheduled, complete, cancel.
topicTopicString
special_focusSpecial FocusString
hostHostString
locationLocationStringPlatform the meeting runs on: heypeers or zoom.
pricePriceNumberDefaults to 0 when no price is set.
max_attendeesMax RegistrantsInteger
meeting_descriptionDescriptionString
group_leader_idGroup LeaderInteger | nullReturned under the key group_leader, as the leader’s user id (or null).
privacyPrivacyBoolean
eapEAP MeetingBoolean
allow_meeting_donationDonation AllowedBoolean
invitation_onlyInvitation OnlyBoolean
wait_listWait ListBoolean

Each object in the response contains only the keys you requested. With the single exception of group_leader_id (returned as group_leader), the response key matches the column key you sent.

Pagination

By default this endpoint returns every matching meeting in a single response, so existing integrations keep working unchanged. Pagination is opt-in: supply a page and/or per_page parameter and the response switches to a paginated shape that adds a metadata block.

  • The default page size is 100; per_page may be 1..100.
  • Paginated results are ordered by start_time ascending, then id, so page boundaries are stable across requests.
  • Without page or per_page, the response keeps the unpaginated { "success": true, "meetings": [...] } shape and includes no metadata.

Recommended: new integrations should paginate (e.g. ?page=1&per_page=100) and follow metadata.total_pages to iterate. For organizations with a large meeting history, an unpaginated call can return a very large payload.

Example Request

GET /api/v2/organizations/5/export_meetings?reporting_days=all_upcoming&column[]=name&column[]=meeting_type&column[]=start_time&column[]=status&column[]=group_leader_id&column[]=price Authorization: Bearer <token> Accept: application/json
curl -G "https://heypeers.com/api/v2/organizations/{ORG_ID}/export_meetings" \ -H "Authorization: Bearer {TOKEN}" \ -H "Accept: application/json" \ --data-urlencode "reporting_days=custom" \ --data-urlencode "start_time=11/01/2025 08:00 AM" \ --data-urlencode "end_time=11/30/2025 05:00 PM" \ --data-urlencode "column[]=name" \ --data-urlencode "column[]=start_time" \ --data-urlencode "column[]=max_attendees" \ --data-urlencode "column[]=location"

POST (legacy, still supported)

POST /api/v2/organizations/5/export_meetings Authorization: Bearer <token> Content-Type: application/json Accept: application/json
{ "reporting_days": "all_upcoming", "column": ["name", "meeting_type", "start_time", "status", "group_leader_id", "price"] }

Success Response

200 OK

Default (unpaginated) — returned when neither page nor per_page is supplied:

{ "success": true, "meetings": [ { "name": "Morning Grief Support Circle", "meeting_type": "Group", "start_time": "2026-05-23T15:00:00.000Z", "status": "scheduled", "group_leader": 4501, "price": 0 }, { "name": "Evening Recovery Check-in", "meeting_type": "Group", "start_time": "2026-05-24T23:30:00.000Z", "status": "scheduled", "group_leader": 4502, "price": 10 } ] }

Paginated — returned when page and/or per_page is supplied:

{ "success": true, "metadata": { "page": 1, "per_page": 100, "total_pages": 3, "total_count": 250 }, "meetings": [ { "name": "Morning Grief Support Circle", "meeting_type": "Group", "start_time": "2026-05-23T15:00:00.000Z", "status": "scheduled", "group_leader": 4501, "price": 0 } ] }

Response Fields

FieldTypeDescription
successBooleantrue when the request succeeds.
metadataObjectPagination details. Only present when the request is paginated (see below).
meetingsArrayOne object per matching meeting. Each object contains exactly the keys you requested via column (with group_leader_id returned as group_leader).

metadata object (paginated responses only)

FieldTypeDescription
pageIntegerCurrent page number.
per_pageIntegerPage size used for the response.
total_pagesIntegerTotal number of pages across the full result set.
total_countIntegerTotal number of matching meetings across all pages.

Error Responses

  • 400 Bad Request
    • { "error": "<message>" } for an unexpected error (also reported to Bugsnag with info severity).
  • 401 Unauthorized
    • { "error": "Unauthorized Access" } when the bearer token does not resolve to an organization.
    • { "error": "Not Authorized" } when the token resolves to a different organization than the one in the URL.

Notes

  • GET and POST are equivalent. Both accept the same parameters and return the same response. GET is recommended for new integrations; POST is kept so existing integrations keep working unchanged.
  • Pagination is opt-in. Without page/per_page the endpoint returns every matching meeting in a single response (unchanged legacy behaviour). Supply page/per_page to paginate — recommended for organizations with a large meeting history, where an unpaginated call can return a very large payload. See Pagination.
  • Raw stored values. Unlike Upcoming Meetings, this endpoint does not add computed fields (no registered-attendee counts, no group-leader avatar). Values are returned as stored on the meeting record.
  • An empty or missing column array is not an error — it returns "meetings": [].
  • report_type=eap_meetings limits the export to your organization’s enrolled-member (EAP) meetings.
  • For organizations running an Employee Assistance Program (EAP), the default all_meetings scope also includes associated HeyPeers Counseling (HPC) meetings.
Last updated on