Google connection activity (feed + KPIs)

Overview

Google Business Profile connection-activity report for the caller's account tree. Returns the event feed (sign-ins, failures, connects, disconnects) newest first, plus funnel KPI totals for the same filter window. Reads gbp_connection_events scoped by partner_id to the caller's partner company.

Prerequisites

  • A bearer token in the Authorization header.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

GET /api/v1/partner/gbp-connection-events

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.

  • Bearer — partner role. The caller MUST be a partner-level user (company.bundle_id = 1), re-asserted in the controller. 403 (with an AUTHZ_DENIED audit event) for any non-partner caller; 401 if unauthenticated.

Rate limit

  • No rate limit.

Query parameters

FieldTypeRequiredDescription
fromdateOptionalInclude events on/after this day (start of day).
todateOptionalInclude events up to/including this day; must be >= from.
eventstringOptionalSingle event type, e.g. connection.connected, oauth.started, token.exchange_failed.
sourcestringOptionalPortal section: invite_link, connect_google_page, registration, settings, debugger, app, system, unknown.
company_idintegerOptionalFilter to one account — includes every location under it.
store_idintegerOptionalFilter to a single location.
searchstringOptionalMatch the connected Google account email (like). Max 255.
pageintegerOptionalPage number, min 1.
limitintegerOptionalPage size 10–100, values below 10 are raised to 10 (default 10).

How it works

  • 200 with { kpis, events }. events is a length-aware paginator; each row is a transformed shape (id, event, source, store_id, store_name, google_email, error_code, message, details, user_email, created_at). details is a human-readable summary synthesised from the event type + metadata.
  • 401 unauthenticated · 403 caller is not partner-level.

Response

200 OK · 200

{
  "data": {
    "kpis": {
      "logins_started": 42,
      "connections": 30,
      "failed_logins": 7,
      "no_locations_found": 3,
      "disconnects": 2
    },
    "events": {
      "current_page": 1,
      "data": [
        {
          "id": 101,
          "event": "connection.connected",
          "source": "invite_link",
          "store_id": 26,
          "store_name": "Board & Brew",
          "google_email": "[email protected]",
          "error_code": null,
          "message": null,
          "details": "Location connected successfully",
          "user_email": "[email protected]",
          "created_at": "2026-07-07T09:15:00+00:00"
        },
        {
          "id": 100,
          "event": "token.exchange_failed",
          "source": "connect_google_page",
          "store_id": 27,
          "store_name": "Sunrise Cafe",
          "google_email": null,
          "error_code": "invalid_grant",
          "message": "Auth code expired",
          "details": "invalid_grant — Auth code expired",
          "user_email": null,
          "created_at": "2026-07-07T08:02:11+00:00"
        }
      ],
      "first_page_url": "https://development-api.shoutaboutus.com/api/v1/partner/gbp-connection-events?page=1",
      "from": 1,
      "last_page": 9,
      "last_page_url": "https://development-api.shoutaboutus.com/api/v1/partner/gbp-connection-events?page=9",
      "next_page_url": "https://development-api.shoutaboutus.com/api/v1/partner/gbp-connection-events?page=2",
      "path": "https://development-api.shoutaboutus.com/api/v1/partner/gbp-connection-events",
      "per_page": 10,
      "prev_page_url": null,
      "to": 10,
      "total": 84
    }
  }
}

403 Forbidden · 403

{
  "message": "Only partner-level users can view Google connection activity.",
  "status": "error",
  "errors": {}
}

Errors

StatusMeaning
401Returned if unauthenticated
403Forbidden
422The request failed validation — the response names the fields
500Unexpected server error

Example request

curl --request GET \
  --url "https://production-api.shoutaboutus.com/api/v1/partner/gbp-connection-events?from=2026-06-01&to=2026-06-30&page=1&limit=10" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?