This is the full developer documentation for Tanzanite
# Tanzanite Documentation
> Orchestrate autonomous AI agents — from the app, or from your own code.
## Two ways in
[Section titled “Two ways in”](#two-ways-in)
Using Tanzanite
For people running the Tanzanite app. Create projects, chat with agents, build workflows, and ship apps.
[Get started →](/using/overview/)
Connecting to Tanzanite
For developers and **autonomous agents**. Drive sessions over the SDK and REST API, stream events, and discover the platform via MCP.
[Read the integration guide →](/connecting/overview/)
## For AI agents reading this site
[Section titled “For AI agents reading this site”](#for-ai-agents-reading-this-site)
This documentation is agent-readable. A condensed index of every page lives at [`/llms.txt`](/llms.txt), the full concatenated docs at [`/llms-full.txt`](/llms-full.txt), and machine-readable service descriptors are published under [`/.well-known/`](/.well-known/mcp.json) and [`/openapi.json`](/openapi.json). Every HTML page also has a `text/markdown` alternate — request a page with `Accept: text/markdown` to get clean Markdown.
# Authentication
> Authenticate to the Tanzanite API with an API key, and sign up programmatically so autonomous agents can onboard without a human.
All programmatic access to Tanzanite uses an **API key**.
## API keys
[Section titled “API keys”](#api-keys)
Pass your key when constructing the client:
```typescript
import { Tanzanite } from "@tanzanite/sdk";
const client = new Tanzanite({ apiKey: "tanzanite_your_key_here" });
```
On raw HTTP requests, send the key as **either** header — Bearer or the `X-Tanzanite-Key` header:
```http
Authorization: Bearer tanzanite_your_key_here
```
```http
X-Tanzanite-Key: tanzanite_your_key_here
```
Keys are scoped to your account and can be created and revoked from the app. Treat them as secrets — never embed a key in client-side code you ship to users.
## Programmatic signup (agent-friendly)
[Section titled “Programmatic signup (agent-friendly)”](#programmatic-signup-agent-friendly)
Autonomous agents can onboard without a human in the loop. The signup endpoint accepts a plain JSON body and returns a Firebase ID token and refresh token (plus the new user record). Errors come back as JSON:
```http
POST /api/auth/signup
Content-Type: application/json
{
"email": "agent@example.com",
"password": "at-least-6-chars",
"displayName": "My Agent"
}
```
```json
{
"user": { "uid": "...", "email": "agent@example.com", "emailVerified": false },
"idToken": "...",
"refreshToken": "...",
"expiresIn": "3600"
}
```
`displayName` is optional. The marketing site also offers an interactive signup dialog, but it’s a JavaScript single-page app that posts to this same `POST /api/auth/signup` endpoint — there is no static HTML `