# Get organic post analysis

Read where one post’s creative analysis stands, and the analysis once it is ready.

## Endpoint: GET /v1/organic/{postId}/analysis

- Method: `GET`
- Path: `/v1/organic/{postId}/analysis`
- Authentication: Bearer API credential or OAuth access token
- Required scope: `context:read`
- MCP tool: `search_organic`
- MCP action: `analysis`

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `postId` | path | string, 1–300 | yes | Organic corpus post id. |

## Known errors

- 400 invalid_request for an invalid filter, identity or limit.
- 401 authentication_required for a missing or invalid credential.
- 402 subscription_required when access is not entitled.
- 403 authorization_required for a missing scope or unavailable preview access.
- 403 workspace_not_accessible when x-genviral-tenancy names a workspace the credential cannot reach.
- 404 not_found when the record is outside the accessible catalogue.
- 429 rate_limited; honor Retry-After when present.
- 429 daily_call_limit; the plan's daily API and MCP calls are used until 00:00 UTC.

## Request

This read never starts an analysis. status is not_requested when nobody has asked, pending while the worker runs it, ready with the persisted analysis and its generation-time provenance, or failed with failedAt when the last run produced nothing; ask again with POST to retry. Treat creative observations as analysis, not a performance claim.

```
curl --get 'https://api.peekpanda.com/v1/organic/organic-post-example/analysis' \
  --header "Authorization: Bearer $PEEKPANDA_TOKEN" \
  --header 'x-genviral-tenancy: personal'
```

## MCP request

Call search_organic with action analysis. Path fields go in params, filters in query, and a write body in body.

```
{
  "name": "search_organic",
  "arguments": {
    "request": {
      "action": "analysis",
      "params": {
        "postId": "<postId>"
      }
    }
  }
}

```

## Response

Returns the analysis state. A slideshow analysis has no timeline.

```
{
  "status": "ready",
  "analysis": {
    "summary": "Three slides name one fridge app each and end on the one that stopped the waste.",
    "visibleText": [
      "3 apps that fixed my fridge",
      "This one plans meals from what you have"
    ],
    "hookNotes": [
      "Opens on a crowded fridge with a direct question."
    ],
    "editingPattern": "One app per slide with large overlay text.",
    "reusablePromptIngredients": [
      "problem-first hook",
      "numbered list of apps"
    ],
    "model": "analysis-model",
    "generatedAt": "2026-11-02T10:00:40.000Z"
  }
}

```

## Source

The post's stored copy in the organic corpus: its mirrored video, or its stored slides, with its caption, hook and creator handle as context.

## Refresh

This read returns the stored state and does not begin analysis.
