> ## Documentation Index
> Fetch the complete documentation index at: https://usenaive.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent Profiles

> The governed real-world bundle — identity, money, comms, and runtime, per tenant.

An **agent profile** is what Naïve gives every agent: its own verified business identity
(KYC/EIN/formation), a spend-capped card, an inbox and phone number, and
(optionally) a place to run — provisioned **per tenant**, governed on every action,
and **instantly revocable**. The bundle is the product: identity + money + comms +
runtime as one governed unit.

## Provision an agent profile

```ts theme={"theme":{"light":"github-light","dark":"github-dark"}}
import { Naive } from "@usenaive-sdk/server";
const naive = new Naive({ apiKey: process.env.NAIVE_SECRET_KEY! });

const op = await naive.forUser(tenant.id).provision("sdr", {
  idempotencyKey: `op:${tenant.id}`,            // retried webhook → same agent profile
  overrides: {
    identity: { legalName: tenant.company },
    comms: { email: { domain: `mail.${tenant.domain}` } },
  },
});
// op.status === "provisioning" — entity formation / KYB / A2P / DNS are async.
```

Provisioning is **idempotent** on `idempotencyKey`: a duplicate signup webhook
resumes the same agent profile and never forms a second entity or issues a second card.

## Lifecycle

```
provisioning → verifying → active
                    ↘ needs_action (KYB doc, A2P rejection) → verifying
                    ↘ failed → reconciled
                    ↘ revoked
```

```ts theme={"theme":{"light":"github-light","dark":"github-dark"}}
await op.refresh();
if (op.status === "active") {
  const tools = await op.tools();   // governed toolset, ready for your agent
}
```

## Use the agent profile's tools (anywhere)

The agent profile's tools are **handles, never raw secrets**. Drop them into your own
agent loop, a Vercel Eve tool, a LangGraph node, or a Naïve-hosted microVM — every
regulated action routes through the [governance gateway](/architecture/governance-gateway).

```ts theme={"theme":{"light":"github-light","dark":"github-dark"}}
const tools = await op.tools();
await theirAgent.run({ tools, task: "Resolve ticket #492. Refund if policy allows." });
```

## Revoke

```ts theme={"theme":{"light":"github-light","dark":"github-dark"}}
await op.revoke();   // freeze the card, halt sends, rotate credentials, tear down runtime
```

Revoke is **absolute** and applies mid-action. Revoking a parent agent profile kills the
whole multi-agent system.

## REST / CLI / MCP

| Surface | Provision                                               | Revoke                               |
| ------- | ------------------------------------------------------- | ------------------------------------ |
| REST    | `POST /v1/users/:user_id/agent-profiles`                | `POST /v1/agent-profiles/:id/revoke` |
| CLI     | `naive agent profiles provision <role> --user <tenant>` | `naive agent profiles revoke <id>`   |
| MCP     | `naive_provision_agent_profile`                         | `naive_revoke_agent_profile`         |

See [Infrastructure as code](/getting-started/iac) for declaring agent roles and
[Runtime & hosting](/getting-started/runtime) for where the agent runs.
