CLIENT API / V1 GOOGLE ANALYTICS 4

Poll an authorized site's GA4 collection job

GET/sites/{site_id}/ga4/jobs/{job_id}analytics:read

Requires analytics:read. Does not require jobs:read. Only ga4-store-collect jobs within the granted company/site are visible. Returns the standard Job DTO without worker messages or internal output. Repeat the report GET when status is succeeded.

RequestGET https://satelliteai.io/api/v1/sites/{site_id}/ga4/jobs/{job_id}
Permissionanalytics:read
ResponseA single object: data is Job.
Operation IDgetGa4CollectionJob

More context and worked examples are in the developer guide.

Example request

cURL · Bash
curl --fail-with-body \
  'https://satelliteai.io/api/v1/sites/123/ga4/jobs/JOB_ID' \
  -H "Authorization: Bearer $SATELLITE_API_KEY"

Replace the example IDs with values returned by the discovery endpoints. Example values are placeholders, not real records.

Parameters

NameInTypeDescription
site_idrequiredpathintegerID from GET /sites.
min 1
job_idrequiredpathstring

Unknown or repeated query parameters return 400.

Data dictionary

Current collection job state. Durable job status. Reads do not clean up or modify jobs; historical records without an identifiable state return unknown.

[] marks an array element. nullable means the value can be null; treat it as unknown, not zero. always present means the key is always included in the object.

Fields in data
FieldTypeDescription
data.idstringSatellite identifier for this record.
data.site_idintegerSatellite site ID (from GET /sites).
data.job_typestringnullable
data.statusstring
one of: accepted, queued, running, succeeded, failed, cancelled, cancel_requested, unknown
data.created_atstring (date-time)nullableWhen Satellite created the record (UTC, RFC 3339).
data.updated_atstring (date-time)nullableWhen Satellite last updated the record (UTC, RFC 3339).
data.started_atstring (date-time)nullable
data.completed_atstring (date-time)nullable
data.result_linksarray of stringAuthorized relative result URLs only when their required read scope is present. No embedded outputs or worker diagnostics.

Response metadata

Fields in meta
FieldTypeDescription
meta.request_idstringalways presentRequest identifier; also returned in X-Request-ID. Include it in support requests.
meta.api_versionstringalways presentAPI version that produced the response.
one of: v1
meta.limitintegerMaximum records per page applied to this request.
min 1 · max 100
meta.has_morebooleanTrue when another page is available.
meta.next_cursorstringnullableOpaque cursor for the next page; send as cursor. Null on the last page.
meta.availabilitystringavailable when stored data exists; not_available when it does not.
one of: available, not_available
meta.billingobjectPresent for paid live SERP requests; replayed receipts describe the original debit, not an additional charge.
meta.billing.operationstringalways present
one of: client_api_serp_refresh
meta.billing.credits_chargedintegeralways present
min 0
meta.billing.transaction_idintegeralways present
meta.billing.replayedbooleanalways present

Error responses

Errors return {"error": {"code", "message", "request_id"}}. See error handling for retry guidance.

HTTPWhen
403Missing analytics:read.
404Missing, inaccessible, or non-GA4 job.