Skip to content

The group's events, earliest first

GET
/groups/{groupId}/events
curl --request GET \
--url 'https://app.grouperly.com/api/v2/groups/example/events?limit=50&status=DRAFT' \
--header 'Authorization: Bearer <token>'

Events with no start time come last. Every status is included, as members see them in Grouperly.

groupId
required
string

The credential’s group

limit
integer
default: 50 >= 1 <= 200

Items per page

cursor
string

From the previous page’s nextCursor; opaque

status
string
Allowed values: DRAFT PLANNED ACTIVE COMPLETED CANCELLED

Only events with this status (case-insensitive)

from
string format: date-time

Only events starting at or after this time (leaves out undated events)

to
string format: date-time

Only events starting before this time (leaves out undated events)

include
string

Comma-separated related data to add: rsvpCounts, ticketTypes, leaders. Anything else is a 400.

OK

Media typeapplication/json
object
items
required
Array<object>
object
id
required
string
groupId
required
string
seriesId
required
string | null
iterationLabel
required

E.g. “2026” for a yearly series

string | null
name
required
string
description
required
string | null
status
required
string
Allowed values: DRAFT PLANNED ACTIVE COMPLETED CANCELLED
startsAt
required
string | null format: date-time
endsAt
required
string | null format: date-time
allDay
required
boolean
timezone
required

IANA zone, e.g. “America/Chicago”

string | null
location
required
object
name
required
string | null
url
required
string | null
rsvp
required
object
enabled
required
boolean
deadline
required
string | null format: date-time
maxAttendees
required
integer | null
paymentRequired
required

A place counts only once it is paid for, or while its checkout is open (added in 2.12.0)

boolean
cost
required
object
perPerson
required
One of:
object
amount
required

A decimal string, e.g. “25.00”: never a float.

string
/^-?\d+\.\d{2}$/
currency
required

ISO 4217, e.g. “USD”.

string
/^[A-Z]{3}$/
description
required
string | null
paymentInstructions
required
string | null
circle
required
One of:
object
id
required
string
name
required

E.g. “Wolf Den”

string
kind
required
object
key
required

E.g. “den”

string
singular
required

E.g. “Den”

string
plural
required

E.g. “Dens”

string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
rsvpCounts

Present only with include=rsvpCounts.

object
going
required

Responses that said Going (households, not people)

integer
notGoing
required
integer
maybe
required
integer
pending
required
integer
totalAttendees
required

People on Going and Maybe responses. A response with no attendee rows counts as the responder plus its guest count (since 2.9.0; it counted 0 before).

integer
goingPeople
required

People on Going responses: what the event’s capacity counts (added in 2.9.0)

integer
maybePeople
required

People on Maybe responses (added in 2.9.0)

integer
paidAttendees
required

People on Going responses with a price who are paid for (added in 2.11.0)

integer
heldAttendees
required

People on Going responses whose checkout is holding their place (added in 2.11.0)

integer
unpaidAttendees
required

People on Going responses still owed for, in full or in part (added in 2.11.0)

integer
confirmedAttendees
required

People on Going responses with a place when payment is required to hold one: paid for, in checkout, or free with nothing owed on their response (added in 2.12.0)

integer
ticketTypes

Present only with include=ticketTypes.

Array<object>
object
id
required
string
name
required
string
description
required
string | null
price
required
object
amount
required

A decimal string, e.g. “25.00”: never a float.

string
/^-?\d+\.\d{2}$/
currency
required

ISO 4217, e.g. “USD”.

string
/^[A-Z]{3}$/
active
required
boolean
leaders

Who leads the event: whoever holds its organizer or lead role, then the leaders of its circle. Always on one event; on the list with include=leaders. A leader who may be a youth is left out without roster.youth.read (added in 2.18.0).

Array<object>
object
userId
required
string
contactId
required

Their roster entry in the event’s group, as on RSVP attendees; null if they have none

string | null
name
required

The roster’s name, else the account’s

string | null
role
required

ORGANIZER or LEAD: an event role, given in Grouperly. CIRCLE_LEADER: a leader of the event’s circle, through a roster entry linked to their account. Someone holding two is listed for each. More may be added: treat one you don’t know as a leader.

string
viewer

The signed-in person’s relation to the event. Only for an app’s access token; a group key isn’t a person (added in 2.18.0).

object
isLeader
required

The signed-in person is one of the event’s leaders: they hold its organizer or lead role, or lead its circle. The group’s owners and admins aren’t, unless they hold a role (their role is on /me/groups).

boolean
nextCursor
required

Pass as ?cursor= for the next page; null on the last page.

string | null
Example
{
"items": [
{
"status": "DRAFT"
}
]
}
X-RateLimit-Limit
integer

Requests allowed per minute for this credential

X-RateLimit-Remaining
integer

Requests left in this window

X-RateLimit-Reset
integer

When the window ends (Unix seconds)

A query parameter is malformed or unknown (invalid_parameter, with parameter)

Media typeapplication/json
object
error
required
object
code
required

Stable and machine-readable: unauthorized, forbidden, insufficient_scope, key_owner_not_leader, app_not_installed, scope_not_allowed, app_suspended, rate_limited, not_found, invalid_parameter, invalid_body, invalid_profile, invalid_descriptor, no_profile, already_exists, not_a_member, position_inactive, position_full, already_assigned, assignment_ended, version_not_current, nothing_to_pay, payments_not_ready, payload_too_large, first_party_only, terms_required, child_account, assistant_off, not_for_assistant, assistant_failed, not_a_draft, storage_full, unavailable, internal_error. New codes may be added.

string
message
required

For people; wording may change.

string
parameter

The query parameter (invalid_parameter) or body field (invalid_body, not_a_member) at fault.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"parameter": "example"
}
}
X-RateLimit-Limit
integer

Requests allowed per minute for this credential

X-RateLimit-Remaining
integer

Requests left in this window

X-RateLimit-Reset
integer

When the window ends (Unix seconds)

Missing, unknown, revoked or expired credential (unauthorized)

Media typeapplication/json
object
error
required
object
code
required

Stable and machine-readable: unauthorized, forbidden, insufficient_scope, key_owner_not_leader, app_not_installed, scope_not_allowed, app_suspended, rate_limited, not_found, invalid_parameter, invalid_body, invalid_profile, invalid_descriptor, no_profile, already_exists, not_a_member, position_inactive, position_full, already_assigned, assignment_ended, version_not_current, nothing_to_pay, payments_not_ready, payload_too_large, first_party_only, terms_required, child_account, assistant_off, not_for_assistant, assistant_failed, not_a_draft, storage_full, unavailable, internal_error. New codes may be added.

string
message
required

For people; wording may change.

string
parameter

The query parameter (invalid_parameter) or body field (invalid_body, not_a_member) at fault.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"parameter": "example"
}
}

A key: wrong group (forbidden), missing scope (insufficient_scope), or its creator no longer leads the group (key_owner_not_leader). An app’s token: missing scope (insufficient_scope), the group hasn’t installed the app (app_not_installed) or allowed the scope (scope_not_allowed, the message has the consent link), the person may not do this in the group (forbidden), Grouperly paused the app (app_suspended), the person hasn’t accepted Grouperly’s current Terms (terms_required: refresh their token, then send them to the hub’s /account/welcome), or it’s a child’s account (child_account)

Media typeapplication/json
object
error
required
object
code
required

Stable and machine-readable: unauthorized, forbidden, insufficient_scope, key_owner_not_leader, app_not_installed, scope_not_allowed, app_suspended, rate_limited, not_found, invalid_parameter, invalid_body, invalid_profile, invalid_descriptor, no_profile, already_exists, not_a_member, position_inactive, position_full, already_assigned, assignment_ended, version_not_current, nothing_to_pay, payments_not_ready, payload_too_large, first_party_only, terms_required, child_account, assistant_off, not_for_assistant, assistant_failed, not_a_draft, storage_full, unavailable, internal_error. New codes may be added.

string
message
required

For people; wording may change.

string
parameter

The query parameter (invalid_parameter) or body field (invalid_body, not_a_member) at fault.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"parameter": "example"
}
}
X-RateLimit-Limit
integer

Requests allowed per minute for this credential

X-RateLimit-Remaining
integer

Requests left in this window

X-RateLimit-Reset
integer

When the window ends (Unix seconds)

Rate limited (rate_limited)

Media typeapplication/json
object
error
required
object
code
required

Stable and machine-readable: unauthorized, forbidden, insufficient_scope, key_owner_not_leader, app_not_installed, scope_not_allowed, app_suspended, rate_limited, not_found, invalid_parameter, invalid_body, invalid_profile, invalid_descriptor, no_profile, already_exists, not_a_member, position_inactive, position_full, already_assigned, assignment_ended, version_not_current, nothing_to_pay, payments_not_ready, payload_too_large, first_party_only, terms_required, child_account, assistant_off, not_for_assistant, assistant_failed, not_a_draft, storage_full, unavailable, internal_error. New codes may be added.

string
message
required

For people; wording may change.

string
parameter

The query parameter (invalid_parameter) or body field (invalid_body, not_a_member) at fault.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"parameter": "example"
}
}
X-RateLimit-Limit
integer

Requests allowed per minute for this credential

X-RateLimit-Remaining
integer

Requests left in this window

X-RateLimit-Reset
integer

When the window ends (Unix seconds)

Retry-After
integer

Seconds to wait

An app’s token for someone new, while Grouperly’s sign-in can’t be reached (unavailable); try again

Media typeapplication/json
object
error
required
object
code
required

Stable and machine-readable: unauthorized, forbidden, insufficient_scope, key_owner_not_leader, app_not_installed, scope_not_allowed, app_suspended, rate_limited, not_found, invalid_parameter, invalid_body, invalid_profile, invalid_descriptor, no_profile, already_exists, not_a_member, position_inactive, position_full, already_assigned, assignment_ended, version_not_current, nothing_to_pay, payments_not_ready, payload_too_large, first_party_only, terms_required, child_account, assistant_off, not_for_assistant, assistant_failed, not_a_draft, storage_full, unavailable, internal_error. New codes may be added.

string
message
required

For people; wording may change.

string
parameter

The query parameter (invalid_parameter) or body field (invalid_body, not_a_member) at fault.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"parameter": "example"
}
}