Documentation
The contract between your application and ACLP.
What is collected, which providers are covered, how costs are produced, and how the system behaves when data is late or missing.
01
Telemetry model
Each observed call produces one event. Required fields are request identifier, timestamp, provider, model, input tokens, output tokens, latency, and status. Optional fields include feature label, session identifier, environment, retry relationship, and application metadata you choose to attach.
Feature labels are the join key between a request and a product surface. A label such as support-reply lets ACLP attribute spend to the support console rather than reporting an anonymous total.
{
"requestId": "req_063534",
"timestamp": "2026-09-21T14:08:11.000Z",
"provider": "openai",
"model": "gpt-4o",
"feature": "document-summarization",
"inputTokens": 148233,
"outputTokens": 1184,
"latencyMs": 5120,
"status": "ok",
"retryOf": null
}02
Supported providers
The initial SDK targets OpenAI and Google Gemini. Those two are the only providers with a planned first-party integration. Anything else should be treated as unsupported until it appears here.
Requests are attributed to the provider that served them, so a mixed-provider application reports a provider split without extra configuration.
03
SDK setup
The SDK attaches to the provider client you already construct. It instruments calls, batches events, and sends them to the ingest endpoint. The package is not published yet, so the snippet below is the intended interface rather than an installable release.
import { AclpClient } from "@aclp/sdk";
const aclp = new AclpClient({
projectId: "proj_customer-platform",
apiKey: process.env.ACLP_INGEST_KEY,
});
aclp.observe(openaiClient, { feature: "support-reply" });04
Cost estimation
Cost is token count multiplied by a per-model rate for input and output. Rates are maintained per model and per provider. Where a rate is a sample value, the resulting cost is labelled as an estimate in the interface and in exports.
If a model is missing from the price table, its requests are reported as unpriced rather than being included in a total with a guessed rate. That keeps a total honest at the cost of being incomplete, which is the right trade for a cost tool.
05
Data handling
Prompt and completion text are excluded from the telemetry contract by default and are not required for any ACLP feature. The record is usage metadata.
Session identifiers and application metadata are configurable per project so you can decide how much context a label carries. Retention is configurable per project; the sample workspace is configured for 90 days of telemetry and 30 days of request detail.
06
Delay, partial data, and limits
Ingest is not always immediate. When events arrive late, the affected window is marked so a lower total is not mistaken for a saving, and an alert records the delay.
Attribution depends on the labels your application sends. A request without a feature label is still counted and priced, but it appears under an unlabelled bucket instead of being guessed into a feature.