---
title: "Posthog Select Project"
method: PUT
path: "/integrations/posthog/project"
tags: ["posthog"]
---

# Posthog Select Project

`PUT /integrations/posthog/project`

Store which project this workspace reports on.

The selection is RE-READ from PostHog before it is stored — never trusted
from the request body. That is the Box/GA rule: the picker persists what the
provider confirms, so a stale or forged id fails loudly here instead of
being written and surfacing later as an empty report.

## Request body

- PostHogProjectSelection — Which project this workspace reports on. Only the id: the name and organization are re-read from PostHog rather than trusted from the request, so a stale or forged body cannot persist a label that does not match the project actually being read.
  - `project_id` string, required

## Response `200`

Successful Response

- PostHogStatusResponse — Connection state for the integrations page. ``connected`` and *ready* are deliberately different states. OAuth grants account-level access, so a grant with no project selected is connected and cannot answer anything — the UI has to be able to say "finish setup", and nothing else in the product can tell the operator that.
  - `configured` boolean, required
  - `connected` boolean, required
  - `connected_at` string, nullable
  - `region` string, nullable
  - `posthog_user_email` string, nullable
  - `project_id` string, nullable
  - `project_name` string, nullable

## Other responses

- `404` — Error
- `409` — Error
- `422` — Validation Error

## Changes

- **2026-09-03** `fbb95eac3965` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/getanana/apis/cleon-api/changes/integrations/posthog/project/put.md)

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getanana/cleon-api/revisions/fbb95eac3965/schema)
