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

# User Profile API

> User profile management and file upload endpoints

## Overview

User proxy endpoints provide authenticated access to profile data and file uploads using Directus admin token for elevated permissions.

## PATCH /api/user/me

Update authenticated user's profile.

### Authentication

Requires Directus JWT token.

### Request Body

Any valid Directus user fields:

<ParamField path="first_name" type="string">
  User's first name
</ParamField>

<ParamField path="last_name" type="string">
  User's last name
</ParamField>

<ParamField path="email" type="string">
  Email address (must be unique)
</ParamField>

<ParamField path="avatar" type="string">
  Directus file UUID for profile avatar
</ParamField>

### Response

Returns updated Directus user object.

### Example

```bash cURL theme={null}
curl -X PATCH http://localhost:3001/api/user/me \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "Jane",
    "last_name": "Creator"
  }'
```

## POST /api/user/upload

Upload file to Directus files collection.

### Authentication

Requires Directus JWT token.

### Request Body

Multipart form data:

<ParamField path="file" type="file" required>
  File to upload (images, videos, documents)
</ParamField>

<ParamField path="folder" type="string">
  Directus folder UUID (optional)
</ParamField>

<ParamField path="title" type="string">
  File title/description
</ParamField>

### Response

<ResponseField name="data" type="object">
  Directus file object with UUID, filename, filesize, type
</ResponseField>

### Example

```bash cURL theme={null}
curl -X POST http://localhost:3001/api/user/upload \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -F "file=@/path/to/avatar.jpg" \
  -F "title=Profile Avatar"
```

<Accordion title="Example Response">
  ```json theme={null}
  {
    "data": {
      "id": "abc-123-def-456",
      "filename_disk": "abc-123-def-456.jpg",
      "filename_download": "avatar.jpg",
      "type": "image/jpeg",
      "filesize": 245678,
      "uploaded_by": "user-id",
      "uploaded_on": "2026-03-04T12:30:00Z"
    }
  }
  ```
</Accordion>

## POST /api/files/upload

Alias endpoint for `/api/user/upload`. Identical functionality.

## GET /api/user/creator-profile

Retrieve creator profile data for authenticated user.

### Authentication

Requires Directus JWT token.

### Response

<ResponseField name="data" type="object">
  User persona record from `user_personas` collection
</ResponseField>

### Example

```bash cURL theme={null}
curl http://localhost:3001/api/user/creator-profile \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
```

<Accordion title="Example Response">
  ```json theme={null}
  {
    "data": {
      "id": "persona-123",
      "user_id": "user-456",
      "pricing_tier": "creator",
      "onboarding_state": "COMPLETE",
      "brand_primary_color": "#485697",
      "posts_ai_assisted_used": 12,
      "posts_ai_assisted_limit": 30
    }
  }
  ```
</Accordion>

## File Upload Limits

### By Pricing Tier

| Tier    | Max File Size | Storage Quota |
| ------- | ------------- | ------------- |
| Starter | 50 MB         | 1 GB          |
| Creator | 500 MB        | 25 GB         |
| Pro     | 2 GB          | 100 GB        |
| Studio  | 5 GB          | 500 GB        |

### Supported File Types

* **Images**: JPEG, PNG, GIF, WebP, SVG
* **Videos**: MP4, MOV, AVI, WebM, MKV
* **Documents**: PDF, DOCX, TXT, MD
* **Archives**: ZIP, TAR, GZ

## Implementation Details

**Source**: `server/endpoints/api/userProxy.js`

All endpoints proxy to Directus using admin token for elevated permissions:

* Bypasses user-level file upload restrictions
* Allows profile updates without exposing Directus admin UI
* Maintains audit trail through Directus revision system

<Warning>
  File uploads consume server disk space. Implement cleanup policies for abandoned uploads and enforce tier-based quotas.
</Warning>

## Related Endpoints

<CardGroup cols={2}>
  <Card title="Onboarding" icon="rocket" href="/api/onboarding">
    Manage onboarding state and data imports
  </Card>

  <Card title="Usage Tracking" icon="chart-line" href="/api/usage">
    Monitor usage limits and tier enforcement
  </Card>
</CardGroup>
