Getting Started with Anima in 5 Minutes

A practical quickstart for creating an agent identity, sending an email, and placing a voice call with Anima.

Anima Team2 min read
#tutorial#getting-started#sdk

If you can run a TypeScript script, you can launch your first agent communication workflow in minutes. This guide shows the fastest path: install the SDK, create an identity, send an email, and place a phone call. You will also see where to expand into SMS, vault-backed secrets (Vaultwarden), and card operations when you are ready.

1) Install the SDK#

Create a small project or use an existing Node runtime. Add the Anima SDK:

bun add @anima/sdk

Set your API key in environment variables:

export ANIMA_API_KEY="am_live_xxx"

If you are building in a server app, place this key in your secrets manager and inject it at runtime. Do not expose it client-side.

2) Initialize the client and create an identity#

An identity is the actor boundary for your agent. Instead of one shared account for every automation, each agent gets a scoped identity with explicit channels and policies.

import { Anima } from "@anima/sdk";
 
const am = new Anima({ apiKey: process.env.ANIMA_API_KEY! });
 
const identity = await am.identities.create({
  name: "support-triage-agent",
  channels: ["email", "sms", "voice"],
  metadata: {
    environment: "sandbox",
    owner: "support-platform",
  },
});
 
console.log("Identity created:", identity.id);

In production, you can attach policy constraints for domains, rate limits, or spending controls if the workflow also uses cards.

3) Send your first email#

Now that your identity exists, you can send a message as that identity:

await am.email.send({
  identityId: identity.id,
  to: "customer@example.com",
  subject: "Welcome to Anima",
  html: `<h1>You're live</h1><p>Your agent channel is configured and ready.</p>`,
});

If you are receiving inbound messages too, configure webhook delivery and verify signatures in your backend. This preserves a tamper-evident audit path for agent actions.

4) Place a phone or voice call#

Anima supports programmable phone and voice workflows using the same identity model. A minimal outbound call example looks like this:

await am.voice.calls.create({
  identityId: identity.id,
  to: "+15551234567",
  fromRegion: "US",
  script: "Hello! This is your support assistant confirming your ticket was received.",
});

For SMS, the flow is similar: same identity boundary, different channel endpoint. That consistency is useful when you later add fallback logic (for example, send SMS if call fails or voicemail is detected).

5) Expand capabilities without changing your trust model#

After the quickstart, most teams add at least one of these:

  • Vault-backed secrets for agent credentials via Vaultwarden integration.
  • Cards and controls for spend-limited operations using Stripe Issuing rails.
  • Protocol compliance for delegated verification flows, including Visa TAP, Google AP2, and Mastercard VI.

The value is that you do not need to invent a separate identity model for each capability. The same core identity remains the source of truth for attribution, policy, and audit trails.

Complete quickstart script#

This script puts the full happy path together:

import { Anima } from "@anima/sdk";
 
async function main() {
  const am = new Anima({ apiKey: process.env.ANIMA_API_KEY! });
 
  const identity = await am.identities.create({
    name: "onboarding-agent",
    channels: ["email", "voice"],
  });
 
  await am.email.send({
    identityId: identity.id,
    to: "ops@example.com",
    subject: "Agent onboarding complete",
    html: "<p>Identity and channels are live.</p>",
  });
 
  await am.voice.calls.create({
    identityId: identity.id,
    to: "+15557654321",
    fromRegion: "US",
    script: "Your onboarding workflow completed successfully.",
  });
 
  console.log("Done. Identity:", identity.id);
}
 
main().catch((error) => {
  console.error(error);
  process.exit(1);
});

From here, you can move directly into production hardening: policy scoping, webhook verification, channel-specific retries, and observability dashboards. The important part is already done: your agent now has a first-class identity and can operate across communication surfaces cleanly.

Stay Updated

Get the latest on AI agent identity, delivered weekly.