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

# Bootstrap Organization

> Create the first organization, vault, owner membership, and initial readiness state

AXON currently exposes two browser-session bootstrap routes:

* `POST /v1/orgs/bootstrap` for server-signed vault bootstrap
* `POST /v1/orgs/bootstrap/browser` for browser-signed vault bootstrap

Both routes create:

* the organization row
* the initial owner membership
* the first vault wallet
* the initial provider-registry/readiness snapshot

## Authentication

These routes require a browser-authenticated platform session. Static operator keys and tenant API keys are rejected.

There is no public headless static-token bootstrap route in the running API.

## POST /v1/orgs/bootstrap

Creates a server-signed vault.

### Request

```http theme={null}
POST /v1/orgs/bootstrap
Authorization: Bearer <platform-session-jwt>
Content-Type: application/json
```

```json theme={null}
{
  "name": "Example Corp"
}
```

## POST /v1/orgs/bootstrap/browser

Creates a browser-signed watch-only vault row. The private key stays client-side.

### Request

```http theme={null}
POST /v1/orgs/bootstrap/browser
Authorization: Bearer <platform-session-jwt>
Content-Type: application/json
```

```json theme={null}
{
  "name": "Example Corp",
  "vault_address": "0x1111111111111111111111111111111111111111",
  "root_address": "0x2222222222222222222222222222222222222222"
}
```

## Response

Both routes return the same contract:

```json theme={null}
{
  "organization_id": "uuid",
  "organization_name": "Example Corp",
  "membership_role": "owner",
  "vault": {
    "wallet_id": "uuid",
    "address": "0x1111111111111111111111111111111111111111",
    "derived_path": "m/44'/60'/0'/0/0",
    "funding_instructions": "Send USDC on Base to 0x1111111111111111111111111111111111111111."
  },
  "provider_registry": {
    "active_count": 42,
    "seeded_during_bootstrap": true,
    "coingecko_ready": true
  },
  "readiness": {
    "organization_id": "uuid",
    "status": "action_required",
    "stage": "fund_vault",
    "signing_mode": "full"
  }
}
```

## Error codes

| Code | Meaning |
| :- | :- |
| `REJECTED_POLICY` | Caller is not a browser-authenticated platform session |
| `VALIDATION_ERROR` | Missing org name or invalid browser-bootstrap addresses |
| `CONFLICT` | Account already belongs to an org, or the supplied vault address is already bound |
| `BROWSER_BOOTSTRAP_DISABLED` | Browser-mode bootstrap is disabled on this deployment |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.