Documentation
API and agent quickstart
Search tools, find offers, and plan a build without an account. Add a workflow token only for private saved work.
Agents: read the manifest or SKILL.md, then use the tool matching the task. Start with search_tools, find_perks, or build_brief.
Evaluate and debug AI workflows
Compare a baseline and a proposed change against your own cases, inspect failed checks, and verify a reviewed fix with fresh inputs. Build is a private, account-gated pilot. The Node.js and Python SDKs support selected OpenAI and Anthropic requests; Python instrumentation is explicit. Cost figures are estimates, not provider bills, and passing checks do not guarantee production quality or savings.
Read the evaluation and setup guideTry one public request
curl "https://tokensand.com/api/directory/context?q=private%20project%20tracker&limit=3"Use returned docs and source labels. Keep the receipt ID for a later requested save; reading or copying a plan does not save it. build_brief produces an unsaved plan. Save in the workbench before using get_build_packet.
Offers and private work
- Offers:
find_perksdiscovers opportunities. Read provider eligibility, expiry, and billing terms before applying. Native Tokens& claims require a signed-in browser session;DAI_TOKENdoes not authenticate claims. A Tokens& claim or provider link does not prove credit approval or redemption. - Private context: sign in once to create a revocable
DAI_TOKEN. Browser login is not inherited by an MCP host. Project tokens read one project; developer publishing tokens support the documented write flows. See auth and scopes. - Autonomy: continue authorized discovery and local implementation. Review a draft before an explicit public publication. Provider account creation, paid usage, legal acceptance, or external messages need the user's authorization for that action.
- Recovery: fix invalid input on 400; check credentials on 401 and scope on 403. On 429, honor any
Retry-Afterand back off. Do not blindly retry writes after an uncertain response; inspect what persisted first.
Tracking keys use TOKENSAND_ADOPTION_KEY; workflow tokens use DAI_TOKEN. They are not interchangeable. Keep both out of browsers and public files.
Open the reference section needed for your task.
Build & Observe: connect, compare, verify
Build with your coding agent, then measure one change in your own app. An Observe project is a private app workspace; it is separate from a public builder project. Publishing a project never publishes these measurements.
- Connect your app. In Build, select a project and open Connect app. Choose Node.js 20.19+ or Python 3.10+, download the private SDK and verify its checksum. Node captures supported OpenAI and Anthropic requests after integrating its fetch wrapper; Python records only calls you explicitly instrument. The private packages are not published to npm or PyPI.
- Check a recorded request. Keep
TOKENS_OBSERVE_INGEST_URLandTOKENS_OBSERVE_API_KEYin your server environment. Consume the response and flush before shutdown, then refresh Requests for the same project. Python usesobserver.flush(timeout=5)and reports incomplete delivery when events are active, pending, failed or dropped; setup or invalid caller metadata can raise. A copied setup or old request history does not prove a new connection. - Compare one change. Compare with the Node.js or Python SDK. Replace the example with your actual baseline, candidate, cases and required checks. Python comparisons support macOS or Linux and synchronous, non-streaming OpenAI or Anthropic calls through its provided transport; Python post-fix verification requires a new patch-bound comparison. Review source files and provider-call limits before execution. Refresh Comparison results to inspect both arms, failed checks and losing trials; unknown cost is not zero.
- Verify locally. Review an eligible handoff and its exact patch before applying it manually. Run the app's relevant tests and a new comparison with fresh held-out cases. Keep failed results; a comparison does not apply or deploy a fix.
These commands install the Node.js comparison SDK. For Python request metadata or workflow comparisons, select Python in Connect app and use its checksum-pinned wheel and instructions.
# Download in Connect app and verify its displayed checksum first.
# Put the downloaded SDK archive in this directory first.
node -e "const fs=require('node:fs'),crypto=require('node:crypto');if(crypto.createHash('sha256').update(fs.readFileSync('./tokensand-observability-0.5.13.tgz')).digest('hex')!=='2e8b21438f1a574b4f3f78c5564defedbec8e08a219a74d69b4205bda554db4d')throw new Error('SDK checksum mismatch; download again.');console.log('SDK checksum verified');" &&
npm install --offline --ignore-scripts --no-audit --no-fund ./tokensand-observability-0.5.13.tgzFor a local-only Node comparison, obtain the private SDK as an authorized owner and install it with the checksum commands above. Save this as local-comparison.mjs and run node ./local-comparison.mjs; it reports 12 passing runs. Execution needs no ingestion key or collector. Results stay in memory and do not appear in Build as hosted receipts, usage, costs or savings. Trusted callbacks are not sandboxed. The direct API does not freeze sources or prevent reruns; CLI plan and run --local freeze declared sources and claim each plan once.
import { runLocalWorkflowExperiment } from "@tokensand/observability/workflows";
const result = await runLocalWorkflowExperiment({ definition: {
cases: [{ id: "small", input: 2 }, { id: "large", input: 5 }],
checks: [{ id: "correct", label: "Correct result" }], repetitions: 3, timeoutMs: 1000,
baseline: input => input * 2,
candidate: input => input + input,
evaluate: ({ input, output }) => ({ correct: output === input * 2 }),
} });
console.log(JSON.stringify({ state: result.state, runs: result.runs.length,
passed: result.runs.filter(run => run.status === "ok" && run.checks.correct === true).length }));Compare a Python workflow
For a quick local check, obtain and install the checksum-pinned Python SDK from Connect app. Keep any older SDK environment and its paths for unfinished comparisons and metadata retries; use a separate environment for the newer version. Save this as local-comparison.py and run python3 ./local-comparison.py in that environment. Expect 12 passing runs.
import json
from tokensand_observe.workflow import compare_local
result = compare_local(
cases=[{"id": "small", "input": 2}, {"id": "large", "input": 5}],
checks=[{"id": "correct", "label": "Correct result"}],
baseline=lambda value: value * 2,
candidate=lambda value: value + value,
evaluate=lambda value, output, variant: {"correct": output == value * 2},
)
print(json.dumps({"state": result["state"], "runs": len(result["runs"]),
"passed": sum(run["status"] == "ok" and run["checks"]["correct"] is True
for run in result["runs"])}))compare_local needs no endpoint or ingestion key. It runs trusted synchronous callbacks on JSON-native inputs. Results stay in memory and do not appear in Build as hosted receipts, usage, costs or savings. There is no source freeze, replay prevention, process isolation or enforced timeout; callbacks may access the network. Optional capture_outputs=True retains raw output references, which you must manage and serialize yourself. Optional diagnose_timeouts=True reports supported callback timeout exceptions without their details; it does not enforce a deadline.
On macOS or Linux with Python 3.10+, use prepare_workflow and run_workflow from tokensand_observe.workflow. In Build, choose Python in workflow setup for the exact project-specific instructions. Provide synchronous baseline(input, ctx), candidate(input, ctx), and evaluate(input, output, variant) functions, cases with id and input, checks with id and label (the evaluator returns a mapping from check IDs to booleans), absolute source paths and lockfiles, an unused absolute output directory, and call limits for each variant. Declare all_provider_calls_use_ctx=True only after reviewing the code.
Review the whole trusted module and its dependencies, including import-time side effects, before execution. The declaration is not independently verified and the code is not sandboxed: only OpenAI or Anthropic requests through ctx.call are budgeted and receipted. Python workflow workers inherit the caller environment. Run trusted code with only the credentials it needs. Direct requests can incur charges outside those limits and are not detected. These budgets do not limit provider-hosted tools or dollar spend. Preparing does not execute callbacks; running can incur charges. Preserve incomplete runs; missing receipts or zero calls are not successful evidence.
For local checks that freeze declared sources, claim each plan once and enforce a worker deadline, use prepare_local_workflow and run_local_workflow with the same callbacks, declared sources, cases and checks. The private local report is developer-supplied evidence, not a provider receipt, verified usage or cost. Calls through ctx.call are blocked, but trusted callbacks are not sandboxed and may make direct external requests.
Python does not automatically trace tool calls. The SDK does not automatically upload raw inputs, outputs or source; the configured provider receives test requests for provider-backed comparisons. IDs, titles, check labels, check versions and model IDs are sent as metadata. Keep workflow titles, check labels and check versions free of sensitive data; detection is not guaranteed. Keep secrets and personal data out of all metadata. These measurements do not establish production quality or savings.
Python post-fix verification (SDK 0.5.0+): For a new comparison, import prepare_bound_comparison and run_bound_comparison from tokensand_observe.postfix. Supply a project root, exact patch, workflow, all source and evaluator files, cases, checks and per-variant call budgets. Include the adapter in both file lists; protect it and the evaluator closure. Patches may touch only existing .py files outside that closure. The preparation makes no model calls. Independently pin the SHA-256 of bound-plan.json outside the writable evidence directory, review the budget, then run once with that pin. Older or unbound comparisons cannot be backfilled.
Review and manually apply the exact frozen patch, run your application tests, then link your own builder project in Build. Use prepare_fresh_verification with the bound directory, its pinned digest, new output directory, fresh cases, endpoint and ingestion key. Original and fresh cases must use distinct inputs with no floats or integers outside JavaScript's safe range. Pin verification-plan.json outside the evidence directory; after review call run_fresh_verification once with that pin. Running may incur provider charges. Check the archive acknowledgement before claiming a retained receipt.
If only archival delivery failed, pin the saved verification.json and retry only its metadata using publish_fresh_verification(output_dir, verification_plan_sha256, verification_json_sha256, endpoint=..., api_key=...). Never replay consumed plans or callbacks. Fresh receipts are SDK-reported; baseline and candidate can differ, and patch-to-behavior causality is not independently attested. They do not renew savings approval or prove production quality.
The SDK does not automatically collect raw prompts, outputs or source patches. Workflow metadata can include caller-supplied text; your configured provider receives the requests your callbacks send. Keep workflow titles, check labels and check versions free of sensitive data; detection is not guaranteed. Keep keys, private content and personal data out of all metadata. Observe uses a separate server-only ingestion key; DAI_TOKEN and company tracking keys cannot replace it. Availability remains account-gated.
For supported OpenAI calls, the SDK may record the served service tier reported in a successful response. This is SDK-reported, not independently verified billing. Missing tiers remain unreported; existing standard-rate estimates are assumptions and can exclude regional, tool, media and negotiated charges. Unsupported pricing remains unknown.
To compare these estimates with provider costs, an authorized account owner can check the OpenAI Costs API for the same project and UTC days. These are project-day aggregates, not bills for individual requests or runs; reporting may be delayed or adjusted. Never share an admin key with Tokens&. The source checkout also has an offline scripts/observe-openai-costs-report.mjs helper for a locally saved response; it is not included in the downloaded SDK and cannot authenticate the file or establish a final bill.
Link measurements to your project and retain a fresh verification
The original comparison belongs to your app. You may link your own builder project before or after that comparison, but link it before preparing fresh verification. The verification is saved to the project linked at that time. In Build, select your project and click Link project. The link is private. Unpublished and published projects are supported; teammates and public visitors cannot read the measurements. Owner Projects and Edit pages link back to the exact app. Publishing the builder project does not publish telemetry.
Use SDK 0.5.13 for a new original comparison with an exact patch. Declare evaluatorSourceFiles for imported checkers/helpers (an empty array means checks are inline); do not change this checker closure or weaken checks after the original run. Older comparisons remain readable but cannot acquire new source lineage retroactively.
Correctness verification and savings approval are separate. If the baseline fails but the candidate passes complete checks and accounting, use handoff … --purpose correctness-repair. Default handoff still requires the strict savings gate. A repair can be slower or have unknown cost; its fresh quality receipt does not approve savings.
After reviewing and manually applying an eligible handoff, run your app's tests. Put new held-out inputs in fresh-cases.json, choose a new unused output directory, then use verify-fix … --plan-only. Review the frozen plan and authorized provider budget before run … --verify-fix. Direct verify-fix without --plan-only executes immediately and can incur provider charges.
Fresh verification exits: 0 means the candidate passed fresh quality/accounting checks and the archive acknowledged its receipt; 100 retains failed or incomplete evidence; 1 means invalid source, input, lineage or transport. Fresh baseline failures and cost/time differences remain evidence; this is not a new savings claim. If only archival delivery failed, retry publish-verification with the saved artifact, never the consumed plan.
The private project keeps a dated SDK-reported snapshot, source digest and original/fresh experiment references after raw evidence expires in seven days. Failed and incomplete receipts remain visible. Source changes need a retest; expiry, unlinking and relinking make earlier receipts historical. No badge proves an unseen current repository, independent code attestation, semantic novelty, production quality or customer savings.
Agents: call get_context for the exact owned builder projectId. Its project.privateBuild contains only a scoped link/status/next action, never ingestion credentials or raw requests. The SDK reads the active binding separately with its ingestion key. There is no Observe MCP executor.
CLI and coding-agent contract
Use the installed npx --no-install tokens-observe command in your own repository. MCP provides context; there is no Observe MCP executor. These commands do not install a provider, apply a fix or deploy an app.
Commands below are alternatives, not a script. Choose check OR plan then run --gate; never run a started plan twice.
- npx --no-install tokens-observe init ./observe.workflow.mjs
- Creates a starter adapter without overwriting an existing file or running callbacks.
- npx --no-install tokens-observe plan ./observe.workflow.mjs --out ./.observe/change-001
- Freezes the cases, declared sources, checks and limits. Imports your trusted module; does not run workflow callbacks.
- npx --no-install tokens-observe check ./observe.workflow.mjs --out ./.observe/change-002
- Plans, executes and gates immediately. Can make billable provider calls.
- npx --no-install tokens-observe run ./.observe/change-001/plan.json ./.observe/change-001
- Executes a frozen plan once. Exit 0 means completion, even when quality checks fail.
- npx --no-install tokens-observe run ./.observe/change-001/plan.json ./.observe/change-001 --gate
- Executes once and gates the result. Can make billable provider calls.
- npx --no-install tokens-observe gate ./.observe/change-001/plan.json ./.observe/change-001
- Checks saved evidence offline. Makes no model or collector calls.
- npx --no-install tokens-observe handoff ./.observe/change-001/plan.json ./.observe/change-001 --out ./.observe/change-001/handoff.json
- Requires the strict savings gate and a patch frozen before execution; writes private review instructions. Never applies or uploads the patch.
- npx --no-install tokens-observe handoff ./.observe/change-001/plan.json ./.observe/change-001 --out ./.observe/change-001/repair-handoff.json --purpose correctness-repair
- Separately requires complete candidate correctness checks and accounting. Baseline failures or slower repairs do not establish savings. Retains the failed savings gate; never applies or uploads the patch.
- npx --no-install tokens-observe verify-fix ./.observe/ORIGINAL/handoff.json --cases ./fresh-cases.json --out ./.observe/NEW-FRESH-RUN --plan-only
- After manual patch application, validates exact source postimages and new inputs, reads the private app link and freezes a new plan. No model callbacks; trusted module initialization must remain side-effect free.
- npx --no-install tokens-observe run ./.observe/NEW-FRESH-RUN/plan.json ./.observe/NEW-FRESH-RUN --verify-fix
- Executes the fresh plan once within reviewed call limits, evaluates candidate quality and publishes bounded metadata. Can incur provider charges. Never applies a patch.
- npx --no-install tokens-observe publish-verification ./.observe/EXACT-FRESH-RUN/verification.json
- Retries the saved verification metadata only after an uncertain archive response. No model callbacks or plan replay.
Gate exits: 0 means eligible in the recorded sample; 100 means ineligible evidence; 1 means invalid input, source drift or a command error. This savings contract applies to check, run --gate, gate and default handoff. With --purpose correctness-repair, handoff exits describe only candidate correctness/accounting eligibility. Plain run does not decide savings eligibility.
For Codex and other coding agents, read the command's exit status and parse its entire JSON stdout together. SDK 0.5.1 and later route ordinary workflow logging to stderr; keep diagnostics private and review them before sharing. Trusted callbacks are not sandboxed, and child-process OS output can bypass that routing. Missing or malformed JSON never establishes a passing gate. The public agent manifest supplies the current SDK version, exact archive checksum and download URL; downloading still requires an admitted owner session.
Choose a fresh output directory for every experiment. Planning saves plan.json; execution saves private run files and result.json. A started plan is consumed even after interruption: never delete its claim or replay uncertain provider calls. Keep module initialization side-effect free, declare every local implementation/evaluator and lockfile in sourceFiles, and keep caching off.
For an exact fix, add --patch ./fix.patch to plan or check before execution. Handoff requires its declared savings or correctness-repair policy to pass and unchanged frozen bytes. Inspect the patch and apply-check instructions, apply it manually only after review, then run the app's tests and a new comparison on fresh held-out cases. A failed baseline may indicate a correctness repair; it is not verified savings. Finite synthetic checks never prove production savings or general quality.
Connection troubleshooting
- No new request
- Use the exact endpoint and selected project from Connect app. Consume the provider response and inspect flush counters:
sent,failed,droppedandtimedOut. Refresh Requests; old rows are not a new connection check. Only supported generation endpoints are observed. - 401 or 403
- Check the project's server key and authorized account. Browser delivery is refused. A cleared project revokes its ingestion key; do not rotate credentials merely to retry an uncertain request.
- 400, 429 or missing receipt
- Correct invalid metadata on 400. Respect rate limits on 429. Check what persisted before retrying an uncertain write; do not generate new model calls to repair a lost telemetry receipt.
- Copy or command failed
- Use the visible manual setup instructions without sharing secrets. Review the existing plan, result and error before choosing a new directory. If Connect app is unavailable, the account may be outside the current pilot.
Set up server-side tracking
- 1. Create a tracking key. Open the company workspace, choose the product, and store the key on your server.
- 2. Validate one event. Use the dry-run examples. Check
accepted: true, the product, account and campaign mapping. - 3. Store and verify. Send an approved real event to
/api/usage/track. Confirmtracked: trueand its event ID, then find it in your workspace.
Use a stable source event ID as idempotencyKey; reuse it only for retries of that event. A retry with duplicate: true refers to the existing event. A 2xx response alone does not prove storage. An ignored product can return tracked: false.
Validate an event with REST
These examples validate without storing an event. Replace sample identifiers and review the returned mapping before a real write.
Example
Validate an event with cURL
# Set TOKENSAND_ADOPTION_KEY in your server environment first.
curl --fail-with-body https://tokensand.com/api/usage/track/dry-run \
-H "Authorization: Bearer $TOKENSAND_ADOPTION_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_name": "FIRST_API_CALL",
"event_family": "activation",
"developer_id": "dev_123",
"account_domain": "customer.example",
"product": {
"id": "your-api",
"name": "Your API",
"type": "api"
},
"context": {
"attribution": {
"campaignId": "your-campaign-id",
"source": "workshop"
}
},
"idempotencyKey": "source-event-123"
}'Endpoints and authentication
Base URL: https://tokensand.com. Read exact request and response schemas in OpenAPI.
GET /api/directory/context
Fetch live DB-backed tool rows, facets, tracked action URLs, and receipt metadata for agent answers. Auth: Public or session.
GET /api/build/search
Search builder stack recommendations by intent, pricing, maturity, category, and proof signals. Auth: Public, rate-limited.
POST /api/usage/track/dry-run
Validate payload shape, required identifiers, and account mapping without storing the event. Auth: Tracking key.
POST /api/usage/track
Store one activation, retention, commercial, or expansion event for a company product. Auth: Tracking key.
POST /api/usage/track/batch
Store up to 50 events from batch jobs, warehouses, CDPs, campaign imports, or event platforms. Auth: Tracking key.
GET /api/v1/adoption
Read public, privacy-safe adoption rows for tools, categories, proof, and rankings. Auth: Public, rate-limited.
GET /api/v1/agent-rank
Read the public adoption score contract for agent search, recommendation, and citation flows. Auth: Public, rate-limited.
401/403: verify token type and access. 400: correct the payload. 409: do not change an event under an existing idempotency key. 429: respect rate-limit headers before retrying. On an uncertain write, inspect what persisted before retrying. Reuse the same payload and key only where idempotency is documented.
Event fields, campaign mapping and CDP imports
Send event_name and one stable developer identifier. Organization tracking keys also require product and idempotencyKey (or event_id) for stored events. Add event_family for custom names.
account_domain- The customer account to match. Use the actual account, not the vendor sending the event.
context.attribution.campaignId- Your campaign identifier. A top-level
campaignIdis not part of the tracking schema. occurredAt- ISO 8601 time of the real event; preserve it on replay. Do not invent retention timestamps.
projectId- Optional existing Tokens& project ID for linked project proof. Omit it when no project exists.
For Segment/PostHog-style input, map event to event_name, userId to developer_id, and campaign properties into context.attribution. Send the canonical payload above, not the raw CDP envelope. Batch requests use {"events": [...]}, up to 50 events.
intent — Docs open, event RSVP, comparison, saved stack, pricing view.
evaluation — SDK init, API key created, demo project, benchmark, proof review.
activation — First API call, first successful workflow, project created.
retention — Returned D7/D30, repeated API calls, production-like usage.
expansion — Team added, account matched, more workflows or products adopted.
commercial — Credit claimed, perk redeemed, campaign sourced, opportunity created.
Usage receipt SDK reference
The server-side SDK writes the tokensand-usage-receipt-v1 contract into metadata.usageReceipt. The calls below store events; validate your integration first. Metrics are illustrative and must be replaced with observed values.
Install the versioned server-side SDK from Tokens&.; it is not published on public npm. trackUsageReceipt supports model, API, spend and build receipts. Package integrity and delivery limits.
npm install https://tokensand.com/packages/tokensand-adoption-0.1.1.tgzQueued events survive failed uploads within the running process; flush and inspect the result before shutdown. The queue is bounded and held in memory, so a process crash can lose pending events. Preserve event IDs and original timestamps when replaying from your own durable source.
import { tokensand } from "@tokensand/adoption";
const adoption = tokensand({
apiKey: process.env.TOKENSAND_ADOPTION_KEY!,
baseUrl: "https://tokensand.com"
});
// This SDK call stores an event. Replace every illustrative value with measured usage.
const result = await adoption.trackUsageReceipt<{ tracked?: boolean; duplicate?: boolean; ignored?: boolean }>({
receiptType: "model_call",
product: { id: "your-model", name: "Your model", type: "model" },
user: { id: "dev_123" },
account: { domain: "customer.example" },
workflow: { id: "support-agent", runId: "run_123", success: true },
provider: "your-provider",
model: "your-model",
inputTokens: 1200,
outputTokens: 340,
costCents: 12,
latencyMs: 820,
success: true,
idempotencyKey: "run_123:model-call-1"
});
if (!result.ok || (result.data?.tracked !== true && result.data?.duplicate !== true)) {
console.warn("Usage receipt was not stored; check the tracking response.");
}MCP telemetry SDK reference
Use the versioned SDK installation above, or send the same receipt through the REST quickstart.
trackMcpToolCall records MCP_TOOL_CALL_SUCCEEDED / MCP_TOOL_CALL_FAILED. Stable context: mcpServer, mcpTool, workflow.id, account.domain. Supply a unique execution ID for retries and measured metrics.
Place telemetry beside the real server-side tool call. Never send raw prompts, secrets, private payloads, private code. A single sample receipt does not justify a recommendation to keep or replace a stack.
MCP wrapper
Any MCP server
import { tokensand } from "@tokensand/adoption";
const adoption = tokensand({
apiKey: process.env.TOKENSAND_ADOPTION_KEY!,
baseUrl: "https://tokensand.com"
});
// This SDK call stores an event. Use actual identifiers and measured metrics.
const result = await adoption.trackMcpToolCall<{ tracked?: boolean; duplicate?: boolean }>({
product: { id: "your-agent", name: "Your agent", type: "agent" },
user: { id: "dev_123" },
account: { domain: "customer.example" },
workflow: { id: "support-agent", runId: "run_123" },
mcpServer: "your-server",
mcpTool: "your-tool",
requestCount: 1,
latencyMs: 920,
success: true,
idempotencyKey: "run_123:tool-call-1"
});
if (!result.ok || (result.data?.tracked !== true && result.data?.duplicate !== true)) {
console.warn("MCP receipt was not stored; check the tracking response.");
}Partner relays and activation event names
Send events from the partner server with a company tracking key. Validate one payload, then send activation when it happens and reconcile account and cost counters. CSV is a fallback when server events are unavailable.
DOCS_MCP_CONNECTEDevaluation — Provider observed a docs MCP connection; a config copy alone is intent.
WEB_MCP_CONNECTEDevaluation — Builder connected the partner Web MCP server.
API_KEY_CREATEDevaluation — Builder created partner API credentials.
MCP_TOOL_CALL_SUCCEEDEDactivation — Agent successfully used a partner MCP tool.
FIRST_UNLOCKER_REQUEST_SUCCEEDEDactivation — First successful web access/API request.
SCRAPER_JOB_COMPLETEDactivation — Builder completed a scraping or data workflow.
ZONE_USAGE_REPORTEDretention — Partner reconciled account, zone, cost, or bandwidth usage.
RETURNED_AFTER_7_DAYSretention — Builder returned after initial activation.
ENTERPRISE_USAGE_THRESHOLD_REACHEDcommercial — Usage crossed an account or pipeline threshold.
Import SKILL.md as a private draft
Generate a developer workflow config from project setup. Skill imports require an unscoped workflow token with project:publish; project-scoped tokens are rejected. Use DAI_TOKEN, not a tracking key.
Parse a public SKILL.md, review the draft, then confirm creation with an idempotency key. This creates a private DRAFT. Public publishing remains a separate authenticated dashboard action after the install path is verified. Only import public content you may use; secrets and private repository files are not fetched.
# Replace this URL with a public SKILL.md that you own or may import.
# 1. Parse and review. This call returns persisted: false.
curl --fail-with-body https://tokensand.com/api/workflow/agent-skills \
-H "Authorization: Bearer $DAI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"skillUrl":"https://raw.githubusercontent.com/your-org/your-repo/main/SKILL.md"}'
# 2. After approval, create a PRIVATE draft. Reuse the key for retries of this import.
curl --fail-with-body https://tokensand.com/api/workflow/agent-skills \
-H "Authorization: Bearer $DAI_TOKEN" \
-H "Idempotency-Key: skill-import-your-stable-source-id" \
-H "Content-Type: application/json" \
-d '{"skillUrl":"https://raw.githubusercontent.com/your-org/your-repo/main/SKILL.md","confirm":true,"status":"DRAFT"}'
# Expect persisted: true, an agentHref and publicHref: null.
# Public publishing is a separate authenticated dashboard action after install verification.Open the dashboard import formRead the public adoption graph
Public reads are rate limited and aggregate. Preserve methodology, source labels and cohort suppression. Missing rows are not proof of no adoption.
curl --fail-with-body "https://tokensand.com/api/v1/adoption?period=30d&limit=10"Keep evidence and private data distinct
- Keep raw prompts, private notes and secrets out of metadata.
- Keep workspace data private and rotate exposed keys.
- Preserve first-party, public-source, sample, modelled and missing labels in reports.
- Small cohorts remain suppressed or insufficient; do not infer individual identities.
- Sponsor selection is self-reported until authenticated activation arrives. Retained proof requires a separate signal at least seven days later.
Machine-readable docs and MCP setup
Start with the manifest and OpenAPI. Public lookup and build_brief need no token; private saved Build Packets require authorized workflow access. Installing MCP does not grant enterprise access.
# Public tools need no token. Pin the documented CLI version.
npx -y https://tokensand.com/packages/dev-adoption-cli-0.1.64.tgz mcp serve --api https://tokensand.com
# Claude Code registration
claude mcp add --transport stdio tokensand -- npx -y https://tokensand.com/packages/dev-adoption-cli-0.1.64.tgz mcp serve --api https://tokensand.com
# Set DAI_TOKEN through your host's secret environment only for private workflow access.Use Tokens& build_brief for this project: [describe the product and constraints].
Return the stack choices, alternatives, available credits, cost and reliability risks,
and a Build Packet with the next implementation step and proof needed.
Separate public evidence from assumptions. Do not claim that setup proves adoption.For private enterprise reads, an owner/admin creates a product-scoped Agent read-only key in native Enterprise Settings. Put it in DAI_ENTERPRISE_TOKEN in the agent environment and select --mode enterprise. Never put credentials in prompts or URLs. Call get_enterprise_context, then get_enterprise_report or get_enterprise_actions with an authorized productId. Free context covers configuration; reports and saved actions retain paid plan gates. These tools cannot ingest, export, approve or execute.
enterprise_session_brief analyzes supplied or sample metrics by default. With live:true and productId, it returns the canonical live report without sample fallback. Browser login and context labels do not grant MCP access. Preserve grades, nulls, scope, window and result limits; an output does not prove reconciled spend, provider delivery or measured ROI. Review approved actions in the workspace.
Company next actions
DevRel: compare activation and returning users in campaigns. CMO: review account evidence in the adoption dashboard. Inspect competitor sources in War Map before acting.
Companies can start in the free workspace. Private attribution and governed exports require sales-enabled enterprise access. Setup, clicks and missing attribution are not proof of retained usage or revenue.
