Custom Metrics by CUIT
curl --request GET \
--url http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics \
--header 'Authorization: Bearer <token>'import requests
url = "http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data.complete": true,
"data.lookbackDays": 123,
"data.referenceDate": "<string>",
"data.windowStart": "<string>",
"data.windowEnd": "<string>",
"data.metrics": {}
}API Reference
Custom Metrics by CUIT
Get incremental CBU and CVU account metrics for an Argentina CUIT over a 1–180 day calendar lookback (or window preset) — billable per request when priced.
GET
/
integration-services
/
ar_gueno_holder_intelligence_service
/
cuits
/
:cuit
/
metrics
Custom Metrics by CUIT
curl --request GET \
--url http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics \
--header 'Authorization: Bearer <token>'import requests
url = "http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("http://api.gu1.ai/integration-services/ar_gueno_holder_intelligence_service/cuits/:cuit/metrics")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data.complete": true,
"data.lookbackDays": 123,
"data.referenceDate": "<string>",
"data.windowStart": "<string>",
"data.windowEnd": "<string>",
"data.metrics": {}
}Overview
Returns densified incremental metrics for a calendar lookback ending on a reference date: deltas, % change, daily variance, acceleration when enough history exists, and completeness. One billable request per successful call when priced. Providelookback (integer 1–180) or a window preset (w_1d … w_180d). If both are sent, lookback wins.
Window math
window = [date − (lookback − 1) … date] // inclusive calendar days
lookback=4&date=2026-07-14 → 2026-07-11 … 2026-07-14 (four days). The date is included.
Quiet days may be sparse upstream; on HTTP 200 the API returns a dense series (forward-fill): unchanged days keep prior totals with daily delta 0. A flat series with delta 0 means no movement, not “missing data”. Only evaluate thresholds when complete === true.
Endpoint
GET https://api.gu1.ai/api/integration-services/ar_gueno_holder_intelligence_service/cuits/{cuit}/metrics
Path parameters
string
required
Argentina CUIT/CUIL — 11 digits, no dashes.
Query parameters
At least one oflookback or window is required.
integer
Calendar days in the window (1–180, inclusive). Optional if
window is set.string
Optional lookback preset that resolves to calendar days:
window | Days |
|---|---|
w_1d | 1 |
w_3d | 3 |
w_7d | 7 |
w_14d | 14 |
w_21d | 21 |
w_30d | 30 |
w_90d | 90 |
w_180d | 180 |
string
Optional. Inclusive window end (
YYYY-MM-DD). Defaults to latest corpus date when omitted.Success response (HTTP 200)
Account stock aliases:cbuCount,cvuCount,totalAccounts— last densified day (windowEnd/referenceDate)cbuCountAtStart,cvuCountAtStart— first densified day (windowStart)
daily[]: exactly lookbackDays densified rows when present (debugging / day-level rules).
How to read % / deltas: cbuDelta / cvuDelta are end − start for the whole window (not a sum of internal churn). totalDelta is cbuDelta + cvuDelta. cbuPctChange / cvuPctChange are null when that channel’s start = 0; totalPctChange is null when combined start stock (totalAccountsStart) = 0 (do not treat null as 0). When accelerationAvailable is false, ignore acceleration fields (null). daysWithChanges counts densified days with daily CBU or CVU delta ≠ 0.
Gate: only score when HTTP 200 and data.complete === true. Do not treat HTTP 422 as “zero change”.
boolean
trueboolean
Always
true on success.number
Resolved lookback (from
lookback or window preset).string
Inclusive window end (
YYYY-MM-DD).string
Window start date (
YYYY-MM-DD).string
Window end date (
YYYY-MM-DD), same as reference date.object
cbuTotalStart,cbuTotalEnd,cvuTotalStart,cvuTotalEnd(numbers)totalAccountsStart,totalAccountsEnd(numbers) — CBU + CVU stock at window start/endcbuDelta,cvuDelta,totalDelta(numbers) —totalDelta=cbuDelta + cvuDeltacbuPctChange,cvuPctChange,totalPctChange(number | null)daysWithChanges(number)cbuDailyDeltaVariance,cvuDailyDeltaVariance(number | null)cbuAcceleration,cvuAcceleration,totalAcceleration(number | null)accelerationAvailable(boolean) — whenfalse, acceleration fields arenull
Incomplete window (HTTP 422)
When the densified window cannot be built (missing floor for forward-fill, corpus day not marked complete, or no incremental state), the API returnssuccess: false with a partial data payload. Do not apply threshold rules — this is “data not ready”, not a zero score.
error.code | Meaning |
|---|---|
INCOMPLETE_WINDOW | At least one calendar day could not be densified (missingDates may be listed) |
NO_INCREMENTAL_STATE | No incremental history / empty daily / no reference date |
| Example: |
{
"success": false,
"error": {
"code": "INCOMPLETE_WINDOW",
"message": "Incremental window incomplete for the requested lookback"
},
"data": {
"integrationCode": "ar_gueno_holder_intelligence_service",
"cuit": "20384648798",
"complete": false,
"error": "incomplete_window",
"lookbackDays": 30,
"referenceDate": "2026-06-24",
"windowStart": "2026-05-26",
"windowEnd": "2026-06-24",
"missingDates": ["2026-05-27"]
}
}
Other errors
| HTTP | error.code | When |
|---|---|---|
| 400 | LOOKBACK_REQUIRED | Neither lookback nor window provided |
| 400 | INVALID_LOOKBACK | lookback outside 1–180 |
| 400 | INVALID_WINDOW | Unknown window preset |
| 400 | INVALID_DATE | Malformed date |
| 404 | CUIT_NOT_FOUND | CUIT not in corpus |
| 402 | INSUFFICIENT_BALANCE | Credits or pack exhausted |
| 503 | SERVICE_UNAVAILABLE | Holder backend unavailable |
| 500 | INTERNAL_ERROR | Unexpected error |
Example
curl -s \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://api.gu1.ai/api/integration-services/ar_gueno_holder_intelligence_service/cuits/20384648798/metrics?lookback=7&date=2026-06-24"
curl -s \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://api.gu1.ai/api/integration-services/ar_gueno_holder_intelligence_service/cuits/20384648798/metrics?window=w_7d"
{
"success": true,
"data": {
"integrationCode": "ar_gueno_holder_intelligence_service",
"cuit": "20384648798",
"complete": true,
"referenceDate": "2026-06-24",
"lookbackDays": 7,
"windowStart": "2026-06-18",
"windowEnd": "2026-06-24",
"cbuCount": 3,
"cvuCount": 2,
"totalAccounts": 5,
"cbuCountAtStart": 2,
"cvuCountAtStart": 1,
"metrics": {
"cbuTotalStart": 2,
"cbuTotalEnd": 3,
"cvuTotalStart": 1,
"cvuTotalEnd": 2,
"totalAccountsStart": 3,
"totalAccountsEnd": 5,
"cbuDelta": 1,
"cvuDelta": 1,
"totalDelta": 2,
"cbuPctChange": 50.0,
"cvuPctChange": 100.0,
"totalPctChange": 66.66666666666666,
"daysWithChanges": 2,
"cbuDailyDeltaVariance": 0.1,
"cvuDailyDeltaVariance": 0.05,
"cbuAcceleration": 0.5,
"cvuAcceleration": 0.3,
"totalAcceleration": 0.8,
"accelerationAvailable": true
}
}
}
Rules engine
Metrics conditions requireholderIntelligenceLookbackDays (1–180) on the rule condition. An explicit metrics.complete == true condition is unnecessary: incomplete windows expose metrics as null, and the engine evaluates them as non-matches. For acceleration, add metrics.acceleration_available == true. Never treat incomplete / null metrics as zero.
| API / block field | Rule field (examples) |
|---|---|
metrics.cbuAcceleration | services.holder_intelligence.metrics.cbu_acceleration |
metrics.cbuPctChange | services.holder_intelligence.metrics.cbu_pct_change |
metrics.totalAcceleration | services.holder_intelligence.metrics.total_acceleration |
metrics.totalDelta | services.holder_intelligence.metrics.total_delta |
metrics.totalPctChange | services.holder_intelligence.metrics.total_pct_change |
complete | services.holder_intelligence.metrics.complete |
transactedAt converted to Argentina calendar date unless you set holderIntelligenceReferenceDateField on the condition.
See Rules conditions.Was this page helpful?