# projects

Read or update projects in this organisation. Pass action "list", "fetch", or "update". Projects are created in the Garasu app, not here.

Operation ID: `projects`

Read or update projects in this organisation. Pass action "list", "fetch", or "update". Projects are created in the Garasu app, not here.

When to use: You need a project id, one project's details, or to rename a project or change its url.

Returns: `list: { projects }. fetch and update: { project }.`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `action` | string | Yes | One of "list", "fetch", "update". |
| `id` | uuid | No | Project id. Required for fetch and update. |
| `name` | string | No | New name for update. 1–80 characters. |
| `url` | string | No | New url for update, or an empty string to clear it. Max 255 characters. |
| `description` | string | No | New description for update. Max 500 characters. |

Function schema:

```json
{
  "name": "projects",
  "description": "Read or update projects in this organisation. Pass action \"list\", \"fetch\", or \"update\". Projects are created in the Garasu app, not here. You need a project id, one project's details, or to rename a project or change its url.",
  "parameters": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "action": {
        "type": "string",
        "description": "One of \"list\", \"fetch\", \"update\"."
      },
      "id": {
        "type": "string",
        "format": "uuid",
        "description": "Project id. Required for fetch and update."
      },
      "name": {
        "type": "string",
        "description": "New name for update. 1–80 characters."
      },
      "url": {
        "type": "string",
        "description": "New url for update, or an empty string to clear it. Max 255 characters."
      },
      "description": {
        "type": "string",
        "description": "New description for update. Max 500 characters."
      }
    },
    "required": [
      "action"
    ]
  }
}
```

##### `projects` · `list`

List the organisation's projects, newest first.

When to use: You need a project id, or you want to see what already exists.

Returns: `{ projects: [{ id, title, description, domain, experiment_count, learning_count, last_synced_at, sync_status, created_at, updated_at, source_url }] }`

Prompt: List my Garasu projects.

Request:

```json
{
  "action": "list"
}
```

Response:

```json
{
  "projects": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "title": "Acme Store",
      "description": "Checkout and pricing experiments.",
      "domain": "store.acme.com",
      "created_at": "2026-03-29T14:12:00.000Z",
      "updated_at": "2026-03-29T15:04:00.000Z",
      "last_synced_at": "2026-03-29T15:04:00.000Z",
      "sync_status": "idle",
      "experiment_count": 1,
      "learning_count": 2,
      "source_url": "https://garasu.co/app/77777777-7777-4777-8777-777777777777/projects/11111111-1111-4111-8111-111111111111"
    }
  ]
}
```

##### `projects` · `fetch`

Get one project by id, including counts and sync status.

When to use: You have a project id and need its details or counts.

Returns: `{ project: { id, title, description, domain, experiment_count, learning_count, last_synced_at, sync_status, created_at, updated_at, source_url } }`

Prompt: Get the Garasu project with this id.

Request:

```json
{
  "action": "fetch",
  "id": "11111111-1111-4111-8111-111111111111"
}
```

Response:

```json
{
  "project": {
    "id": "11111111-1111-4111-8111-111111111111",
    "title": "Acme Store",
    "description": "Checkout and pricing experiments.",
    "domain": "store.acme.com",
    "created_at": "2026-03-29T14:12:00.000Z",
    "updated_at": "2026-03-29T15:04:00.000Z",
    "last_synced_at": "2026-03-29T15:04:00.000Z",
    "sync_status": "idle",
    "experiment_count": 1,
    "learning_count": 2,
    "source_url": "https://garasu.co/app/77777777-7777-4777-8777-777777777777/projects/11111111-1111-4111-8111-111111111111"
  }
}
```

##### `projects` · `update`

Update a project's name, url, or description. Omit fields you do not want to change. Pass an empty url to clear it.

When to use: The project exists and the user wants to rename it or change its url.

Returns: `{ project: { id, title, description, domain, experiment_count, learning_count, last_synced_at, sync_status, created_at, updated_at, source_url } }`

Prompt: Rename the Acme project to Acme Store and set the url to store.acme.com.

Request:

```json
{
  "action": "update",
  "id": "11111111-1111-4111-8111-111111111111",
  "name": "Acme Store",
  "url": "store.acme.com"
}
```

Response:

```json
{
  "project": {
    "id": "11111111-1111-4111-8111-111111111111",
    "title": "Acme Store",
    "description": "Checkout and pricing experiments.",
    "domain": "store.acme.com",
    "created_at": "2026-03-29T14:12:00.000Z",
    "updated_at": "2026-03-29T15:04:00.000Z",
    "last_synced_at": "2026-03-29T15:04:00.000Z",
    "sync_status": "idle",
    "experiment_count": 1,
    "learning_count": 2,
    "source_url": "https://garasu.co/app/77777777-7777-4777-8777-777777777777/projects/11111111-1111-4111-8111-111111111111"
  }
}
```
