Events
bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
status?|array<>Filter by status (repeatable). Default: every status except archived.
Events of the account, newest first.
application/json- response
items*array<>curl -X GET 'https://app.groupilot.com/api/v1/events'{ "items": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "slug": "string", "type": "punctual", "status": "draft", "timezone": "string", "recurrence": { "days": [ "sun" ], "time": "string", "timezone": "string", "excluded_dates": [ "string" ] }, "sequence_id": "7cd84c09-94f4-486c-9c49-de3b9cf3f74f", "smart_link": "http://example.com", "link_fallback_url": "http://example.com", "rotation_delay_hours": 0, "community": { "name_template": "string", "description": "string", "days_before": 1, "overflow_switch_at": 0, "modify_groups_policy": "anyone", "member_add_mode": "anyone" }, "member_webhook_configured": true, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" } ]}Send an Idempotency-Key header to make retries safe (24 h).
bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
application/json- body
name*string1 <= length <= 120slug*stringLowercase letters, digits and dashes. Ends the smart link; cannot change later.
^[a-z0-9]+(?:-[a-z0-9]+)*$1 <= length <= 60type*EventType"punctual""recurring"timezone?stringIANA zone. Defaults to the account's timezone. Cannot change later.
1 <= length <= 64recurrence?Required for a recurring event; the timezone is the event's.
link_fallback_url?|urilength <= 2000rotation_delay_hours?integer0 <= value <= 168community?Created. A recurring event gets its occurrences created by the scheduler within minutes; a punctual event needs POST /events/{id}/occurrences.
application/json- response
id*stringuuidname*stringslug*stringtype*EventType"punctual""recurring"status*EventStatusactive: communities are created and messages sent. paused: nothing is sent and the smart link goes to the fallback URL (or an inactive page). archived: stopped for good. draft: not started.
"draft""active""paused""archived"timezone*stringrecurrence*|Weekly recurrence in the event's timezone.
sequence_id*|The linked sequence, if any.
uuidsmart_link*stringThe one link to put in your funnel: it always redirects to the next community.
urilink_fallback_url*|urirotation_delay_hours*integerHours after the live during which the smart link still points to that occurrence.
community*member_webhook_configured*booleancreated_at*stringISO 8601 date-time with offset.
date-timeupdated_at*stringISO 8601 date-time with offset.
date-timesmart_link_destination*curl -X POST 'https://app.groupilot.com/api/v1/events' \ -H 'Content-Type: application/json' \ -d '{ "name": "string", "slug": "string", "type": "punctual"}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "slug": "string", "type": "punctual", "status": "draft", "timezone": "string", "recurrence": { "days": [ "sun" ], "time": "string", "timezone": "string", "excluded_dates": [ "string" ] }, "sequence_id": "7cd84c09-94f4-486c-9c49-de3b9cf3f74f", "smart_link": "http://example.com", "link_fallback_url": "http://example.com", "rotation_delay_hours": 0, "community": { "name_template": "string", "description": "string", "days_before": 1, "overflow_switch_at": 0, "modify_groups_policy": "anyone", "member_add_mode": "anyone" }, "member_webhook_configured": true, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "smart_link_destination": { "reason": "group", "url": "string", "occurrence_id": "8508ee33-23a1-4a06-ae02-1eb167405e7b", "group_number": 0 }}bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidThe event with its current smart link destination.
application/json- response
id*stringuuidname*stringslug*stringtype*EventType"punctual""recurring"status*EventStatusactive: communities are created and messages sent. paused: nothing is sent and the smart link goes to the fallback URL (or an inactive page). archived: stopped for good. draft: not started.
"draft""active""paused""archived"timezone*stringrecurrence*|Weekly recurrence in the event's timezone.
sequence_id*|The linked sequence, if any.
uuidsmart_link*stringThe one link to put in your funnel: it always redirects to the next community.
urilink_fallback_url*|urirotation_delay_hours*integerHours after the live during which the smart link still points to that occurrence.
community*member_webhook_configured*booleancreated_at*stringISO 8601 date-time with offset.
date-timeupdated_at*stringISO 8601 date-time with offset.
date-timesmart_link_destination*curl -X GET 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "slug": "string", "type": "punctual", "status": "draft", "timezone": "string", "recurrence": { "days": [ "sun" ], "time": "string", "timezone": "string", "excluded_dates": [ "string" ] }, "sequence_id": "7cd84c09-94f4-486c-9c49-de3b9cf3f74f", "smart_link": "http://example.com", "link_fallback_url": "http://example.com", "rotation_delay_hours": 0, "community": { "name_template": "string", "description": "string", "days_before": 1, "overflow_switch_at": 0, "modify_groups_policy": "anyone", "member_add_mode": "anyone" }, "member_webhook_configured": true, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "smart_link_destination": { "reason": "group", "url": "string", "occurrence_id": "8508ee33-23a1-4a06-ae02-1eb167405e7b", "group_number": 0 }}The slug (smart link) and the timezone cannot change; name can (the link and the existing communities keep their names, the next communities use the new one). Status changes go through pause / resume; the recurrence through recurrence; the sequence through sequence.
bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidapplication/json- body
name?stringDisplay name. The slug (smart link) and the communities that already exist keep their names; the next communities use the new one.
1 <= length <= 120type?EventType"punctual""recurring"link_fallback_url?|urilength <= 2000rotation_delay_hours?integer0 <= value <= 168community?apply_to_existing_communities?Also rename / re-describe the communities that already exist on WhatsApp.
Updated.
application/json- response
event*existing_communities*|nullcurl -X PATCH 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08' \ -H 'Content-Type: application/json' \ -d '{}'{ "event": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "slug": "string", "type": "punctual", "status": "draft", "timezone": "string", "recurrence": { "days": [ "sun" ], "time": "string", "timezone": "string", "excluded_dates": [ "string" ] }, "sequence_id": "7cd84c09-94f4-486c-9c49-de3b9cf3f74f", "smart_link": "http://example.com", "link_fallback_url": "http://example.com", "rotation_delay_hours": 0, "community": { "name_template": "string", "description": "string", "days_before": 1, "overflow_switch_at": 0, "modify_groups_policy": "anyone", "member_add_mode": "anyone" }, "member_webhook_configured": true, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" }, "existing_communities": { "total": 0, "succeeded": 0, "failed": 0, "skipped": 0 }}Nothing is sent and no scheduled community is created while paused (an overflow community can still open if a community fills up); the smart link goes to the fallback URL if set. Resume later; messages whose time passed during the pause are not sent.
bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidPaused (or already paused).
application/json- response
status*string"active""paused"changed*booleancanceled_elapsed_jobs?integercurl -X POST 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08/pause'{ "status": "active", "changed": true, "canceled_elapsed_jobs": 0}bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidActive again.
application/json- response
status*string"active""paused"changed*booleancanceled_elapsed_jobs?integercurl -X POST 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08/resume'{ "status": "active", "changed": true, "canceled_elapsed_jobs": 0}bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidapplication/json- body
sequence_id*|null unlinks. Pending sends of future occurrences are replaced.
uuidLinked.
application/json- response
event*created_jobs*integercurl -X PUT 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08/sequence' \ -H 'Content-Type: application/json' \ -d '{ "sequence_id": "7cd84c09-94f4-486c-9c49-de3b9cf3f74f"}'{ "event": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "slug": "string", "type": "punctual", "status": "draft", "timezone": "string", "recurrence": { "days": [ "sun" ], "time": "string", "timezone": "string", "excluded_dates": [ "string" ] }, "sequence_id": "7cd84c09-94f4-486c-9c49-de3b9cf3f74f", "smart_link": "http://example.com", "link_fallback_url": "http://example.com", "rotation_delay_hours": 0, "community": { "name_template": "string", "description": "string", "days_before": 1, "overflow_switch_at": 0, "modify_groups_policy": "anyone", "member_add_mode": "anyone" }, "member_webhook_configured": true, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" }, "created_jobs": 0}Occurrences that no longer match are canceled with their pending sends; new ones are created with their sends. Past occurrences are kept. Use dry_run to preview.
bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidapplication/json- body
recurrence*regenerate_window_weeks?integer1 <= value <= 524dry_run?booleanfalseDiff (and the event when applied).
application/json- response
dry_run*booleanidempotent*booleanadded*array<>cancelled*array<>kept*array<>event?curl -X PUT 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08/recurrence' \ -H 'Content-Type: application/json' \ -d '{ "recurrence": { "days": [ "sun" ], "time": "string" }}'{ "dry_run": true, "idempotent": true, "added": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "scheduled_at": "2019-08-24T14:15:22Z" } ], "cancelled": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "scheduled_at": "2019-08-24T14:15:22Z" } ], "kept": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "scheduled_at": "2019-08-24T14:15:22Z" } ], "event": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "name": "string", "slug": "string", "type": "punctual", "status": "draft", "timezone": "string", "recurrence": { "days": [ "sun" ], "time": "string", "timezone": "string", "excluded_dates": [ "string" ] }, "sequence_id": "7cd84c09-94f4-486c-9c49-de3b9cf3f74f", "smart_link": "http://example.com", "link_fallback_url": "http://example.com", "rotation_delay_hours": 0, "community": { "name_template": "string", "description": "string", "days_before": 1, "overflow_switch_at": 0, "modify_groups_policy": "anyone", "member_add_mode": "anyone" }, "member_webhook_configured": true, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" }}bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidDefault number, future rule, communities.
application/json- response
available*booleanFalse while the feature is switched off server side.
default*|nullfuture_rule*|nullcommunities*array<>curl -X GET 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08/backup-admin'{ "available": true, "default": { "target": { "phone_masked": "string" }, "revision": 0, "updated_at": "2019-08-24T14:15:22Z" }, "future_rule": { "enabled": true, "target": { "phone_masked": "string" }, "revision": 0, "start_occurrence_id": "fc636b8e-5fb7-4adb-8f91-7b4d71b66bf6", "starts_at": "2019-08-24T14:15:22Z" }, "communities": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "occurrence_id": "8508ee33-23a1-4a06-ae02-1eb167405e7b", "scheduled_at": "2019-08-24T14:15:22Z", "name": "string", "number": 0, "selectable": true, "current": { "target": { "phone_masked": "string" }, "status": "string", "verified_at": "2019-08-24T14:15:22Z" } } ]}The number is checked on WhatsApp first, so this route is limited to 6 calls per minute per account, shared with the preview. Both numbers must have each other saved as contacts, or WhatsApp may flag the addition. Nothing is applied until a preview is confirmed.
bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidapplication/json- body
phone_e164*string^\+[1-9][0-9]{7,14}$expected_revision?|1 <= valuenullconsent_confirmed*trueYou confirm the person agrees to be made administrator.
truecontact_requirements_confirmed*trueYou confirm both numbers have each other saved as contacts.
trueSaved.
application/json- response
available*booleanFalse while the feature is switched off server side.
default*|nullfuture_rule*|nullcommunities*array<>curl -X PUT 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08/backup-admin' \ -H 'Content-Type: application/json' \ -d '{ "phone_e164": "string", "consent_confirmed": true, "contact_requirements_confirmed": true}'{ "available": true, "default": { "target": { "phone_masked": "string" }, "revision": 0, "updated_at": "2019-08-24T14:15:22Z" }, "future_rule": { "enabled": true, "target": { "phone_masked": "string" }, "revision": 0, "start_occurrence_id": "fc636b8e-5fb7-4adb-8f91-7b4d71b66bf6", "starts_at": "2019-08-24T14:15:22Z" }, "communities": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "occurrence_id": "8508ee33-23a1-4a06-ae02-1eb167405e7b", "scheduled_at": "2019-08-24T14:15:22Z", "name": "string", "number": 0, "selectable": true, "current": { "target": { "phone_masked": "string" }, "status": "string", "verified_at": "2019-08-24T14:15:22Z" } } ]}Returns what would change, with a preview_id valid 10 minutes. Confirm it with confirm. 6 calls per minute per account, shared with PUT /events/{id}/backup-admin.
bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidapplication/json- body
action*string"apply""retry""stop""enable_rule""stop_rule"community_ids?array<>Required for apply, retry and stop. apply and retry take one community at a time until bulk protection opens (409 bulk_apply_disabled).
items <= 250target?Required for apply and enable_rule.
start_occurrence_id?stringFor enable_rule: first occurrence covered.
uuidPreview.
application/json- response
preview_id*stringuuidexpires_at*stringISO 8601 date-time with offset.
date-timeaction*stringtarget*community_count*integeraffected_count*integercommunities*array<>curl -X POST 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08/backup-admin/preview' \ -H 'Content-Type: application/json' \ -d '{ "action": "apply"}'{ "preview_id": "38381d54-bf0b-45bb-b5de-59c664e2cf04", "expires_at": "2019-08-24T14:15:22Z", "action": "string", "target": { "phone_masked": "string" }, "community_count": 0, "affected_count": 0, "communities": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "occurrence_id": "8508ee33-23a1-4a06-ae02-1eb167405e7b", "disposition": "string", "status": "string" } ]}Irreversible on WhatsApp for the communities concerned. Both acknowledgements are mandatory.
bearerAuthAuthorizationBearer <token>An API key created in Settings > Integrations (gp_live_…), or an OAuth access token.
id*stringuuidapplication/json- body
preview_id*stringuuidconsent_confirmed*truetruecontact_requirements_confirmed*truetrueAccepted; applied by the scheduler within minutes.
application/json- response
accepted*truetrueaction*stringaffected_count*integercurl -X POST 'https://app.groupilot.com/api/v1/events/497f6eca-6276-4993-bfeb-53cbbbba6f08/backup-admin/confirm' \ -H 'Content-Type: application/json' \ -d '{ "preview_id": "38381d54-bf0b-45bb-b5de-59c664e2cf04", "consent_confirmed": true, "contact_requirements_confirmed": true}'{ "accepted": true, "action": "string", "affected_count": 0}