Quickstart: see your first customer story
Connect one application, identify a test customer, and follow an error across their Anectico timeline.
On this page
This quickstart proves the part of Anectico that matters: signals from one application become one connected story for the customer they affected.
You will send a test error and a trace (server SDKs) or diagnostic event (mobile SDKs), attach them to a customer, and inspect the result in the dashboard. Allow about ten minutes once your app and SDK artifact are available.
Start with your agent
Open Get started (/get-started) in the dashboard. New accounts land here automatically.
Choose Claude Code, Codex, another CLI agent, or manual setup, then select your application stack.
The guide supplies connection commands and a project-specific task for your agent to install the
SDK, identify a test customer, send a controlled error, and verify the stored evidence. Your own
agent can investigate through MCP or the CLI on any Anectico plan; hosted Customer Detective is
optional and requires Scale.
Run the copied connection block in a POSIX-compatible terminal. It clears an older agent key from that shell and stops at the first failed step. Resolve the reported error and run the block again; the agent starts only after login, credential setup, and host registration succeed.
Your choices and test identifiers are saved to the selected project when you continue, so an administrator can resume on another device. Read-only members can follow the guide without saving shared progress. Keys are shown once and are never stored in the setup draft. Verification always reads live data; returning to a saved step does not imply that instrumentation is healthy. The trace ID is saved before verification, even if the evidence check temporarily fails.
For a workflow entirely from your terminal, see Run an agent without the dashboard. If you have not received your early-access SDK artifact or CLI access, contact support.
Before you start
You need:
- access to an Anectico organization;
- a project in Settings → Projects; and
- a project-scoped API key with
ingest:writeandanalytics:writein Settings → Access.
This example needs both scopes: traces and errors use ingest:write, while Identify uses the
diagnostic capture surface protected by analytics:write. Choose Application when creating the key, or create it in Get started.
The Ingest only preset does not include identity capture.
The Browser + replay preset also grants replay:write; add replay after the basic test works.
Keep the application credential separate from your agent's ANECTICO_API_KEY.
For server examples, keep the application key in an environment variable. Do not put it in source code.
For mobile, inject the same project-scoped write-only key through your app's development
configuration and pass it to the helper below. Keys shipped in client apps are visible to their
users; never substitute a read, management, or agent credential.
export ANECTICO_INGEST_KEY="an_..."
1. Install an SDK
Choose the language used by your service or existing mobile app. During early access, use the package artifact or repository access supplied during onboarding. The JavaScript and Python examples below install local artifacts so the commands work before the public registries open.
JavaScript / TypeScript
mkdir anectico-quickstart && cd anectico-quickstart
npm init -y
npm install /path/to/anectico-sdk.tgz
Python
mkdir anectico-quickstart && cd anectico-quickstart
python -m venv .venv
source .venv/bin/activate
pip install /path/to/anectico.whl
Go
mkdir anectico-quickstart && cd anectico-quickstart
go mod init example.com/anectico-quickstart
go get github.com/anectico/anectico/sdks/go@main
Swift (iOS)
In your existing iOS app, add the authorized Anectico repository in Xcode's File → Add Package
Dependencies…, select the onboarding revision, and link the Anectico product. See the
iOS install guide.
Kotlin (Android)
Copy the supplied AAR to your app module's libs/anectico-sdk.aar and add this dependency:
dependencies {
implementation(files("libs/anectico-sdk.aar"))
}
React Native
From your existing React Native app:
npm install /path/to/anectico-react-native.tgz
cd ios && pod install
Flutter
In your existing app's pubspec.yaml, use your authorized checkout:
dependencies:
anectico_flutter:
path: /path/to/anectico/sdks/flutter
Run flutter pub get. For iOS also run flutter config --enable-swift-package-manager and use
an iOS deployment target of at least 15.
For browser instrumentation or more platform details, see Choose an integration.
2. Start Anectico and identify a customer
JavaScript / TypeScript
import { initNode } from '@anectico/sdk/node';
import { AnalyticsClient } from '@anectico/sdk/analytics';
const apiKey = process.env.ANECTICO_INGEST_KEY;
if (!apiKey) throw new Error('ANECTICO_INGEST_KEY is required');
const anectico = await initNode({
apiKey,
serviceName: 'quickstart',
environment: 'development',
});
const events = new AnalyticsClient({
endpoint: 'https://api.anectico.com',
apiKey,
});
events.identify('quickstart-user', {
email: 'quickstart@example.com',
plan: 'test',
});
anectico.tracer.startActiveSpan('checkout', span => {
try {
anectico.captureError(new Error('quickstart payment failure'));
} finally {
span.end();
}
});
await events.stop();
await anectico.stop();
Save this as quickstart.mjs.
Python
import os
import anectico
with anectico.AnecticoClient(
api_key=os.environ['ANECTICO_INGEST_KEY'],
service_name='quickstart',
environment='development',
) as client:
client.identify('quickstart-user', {
'email': 'quickstart@example.com',
'plan': 'test',
})
with client.start_span('checkout'):
client.capture_error(RuntimeError('quickstart payment failure'))
Save this as quickstart.py.
Go
package main
import (
"context"
"errors"
"os"
anectico "github.com/anectico/anectico/sdks/go"
)
func main() {
ctx := context.Background()
client, err := anectico.New(
anectico.WithAPIKey(os.Getenv("ANECTICO_INGEST_KEY")),
anectico.WithServiceName("quickstart"),
anectico.WithEnvironment("development"),
)
if err != nil {
panic(err)
}
if err := client.Start(ctx); err != nil {
panic(err)
}
defer client.Stop(ctx)
if err := client.Identify(ctx, "quickstart-user", map[string]any{
"email": "quickstart@example.com",
"plan": "test",
}); err != nil {
panic(err)
}
traceCtx, span := client.StartSpan(ctx, "checkout")
client.CaptureError(traceCtx, errors.New("quickstart payment failure"))
span.End()
}
Save this as main.go.
Swift (iOS)
Add this development-only helper to your app and call it once with your project key. If the SDK is already configured, keep that setup and use only the identity, capture, and flush calls.
import Foundation
import Anectico
func sendQuickstart(apiKey: String) throws {
try Anectico.configure(AnecticoOptions(apiKey: apiKey, environment: "development"))
Anectico.identify("quickstart-user", set: ["email": "quickstart@example.com", "plan": "test"])
Anectico.capture("checkout_started")
Anectico.captureError(NSError(
domain: "Quickstart", code: 1,
userInfo: [NSLocalizedDescriptionKey: "quickstart payment failure"]
))
Anectico.flush { accepted in
print("Diagnostic events accepted: \(accepted)")
}
}
Kotlin (Android)
Call this helper once from your initialized application's development flow. If you already call
Anectico.init at startup, omit the duplicate initialization here.
import android.content.Context
import com.anectico.sdk.Anectico
import com.anectico.sdk.AnecticoOptions
fun sendQuickstart(context: Context, apiKey: String) {
Anectico.init(context, AnecticoOptions(apiKey = apiKey, environment = "development"))
Anectico.identify("quickstart-user", set = mapOf("email" to "quickstart@example.com", "plan" to "test"))
Anectico.capture("checkout_started")
Anectico.captureError(IllegalStateException("quickstart payment failure"))
Anectico.flush()
}
React Native
Add this helper to your app. Call it once in a development flow, passing your project key; skip
configure here if your app already configures the SDK.
import * as Anectico from '@anectico/react-native';
async function sendQuickstart(apiKey: string) {
await Anectico.configure({ apiKey, environment: 'development' });
await Anectico.identify('quickstart-user', { email: 'quickstart@example.com', plan: 'test' });
await Anectico.capture('checkout_started');
await Anectico.captureError(new Error('quickstart payment failure'));
const accepted = await Anectico.flush();
console.log('Diagnostic events accepted:', accepted);
}
Flutter
Call this helper from your development startup after WidgetsFlutterBinding.ensureInitialized()
or from a test button. Skip configure if your app already initializes the plugin.
import 'package:anectico_flutter/anectico_flutter.dart';
Future<void> sendQuickstart(String apiKey) async {
await Anectico.configure(AnecticoOptions(apiKey: apiKey, environment: 'development'));
await Anectico.identify('quickstart-user', set: {'email': 'quickstart@example.com', 'plan': 'test'});
await Anectico.capture('checkout_started');
await Anectico.captureError(StateError('quickstart payment failure'), StackTrace.current);
final accepted = await Anectico.flush();
print('Diagnostic events accepted: $accepted');
}
Run the program once:
JavaScript / TypeScript
node quickstart.mjs
Python
python quickstart.py
Go
go run .
Swift (iOS)
Build and run your app in Xcode on a simulator or device, then invoke try sendQuickstart(apiKey: ...)
once from your development flow. Handle any thrown configuration error.
Kotlin (Android)
Build and run your app in Android Studio on an emulator or device, then call
sendQuickstart(applicationContext, ...) once with your development project key.
React Native
Rebuild and run the native iOS or Android app using your project's run command, then call
await sendQuickstart(...) once. A JavaScript reload alone cannot install the SDK's native module.
Flutter
Run flutter run on an iOS or Android target and call await sendQuickstart(...) once.
The mobile plugin is not supported on Flutter web or desktop.
Keep a mobile app running while its asynchronous error transport sends. Mobile flush reports
diagnostic-event delivery, not error/span delivery; do not immediately terminate the process.
3. Open the customer story
In Anectico:
- Select the same project and the development environment.
- Open Customers.
- Search for
quickstart@example.comorquickstart-user. - Open the customer.
The activity timeline should contain your test error plus the checkout trace (server examples) or
checkout_started event (mobile examples). Open the error to see its Issue, then return to the
customer. Mobile SDKs do not automatically record full network traces; to add a backend trace,
follow Mobile SDK propagation.
4. Ask Anectico what happened
Select Explain this person on the customer page, or open Investigate and ask:
What happened to
quickstart@example.com?
Anectico gathers matching evidence and links each claim back to the underlying signal.
If nothing appears
Most setup failures are an API key, project, environment, or shutdown/flush mismatch. Follow No data is appearing before changing sampling or transport settings.