A valid request URL is required to generate request examples{
"channels": [
{
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "launch",
"currency": "BRL",
"revenue_minor": 449700,
"invoices": 3,
"customers": 2
},
{
"utm_source": "",
"utm_medium": "",
"utm_campaign": "",
"currency": "BRL",
"revenue_minor": 14900,
"invoices": 1,
"customers": 1
}
],
"from": "2026-05-04T00:00:00Z",
"to": "2026-08-02T00:00:00Z"
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Revenue by acquisition channel
Requires analytics:read. Paid invoices grouped by the first-touch UTM of each customer’s founding contact — the earliest member of the team, because a team has no landing page and the person who created it is how it arrived. Invited colleagues never re-attribute a customer, and imported contacts carry the attribution their import line declared.
Money is the invoice’s — what was actually paid, discounts and proration included — grouped per currency and never summed across. Empty UTM fields are an empty string: revenue whose door nobody tagged, reported rather than hidden.
A valid request URL is required to generate request examples{
"channels": [
{
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "launch",
"currency": "BRL",
"revenue_minor": 449700,
"invoices": 3,
"customers": 2
},
{
"utm_source": "",
"utm_medium": "",
"utm_campaign": "",
"currency": "BRL",
"revenue_minor": 14900,
"invoices": 1,
"customers": 1
}
],
"from": "2026-05-04T00:00:00Z",
"to": "2026-08-02T00:00:00Z"
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Autorizações
A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.
Cabeçalhos
The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.
Parâmetros de consulta
Which environment to act in. A view parameter, valid only on the staff surface — a machine credential never chooses its environment, it is resolved from the key.
live, test Range start (inclusive), on the invoice's payment date. Default: 90 days ago.
Range end (exclusive). Default: now.
Resposta
One row per channel and currency, highest revenue first.
Show child attributes
Show child attributes
The window the read actually answered over, and what the plan did to it.
Every analytics read carries one. analytics_retention is a plan LIMIT and never a gate: asking for a year on a plan that keeps a month answers 200 over the month, with clamped true and from moved forward to the horizon — there is no 402 anywhere in this module.
Unlike the staff audit window, which only filters a read, this horizon is also enforced in storage: a nightly sweep deletes analytics past each organization's retention. So data beyond from is not merely hidden, and an upgrade recovers the horizon rather than the history.
Show child attributes
Show child attributes