Measurements With the SDK
Measurements With the SDK
Use custd-sdk / custd-sdk-go v1.5.8 or later for measurement project
setup and observation imports.
TypeScript
await client.admin.measurement.projects.create({
projectSlug: "checkout-runway",
name: "Checkout Runway",
kind: "deadline_forecast",
series: [{
seriesSlug: "checkout-completions",
name: "Checkout completions",
unit: "count",
completionDirection: "increase",
source: "manual",
}],
target: {
targetSlug: "release",
name: "Release",
targetValue: 100,
targetDate: "2026-08-31T00:00:00Z",
state: "active",
},
});
const csv = "seriesSlug,observedAt,value\ncheckout-completions,2026-07-01T00:00:00Z,42\n";
await client.admin.measurement.projects.importCSVString("checkout-runway", csv, 1);
Go
project, err := client.Admin.Measurement.Projects.Create(ctx, custd.MeasurementProjectCreate{
ProjectSlug: "checkout-runway",
Name: "Checkout Runway",
Kind: "deadline_forecast",
Series: []custd.MeasurementSeriesCreate{{
SeriesSlug: "checkout-completions",
Name: "Checkout completions",
Unit: "count",
CompletionDirection: "increase",
Source: "manual",
}},
Target: custd.MeasurementTargetCreate{
TargetSlug: "release",
Name: "Release",
TargetValue: 100,
TargetDate: "2026-08-31T00:00:00Z",
State: "active",
},
})
PHP
$project = $client->adminMeasurementProjects()->create([
'projectSlug' => 'checkout-runway',
'name' => 'Checkout Runway',
'kind' => 'deadline_forecast',
'series' => [[
'seriesSlug' => 'checkout-completions',
'name' => 'Checkout completions',
'unit' => 'count',
'completionDirection' => 'increase',
'source' => 'manual',
]],
'target' => [
'targetSlug' => 'release',
'name' => 'Release',
'targetValue' => 100,
'targetDate' => '2026-08-31T00:00:00Z',
'state' => 'active',
],
]);
Python
project = client.admin.measurement.projects.create({
"projectSlug": "checkout-runway",
"name": "Checkout Runway",
"kind": "deadline_forecast",
"series": [{
"seriesSlug": "checkout-completions",
"name": "Checkout completions",
"unit": "count",
"completionDirection": "increase",
"source": "manual",
}],
"target": {
"targetSlug": "release",
"name": "Release",
"targetValue": 100,
"targetDate": "2026-08-31T00:00:00Z",
"state": "active",
},
})
SDK helpers validate that import responses contain one result per submitted row
and that every successful row includes observationUuid. Failed rows retain
their RFC 9457 problem fields.