Outcomes#

Read what moved: results by channel, daily site analytics and success events, what customers said when asked how they heard about you, and promo codes and tagged links. Also record outcomes your team reports for a campaign, kept apart from observed evidence.

Authentication required

All endpoints require a Bearer token in the Authorization header. See the Authentication guide for setup instructions.

GET /v1/outcomes/definitions#

List reusable reported outcome definitions for a workspace.

bash
GET /v1/outcomes/definitions?workspace_id=1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.

Response#

Returns { items, totalCount, facets, _meta } with paginated results.

POST /v1/outcomes/definitions#

Create a reusable definition for a reported business or brand outcome such as sales value, awareness, or qualified inquiries, with a name, value kind, unit label, and default currency.

bash
POST /v1/outcomes/definitions
Authorization: Bearer {token}
Content-Type: application/json

{
  "workspace_id": "1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01",
  "name": "My Campaign",
  "value_kind": "..."
}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
namestringRequiredShort name of the outcome, for example "Sales value" or "Qualified inquiries".
descriptionstring | null—What the outcome measures and how it is normally sourced.
valueKind'count' | 'currency' | 'percentage' | 'ratio' | 'index' | 'duration' | 'other'RequiredWhat kind of quantity measurements carry: count, currency, percentage, ratio, index, duration, or other.
unitLabelstring | null—Unit shown after values, for example "inquiries" or "points".
defaultCurrencystring | null—ISO 4217 currency code applied to currency-kind measurements, for example "NZD".

Response#

Returns { data, _meta } with the result.

PATCH /v1/outcomes/definitions/:id#

Update the name, description, value kind, unit label, or default currency of a reusable reported outcome definition.

bash
PATCH /v1/outcomes/definitions/:id
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
namestring—Short name of the outcome, for example "Sales value" or "Qualified inquiries".
descriptionstring | null—What the outcome measures and how it is normally sourced.
valueKind'count' | 'currency' | 'percentage' | 'ratio' | 'index' | 'duration' | 'other'—What kind of quantity measurements carry: count, currency, percentage, ratio, index, duration, or other.
unitLabelstring | null—Unit shown after values, for example "inquiries" or "points".
defaultCurrencystring | null—ISO 4217 currency code applied to currency-kind measurements, for example "NZD".
idstring (UUID)RequiredUnique identifier (UUID v4).

Response#

Returns { data, _meta } with the result.

DELETE /v1/outcomes/definitions/:id#

Delete an unused reported outcome definition by soft deletion; definitions with active measurements are blocked.

bash
DELETE /v1/outcomes/definitions/:id
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
idstring (UUID)RequiredUnique identifier (UUID v4).

Response#

Returns { data, _meta } with the result.

GET /v1/outcomes/measurements#

List reported outcome measurements for a campaign, including method, period, confidence, units, and definition.

bash
GET /v1/outcomes/measurements?workspace_id=1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01&campaign_id=3a8d1f56-9e42-4b7c-a1d8-6f0e2b9c4a03
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
campaignIdstring (UUID)RequiredUnique identifier (UUID v4).

Response#

Returns { items, totalCount, facets, _meta } with paginated results.

POST /v1/outcomes/measurements#

Record a campaign-reported outcome measurement: the value, optional baseline value, reporting period start and end, market, source method, and confidence, stored as an append-only evidence claim.

bash
POST /v1/outcomes/measurements
Authorization: Bearer {token}
Content-Type: application/json

{
  "workspace_id": "1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01",
  "campaign_id": "3a8d1f56-9e42-4b7c-a1d8-6f0e2b9c4a03",
  "outcome_definition_id": "...",
  "value": "...",
  "source_method": "..."
}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
campaignIdstring (UUID)RequiredUnique identifier (UUID v4).
outcomeDefinitionIdstring (UUID)RequiredThe reusable outcome definition this measures.
periodStartstring | null—First day (YYYY-MM-DD) of the period the reported value covers.
periodEndstring | null—Last day (YYYY-MM-DD) of the period; must be on or after periodStart.
valuenumberRequiredThe reported outcome value, in the definition's value kind and unit.
baselineValueunknown—Comparable value before the campaign, when the report supplied one.
marketstring | null—Market or region the value applies to, for example "New Zealand".
sourceMethod'document_reported' | 'manual' | 'csv' | 'api'RequiredHow the value was obtained: document_reported, manual entry, csv import, or api. Reported outcomes are claims, not observed attribution.
confidencenumber | null—Reporter's confidence in the value from 0 (none) to 1 (certain).

Response#

Returns { data, _meta } with the result.

PATCH /v1/outcomes/measurements/:id#

Update the value, baseline, period start and end, market, source method, or confidence of a reported outcome measurement, superseding its prior evidence claim when the value changes.

bash
PATCH /v1/outcomes/measurements/:id
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
outcomeDefinitionIdstring (UUID)—The reusable outcome definition this measures.
periodStartstring | null—First day (YYYY-MM-DD) of the period the reported value covers.
periodEndstring | null—Last day (YYYY-MM-DD) of the period; must be on or after periodStart.
valuenumber—The reported outcome value, in the definition's value kind and unit.
baselineValueunknown—Comparable value before the campaign, when the report supplied one.
marketstring | null—Market or region the value applies to, for example "New Zealand".
sourceMethod'document_reported' | 'manual' | 'csv' | 'api'—How the value was obtained: document_reported, manual entry, csv import, or api. Reported outcomes are claims, not observed attribution.
confidencenumber | null—Reporter's confidence in the value from 0 (none) to 1 (certain).
idstring (UUID)RequiredUnique identifier (UUID v4).

Response#

Returns { data, _meta } with the result.

DELETE /v1/outcomes/measurements/:id#

Delete a reported campaign outcome measurement by soft deletion.

bash
DELETE /v1/outcomes/measurements/:id
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
idstring (UUID)RequiredUnique identifier (UUID v4).

Response#

Returns { data, _meta } with the result.

GET /v1/outcomes/analytics-history#

Fetch daily Google Analytics site metrics (sessions, users, page views) and success-metric event counts for a date range, zero-filled for days without data.

bash
GET /v1/outcomes/analytics-history?workspace_id=1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01&start_date=...&end_date=...
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
startDatestringRequiredFirst day of the range (YYYY-MM-DD, inclusive).
endDatestringRequiredLast day of the range (YYYY-MM-DD, inclusive).

Response#

Returns { items, totalCount, facets, _meta } with paginated results.

GET /v1/outcomes/hdyhau#

Retrieve a summary of GA4 How Did You Hear About Us (HDYHAU) custom-dimension values for a date range, including raw responses, normalized source categories, response coverage, creator-marketing relevance, data-quality flags, and a daily evidence timeline. This does not assign conversions to creators or campaigns.

bash
GET /v1/outcomes/hdyhau?workspace_id=1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01&start_date=...&end_date=...
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
startDatestringRequiredFirst day of the range (YYYY-MM-DD, inclusive).
endDatestringRequiredLast day of the range (YYYY-MM-DD, inclusive).

Response#

Returns { data, _meta } with the result.

PUT /v1/outcomes/hdyhau/mapping#

Create or update a reusable workspace-specific mapping that normalizes one raw GA4 HDYHAU response value for a dimension API name into a source label and category for future reporting. This changes classification only and does not assign attribution.

bash
PUT /v1/outcomes/hdyhau/mapping
Authorization: Bearer {token}
Content-Type: application/json

{
  "workspace_id": "1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01",
  "dimension_api_name": "...",
  "raw_value": "...",
  "normalized_value": "...",
  "category": "..."
}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
dimensionApiNamestringRequired
rawValuestringRequired
normalizedValuestringRequired
category'creator' | 'organic_social' | 'broadcast' | 'out_of_home' | 'print' | 'podcast' | 'search' | 'referral' | 'paid' | 'events' | 'other' | 'unknown'RequiredNormalized HDYHAU source category.

Response#

Returns { data, _meta } with the result.

GET /v1/outcomes/direct-signals#

Retrieve directly observed GA4 promo-code and manually tagged UTM-link evidence for a date range, including sessions, daily users, selected success outcomes, explicit creator/campaign/activity mappings, general referral-channel buckets (e.g. Facebook, Google organic, an AI assistant) with a per-bucket traffic summary, and zero-filled timeline data. This reports observed evidence and does not infer attribution.

bash
GET /v1/outcomes/direct-signals?workspace_id=1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01&start_date=...&end_date=...
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
startDatestringRequiredFirst day of the range (YYYY-MM-DD, inclusive).
endDatestringRequiredLast day of the range (YYYY-MM-DD, inclusive).

Response#

Returns { data, _meta } with the result.

PUT /v1/outcomes/direct-signals/:signalId/mapping#

Update one discovered GA4 promo code or manually tagged UTM link by mapping it to exactly one Brandwave creator, campaign, or activity, grouping it under one general referral-channel bucket (e.g. Facebook, Google organic, an AI assistant) when it cannot be tied to a specific entity, or removing its existing mapping. The association is mutually exclusive, applies to all observed sessions, users, and outcomes for that signal, and does not infer causal attribution.

bash
PUT /v1/outcomes/direct-signals/:signalId/mapping
Authorization: Bearer {token}
Content-Type: application/json

{
  "workspace_id": "1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01",
  "association": "..."
}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
signalIdstring (UUID)RequiredDiscovered GA4 direct-signal identifier.
associationunknown | nullRequiredExactly one association - a Brandwave creator, campaign, or activity, or a general referral-channel bucket - or null to remove the mapping.

Response#

Returns { data, _meta } with the result.

PUT /v1/outcomes/direct-signals/:signalId/ignored#

Ignore one discovered GA4 promo code or manually tagged UTM link as noise, or restore a previously ignored one. Ignored signals are hidden from the default reporting view and excluded from its headline counts, but retain their observed sessions, users, and outcomes and can be restored at any time. This changes triage state only and does not infer attribution.

bash
PUT /v1/outcomes/direct-signals/:signalId/ignored
Authorization: Bearer {token}
Content-Type: application/json

{
  "workspace_id": "1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01",
  "ignored": "..."
}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
signalIdstring (UUID)RequiredDiscovered GA4 direct-signal identifier.
ignoredbooleanRequiredTrue to ignore the signal as noise, false to restore it for review.

Response#

Returns { data, _meta } with the result.

GET /v1/outcomes/channels#

Retrieve evidence by channel for a date range: each channel type with spend (social media, broadcast, out of home, print, events, podcasts, PR articles) walked across the evidence chain with spend and activity count, impressions, sessions from linked promo codes and tagged links, linked success events, and customer-reported HDYHAU mentions, plus a corroboration count of how many of the four steps hold direct evidence. Cells are null when the source that could see them is not connected. Nothing is inferred or attributed.

bash
GET /v1/outcomes/channels?workspace_id=1c7743a8-6410-4a9e-9f3b-2c1d5e8a4b01&start_date=...&end_date=...
Authorization: Bearer {token}

Parameters#

NameTypeRequiredDescription
workspaceIdstring (UUID)RequiredWorkspace identifier.
startDatestringRequiredFirst day of the range (YYYY-MM-DD, inclusive).
endDatestringRequiredLast day of the range (YYYY-MM-DD, inclusive).

Response#

Returns { data, _meta } with the result.