DevelopersAPI reference

Ads API

REST endpoints for ads in SKUFlow: 10 operations with parameters, request and response fields, permissions and curl examples.

Base URL: https://app.skuflow.ai/api. Every call needs Authorization: Bearer skf_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.

OperationEndpointRisk
Ad accounts and connectionsGET /organizations/{organizationId}/ads/accountsread
An ad accountGET /organizations/{organizationId}/ads/accounts/{adAccountId}read
Start connecting an ad platformPOST /organizations/{organizationId}/ads/connectsensitive
Choose the ad accounts SKUFlow readsPOST /organizations/{organizationId}/ads/accounts/choosesensitive
Disconnect an ad platformPOST /organizations/{organizationId}/ads/disconnectsensitive
Add SKUFlow tracking to campaignsPOST /organizations/{organizationId}/ads/accounts/{adAccountId}/trackingsensitive
Sync an ad account nowPOST /organizations/{organizationId}/ads/accounts/{adAccountId}/syncwrite
List ad campaignsGET /organizations/{organizationId}/ads/campaignsread
An ad campaignGET /organizations/{organizationId}/ads/campaigns/{adCampaignId}read
What ads returnedGET /organizations/{organizationId}/ads/reportread

Ad accounts and connections

GET /organizations/{organizationId}/ads/accounts

Whether Google Ads and Meta are connected (and usable on this server), the ad accounts each sign-in can use, and the business's ad accounts with their sync state. Start here before connecting, choosing accounts or reading the return. Read-only.

Permissionads.read (Owner, Admin)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP tooladAccounts_list (toolset ads)

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/accounts" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
modeenumSKUFLOW_ADS on this server. One of fake, live, off.
platformsarray of object
platforms[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
platforms[].modeenumfake: demo accounts (tests); live: the real platform; unconfigured: this server has no app credentials for it; off: ads are switched off here. One of fake, live, unconfigured, off.
platforms[].connectedboolean
platforms[].statusstring
platforms[].accountstring or nullWho signed in at the platform.
platforms[].connectedAtstring (date-time) or null
platforms[].lastErrorstring or null
platforms[].availablearray of objectThe ad accounts this sign-in can use; choose with POST /ads/accounts/choose.
platforms[].available[].externalAccountIdstring
platforms[].available[].namestring
platforms[].available[].currencystring
platforms[].available[].timeZonestring
platforms[].available[].chosenbooleanSKUFlow reads this account.
accountsarray of object
accounts[].idstring
accounts[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
accounts[].modeenumOne of MANAGED, CONNECTED.
accounts[].externalAccountIdstringThe platform's id: a Google Ads customer id (digits) or a Meta ad account id.
accounts[].loginCustomerIdstring or null
accounts[].namestring
accounts[].currencystringISO 4217; spend is integer cents of it.
accounts[].timeZonestringThe ad account's time zone: spend days are in it.
accounts[].statusstringACTIVE (synced hourly), DISCONNECTED (no longer read; history kept), and others.
accounts[].backfilledAtstring (date-time) or nullWhen the first 90-day spend import finished.
accounts[].trackingAddedAtstring (date-time) or null
accounts[].lastSyncAtstring (date-time) or null
accounts[].lastErrorstring or null
accounts[].createdAtstring (date-time)
accounts[].campaignCountinteger

An ad account

GET /organizations/{organizationId}/ads/accounts/{adAccountId}

One ad account with its campaigns (imported from the platform). Read-only.

Permissionads.read (Owner, Admin)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP tooladAccounts_get (toolset ads)

Parameters

NameInTypeRequiredDescription
adAccountIdpathstringYes

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/accounts/{adAccountId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
idstring
platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
modeenumOne of MANAGED, CONNECTED.
externalAccountIdstringThe platform's id: a Google Ads customer id (digits) or a Meta ad account id.
loginCustomerIdstring or null
namestring
currencystringISO 4217; spend is integer cents of it.
timeZonestringThe ad account's time zone: spend days are in it.
statusstringACTIVE (synced hourly), DISCONNECTED (no longer read; history kept), and others.
backfilledAtstring (date-time) or nullWhen the first 90-day spend import finished.
trackingAddedAtstring (date-time) or null
lastSyncAtstring (date-time) or null
lastErrorstring or null
createdAtstring (date-time)
campaignCountinteger
campaignsarray of object
campaigns[].idstring
campaigns[].adAccountIdstring
campaigns[].externalCampaignIdstring or null
campaigns[].namestring
campaigns[].kindstringSEARCH, PERFORMANCE_MAX, META_LEADS, META_TRAFFIC, LSA or OTHER (imported).
campaigns[].goalstring or null
campaigns[].statusstringACTIVE, PAUSED, ENDED, REJECTED (and DRAFT for SKUFlow drafts).
campaigns[].platformStatusstring or null
campaigns[].originenumImported: read from a connected account; not editable in SKUFlow yet. One of SKUFLOW, IMPORTED.
campaigns[].dailyBudgetCentsinteger or null
campaigns[].utmCampaignstring or nullOur utm_campaign: a request whose visit carries it is credited to this campaign.
campaigns[].trackingPhoneNumberIdstring or null
campaigns[].landingPageIdstring or null
campaigns[].businessUnitIdstring or null
campaigns[].lastSyncAtstring (date-time) or null
campaigns[].createdAtstring (date-time)
campaigns[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
campaigns[].accountNamestring
campaigns[].currencystring

Start connecting an ad platform

POST /organizations/{organizationId}/ads/connect

Grants access: returns the platform's consent URL (Google: the adwords scope; Meta: ads_read, ads_management and the lead and Page permissions). The person signs in there; the platform then redirects to /integrations/ads/callback with code and state, finished with POST /ads/callback. 400 when this server has no credentials for the platform.

Permissionads.spend (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tooladAccounts_connect (toolset ads)
PlanNeeds the Ads add-on.
ApprovalWaits for your approval in SKUFlow when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-SKUFlow-Approval header. See Approvals.

Request body

FieldTypeRequiredDescription
platformenumYesThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/connect" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"GOOGLE_ADS"}'

Response

200: the answer's fields
FieldTypeDescription
authorizeUrlstring
modeenumfake: demo accounts (tests); live: the real platform; unconfigured: this server has no app credentials for it; off: ads are switched off here. One of fake, live, unconfigured, off.
platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.

Choose the ad accounts SKUFlow reads

POST /organizations/{organizationId}/ads/accounts/choose

Grants access: the platform's ad accounts SKUFlow may read (ids from GET /ads/accounts → platforms[].available). The list replaces the previous one: an account left out stops syncing and keeps its history. Chosen accounts are synced now: campaigns imported and 90 days of spend. Spends nothing.

Permissionads.spend (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tooladAccounts_chooseAccounts (toolset ads)
PlanNeeds the Ads add-on.
ApprovalWaits for your approval in SKUFlow when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-SKUFlow-Approval header. See Approvals.

Request body

FieldTypeRequiredDescription
platformenumYesThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
externalAccountIdsarray of stringYesThe platform's ad account ids, as listed in available. Up to 50 items.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/accounts/choose" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"GOOGLE_ADS","externalAccountIds":["externalAccount_id"]}'

Response

200: the answer's fields
FieldTypeDescription
modeenumSKUFLOW_ADS on this server. One of fake, live, off.
platformsarray of object
platforms[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
platforms[].modeenumfake: demo accounts (tests); live: the real platform; unconfigured: this server has no app credentials for it; off: ads are switched off here. One of fake, live, unconfigured, off.
platforms[].connectedboolean
platforms[].statusstring
platforms[].accountstring or nullWho signed in at the platform.
platforms[].connectedAtstring (date-time) or null
platforms[].lastErrorstring or null
platforms[].availablearray of objectThe ad accounts this sign-in can use; choose with POST /ads/accounts/choose.
platforms[].available[].externalAccountIdstring
platforms[].available[].namestring
platforms[].available[].currencystring
platforms[].available[].timeZonestring
platforms[].available[].chosenbooleanSKUFlow reads this account.
accountsarray of object
accounts[].idstring
accounts[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
accounts[].modeenumOne of MANAGED, CONNECTED.
accounts[].externalAccountIdstringThe platform's id: a Google Ads customer id (digits) or a Meta ad account id.
accounts[].loginCustomerIdstring or null
accounts[].namestring
accounts[].currencystringISO 4217; spend is integer cents of it.
accounts[].timeZonestringThe ad account's time zone: spend days are in it.
accounts[].statusstringACTIVE (synced hourly), DISCONNECTED (no longer read; history kept), and others.
accounts[].backfilledAtstring (date-time) or nullWhen the first 90-day spend import finished.
accounts[].trackingAddedAtstring (date-time) or null
accounts[].lastSyncAtstring (date-time) or null
accounts[].lastErrorstring or null
accounts[].createdAtstring (date-time)
accounts[].campaignCountinteger

Disconnect an ad platform

POST /organizations/{organizationId}/ads/disconnect

Revokes access: revokes and forgets the platform's tokens and stops syncing its ad accounts. Campaigns, spend history and credited requests stay; connect again to resume. Campaigns keep running at the platform.

Permissionads.spend (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tooladAccounts_disconnect (toolset ads)
ApprovalOver MCP, this tool always waits for your approval in SKUFlow. See Approvals.

Request body

FieldTypeRequiredDescription
platformenumYesThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/disconnect" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"GOOGLE_ADS"}'

Response

200: the answer's fields
FieldTypeDescription
modeenumSKUFLOW_ADS on this server. One of fake, live, off.
platformsarray of object
platforms[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
platforms[].modeenumfake: demo accounts (tests); live: the real platform; unconfigured: this server has no app credentials for it; off: ads are switched off here. One of fake, live, unconfigured, off.
platforms[].connectedboolean
platforms[].statusstring
platforms[].accountstring or nullWho signed in at the platform.
platforms[].connectedAtstring (date-time) or null
platforms[].lastErrorstring or null
platforms[].availablearray of objectThe ad accounts this sign-in can use; choose with POST /ads/accounts/choose.
platforms[].available[].externalAccountIdstring
platforms[].available[].namestring
platforms[].available[].currencystring
platforms[].available[].timeZonestring
platforms[].available[].chosenbooleanSKUFlow reads this account.
accountsarray of object
accounts[].idstring
accounts[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
accounts[].modeenumOne of MANAGED, CONNECTED.
accounts[].externalAccountIdstringThe platform's id: a Google Ads customer id (digits) or a Meta ad account id.
accounts[].loginCustomerIdstring or null
accounts[].namestring
accounts[].currencystringISO 4217; spend is integer cents of it.
accounts[].timeZonestringThe ad account's time zone: spend days are in it.
accounts[].statusstringACTIVE (synced hourly), DISCONNECTED (no longer read; history kept), and others.
accounts[].backfilledAtstring (date-time) or nullWhen the first 90-day spend import finished.
accounts[].trackingAddedAtstring (date-time) or null
accounts[].lastSyncAtstring (date-time) or null
accounts[].lastErrorstring or null
accounts[].createdAtstring (date-time)
accounts[].campaignCountinteger

Add SKUFlow tracking to campaigns

POST /organizations/{organizationId}/ads/accounts/{adAccountId}/tracking

Changes live ads: asks the platform to add SKUFlow's UTM parameters (utm_source, utm_medium, utm_campaign) to every imported campaign's landing URLs, so requests from those ads are credited to their campaign. Google: set on each campaign (final URL suffix). Meta keeps URL parameters on each ad: manual lists what to paste in Ads Manager. Spends nothing; 409 when the account isn't connected.

Permissionads.manage (Owner, Admin)
Risksensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tooladAccounts_addTracking (toolset ads)
PlanNeeds the Ads add-on.
ApprovalOver MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals.

Parameters

NameInTypeRequiredDescription
adAccountIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/accounts/{adAccountId}/tracking" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
campaignsinteger
appliedintegerCampaigns the platform now tags itself.
manualarray of object
manual[].adCampaignIdstring
manual[].namestring
manual[].urlParametersstring
failedarray of object
failed[].adCampaignIdstring
failed[].namestring
failed[].errorstring

Sync an ad account now

POST /organizations/{organizationId}/ads/accounts/{adAccountId}/sync

Reads the account's campaigns and recent spend from the platform now (it also happens every hour; a day's spend is final three days after it), then credits recent requests whose ad click the platform can name. Rate-limited; 409 when the account isn't connected.

Permissionads.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP tooladAccounts_sync (toolset ads)
PlanNeeds the Ads add-on.

Parameters

NameInTypeRequiredDescription
adAccountIdpathstringYes

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/accounts/{adAccountId}/sync" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
campaignsinteger
daysintegerSpend days written.
resolvedClicksintegerRequests credited by their click id.
skippedbooleanAnother sync had just finished; nothing new.

List ad campaigns

GET /organizations/{organizationId}/ads/campaigns

The business's ad campaigns (imported from connected accounts), filtered by adAccountId, platform or status. For what they returned, call GET /ads/report. Read-only.

Permissionads.read (Owner, Admin)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP tooladCampaigns_list (toolset ads)
PlanNeeds the Ads add-on.

Parameters

NameInTypeRequiredDescription
adAccountIdquerystringNo
platformqueryenumNoThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
statusqueryenumNoOne of DRAFT, PUBLISHING, ACTIVE, PAUSED, PAUSED_FUNDS, REJECTED, ENDED.

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/campaigns" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields

An array of objects:

FieldTypeDescription
idstring
adAccountIdstring
externalCampaignIdstring or null
namestring
kindstringSEARCH, PERFORMANCE_MAX, META_LEADS, META_TRAFFIC, LSA or OTHER (imported).
goalstring or null
statusstringACTIVE, PAUSED, ENDED, REJECTED (and DRAFT for SKUFlow drafts).
platformStatusstring or null
originenumImported: read from a connected account; not editable in SKUFlow yet. One of SKUFLOW, IMPORTED.
dailyBudgetCentsinteger or null
utmCampaignstring or nullOur utm_campaign: a request whose visit carries it is credited to this campaign.
trackingPhoneNumberIdstring or null
landingPageIdstring or null
businessUnitIdstring or null
lastSyncAtstring (date-time) or null
createdAtstring (date-time)
platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
accountNamestring
currencystring

An ad campaign

GET /organizations/{organizationId}/ads/campaigns/{adCampaignId}

One campaign with its last 30 spend days (impressions, clicks, spend, the platform's own conversions, and whether each day is final). Read-only.

Permissionads.read (Owner, Admin)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP tooladCampaigns_get (toolset ads)
PlanNeeds the Ads add-on.

Parameters

NameInTypeRequiredDescription
adCampaignIdpathstringYes

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/campaigns/{adCampaignId}" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
idstring
adAccountIdstring
externalCampaignIdstring or null
namestring
kindstringSEARCH, PERFORMANCE_MAX, META_LEADS, META_TRAFFIC, LSA or OTHER (imported).
goalstring or null
statusstringACTIVE, PAUSED, ENDED, REJECTED (and DRAFT for SKUFlow drafts).
platformStatusstring or null
originenumImported: read from a connected account; not editable in SKUFlow yet. One of SKUFLOW, IMPORTED.
dailyBudgetCentsinteger or null
utmCampaignstring or nullOur utm_campaign: a request whose visit carries it is credited to this campaign.
trackingPhoneNumberIdstring or null
landingPageIdstring or null
businessUnitIdstring or null
lastSyncAtstring (date-time) or null
createdAtstring (date-time)
platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
accountNamestring
currencystring
daysarray of object
days[].datestring
days[].impressionsinteger
days[].clicksinteger
days[].spendCentsinteger
days[].platformConversionsnumber
days[].finalbooleanThe platform no longer restates this day.

What ads returned

GET /organizations/{organizationId}/ads/report

Per campaign, per platform and in total for a date range (default the last 30 days): spend, impressions, clicks, leads (requests credited to the campaign + calls on its tracking number), won quotes, revenue (paid on those quotes' invoices within windowDays of the lead, default 90), cost per lead and per sale, and return on spend; with SKUFlow's Ads fee beside it. Spend days are in each ad account's time zone; leads are counted on the business's days. Read-only.

Permissionads.read (Owner, Admin)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP tooladReports_summary (toolset ads)
PlanNeeds the Ads add-on.

Parameters

NameInTypeRequiredDescription
fromquerystringNoFirst day, YYYY-MM-DD (default 29 days before today).
toquerystringNoLast day, YYYY-MM-DD (default today).
platformqueryenumNoThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
adAccountIdquerystringNo
windowDaysqueryintegerNoDays after a lead its paid invoices count (default 90). 1–365.

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/ads/report" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
rangeobject
range.fromstring
range.tostring
range.timezonestring
windowDaysinteger
currencystring
totalsobject
totals.spendCentsnumberSpend in cents of the account currency.
totals.impressionsnumber
totals.clicksnumber
totals.requestsintegerRequests credited to the campaign (adCampaignId).
totals.callsintegerInbound calls on the campaign's tracking number.
totals.leadsintegerrequests + calls.
totals.wonQuotesintegerQuotes made from those requests that the customer approved.
totals.revenueCentsnumberPaid on those quotes' invoices within the attribution window.
totals.costPerLeadCentsnumber or null
totals.costPerSaleCentsnumber or nullSpend ÷ won quotes, in cents.
totals.returnOnSpendnumber or nullRevenue ÷ spend (2.5 = $2.50 back per $1).
byPlatformarray of object
byPlatform[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
byPlatform[].spendCentsnumberSpend in cents of the account currency.
byPlatform[].impressionsnumber
byPlatform[].clicksnumber
byPlatform[].requestsintegerRequests credited to the campaign (adCampaignId).
byPlatform[].callsintegerInbound calls on the campaign's tracking number.
byPlatform[].leadsintegerrequests + calls.
byPlatform[].wonQuotesintegerQuotes made from those requests that the customer approved.
byPlatform[].revenueCentsnumberPaid on those quotes' invoices within the attribution window.
byPlatform[].costPerLeadCentsnumber or null
byPlatform[].costPerSaleCentsnumber or nullSpend ÷ won quotes, in cents.
byPlatform[].returnOnSpendnumber or nullRevenue ÷ spend (2.5 = $2.50 back per $1).
byCampaignarray of object
byCampaign[].adCampaignIdstring
byCampaign[].namestring
byCampaign[].platformenumThe ad platform: GOOGLE_ADS (Google Ads) or META (Facebook and Instagram). One of GOOGLE_ADS, META.
byCampaign[].kindstring
byCampaign[].statusstring
byCampaign[].originstring
byCampaign[].adAccountIdstring
byCampaign[].accountNamestring
byCampaign[].spendCentsnumberSpend in cents of the account currency.
byCampaign[].impressionsnumber
byCampaign[].clicksnumber
byCampaign[].requestsintegerRequests credited to the campaign (adCampaignId).
byCampaign[].callsintegerInbound calls on the campaign's tracking number.
byCampaign[].leadsintegerrequests + calls.
byCampaign[].wonQuotesintegerQuotes made from those requests that the customer approved.
byCampaign[].revenueCentsnumberPaid on those quotes' invoices within the attribution window.
byCampaign[].costPerLeadCentsnumber or null
byCampaign[].costPerSaleCentsnumber or nullSpend ÷ won quotes, in cents.
byCampaign[].returnOnSpendnumber or nullRevenue ÷ spend (2.5 = $2.50 back per $1).
addOnobjectSKUFlow's Ads fee, shown beside the return (ad spend passes through at cost).
addOn.namestring
addOn.monthlyUsdnumber
addOn.yearlyUsdnumber

On this page