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

# Configuration

> All configuration options available in config/exo.php.

After publishing the configuration file with `php artisan vendor:publish --tag=exo-config`, you can customize Exo's behavior in `config/exo.php`.

## User model

```php theme={null}
'user_model' => config('auth.providers.users.model'),
```

The Eloquent model class used for creating users with `exo:user`. Defaults to your app's configured auth user model.

## Token name

```php theme={null}
'token_name' => 'Exo API Token',
```

The name given to Personal Access Tokens created by the `exo:user` command.

## Resource discovery

```php theme={null}
'resources_path' => app_path('Exo/Resources'),
'resources_namespace' => 'App\\Exo\\Resources\\',
```

Where Exo looks for resource classes. Any PHP class in this directory that extends `Exowizz\Exo\Resource` is automatically registered.

## Route prefixes

```php theme={null}
'web_route_prefix' => 'exo',
'route_prefix' => 'exo-api',
'oauth_route_prefix' => 'exo/oauth',
```

| Setting              | Default     | Description                                                   |
| -------------------- | ----------- | ------------------------------------------------------------- |
| `web_route_prefix`   | `exo`       | Prefix for dashboard and login routes (e.g. `/exo/dashboard`) |
| `route_prefix`       | `exo-api`   | Prefix for API routes (e.g. `/exo-api/resources`)             |
| `oauth_route_prefix` | `exo/oauth` | Prefix for OAuth routes (e.g. `/exo/oauth/authorize`)         |

## Login and dashboard paths

```php theme={null}
'login_path' => 'exo/login',
'dashboard_path' => 'exo/dashboard',
```

The URL paths for the Exo login page and dashboard. Unauthenticated requests to OAuth routes redirect to the login path.

## Middleware

```php theme={null}
'middleware' => ['auth:api'],
'web_middleware' => ['exo.web.auth'],
```

| Setting          | Default            | Description                                          |
| ---------------- | ------------------ | ---------------------------------------------------- |
| `middleware`     | `['auth:api']`     | Middleware applied to all API routes                 |
| `web_middleware` | `['exo.web.auth']` | Middleware applied to authenticated dashboard routes |

## Admin access

```php theme={null}
'is_admin' => null,
```

A callback that receives the authenticated user and returns `true` if they should have admin access. Admins can access all records regardless of ownership.

```php theme={null}
'is_admin' => function ($user) {
    return $user->is_admin === true;
},
```

Set to `null` to disable admin access (all users are scoped by ownership rules).

## Queue

```php theme={null}
'queue' => env('EXO_QUEUE', 'default'),
```

The queue name for webhook delivery jobs. Override per resource with `Resource::webhookQueue()`.

Set via the `EXO_QUEUE` environment variable:

```env theme={null}
EXO_QUEUE=webhooks
```

## Webhook delivery

```php theme={null}
'webhook' => [
    'max_attempts' => env('EXO_WEBHOOK_MAX_ATTEMPTS', 3),
    'backoff' => [30, 120, 600],
    'max_manual_retries' => env('EXO_WEBHOOK_MAX_MANUAL_RETRIES', 5),
    'timeout' => env('EXO_WEBHOOK_TIMEOUT', 30),
    'response_body_limit' => env('EXO_WEBHOOK_RESPONSE_BODY_LIMIT', 65536),
    'retention_days' => env('EXO_WEBHOOK_RETENTION_DAYS', 30),
],
```

| Setting                       | Description                                                  |
| ----------------------------- | ------------------------------------------------------------ |
| `webhook.max_attempts`        | Max attempts for one delivery before status becomes `failed` |
| `webhook.backoff`             | Retry delay schedule (seconds) between failed attempts       |
| `webhook.max_manual_retries`  | Max manual retries allowed for a failed delivery chain       |
| `webhook.timeout`             | HTTP timeout in seconds for outgoing webhook requests        |
| `webhook.response_body_limit` | Max stored response body size per delivery                   |
| `webhook.retention_days`      | How long to retain webhook events and deliveries             |

## Exo Cloud

```php theme={null}
'cloud_url' => env('EXO_CLOUD_URL', 'https://cloud.exowizz.com'),
'cloud_client_id' => env('EXO_CLOUD_CLIENT_ID'),
'cloud_pkce_client_id' => env('EXO_CLOUD_PKCE_CLIENT_ID'),
'cloud_callback_ports' => [55000, 55001, 55002],
```

| Setting                | Description                                                                            |
| ---------------------- | -------------------------------------------------------------------------------------- |
| `cloud_url`            | Base URL of the Exo Cloud server                                                       |
| `cloud_client_id`      | OAuth client ID for the device code flow                                               |
| `cloud_pkce_client_id` | OAuth client ID for the PKCE authorization code flow (falls back to `cloud_client_id`) |
| `cloud_callback_ports` | Localhost ports the PKCE flow tries when listening for the OAuth callback              |

## Automation providers

```php theme={null}
'providers' => [
    'zapier' => [
        'deploy_key' => env('ZAPIER_DEPLOY_KEY'),
    ],
    'make' => [],
    'n8n' => [],
],
```

Per-platform settings. Currently, Zapier requires a deploy key set via the `ZAPIER_DEPLOY_KEY` environment variable.

## Publishable assets

Exo provides three publishable asset groups:

| Tag              | What it publishes                                             |
| ---------------- | ------------------------------------------------------------- |
| `exo-config`     | `config/exo.php`                                              |
| `exo-migrations` | Database migrations to your `database/migrations` directory   |
| `exo-views`      | Blade views to `resources/views/vendor/exo` for customization |

```bash theme={null}
php artisan vendor:publish --tag=exo-config
php artisan vendor:publish --tag=exo-migrations
php artisan vendor:publish --tag=exo-views
```
