> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.termina.ai/api-reference/data/unit-economics/get-contribution-summary/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.termina.ai/_mcp/server. # Contribution Summary GET https://app.termina.ai/api/v1/group/{group_id}/deal/{deal_id}/data/contribution-summary Get an assortment of summary metrics about the contribution for the user type. Reference: https://docs.termina.ai/api-reference/data/unit-economics/get-contribution-summary ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Servers - `https://app.termina.ai` (Production server, default) - `https://app.termina.dev` (Development server) - `http://localhost:8000` (Local development server) ## Request ### Path parameters - `group_id` (integer, required) - `deal_id` (integer, required) ### Query parameters - `user_type` (enum, required) - Allowed values: `business`, `consumer`, `supplier`, `asset`, `labor`, `business_user` - `freq` (enum, optional) - Allowed values: `M`, `Q`, `A` ## Response ### 200 Successful Response - `list of ContributionSummaryResponse` ## Errors ### 422 Unprocessable Entity Error Validation Error - `detail` (list of ValidationError, optional) ## Types ### ContributionSummaryResponse Represents summary Unit Economics statistics for each cohort. This approach assumes all acquisition spend was toward the specified user type. Important note: the `cohort` is the cohort start period, not the date of the observation. The `lifetime_*` columns are cumulative aggregates across cohorts up to that period; the `rolling_*` columns are quarter-length, cohort-size-weighted trailing means. - `cohort` (string, required) — The date of the cohort. - `modeled_payback_periods` (double, optional, nullable) — The modeled payback periods for the cohort. For example, a value of 12.5 for monthly frequency means it takes 12.5 months to pay back. Important Note: this is MODELED, which is done by fitting curves to contribution curves and deriving the payback period by finding the zero-intercept. This may deviate from actual payback periods, including from cohorts who have already paid back. This metric aims to fit curves in order to reduce the effect of noise in the data. - `lifetime_cac` (double, optional, nullable) — The lifetime-integrated customer acquisition costs (CAC) across cohorts. - `lifetime_contribution2` (double, optional, nullable) — The lifetime-integrated contribution (gmLTV - CAC) across cohorts. Used for quarterly frequency. - `lifetime_contribution4` (double, optional, nullable) — The lifetime-integrated contribution (gmLTV - CAC) across cohorts. Used for quarterly frequency. - `lifetime_contribution6` (double, optional, nullable) — The lifetime-integrated contribution (gmLTV - CAC) across cohorts. Used for monthly frequency. - `lifetime_contribution12` (double, optional, nullable) — The lifetime-integrated contribution (gmLTV - CAC) across cohorts. Used for monthly frequency. - `lifetime_ltv2_cac` (double, optional, nullable) — The lifetime-integrated LTV to CAC ratio across cohorts. Used for quarterly frequency. - `lifetime_ltv4_cac` (double, optional, nullable) — The lifetime-integrated LTV to CAC ratio across cohorts. Used for quarterly frequency. - `lifetime_ltv6_cac` (double, optional, nullable) — The lifetime-integrated LTV to CAC ratio across cohorts. Used for monthly frequency. - `lifetime_ltv12_cac` (double, optional, nullable) — The lifetime-integrated LTV to CAC ratio across cohorts. Used for monthly frequency. - `lifetime_gmltv2_cac` (double, optional, nullable) — The lifetime-integrated gmLTV to CAC ratio across cohorts. Used for quarterly frequency. - `lifetime_gmltv4_cac` (double, optional, nullable) — The lifetime-integrated gmLTV to CAC ratio across cohorts. Used for quarterly frequency. - `lifetime_gmltv6_cac` (double, optional, nullable) — The lifetime-integrated gmLTV to CAC ratio across cohorts. Used for monthly frequency. - `lifetime_gmltv12_cac` (double, optional, nullable) — The lifetime-integrated gmLTV to CAC ratio across cohorts. Used for monthly frequency. - `rolling_cac` (double, optional, nullable) — Quarter-length, cohort-size-weighted trailing mean of CAC. - `rolling_contribution` (double, optional, nullable) — Quarter-length rolling mean of contribution at period 1. Used for quarterly frequency. - `rolling_contribution2` (double, optional, nullable) — Quarter-length rolling mean of contribution at period 2. Used for quarterly frequency. - `rolling_contribution3` (double, optional, nullable) — Quarter-length rolling mean of contribution at period 3. Used for monthly frequency. - `rolling_contribution4` (double, optional, nullable) — Quarter-length rolling mean of contribution at period 4. Used for quarterly frequency. - `rolling_contribution6` (double, optional, nullable) — Quarter-length rolling mean of contribution at period 6. Used for monthly frequency. - `rolling_contribution12` (double, optional, nullable) — Quarter-length rolling mean of contribution at period 12. Used for monthly frequency. - `rolling_gmltv` (double, optional, nullable) — Quarter-length rolling mean of gmLTV at period 1. Used for quarterly frequency. - `rolling_gmltv2` (double, optional, nullable) — Quarter-length rolling mean of gmLTV at period 2. Used for quarterly frequency. - `rolling_gmltv3` (double, optional, nullable) — Quarter-length rolling mean of gmLTV at period 3. Used for monthly frequency. - `rolling_gmltv4` (double, optional, nullable) — Quarter-length rolling mean of gmLTV at period 4. Used for quarterly frequency. - `rolling_gmltv6` (double, optional, nullable) — Quarter-length rolling mean of gmLTV at period 6. Used for monthly frequency. - `rolling_gmltv12` (double, optional, nullable) — Quarter-length rolling mean of gmLTV at period 12. Used for monthly frequency. - `rolling_gmltv_cac` (double, optional, nullable) — Quarter-length rolling mean of the gmLTV/CAC ratio at period 1. Used for quarterly frequency. - `rolling_gmltv2_cac` (double, optional, nullable) — Quarter-length rolling mean of the gmLTV/CAC ratio at period 2. Used for quarterly frequency. - `rolling_gmltv3_cac` (double, optional, nullable) — Quarter-length rolling mean of the gmLTV/CAC ratio at period 3. Used for monthly frequency. - `rolling_gmltv4_cac` (double, optional, nullable) — Quarter-length rolling mean of the gmLTV/CAC ratio at period 4. Used for quarterly frequency. - `rolling_gmltv6_cac` (double, optional, nullable) — Quarter-length rolling mean of the gmLTV/CAC ratio at period 6. Used for monthly frequency. - `rolling_gmltv12_cac` (double, optional, nullable) — Quarter-length rolling mean of the gmLTV/CAC ratio at period 12. Used for monthly frequency. - `rolling_ltv` (double, optional, nullable) — Quarter-length rolling mean of LTV at period 1. Used for quarterly frequency. - `rolling_ltv2` (double, optional, nullable) — Quarter-length rolling mean of LTV at period 2. Used for quarterly frequency. - `rolling_ltv3` (double, optional, nullable) — Quarter-length rolling mean of LTV at period 3. Used for monthly frequency. - `rolling_ltv4` (double, optional, nullable) — Quarter-length rolling mean of LTV at period 4. Used for quarterly frequency. - `rolling_ltv6` (double, optional, nullable) — Quarter-length rolling mean of LTV at period 6. Used for monthly frequency. - `rolling_ltv12` (double, optional, nullable) — Quarter-length rolling mean of LTV at period 12. Used for monthly frequency. - `rolling_ltv_cac` (double, optional, nullable) — Quarter-length rolling mean of the LTV/CAC ratio at period 1. Used for quarterly frequency. - `rolling_ltv2_cac` (double, optional, nullable) — Quarter-length rolling mean of the LTV/CAC ratio at period 2. Used for quarterly frequency. - `rolling_ltv3_cac` (double, optional, nullable) — Quarter-length rolling mean of the LTV/CAC ratio at period 3. Used for monthly frequency. - `rolling_ltv4_cac` (double, optional, nullable) — Quarter-length rolling mean of the LTV/CAC ratio at period 4. Used for quarterly frequency. - `rolling_ltv6_cac` (double, optional, nullable) — Quarter-length rolling mean of the LTV/CAC ratio at period 6. Used for monthly frequency. - `rolling_ltv12_cac` (double, optional, nullable) — Quarter-length rolling mean of the LTV/CAC ratio at period 12. Used for monthly frequency. - `rolling_ltv_minus_cac` (double, optional, nullable) — Quarter-length rolling mean of (LTV - CAC) at period 1. Used for quarterly frequency. - `rolling_ltv2_minus_cac` (double, optional, nullable) — Quarter-length rolling mean of (LTV - CAC) at period 2. Used for quarterly frequency. - `rolling_ltv3_minus_cac` (double, optional, nullable) — Quarter-length rolling mean of (LTV - CAC) at period 3. Used for monthly frequency. - `rolling_ltv4_minus_cac` (double, optional, nullable) — Quarter-length rolling mean of (LTV - CAC) at period 4. Used for quarterly frequency. - `rolling_ltv6_minus_cac` (double, optional, nullable) — Quarter-length rolling mean of (LTV - CAC) at period 6. Used for monthly frequency. - `rolling_ltv12_minus_cac` (double, optional, nullable) — Quarter-length rolling mean of (LTV - CAC) at period 12. Used for monthly frequency. ### ValidationError - `loc` (list of ValidationErrorLocItems, required) - `msg` (string, required) - `type` (string, required) - `input` (any, optional) - `ctx` (ValidationErrorCtx, optional) ### ValidationErrorLocItems ### ValidationErrorCtx ## Examples **Response** ```json [ { "cohort": "2026-01", "modeled_payback_periods": 14.5, "lifetime_cac": 125, "lifetime_contribution2": 1000, "lifetime_contribution4": 2000, "lifetime_contribution6": 3000, "lifetime_contribution12": 6000, "lifetime_ltv2_cac": 0.5, "lifetime_ltv4_cac": 0.75, "lifetime_ltv6_cac": 0.9, "lifetime_ltv12_cac": 1.2, "lifetime_gmltv2_cac": 0.25, "lifetime_gmltv4_cac": 0.5, "lifetime_gmltv6_cac": 0.75, "lifetime_gmltv12_cac": 1, "rolling_cac": 110, "rolling_contribution": 150, "rolling_contribution2": 300, "rolling_contribution3": 450, "rolling_contribution4": 600, "rolling_contribution6": 900, "rolling_contribution12": 1800, "rolling_gmltv": 150, "rolling_gmltv2": 300, "rolling_gmltv3": 450, "rolling_gmltv4": 600, "rolling_gmltv6": 900, "rolling_gmltv12": 1800, "rolling_gmltv_cac": 1.25, "rolling_gmltv2_cac": 2.5, "rolling_gmltv3_cac": 3.75, "rolling_gmltv4_cac": 5, "rolling_gmltv6_cac": 7.5, "rolling_gmltv12_cac": 10, "rolling_ltv": 150, "rolling_ltv2": 300, "rolling_ltv3": 450, "rolling_ltv4": 600, "rolling_ltv6": 900, "rolling_ltv12": 1800, "rolling_ltv_cac": 1.25, "rolling_ltv2_cac": 2.5, "rolling_ltv3_cac": 3.75, "rolling_ltv4_cac": 5, "rolling_ltv6_cac": 7.5, "rolling_ltv12_cac": 10, "rolling_ltv_minus_cac": 100, "rolling_ltv2_minus_cac": 200, "rolling_ltv3_minus_cac": 300, "rolling_ltv4_minus_cac": 400, "rolling_ltv6_minus_cac": 600, "rolling_ltv12_minus_cac": 1200 } ] ``` **SDK Code** ```python import requests url = "https://app.termina.ai/api/v1/group/1/deal/1/data/contribution-summary" querystring = {"user_type":"business"} headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers, params=querystring) print(response.json()) ``` ```javascript const url = 'https://app.termina.ai/api/v1/group/1/deal/1/data/contribution-summary?user_type=business'; const options = {method: 'GET', headers: {Authorization: 'Bearer '}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "https://app.termina.ai/api/v1/group/1/deal/1/data/contribution-summary?user_type=business" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://app.termina.ai/api/v1/group/1/deal/1/data/contribution-summary?user_type=business") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://app.termina.ai/api/v1/group/1/deal/1/data/contribution-summary?user_type=business") .header("Authorization", "Bearer ") .asString(); ``` ```php request('GET', 'https://app.termina.ai/api/v1/group/1/deal/1/data/contribution-summary?user_type=business', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://app.termina.ai/api/v1/group/1/deal/1/data/contribution-summary?user_type=business"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://app.termina.ai/api/v1/group/1/deal/1/data/contribution-summary?user_type=business")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```