Revenue & attribution
Attribution, discounts, UTM revenue, and customer LTV.
Authorization
apiKey A Formtoro API key minted in Settings → Connections. A key carries one
or more scopes; an endpoint refuses a key that lacks its required scope
with 403 insufficient_scope. Scopes:
analytics:read— all aggregate read endpoints.customers:read— customer-level lifetime value.forms:write— create and edit forms (drafts). Grantable only by a member who holds the Form-editing permission.discounts:read— read discount definitions. Grantable only by a member who holds the Discounts-view permission.
In: header
Query Parameters
Time window. Shorthand (7d/30d/90d), an ISO pair
(2026-01-01..2026-01-31), or a single ISO day. Omitted → last 30 days.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/attribution?range=30d"{ "meta": { "requestId": "req_019e73ce-1968-71ca-ae57-dbd8084cee79", "shopId": "example.myshopify.com", "credentialId": "cred_019e73c0", "range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" } }, "data": [ {} ]}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}Authorization
apiKey A Formtoro API key minted in Settings → Connections. A key carries one
or more scopes; an endpoint refuses a key that lacks its required scope
with 403 insufficient_scope. Scopes:
analytics:read— all aggregate read endpoints.customers:read— customer-level lifetime value.forms:write— create and edit forms (drafts). Grantable only by a member who holds the Form-editing permission.discounts:read— read discount definitions. Grantable only by a member who holds the Discounts-view permission.
In: header
Query Parameters
Time window. Shorthand (7d/30d/90d), an ISO pair
(2026-01-01..2026-01-31), or a single ISO day. Omitted → last 30 days.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/attribution/daily?range=30d"{ "meta": { "requestId": "req_019e73ce-1968-71ca-ae57-dbd8084cee79", "shopId": "example.myshopify.com", "credentialId": "cred_019e73c0", "range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" } }, "data": [ {} ]}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}Authorization
apiKey A Formtoro API key minted in Settings → Connections. A key carries one
or more scopes; an endpoint refuses a key that lacks its required scope
with 403 insufficient_scope. Scopes:
analytics:read— all aggregate read endpoints.customers:read— customer-level lifetime value.forms:write— create and edit forms (drafts). Grantable only by a member who holds the Form-editing permission.discounts:read— read discount definitions. Grantable only by a member who holds the Discounts-view permission.
In: header
Query Parameters
Time window. Shorthand (7d/30d/90d), an ISO pair
(2026-01-01..2026-01-31), or a single ISO day. Omitted → last 30 days.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/discounts/performance?range=30d"{ "meta": { "requestId": "req_019e73ce-1968-71ca-ae57-dbd8084cee79", "shopId": "example.myshopify.com", "credentialId": "cred_019e73c0", "range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" } }, "data": [ {} ]}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}Authorization
apiKey A Formtoro API key minted in Settings → Connections. A key carries one
or more scopes; an endpoint refuses a key that lacks its required scope
with 403 insufficient_scope. Scopes:
analytics:read— all aggregate read endpoints.customers:read— customer-level lifetime value.forms:write— create and edit forms (drafts). Grantable only by a member who holds the Form-editing permission.discounts:read— read discount definitions. Grantable only by a member who holds the Discounts-view permission.
In: header
Query Parameters
campaign— source + campaign with conversion rateattribution— attribution type × UTMhierarchy— source/campaign/medium tree
Time window. Shorthand (7d/30d/90d), an ISO pair
(2026-01-01..2026-01-31), or a single ISO day. Omitted → last 30 days.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/revenue/by-utm?dimension=campaign&range=30d"{ "meta": { "requestId": "req_019e73ce-1968-71ca-ae57-dbd8084cee79", "shopId": "example.myshopify.com", "credentialId": "cred_019e73c0", "range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" } }, "data": {}}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}Authorization
apiKey A Formtoro API key minted in Settings → Connections. A key carries one
or more scopes; an endpoint refuses a key that lacks its required scope
with 403 insufficient_scope. Scopes:
analytics:read— all aggregate read endpoints.customers:read— customer-level lifetime value.forms:write— create and edit forms (drafts). Grantable only by a member who holds the Form-editing permission.discounts:read— read discount definitions. Grantable only by a member who holds the Discounts-view permission.
In: header
Query Parameters
form— LTV grouped by form idsegment— LTV grouped by response segment
Time window. Shorthand (7d/30d/90d), an ISO pair
(2026-01-01..2026-01-31), or a single ISO day. Omitted → last 30 days.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/customers/ltv?dimension=form&range=30d"{ "meta": { "requestId": "req_019e73ce-1968-71ca-ae57-dbd8084cee79", "shopId": "example.myshopify.com", "credentialId": "cred_019e73c0", "range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" } }, "data": {}}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}