Acquisition

Get Campaigns Table

GET
/v1/acquisition/campaigns

Hierarchical channel → campaign → ad set → ad table, with media and business metrics, split into two groups.

Use it to find which campaigns, ad sets and ads perform best. The whole table comes in a single response, with no pagination or sorting.

  • groups always holds acquisition (campaigns marked as acquisition) and other (brand, monetization, unclassified campaigns and customers with no identified campaign), even when empty. In the other group, cac and ltvCacRatio are always null.
  • Media metrics (investment, impressions, clicks, cpm, ctr, cpc) exist at every level. Business metrics (newCustomers, cac, avgLtv, ltvCacRatio, roi, paybackMonths, leads) exist only at channel and campaign level and are null below them.
  • The Campanha não identificada (unidentified campaign) row gathers, per channel, the customers that could not be linked to a specific campaign.
  • search filters by campaign, ad set or ad name. While a search is active, each channel's totals only add up the campaigns shown and no longer match /v1/acquisition/channels.
  • Limit of 5,000 rows: ads and then ad sets are removed first, and truncation reports the cut.

Authorization

ClientIdAuthClientSecretAuth
headerx-client-id<token>

Client ID

headerx-client-secret<token>

Client secret

Query Parameters

organizationId*string

Organization identifier (required). A missing or non-string value is a 400.

period?stringDeprecated

Deprecated: use startDate and endDate, which take precedence when sent. Relative period of N days ending today, inclusive (7d = today and the 6 days before it). "Today" is the UTC calendar day, and that last day is still partial. Accepted values: 7d, 30d, 90d, 1y. Omitted or empty means 30d; any other value returns 400.

Default"30d"
Value in"7d""30d""90d""1y"
startDate?string

Start of the period (YYYY-MM-DD, inclusive). Send it together with endDate: sending only one of them returns 400. Takes precedence over period. Send the date only: a date with a time or a date that does not exist returns 400. Rules: startDate ≤ endDate, neither date in the future (UTC), and at most 365 days between the dates (up to 366 days in the period). The comparison uses the period of the same length right before it.

Formatdate
endDate?string

End of the period (YYYY-MM-DD, inclusive). See startDate for the rules. When the end date is today, that last day is still partial, because the day's data keeps arriving.

Formatdate
search?string

Text filter on campaign, ad set or ad name, case-insensitive (it also matches Campanha não identificada). Empty means no filter. Only /v1/acquisition/campaigns uses this parameter; the other endpoints accept and ignore it.

Response Body

Campaigns table returned successfully

application/json
  1. response
marginConfigured?boolean

Indicates whether the organization configured a contribution margin on the platform. false means the 100% default is in use.

marginCompleteness?MarginCompleteness

Completeness of the contribution margin configured by cost item: complete = every item resolved; partial = some item is pending, so the applied margin is partial; none = no item breakdown (margin never configured, or configured as a single percentage; tell them apart with marginConfigured).

Value in"complete""partial""none"
marginItemStatus?

Status per item of the margin composition (synced = from the orders, configured = informed by the user, pending = not configured or missing data). null when the organization has no composition.

groups*array<>

Always exactly two groups, in this order: acquisition, then other. Both are returned even when empty.

truncation*

Tells whether the table was cut by the row limit, so you can show "showing N of M rows" instead of an incomplete tree with no warning.

curl -X GET "https://example.com/v1/acquisition/campaigns?organizationId=c0ad4763-173e-4a05-9cff-5208c8ea5f6a&period=30d&startDate=2026-03-11&endDate=2026-03-22&search=prospec%C3%A7%C3%A3o"
{  "groups": [    {      "groupId": "acquisition",      "rows": [        {          "level": "channel",          "id": "v4:acquisition:channel:Meta%20Ads",          "name": "Meta Ads",          "campaignId": null,          "creativeUrl": null,          "investment": 128000,          "impressions": 10000000,          "clicks": 195000,          "cpm": 12.8,          "ctr": 1.95,          "cpc": 0.66,          "leads": 4838,          "leadsBySource": {            "crm": 4838,            "meta": null,            "google": null          },          "roi": 1.94,          "newCustomers": 1120,          "cac": 114.29,          "avgLtv": 486.5,          "ltvCacRatio": 4.26,          "paybackMonths": 2.7,          "children": [            {              "level": "campaign",              "id": "cmp-8891",              "name": "Aquisição | Prospecção BR",              "campaignId": "cmp-8891",              "creativeUrl": null,              "investment": 96000,              "impressions": 7680000,              "clicks": 161280,              "cpm": 12.5,              "ctr": 2.1,              "cpc": 0.6,              "leads": 4838,              "leadsBySource": {                "crm": 4838,                "meta": null,                "google": null              },              "roi": 2.31,              "newCustomers": 940,              "cac": 102.13,              "avgLtv": 501.2,              "ltvCacRatio": 4.91,              "paybackMonths": 2.4,              "children": [                {                  "level": "adset",                  "id": "adset-11",                  "name": "Conjunto Lookalike 1%",                  "campaignId": null,                  "creativeUrl": null,                  "investment": 51000,                  "impressions": 4214876,                  "clicks": 96942,                  "cpm": 12.1,                  "ctr": 2.3,                  "cpc": 0.53,                  "leads": null,                  "leadsBySource": null,                  "roi": null,                  "newCustomers": null,                  "cac": null,                  "avgLtv": null,                  "ltvCacRatio": null,                  "paybackMonths": null,                  "children": [                    {                      "level": "ad",                      "id": "ad-101",                      "name": "Vídeo institucional 15s",                      "campaignId": null,                      "creativeUrl": "https://cdn.example.com/creative/ad-101.jpg",                      "investment": 51000,                      "impressions": 4214876,                      "clicks": 96942,                      "cpm": 12.1,                      "ctr": 2.3,                      "cpc": 0.53,                      "leads": null,                      "leadsBySource": null,                      "roi": null,                      "newCustomers": null,                      "cac": null,                      "avgLtv": null,                      "ltvCacRatio": null,                      "paybackMonths": null                    }                  ]                }              ]            },            {              "level": "campaign",              "id": "v4:acquisition:unknown-campaign:Meta%20Ads",              "name": "Campanha não identificada",              "campaignId": null,              "creativeUrl": null,              "investment": 0,              "impressions": 0,              "clicks": 0,              "cpm": null,              "ctr": null,              "cpc": null,              "leads": 0,              "leadsBySource": {                "crm": 0,                "meta": null,                "google": null              },              "roi": null,              "newCustomers": 180,              "cac": null,              "avgLtv": 412.7,              "ltvCacRatio": null,              "paybackMonths": null,              "children": []            }          ]        }      ]    },    {      "groupId": "other",      "rows": []    }  ],  "truncation": {    "truncated": false,    "returnedRows": 5,    "totalRows": 5,    "droppedLevels": []  }}