Groupilot Docs

Quickstart

Create an API key, make your first call and create a one-off event with its sequence in five minutes.

Create an API key

In the app, open Settings, Integrations, New API key. Give it a name ("Make", "my-crm"), pick the scopes, and copy the key: it is shown once. See API keys.

Check who you are

curl https://app.groupilot.com/api/v1/me \
  -H "Authorization: Bearer gp_live_xxxxxxxxxxxxxxxx"
{
  "project": { "id": "…", "name": "Marie Coaching", "slug": "marie-coaching", "timezone": "Europe/Paris", "billing": "active", "automation_blocked": false, "created_at": "2026-10-01T09:00:00+02:00" },
  "channel": { "state": "connected", "phone_masked": "+33 6 •• •• •• 12", "connected_at": "2026-11-03T09:10:00+01:00" },
  "key": { "id": "…", "key_id": "gp_live_ab12", "scopes": ["read", "write"] },
  "limits": { "read_per_minute": 120, "write_per_minute": 30, "broadcasts_per_day": 8, "adhoc_messages_per_day": 30, "media_per_day": 50 }
}

channel is null while no number is linked. billing is active, trialing or inactive. A 403 means the API is not turned on for this project yet, or the key lacks the scope: the message says which.

Create a sequence

curl -X PUT https://app.groupilot.com/api/v1/sequences/sync \
  -H "Authorization: Bearer gp_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "launch-nov",
    "name": "Launch webinar",
    "messages": [
      { "external_id": "m1", "timing": "J-1 10:00", "type": "text", "text": "Tomorrow {J:jour} at 8 pm, live." },
      { "external_id": "m2", "timing": "J0 19:55", "type": "text", "text": "We are live in 5 minutes.", "ghost_mention": true }
    ]
  }'

The response returns the sequence with its id and created: true. Calling it again with the same external_id updates it instead of creating a duplicate.

curl -X POST https://app.groupilot.com/api/v1/events \
  -H "Authorization: Bearer gp_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7d2c1b7e-launch-nov" \
  -d '{
    "name": "Launch webinar",
    "slug": "launch-webinar",
    "type": "punctual",
    "community": { "days_before": 5 }
  }'

The response includes smart_link: that is the link to put on the confirmation page. The event has no date yet: add one, then link the sequence.

curl -X POST "https://app.groupilot.com/api/v1/events/<event_id>/occurrences" \
  -H "Authorization: Bearer gp_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "scheduled_at_local": "2026-11-20T20:00" }'
curl -X PUT "https://app.groupilot.com/api/v1/events/<event_id>/sequence" \
  -H "Authorization: Bearer gp_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "sequence_id": "<id from the previous step>" }'

The community is created 5 days before the live, the two messages are planned for it (created_jobs: 2).

Watch the planned sends

curl "https://app.groupilot.com/api/v1/events/<event_id>/jobs?status=scheduled&order=asc" \
  -H "Authorization: Bearer gp_live_xxxxxxxxxxxxxxxx"

The response is { "items": [...], "next_cursor": null }. Each item has a status (scheduled, billing_paused, overdue, sent, partial, failed, canceled), its send_at, its content and per-community delivery counts. The same list is in the Messages tab of the event in the app. Full shape in the Messages reference.

Next

On this page